summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ChangeLog1550
-rw-r--r--contrib/ChangeLog.tree-ssa46
-rwxr-xr-xcontrib/analyze_brprob146
-rwxr-xr-xcontrib/check_GNU_style.sh120
-rw-r--r--contrib/check_makefile_deps.sh94
-rwxr-xr-xcontrib/check_warning_flags.sh180
-rw-r--r--contrib/compare-all-tests99
-rwxr-xr-xcontrib/compare-debug170
-rwxr-xr-xcontrib/compareSumTests3250
-rwxr-xr-xcontrib/compare_tests111
-rwxr-xr-xcontrib/dg-cmp-results.sh211
-rwxr-xr-xcontrib/dg-extract-results.sh423
-rw-r--r--contrib/dglib.pm424
-rwxr-xr-xcontrib/download_ecj25
-rwxr-xr-xcontrib/download_prerequisites38
-rwxr-xr-xcontrib/filter_gcc_for_doxygen12
-rwxr-xr-xcontrib/filter_knr2ansi.pl45
-rwxr-xr-xcontrib/filter_params.pl14
-rw-r--r--contrib/gcc.doxy1267
-rwxr-xr-xcontrib/gcc_build325
-rwxr-xr-xcontrib/gcc_update372
-rwxr-xr-xcontrib/gennews66
-rw-r--r--contrib/gthr_supp_vxw_5x.c92
-rwxr-xr-xcontrib/index-prop26
-rw-r--r--contrib/make_sunver.pl350
-rw-r--r--contrib/paranoia.cc2714
-rwxr-xr-xcontrib/patch_tester.sh518
-rwxr-xr-xcontrib/prepare_patch.sh96
-rw-r--r--contrib/reghunt/ChangeLog116
-rwxr-xr-xcontrib/reghunt/bin/gcc-build-full52
-rwxr-xr-xcontrib/reghunt/bin/gcc-build-simple79
-rwxr-xr-xcontrib/reghunt/bin/gcc-cleanup20
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-checkfail9
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-ids88
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-patchlist85
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-recordfail8
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-report26
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-update117
-rwxr-xr-xcontrib/reghunt/bin/gcc-svn-update-fix113
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-accepts-invalid48
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-bogus-warning42
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-compiler-hangs63
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-ice-on-invalid-code54
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-ice-on-valid-code48
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-missing-warning42
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-rejects-valid48
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-segfault-on-valid-code49
-rwxr-xr-xcontrib/reghunt/bin/gcc-test-wrong-code42
-rwxr-xr-xcontrib/reghunt/bin/reg-hunt363
-rwxr-xr-xcontrib/reghunt/bin/reg-newmid86
-rwxr-xr-xcontrib/reghunt/bin/reg-test152
-rw-r--r--contrib/reghunt/date_based/README16
-rwxr-xr-xcontrib/reghunt/date_based/reg_periodic171
-rwxr-xr-xcontrib/reghunt/date_based/reg_search300
-rwxr-xr-xcontrib/reghunt/date_based/reg_test_template41
-rw-r--r--contrib/reghunt/examples/28970.c28
-rw-r--r--contrib/reghunt/examples/28970.config19
-rw-r--r--contrib/reghunt/examples/28970.list324
-rw-r--r--contrib/reghunt/examples/28970.log80
-rw-r--r--contrib/reghunt/examples/29106.cc9
-rw-r--r--contrib/reghunt/examples/29106.config18
-rw-r--r--contrib/reghunt/examples/29106.list568
-rw-r--r--contrib/reghunt/examples/29106.log111
-rwxr-xr-xcontrib/reghunt/examples/29106.test29
-rw-r--r--contrib/reghunt/examples/29478.c12
-rw-r--r--contrib/reghunt/examples/29478.config16
-rw-r--r--contrib/reghunt/examples/29478.list340
-rw-r--r--contrib/reghunt/examples/29478.log78
-rw-r--r--contrib/reghunt/examples/29906a.cc7
-rw-r--r--contrib/reghunt/examples/29906a.config16
-rw-r--r--contrib/reghunt/examples/29906a.list623
-rw-r--r--contrib/reghunt/examples/29906a.log129
-rw-r--r--contrib/reghunt/examples/29906b.cc7
-rw-r--r--contrib/reghunt/examples/29906b.config19
-rw-r--r--contrib/reghunt/examples/29906b.list556
-rw-r--r--contrib/reghunt/examples/29906b.log81
-rw-r--r--contrib/reghunt/examples/30643.c14
-rw-r--r--contrib/reghunt/examples/30643.config19
-rw-r--r--contrib/reghunt/examples/30643.list83
-rw-r--r--contrib/reghunt/examples/30643.log64
-rwxr-xr-xcontrib/reghunt/examples/30643.test26
-rw-r--r--contrib/reghunt/examples/README53
-rw-r--r--contrib/reghunt/examples/common.config133
-rw-r--r--contrib/reghunt/examples/gcc-svn-env75
-rwxr-xr-xcontrib/reghunt/examples/reg-watch3
-rwxr-xr-xcontrib/reghunt/examples/reg-watch.awk38
-rwxr-xr-xcontrib/reghunt/examples/testall73
-rw-r--r--contrib/regression/ChangeLog158
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/Default.pngbin0 -> 81 bytes
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/Icon.pngbin0 -> 2122 bytes
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/Info.plist32
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.stringsbin0 -> 126 bytes
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.stringsbin0 -> 96 bytes
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.stringsbin0 -> 74 bytes
-rw-r--r--contrib/regression/GCC_Regression_Tester.wdgt/widget.html152
-rw-r--r--contrib/regression/README24
-rwxr-xr-xcontrib/regression/btest-gcc.sh234
-rwxr-xr-xcontrib/regression/mkindex.pl107
-rwxr-xr-xcontrib/regression/objs-gcc.sh128
-rw-r--r--contrib/regression/site.exp18
-rwxr-xr-xcontrib/test_installed121
-rwxr-xr-xcontrib/test_recheck98
-rwxr-xr-xcontrib/test_summary156
-rwxr-xr-xcontrib/texi2pod.pl500
-rwxr-xr-xcontrib/uninclude52
-rwxr-xr-xcontrib/warn_summary214
106 files changed, 17707 insertions, 0 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
new file mode 100644
index 000000000..53e8ab225
--- /dev/null
+++ b/contrib/ChangeLog
@@ -0,0 +1,1550 @@
+2013-04-12 Release Manager
+
+ * GCC 4.6.4 released.
+
+2012-03-01 Release Manager
+
+ * GCC 4.6.3 released.
+
+2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+
+2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+
+2011-03-25 Release Manager
+
+ * GCC 4.6.0 released.
+
+2011-03-05 Joseph Myers <joseph@codesourcery.com>
+
+ * gennews (files): Add files for GCC 4.6.
+
+2011-01-26 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ * patch_tester.sh (nopristinecache): New shell var, set according
+ to presence or absence of new -nopristinecache option.
+ (usage): Document new option.
+ (bootntest_pristine): Implement it.
+
+2010-11-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * make_sunver.pl: Use elfdump -s to extract symbols if possible,
+ readelf -s otherwise.
+
+2010-11-08 Eric Botcazou <ebotcazou@adacore.com>
+
+ * make_sunver.pl: Ignore entries without symbol name first. Then do
+ not ignore symbols marked as 'R'.
+
+2010-10-18 Andi Kleen <ak@linux.intel.com>
+
+ * gccbug.el: Remove.
+
+2010-10-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc_update: Run $GCC_HG pull and update separately.
+ Check parents for SVN revision.
+
+2010-10-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * test_recheck: New script.
+
+2010-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * texi2pod.pl: Replace @@ before @{ and @}, for @samp{@@}.
+ Also escape characters with grave accents, to be fixed ...
+ (unmunge): ... here.
+ (postprocess): Also handle @/ and @acronym{...}.
+
+2010-07-02 Sebastian Pop <sebastian.pop@amd.com>
+
+ * check_GNU_style.sh: Do not print warning messages when there are
+ no occurences.
+
+2010-09-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc_update: Handle hg, too.
+
+2010-07-08 Eric Botcazou <ebotcazou@adacore.com>
+
+ * make_sunver.pl: Remove extra whitespace in regexp.
+
+2010-07-02 Sebastian Pop <sebastian.pop@amd.com>
+
+ * check_GNU_style.sh: New.
+
+2010-07-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * make_sunver.pl: New file.
+
+2010-07-02 Iain Sandoe <iains@gcc.gnu.org>
+
+ * compare-debug (Darwin): Remove '-x' flag from ld-based object
+ stripping. Add a comment as to why we do it this way.
+
+2010-06-20 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Drop LTO sections.
+
+2010-06-15 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ * gcc_update: Support updating a git clone.
+
+2010-06-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * test_summary: Don't use diff -u.
+ Adapt egrep regex.
+
+2010-06-02 Andrew Haley <aph@redhat.com>
+
+ * download_prerequisites: New script.
+
+2010-05-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * dg-extract-results.sh: Redirect grep output to /dev/null instead
+ of grep -q.
+
+2010-04-22 Basile Starynkevitch <basile@starynkevitch.net>
+
+ * gcc_update: Sets the locale to C.
+
+2010-04-06 Joseph Myers <joseph@codesourcery.com>
+
+ * gennews (files): Add files for GCC 4.5.
+
+2010-03-22 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix *.log tests output containing "===".
+ * dg-extract-results.sh (/\===/): Rename to ...
+ (/^\t\t=== .* ===$/): ... this pattern.
+
+2010-03-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * dg-extract-results.sh: Fix result order to match sequential case.
+
+2010-01-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * check_warning_flags.sh: Use \012 instead of \n with tr.
+
+2010-01-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * dg-extract-results.sh: Don't use tail -n.
+
+2009-10-03 H.J. Lu <hongjiu.lu@intel.com>
+ Richard Guenther <rguenther@suse.de>
+
+ PR lto/39216
+ * gcc_update: Adjust file timestamps for lto-plugin.
+
+2009-09-10 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk>
+
+ PR bootstrap/41245
+ * compare-debug: Handle stripping of dwarf debug sections from darwin
+ mach-o objects.
+
+2009-09-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Grep for blank before dash to avoid grep -e.
+
+2009-09-01 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Look for .gkd files and compare them.
+
+2009-08-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ PR testsuite/41166
+ * test_summary: Invoke config.status, rather than trying to
+ parse it. Adjust awk script.
+
+2009-08-18 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Drop .eh_frame relocations too.
+
+2009-08-18 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR testsuite/40704
+ * test_summary: Filter out "\r".
+
+2009-06-02 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Don't fail just because of .eh_frame differences.
+
+2009-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR testsuite/39807
+ * dg-extract-results.sh: Close open files and use >> instead of >
+ to decrease number of concurrently open files from awk. Avoid
+ = at the beginning of a regexp and redirect to a file determined
+ by curfile variable rather than concatenated strings to workaround
+ Solaris nawk bug.
+
+2009-04-25 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * test_summary: Only include LAST_UPDATED if it exists.
+ Complete copyright years.
+
+2009-04-16 Paolo Bonzini <bonzini@gnu.org>
+
+ * compare-all-tests: New.
+
+2009-04-14 Jakub Jelinek <jakub@redhat.com>
+
+ * gennews (files): Reference GCC 4.4 web pages.
+
+2009-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ * reghunt/date_based/reg_periodic: Change copyright header to refer
+ to version 3 of the GNU General Public License and to point readers
+ at the COPYING3 file and the FSF's license web page.
+ * reghunt/date_based/reg_search: Likewise.
+ * regression/GCC_Regression_Tester.wdgt/widget.html: Likewise.
+ * regression/btest-gcc.sh: Likewise.
+ * regression/objs-gcc.sh: Likewise.
+
+2009-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * check_warning_flags.sh: Update flag exceptions.
+
+2008-11-18 Ben Elliston <bje@au.ibm.com>
+
+ * dg-cmp-results.sh: Do not print usage if either .sum file cannot
+ be opened; print a more meaningful error instead.
+
+2008-10-24 Janis Johnson <janis187@us.ibm.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * dg-extract-results.sh: New file.
+
+2008-07-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * check_makefile_deps.sh: New file.
+
+2008-05-08 Sebastian Pop <sebastian.pop@amd.com>
+
+ * patch_tester.sh (report): Do not print "Checker: ".
+
+2008-04-23 Sebastian Pop <sebastian.pop@amd.com>
+
+ * patch_tester.sh (report): Do not print the time.
+
+2008-04-01 Joseph Myers <joseph@codesourcery.com>
+
+ * texi2pod.pl: Handle @samp and @url inside verbatim blocks.
+ Handle @heading. Handle enumerated lists with starting numbers
+ and extra headings.
+
+2008-03-10 Janis Johnson <janis187@us.ibm.com>
+
+ * patch_tester.sh (initialization): Initialize svnpatch and stop.
+ (usage): Add -svnpath and -stop.
+ (makedir): New.
+ (argument handling): Process -stop and -svnpath.
+ (setup code): Use makedir, error out if initial svn checkout fails.
+ (update): Use svnpath. Invoke contrib/gcc_update.
+ (apply_patch): Require that patch was created at top level. Use eval
+ with option variables. Don't use bootstrap target for make. Verify
+ that some tests were run.
+ (bootntest_patched): Use snvpath.
+ (main loop): For -stop, exit when there are no more patches to test.
+
+2008-03-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * check_warning_flags.sh: Instead of invoke.texi, take the path
+ to the doc directory as argument. Check that warnings listed in
+ 'gcc --help' are accepted by the compiler, and listed in the
+ manuals.
+
+2008-03-06 Tom Tromey <tromey@redhat.com>
+
+ * patch_tester.sh (usage): Watermark is not lexicographic.
+ Load $STATE/defaults if it exists.
+ (selfexec): Use $0.
+ (apply_patch): Handle deletions.
+ (bootntest): Handle default settings.
+
+2008-03-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gennews (files): Reference GCC 4.3 web pages.
+
+2008-02-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * check_warning_flags.sh: New file.
+
+2008-01-25 Joseph Myers <joseph@codesourcery.com>
+
+ * paranoia.cc (main): Remove handling of c4x_single and
+ c4x_extended formats.
+
+2007-12-26 Sebastian Pop <sebastian.pop@amd.com>
+
+ * compareSumTests3: Changed to GPLv3.
+ * prepare_patch.sh: Same.
+ * uninclude: Same.
+ * dglib.pm: Same.
+ * gennews: Same.
+ * texi2pod.pl: Same.
+ * analyze_brprob: Same.
+ * gcc_build: Same.
+
+2007-12-26 Sebastian Pop <sebastian.pop@amd.com>
+
+ * patch_tester.sh: Changed to GPLv3.
+
+2007-12-15 Sebastian Pop <sebastian.pop@amd.com>
+
+ * patch_tester.sh: Don't save the script anymore.
+
+2007-12-15 Sebastian Pop <sebastian.pop@amd.com>
+
+ * patch_tester.sh: New.
+ * prepare_patch.sh: New.
+
+2007-11-26 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Introduce -p flag to preserve .stripped files.
+
+2007-10-08 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+ * texi2pod.pl: Handle @asis.
+ (postprocess): Move @gccoptlist{} after all formatting commands.
+
+2007-10-01 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: Avoid spurious errors when .stripped files
+ exist.
+
+2007-09-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * warn_summary (srcdirFilter): Add fixincludes, sim,
+ newlib and mpfr.
+
+2007-08-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc_update: Handle different URL paths and tags.
+
+2007-08-16 Alexandre Oliva <aoliva@redhat.com>
+
+ * compare-debug: New.
+
+2007-08-16 H.J. Lu <hongjiu.lu@intel.com>
+ Andreas Schwab <schwab@suse.de>
+
+ * gcc_update: Use "svn info" for revision number. Create
+ gcc/REVISION with branch name and revision number.
+
+2007-08-10 Diego Novillo <dnovillo@google.com>
+
+ * gcc.doxy: Rename from tree-ssa.doxy.
+
+2007-08-10 Diego Novillo <dnovillo@google.com>
+
+ * tree-ssa.doxy: Update for doxygen 1.5.
+ Include all the files in the middle and back ends.
+
+2007-06-30 Hans-Peter Nilsson <hp@axis.com>
+
+ * gcc_update (files_and_dependencies): Handle
+ gcc/testsuite/gcc.dg/cpp/direct2s.c.
+
+2007-05-13 Mark Mitchell <mark@codesourcery.com>
+
+ * gennews (files): Reference GCC 4.2 web pages.
+
+2007-04-04 Zack Weinberg <zack@mrtock.ucsd.edu>
+
+ * texi2pod.pl: Correct handling of @itemize with no argument.
+
+2007-03-17 Hans-Peter Nilsson <hp@axis.com>
+
+ * uninclude: New utility, from Alexandre Oliva.
+
+2007-02-26 Dominique Dhumieres <dominiq@lps.ens.fr>
+
+ * test_installed: Adjust to the move from g77 to gfortran.
+
+2007-02-16 Matthias Klose <doko@debian.org>
+
+ * texi2pod.pl: Handle @subsubsection, ignore @anchor.
+
+2007-02-10 Hans-Peter Nilsson <hp@axis.com>
+
+ * test_summary (configflags): Adjust for changes in the
+ config.status format due to update to autoconf 2.59.
+
+2007-02-09 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * gcc_update: Update for configure.in -> configure.ac.
+
+2007-02-06 Richard Sandiford <richard@codesourcery.com>
+
+ * texi2pod.pl: Handle @multitable.
+
+2007-01-15 Tom Tromey <tromey@redhat.com>
+
+ * download_ecj: New file.
+
+2006-09-27 Matthew Sachs <msachs@apple.com>
+
+ * compareSumTests3: POD syntax fix.
+
+2006-09-27 Matthew Sachs <msachs@apple.com>
+
+ * dglib.pm: Initial commit.
+ * compareSumTests3: Initial commit.
+
+2006-09-18 Bernhard Fischer <aldot@gcc.gnu.org>
+
+ * dg-cmp-results.sh (compare-$$.awk): Print name[old]
+ and not non-existing nm[old].
+
+2006-07-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port to hosts whose 'sort' and 'tail' implementations
+ treat operands with leading '+' as file names, as POSIX
+ has required since 2001. However, make sure the code still
+ works on pre-POSIX hosts.
+ * compare_tests: Don't assume "sort +2" is equivalent to
+ "sort -k 3", since POSIX 1003.1-2001 no longer requires this.
+
+2006-06-05 James Lemke <jwlemke@wasabisystems.com>
+
+ * dg-cmp-results.sh: New script for comparing DejaGNU logs.
+
+2006-06-02 Richard Earnshaw <rearnsha@arm.com>
+ Mike Stump <mrs@apple.com>
+
+ * compare_tests: Handle multilibs better.
+
+2006-05-31 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * texi2pod.pl: Correct handling of absolute @include.
+
+2006-05-02 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * texi2pod.pl: Handle -I.
+
+2006-02-28 Mark Mitchell <mark@codesourcery.com>
+
+ * gennews (files): Update for GCC 4.1.
+
+2006-01-24 Diego Novillo <dnovillo@redhat.com>
+
+ * gcc_update (files_and_dependencies): Handle
+ libgomp/testsuite/Makefile.in.
+
+2006-01-18 Richard Henderson <rth@redhat.com>
+ Diego Novillo <dnovillo@redhat.com>
+
+ * gcc_update (files_and_dependencies): Add libgomp files.
+
+2005-12-06 Ben Elliston <bje@au.ibm.com>
+
+ * newcvsroot: Remove.
+
+2005-11-03 Steven Bosscher <stevenb@suse.de>
+
+ * gcc_build: Fix my previous checking.
+
+2005-11-01 Joseph S. Myers <joseph@codesourcery.com>
+
+ * gcc_update: Include revision number in LAST_UPDATED.
+
+2005-10-30 Steven Bosscher <stevenb@suse.de>
+
+ * gcc_build: Use gcc.gnu.org as the default server. Set up
+ SVN_REPOSITORY correctly. Add support for checking out branches.
+
+2005-10-28 Andrew Pinski <pinskia@gcc.gnu.org>
+
+ * gcc_update: When svn update is called and
+ --silent is used, pass -q.
+
+2005-10-28 Andrew Pinski <pinskia@gcc.gnu.org>
+
+ * gcc_update: Remove the -q from svn invocation.
+
+2005-10-28 Andrew Pinski <pinskia@gcc.gnu.org>
+
+ * gcc_build: Remove -d from the call to gcc_update.
+
+2005-10-28 Daniel Berlin <dberlin@dberlin.org>
+ Ben Elliston <bje@au1.ibm.com>
+
+ * gcc_update: Update for svn.
+ * newcvsroot: Ditto.
+ * gcc_build: Ditto.
+
+2005-10-21 Mark Mitchell <mark@codesourcery.com>
+
+ * texi2pod.pl: Substitue for @value even when part of @include.
+
+2005-10-21 Bob Wilson <bob.wilson@acm.org>
+
+ * texi2pod.pl: Convert two single quotes or two backquotes to
+ double quotes.
+
+2005-08-23 Ben Elliston <bje@au.ibm.com>
+
+ * gcc_update: Update dependencies for libjava/aclocal.m4.
+
+2005-08-14 Kelley Cook <kcook@gcc.gnu.org>
+
+ * All files: Update with new FSF address.
+
+2005-07-14 Ben Elliston <bje@au.ibm.com>
+
+ * filter_params.pl: Typo fix.
+ * filter_knr2ansi.pl: Likewise.
+
+2005-06-05 Gerald Pfeifer <gerald@pfeifer.com>
+
+ * gennews (files): Update for egcs-1.0 release pages consolidation.
+
+2005-04-17 Joseph S. Myers <joseph@codesourcery.com>
+
+ * gennews (files): Update for GCC 4.0.
+
+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>
+
+ * texi2pod.pl: keep references of the form @ref{...}, print them bold.
+
+2004-08-26 Matthias Klose <doko@debian.org>
+
+ * 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>
+
+ * gcc_update (files_and_dependencies): Update fastjar/configure.in
+ to fastjar/configure.ac
+
+2004-01-07 Kelley Cook <kcook@gcc.gnu.org>
+
+ * gcc_update (files_and_dependencies): Remove non-existant files.
+
+2004-01-05 Kelley Cook <kcook@gcc.gnu.org>
+
+ * gcc_update (files_generated): Revert 2003-12-18 change.
+
+2004-01-03 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc_update (files_and_dependencies): For gcc directory,
+ rename configure.in to configure.ac.
+
+2003-12-19 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * gcc_update (files_and_dependencies): For libjava/libltdl directory,
+ remove acconfig.h. No longer used.
+
+2003-12-18 Kelley Cook <kcook@gcc.gnu.org>
+
+ * gcc_update (files_generated): Add in gcc/ada/stamp-xgnatug and update
+ gcc/ada/gnat_ug_* to use it.
+
+2003-12-16 James E Wilson <wilson@specifixinc.com>
+
+ * gcc_update (files_and_dependencies): For libjava/libltdl directory,
+ rename configure.in to configure.ac, and stamp-h.in to config-h.in.
+
+2003-12-11 Kelley Cook <kcook@gcc.gnu.org>
+
+ * gcc_update (files_and_dependencies): Correct typo in the filename
+ gnat_ug_wnt.texi.
+
+2003-12-08 Arnaud Charlet <charlet@act-europe.fr
+
+ * gcc_update: Remove handling of sinfo.h, einfo.h, nmake.ads,
+ treeprs.ads.
+
+2003-10-16 Mark Mitchell <mark@codesourcery.com>
+
+ * gennews (files): Add GCC 3.3 files.
+
+2003-08-21 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Fix handling of -t option. Add -x option.
+
+2003-07-31 Matt Kraai <kraai@alumni.cmu.edu>
+
+ * texi2pod.pl: Remove extra line.
+
+2003-07-15 Matt Kraai <kraai@alumni.cmu.edu>
+
+ * texi2pod.pl: Default @itemize's parameter to @bullet.
+
+2003-07-12 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc_update: gcc/acconfig.h no longer exists.
+
+2003-07-11 Matthias Klose <doko@debian.org>
+
+ * test_installed: Add options to run objc tests.
+ In generated site.exp, initialize rootme, CFLAGS, CXXFLAGS.
+
+2003-07-04 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc_update: Remove gcc/intl/plural.c from list.
+ Add new generated files intl/plural.c, intl/configure,
+ intl/config.h.in.
+
+2003-06-13 Jason Thorpe <thorpej@wasabisystems.com>
+
+ * gcc_update (files_and_dependencies): Add
+ gcc/testsuite/gcc.dg/cpp/_Pragma3.c depends on
+ gcc/testsuite/gcc.dg/cpp/mi1c.h.
+
+2003-05-23 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * paranoia.cc: Fix spelling error.
+
+ * analyze_brprob, gcc_build, gennews, texi2pod.pl: Change GNU CC
+ to GCC.
+
+2003-04-04 Mike Stump <mrs@apple.com>
+
+ * compare_tests: Fix exit status and be more flexible with spacing.
+
+2003-03-08 Phil Edwards <pme@gcc.gnu.org>
+
+ * test_summary: Add -h, print existing comments as help.
+
+2003-03-03 H.J. Lu <hjl@gnu.org>
+
+ * gcc_build: Use $GCC_CVS/$CVS instead of cvs.
+ * gcc_update: Likewise.
+
+2003-01-19 Alexandre Oliva <aoliva@redhat.com>
+
+ * test_summary (configflags): Only use the first match. Remove
+ excess space. Use sub instead of gsub where possible. Use `none'
+ if no configure flags were given.
+
+2003-01-10 Loren J. Rittle <ljrittle@acm.org>
+
+ * test_summary (configflags): awk portability.
+
+2003-01-07 Alexandre Oliva <aoliva@redhat.com>
+
+ * test_summary (configflags): Compute correctly with both
+ autoconfiscated and Cygnus-style top-level.
+
+2003-01-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc_update (files_and_dependencies): Add gcc/cp/cfns.h depends
+ on gcc/cp/cfns.gperf and gcc/java/keyword.h depends on
+ gcc/java/keyword.gperf
+
+2002-12-29 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update (files_and_dependencies): Add gcc/intl/plural.c as
+ depending on gcc/intl/plural.y.
+
+2002-12-28 Alexandre Oliva <aoliva@redhat.com>
+
+ * gcc_update (configure): Depend on config/acx.m4 as well.
+
+ * gcc_update (configure): Depend on configure.in.
+
+2002-12-24 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * texi2pod.pl: Skip contents of @copying.
+
+2002-11-09 Zack Weinberg <zack@codesourcery.com>
+
+ * gthr_supp_vxw_5x.c: New file.
+
+2002-10-21 Richard Henderson <rth@redhat.com>
+
+ * paranoia.cc (real_c_float::image): Accomodate size of
+ real_internal format.
+ (main): Unbuffer stdio. Add real_internal format.
+ (floor_log2_wide): New.
+
+2002-10-16 Richard Henderson <rth@redhat.com>
+
+ * paranoia.cc (ENUM_BITFIELD): New.
+ (class): Define as klass around real.h.
+ (real_c_float): Not a template any longer; define MODE as a
+ class static constant; use real_format elements for SIZE.
+ Update uses of real_to_decimal and real_to_hexadecimal.
+ (main): Change -g argument to use a format name.
+ (mode_for_size): Remove.
+
+2002-09-16 Richard Henderson <rth@redhat.com>
+
+ * paranoia.cc: New file.
+
+2002-09-04 Richard Henderson <rth@redhat.com>
+
+ * enquire.c: Remove.
+
+2002-08-14 Mark Mitchell <mark@codesourcery.com>
+
+ * gennews (files): Add GCC 3.2 files.
+
+2002-07-22 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gennews (files): Add proper files for the GCC 3.1 release series.
+ Simplify and reformat introductory wording.
+
+2002-07-16 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * enquire.c: Move from gcc.
+
+2002-07-16 H.J. Lu <hjl@gnu.org>
+
+ * gcc_update (touch_files): Pass -s to ${MAKE}.
+
+2002-06-26 Zack Weinberg <zack@codesourcery.com>
+
+ * texi2pod.pl: Correct handling of the internal R<> sequence.
+
+2002-05-31 Florian Weimer <fw@deneb.enyo.de>
+
+ * gcc_update (files_and_dependencies): Add generated Texinfo files
+ for Ada.
+
+2002-05-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * test_installed: Allow for PWDCMD to override hardcoded pwd.
+ * test_summary: Likewise.
+
+2002-04-18 Geoffrey Keating <geoffk@redhat.com>
+
+ * gcc_update (touch_files): Don't have empty for loop.
+
+2002-04-16 Richard Henderson <rth@redhat.com>
+
+ * gcc_update: Remove libchill.
+
+2002-03-25 Zack Weinberg <zack@codesourcery.com>
+
+ * texi2pod.pl: Handle @end ftable and @end vtable.
+
+2002-03-11 Zack Weinberg <zack@codesourcery.com>
+
+ * texi2pod.pl: Handle @include, @ftable, @vtable.
+ Reformat some code for clarity.
+
+2002-02-24 Christian Jönsson <c.christian.joensson@telia.com>
+
+ * test_summary: Additional to XPASS and FAIL, add UNRESOLVED,
+ WARNING and ERROR output from the *.sum files.
+
+2002-01-26 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gennews (files): Replace gcc-2.95/gcc-2.95.html,
+ gcc-2.95/gcc-2.95.1.html, gcc-2.95/gcc-2.95.2.html,
+ and gcc-2.95/gcc-2.95.3.html by gcc-2.95/index.html.
+
+2002-01-16 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gennews (files): Replace egcs-1.1/egcs-1.1.2.html,
+ egcs-1.1/egcs-1.1.1.html, and egcs-1.1/egcs-1.1.html by
+ egcs-1.1/index.html.
+
+2002-01-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * warn_summary: Add -ada subdirectory flag.
+
+2001-12-12 Matthias Klose <doko@debian.org>
+
+ * texi2pod.pl: Merge changes from binutils' texi2pod.pl. Allows
+ generation of more than one man page from one source.
+ Add '-' to set of valid chars for an identifier.
+ Let -D option accept flags of the form <flag>=<value>.
+ Use \s+ for whitespace detection in '@c man' lines.
+ Handle @set and @clear independent of $output.
+ Substitute all @value{}'s in a line.
+
+2001-11-14 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Handle @ifnottex, @iftex and @display. Handle @var
+ in verbatim blocks specially. Handle @unnumbered, @unnumberedsec
+ and @center. Allow [a-z] after @enumerate. Handle 0 and numbers
+ greater than 9 in enumerations.
+
+2001-11-07 Laurent Guerby <guerby@acm.org>
+
+ * gcc_update (files_and_dependencies): Add Ada dependencies.
+
+2001-10-08 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * snapshot: Remove.
+
+2001-09-07 Richard Sandiford <rsandifo@redhat.com>
+
+ Revert:
+ * gcc_update: (files_and_dependencies) Add gcc/java/parse.c
+ gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to
+ touch.
+
+2001-09-04 David.Billinghurst <David.Billinghurst@riotinto.com>
+
+ * gcc_update: (files_and_dependencies) Add gcc/java/parse.c
+ gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to
+ touch.
+
+Mon Aug 13 02:29:08 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * analyze_brprob: Update for changes in gcc debug output.
+
+Sat Jul 28 22:37:49 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * analyze_brprob: Avoid more overflows.
+
+2001-07-27 Richard Henderson <rth@redhat.com>
+
+ * test_summary: Copy LAST_UPDATED UTC time to head of summary.
+
+Fri Jul 27 18:01:21 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * analyze_brprob: Avoid overflows.
+
+2001-07-27 Richard Henderson <rth@redhat.com>
+
+ * gcc_update: Dump timestamp in LAST_UPDATED.
+
+2001-07-26 Andreas Jaeger <aj@suse.de>,
+ Hans-Peter Nilsson <hp@bitrange.com>
+
+ * analyze_brprob: Fix documentation.
+
+Mon Jul 23 15:47:19 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * analyze_brprob: Fix awk compatibility problems; update comment.
+
+2001-07-23 Andreas Jaeger <aj@suse.de>
+
+ * analyze_brprob: Fix more typos.
+
+2001-07-23 Andreas Jaeger <aj@suse.de>
+
+ * analyze_brprob: Fix typos.
+
+2001-07-03 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Handle @r inside @item.
+
+2001-07-02 Zack Weinberg <zackw@stanford.edu>
+
+ * gcc_update: Remove entries for gcc.1, cpp.1, gcov.1.
+
+2001-07-01 Zoltan Felleg <zfelleg@telnet.hu>
+
+ * warn_summary: Fix typo in a comment.
+
+2001-06-14 Albert Chin-A-Young <china@thewrittenword.com>
+
+ * contrib/gcc_update: Fix timestamp on gcc/f/intdoc.texi.
+
+2001-06-13 Mark Mitchell <mark@codesourcery.com>
+
+ * gennews: Set TERM to vt100 for Lynx.
+
+2001-06-13 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * release: Remove.
+
+Tue Jun 12 12:21:40 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * analyze_brprob: New file.
+
+2001-06-11 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Output information about the commands used to
+ configure the compiler.
+
+2001-06-07 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gennews: Update for GCC 3.0.
+
+2001-06-02 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc_update: Update for move of documentation to gcc/doc.
+
+2001-05-28 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * contrib/test_summary (files): Sort before evaluating.
+
+2001-05-23 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update (UPDATE_OPTIONS): Add -d to the default settings.
+
+2001-05-21 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Use -d when invoking gcc_update.
+
+2001-05-18 Andreas Jaeger <aj@suse.de>
+
+ * gcc_update: Add rules for libf2c/libI77.
+
+2001-05-17 Alexandre Oliva <aoliva@redhat.com>
+
+ * gcc_update (touch_files): Use simpler, yet as portable, syntax.
+
+2001-05-14 Loren J. Rittle <ljrittle@acm.org>
+
+ * gcc_update (touch_files): Enhance make portability.
+
+2001-05-14 Alexandre Oliva <aoliva@redhat.com>
+
+ * gcc_update (touch_files): Use a Makefile to touch files.
+
+2001-05-03 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Add copyright and GPL notices.
+
+2001-01-24 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Handle "\,".
+
+2001-01-15 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Fix regular expression for @r to avoid exponential
+ recursion. From Russ Allbery <rra@stanford.edu>. Remove perl
+ version check.
+
+2001-01-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * warn_summary (stageNfilter): Update for recent changes in
+ bootstrap logic.
+
+2001-01-14 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Require at least perl 5.6.0.
+
+2001-01-13 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc_update: Add gcc/gcc.1 to generated files.
+ * texi2pod.pl: Handle @r and @gccoptlist. Handle @gol. Handle
+ discarding to end of sentence with @xref where the sentence has an
+ interior "." in markup, and handle discarding parentheses around
+ such a sentence.
+
+2001-01-11 Bernd Schmidt <bernds@redhat.com>
+
+ * gennews: Add gcc-2.95.3.
+
+2001-01-10 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * texi2pod.pl: Handle @gcctabopt and @env in tables. Handle
+ @command. Format URLs and email addresses in bold.
+
+2001-01-03 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc_update: Add cpp.1 to the list of generated files.
+
+ * texi2pod.pl: Handle @option and @env.
+
+2001-01-03 Mike Stump <mrs@wrs.com>
+
+ * snapshot: Update to account for java libraries.
+
+2000-12-28 Jeffrey Oldham <oldham@codesourcery.com>
+
+ * test_summary: Export filesuffix, not fileprefix.
+
+2000-12-22 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * release: Change some EGCS references to GCC.
+
+2000-12-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * warn_summary: Fix subdirectory filtering. Add -intl and -fixinc
+ subdirectory flags. Add source directory prefix filtering.
+ Redirect diagnostic output to stderr.
+
+2000-12-07 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * texi2pod.pl: If multiple @c man sections with the same tag
+ appear, concatenate them in the final output. When skipping,
+ ignore block commands that can't cause skipping, and honor
+ those that can. Ensure that verbatim blocks are separate
+ paragraphs.
+
+2000-12-07 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc_update: Don't touch tradcif.c or java/parse.h.
+
+2000-12-05 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * texi2pod.pl: Restructure for comprehensibility, add
+ comments. Merge handling of @ignore and @ifxxx. Handle a
+ whole bunch more Texinfo commands. Use consistent formatting
+ style.
+
+2000-12-04 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gennews: New script.
+
+2000-11-22 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update: Update a comment as we now require bison for CVS users.
+
+2000-11-22 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gcc_update: Add gcov.1 to the list of generated files.
+
+2000-11-21 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Remove code to put information in a log file.
+
+2000-11-19 Zack Weinberg <zackw@stanford.edu>
+
+ * texi2pod.pl:
+ - Add real command line parsing.
+ - Support @ifset, @ifclear, @set, @value, -D switch.
+ - Support @sc. Improve handling of @ref and friends.
+ - Discard @subsection, @need, @node lines.
+ - Un-nest font changes to match texinfo semantics.
+ - Handle @{ and @}. Oops.
+ - Don't emit E<> directives inside verbatim blocks.
+
+2000-11-12 Bruce Korb <bkorb@gnu.org>
+
+ * release: generalize the release script a bit.
+
+Sat Nov 11 17:29:03 2000 Mark P Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Add -o option for setting the objdir to use.
+
+2000-11-11 Jeff Law <law@redhat.com>,
+
+ * release: New file.
+
+2000-11-08 Jeff Law <law@redhat.com>,
+ Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * snapshot: New file.
+
+2000-11-08 Jeffrey Oldham <oldham@oz.codesourcery.com>
+
+ * gcc_build (bootstrap_gcc): New function.
+ (configure_gcc): Likewise.
+ (build_gcc): Rewritten to use configure and bootstrap.
+ (MAKE_BOOTSTRAP_OPTIONS): Replaced MAKE_OPTIONS.
+
+2000-10-31 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build (MAKE): New variable.
+ (build_gcc): Use it. Fix logging of errors.
+ (install_gcc): Likewise.
+
+2000-10-29 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Save the output from CVS into the logfile as well.
+
+2000-10-25 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_build: Fix typos.
+
+2000-10-14 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * gperf-2.7-19981006.pat: Remove.
+
+2000-10-08 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * test_installed: Change EGCS references to refer to GCC.
+
+2000-09-28 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update (touch_files): Add some informative output.
+
+2000-09-16 Andreas Jaeger <aj@suse.de>
+
+ * gcc_update: Remove gcc/c-parse.gperf.
+
+2000-08-30 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>,
+ Alexandre Oliva <aoliva@redhat.com>
+
+ * gcc_update: Execute touch_files_reexec even if `cvs update`
+ failed.
+
+2000-08-09 Alexandre Oliva <aoliva@redhat.com>
+
+ * test_summary: AWK breaks with filenames containing `='.
+
+Sun Jul 16 12:04:33 2000 Mark P Mitchell <mark@codesourcery.com>
+
+ * gcc_build: New script.
+
+2000-07-13 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_update (files_and_dependencies): Remove generated YACC files.
+
+2000-07-12 Mark Mitchell <mark@codesourcery.com>
+
+ * gcc_update (files_and_dependencies): Remove generated YACC files.
+
+2000-06-04 Mark Mitchell <mark@codesourcery.com>
+
+ * newcvsroot: Handle filenames that contain spaces.
+
+2000-06-03 Zack Weinberg <zack@wolery.cumb.org>
+
+ * test_summary: In generated script, use cat <<'EOF' not cat <<\EOF.
+ Elide --with-gcc-version-trigger and --norecursion from
+ configure flags. Remove code to report status of haifa scheduler.
+
+2000-05-18 Alexandre Oliva <aoliva@cygnus.com>
+
+ * gcc_update (self): Set to `$0'.
+ (touch_files_reexec): Use `$self' instead of `$0'.
+
+2000-05-12 Alexandre Oliva <aoliva@cygnus.com>
+
+ * gcc_update (touch_files_reexec): New function, run after the
+ tree is modified.
+
+2000-05-08 Richard Hendeson <rth@cygnus.com>
+
+ * gcc_update: Remove references to inclhack.tpl.
+
+2000-04-28 Jason Merrill <jason@casey.cygnus.com>
+
+ * index-prop: Use a single pattern. Also support *** cdiffs.
+
+2000-04-28 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * index-prop: Don't change /dev/null.
+
+2000-04-27 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update: Refer to GCC and gcc_update instead of egcs and
+ egcs_update.
+
+2000-04-26 Jonathan Larmour <jlarmour@redhat.co.uk>
+
+ * index-prop: Fix occasional problem when using cvs diff -p.
+
+2000-04-18 Zack Weinberg <zack@wolery.cumb.org>
+
+ * gcc_update: Remove references to cexp.c/cexp.y.
+
+1999-12-18 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * newcvsroot: Add check on the number of command-line arguments.
+ Add usage.
+
+Sun Nov 28 00:41:44 1999 William Bader (william@nscs.fast.net)
+
+ * gcc_update: Allow patches compressed by bzip2.
+
+1999-10-11 Martin v. Löwis <loewis@informatik.hu-berlin.de>
+
+ * newcvsroot: New file.
+
+1999-09-11 Craig Burley <craig@jcb-sc.com>
+
+ * convert_to_f2c, convert_to_g2c, download_f2c: New file.
+
+1999-08-16 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * gcc_update: New file.
+ * egcs_update: Renamed to gcc_update.
+
+1999-08-09 Robert Lipe <robertlipe@usa.net>
+
+ * test_summary: Quote curly braces in 1999-07-03 change.
+
+1999-07-28 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * egcs_update (files_and_dependencies): Fixed typo in
+ gcc/cstamp-h.in. Added gcc/config.in.
+
+1999-07-27 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * egcs_update (files_and_dependencies): New function, with
+ complete list of files to be updated, as well as their
+ dependencies.
+ (touch_files): Check the timestamp of each generated file against
+ its dependencies'.
+ (main): New flags --touch, --list and --help. Remove the
+ pre-update step.
+
+1999-07-17 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary: Replace egcs with gcc. Update e-mail address.
+
+1999-07-05 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+ Jerry Quinn <jquinn@nortelnetworks.com>
+
+ * egcs_update (touch_files, apply_patch): New functions.
+ Use them. New command-line option --patch. Split test of local
+ tree into two parts. Add comments.
+
+1999-07-03 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary: If Target is `unix{*}', append the Target variants
+ to Host.
+
+1999-06-12 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary: Set default mail-address and version for egcs
+ instead of relying on unpredictable pathnames.
+ Reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+Fri Apr 2 16:09:02 1999 Jeffrey A Law (law@cygnus.com)
+
+ * fixinc/*: Delete obsolete files.
+
+1999-02-04 Robert Lipe <robertlipe@usa.net>
+
+ * egcs_update: Test return values of 'cvs update'. Propogate
+ to caller as exit values.
+
+1999-01-25 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: Use "if" instead of "&&". Touch generated files
+ only after the corresponding *.y files.
+
+1999-01-19 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: Do not use xargs, but a backquote construct.
+
+1999-01-07 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary (version): Remove carriage return that gawk inserts
+ in the version string for some reason.
+
+1998-11-30 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: Only touch files that already exist.
+
+1998-11-29 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary (EOF): Remove double backslash.
+ Reported by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+1998-11-28 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary (address): Set to egcs-testresults mailing list.
+
+1998-11-27 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary (address): Added Marc Lehmann's testsuite-results
+ to the default e-mail address.
+
+1998-11-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary (-p, prepend_logs): Add these before the summary.
+ (Compiler, Platform): Print these just before configflags.
+
+Sat Oct 31 10:53:40 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * warn_summary (longLineFilter): New shell function to encapsulate
+ this functionality. It is off by default, only active if -llf
+ flag is specified.
+ (subdirectoryFilter): Fix bug in filtering which made some
+ subdirectory warnings erroneously appear in the toplevel set.
+ (stageNfilter): Renamed from `stageNwarns'. Updated to collect
+ warnings from stage1 as well as stage0, which means warnings from
+ outside the bootstrap directory. Eg, the libraries, etc.
+ (warningFilter): New shell function to encapsulate this
+ functionality.
+ (keywordFilter): New shell function to encapsulate this
+ functionality.
+
+ Store data in a temp file rather than calculating it 3x. Arrange
+ to remove it on exit and signals.
+
+ Add -pass/-wpass flags to do "pass through" (i.e. manual
+ inspection) of bootstrap output from a particular stageN as well
+ as language subdirs.
+
+ Add better comments/documentation.
+
+Sat Oct 31 16:39:31 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: Add comment about keeping the FAQ synchronized.
+
+Fri Oct 30 00:39:27 1998 Jeffrey A Law (law@cygnus.com)
+
+ * egcs_update: Do touch java/parse.c and java/parse-scan.c. They're
+ in the repo again.
+
+Fri Oct 16 07:35:00 1998 Bruce Korb <korb@datadesign.com>
+
+ * egcs_update: Added gcc/fixinc/* generated files to touch list.
+
+Tue Oct 13 23:28:33 1998 Jeffrey A Law (law@cygnus.com)
+
+ * egcs_update: Remove gcc/java/parse.c from list of files to
+ touch.
+
+Wed Oct 7 13:00:40 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gperf-2.7-19981006.pat: New file, patch for egcs-local gperf.
+
+Mon Oct 5 14:19:48 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * warn_summary (subdirectoryFilter): New shell function to
+ optionally filter in/out gcc subdirectories when summarizing
+ warnings. Add new flags to support subdirectory filtering.
+
+ Also, ensure the bootstrap stage is a number. Add some more C
+ keywords that are preserved in the "warning type" summary and
+ tighten up the "arg ???" regexp.
+
+Tue Sep 22 07:30 Bruce Korb <korb@datadesign.com>
+
+ * fixinc/inclhack.def: Not all C++ comments in C headers
+ were treated alike. They are now. Also fixed syntax
+ of sed expression in "systypes" fix.
+
+ * fixinc/inclhack.def: Removed SVR4.2-ism from shell invocation
+
+ * egcs_update: Added fixinc/* generated files to touch list.
+
+Wed Sep 16 16:06:51 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * egcs_update: Additionally touch gcc/java/parse.[ch].
+
+Thu Sep 9 16:48 Bruce Korb <korb@datadesign.com>
+
+ * fixinc/inclhack.def: Added two files required by
+ SCO's Open Server 5's avoid_bool fix.
+ Regenerated fixinc.x and inclhack.sh to incorporate
+ the update.
+
+Thu Sep 3 10:11:32 1998 Robert Lipe <robertl@dgii.com>
+
+ * egcs_update: Do the pass 1 CVS update only for files that
+ may reasonably be under CVS control.
+
+1998-08-14 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_installed: New script for testing already-installed
+ gcc/g++/g77.
+
+Wed Aug 12 19:59:36 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: Assigned copyright to FSF.
+
+Tue Aug 11 17:55:53 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+ Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * egcs_update: New switch --nostdflags and documentation
+ enhancements.
+
+Tue Aug 11 17:33:19 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * egcs_update: New script.
+
+1998-08-05 Bruce Korb <korbb@datadesign.com>
+
+ * fixinc/Makefile
+ Added define for target machine so machine-specific tests
+ can be selected for or against.
+
+ * fixinc/fixincl.c
+ Added an array of string pointers to machines to select
+ or avoid, depending on a FD_MACH_IFNOT bit flag.
+ Used a shell script to match the defined TARGET_MACHINE
+ with any of the given match patterns.
+
+ * fixinc/fixincl.tpl
+ Generate the array of strings and bit flag, as needed,
+ depending on "mach" and "not_machine" attributes for a fix.
+
+ * fixinc/mkfixinc.sh
+ Invoke the make with TARGET assigned the value of the
+ machine name argument.
+
+Mon Jul 27 22:08:12 1998 Mike Stump (mrs@wrs.com)
+
+ * compare_tests: New script.
+
+1998-07-28 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary: Assigned copyright to FSF.
+
+Mon Jul 27 20:33:02 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * test_summary: Corrected script name in comments providing
+ documentation. Added linebreaks for lines with > 80 characters.
+
+Fri Jun 19 02:36:59 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * test_summary: New switch, -i, and environment variable,
+ append_logs, for including files in the report.
+
+1998-06-01 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * warn_summary: Update to Kaveh's latest version allowing to
+ specify the last stage built.
+
+1998-05-29 Bruce Korb <korbb@datadesign.com>
+
+ * fixinc/mkfixinc.sh
+ Changes to make it easier to invoke on platforms that
+ normally do not invoke fixincludes.
+
+ * fixinc/inclhack.def
+ Applied fixes from egcs/gcc/fixincludes from the past several
+ months.
+
+1998-05-28 Bruce Korb <korbb@datadesign.com>
+
+ * fixinc/*: Updated most everything for a first real
+ try at getting "fast_fixincludes" working.
+
+1998-05-28 Jason Merrill <jason@yorick.cygnus.com>
+
+ * index-prop: New file.
+
+Sat May 23 23:38:49 1998 Matthias Klose <doko@cs.tu-berlin.de>
+
+ * test_summary: find good awk (copied from warn_summary).
+
+Sat May 23 23:38:33 1998 Jeffrey A Law (law@cygnus.com)
+
+ * test_summary, warn_summary: New files
diff --git a/contrib/ChangeLog.tree-ssa b/contrib/ChangeLog.tree-ssa
new file mode 100644
index 000000000..2c1165f79
--- /dev/null
+++ b/contrib/ChangeLog.tree-ssa
@@ -0,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 --git a/contrib/analyze_brprob b/contrib/analyze_brprob
new file mode 100755
index 000000000..093c1dea7
--- /dev/null
+++ b/contrib/analyze_brprob
@@ -0,0 +1,146 @@
+#!/usr/bin/awk -f
+# Script to analyze experimental results of our branch prediction heuristics
+# Contributed by Jan Hubicka, SuSE Inc.
+# Copyright (C) 2001, 2003 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+#
+# This script is used to calculate two basic properties of the branch prediction
+# heuristics - coverage and hitrate. Coverage is number of executions of a given
+# branch matched by the heuristics and hitrate is probability that once branch is
+# predicted as taken it is really taken.
+#
+# These values are useful to determine the quality of given heuristics. Hitrate
+# may be directly used in predict.c.
+#
+# Usage:
+# 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:
+# analyze_brprob `find . -name *.life`
+# the information is collected and print once all files are parsed. This
+# may take a while.
+# Note that the script does use bc to perform long arithmetic.
+# Step 4: Read the results. Basically the following table is printed:
+# (this is just an example from a very early stage of branch prediction pass
+# development, so please don't take these numbers seriously)
+#
+#HEURISTICS BRANCHES (REL) HITRATE COVERAGE (REL)
+#opcode 2889 83.7% 94.96%/ 97.62% 7516383 75.3%
+#pointer 246 7.1% 99.69%/ 99.86% 118791 1.2%
+#loop header 449 13.0% 98.32%/ 99.07% 43553 0.4%
+#first match 3450 100.0% 89.92%/ 97.27% 9979782 100.0%
+#loop exit 924 26.8% 88.95%/ 95.58% 9026266 90.4%
+#error return 150 4.3% 64.48%/ 86.81% 453542 4.5%
+#call 803 23.3% 51.66%/ 98.61% 3614037 36.2%
+#loop branch 51 1.5% 99.26%/ 99.27% 26854 0.3%
+#noreturn call 951 27.6% 100.00%/100.00% 1759809 17.6%
+#
+# The heuristic called "first match" is a heuristic used by GCC branch
+# prediction pass and it predicts 89.92% branches correctly.
+#
+# The quality of heuristics can be rated using both, coverage and hitrate
+# parameters. For example "loop branch" heuristics (predicting loopback edge
+# as taken) have both very high hitrate and coverage, so it is very useful.
+# On the other hand, "exit block" heuristics (predicting exit edges as not
+# taken) have good hitrate, but poor coverage, so only 3 branches have been
+# predicted. The "loop header" heuristic has problems, since it tends to
+# misspredict.
+#
+# The implementation of this script is somewhat brute force. My awk skills
+# are limited.
+
+function longeval(e)
+{
+ e = "echo \"scale = 2 ;"e"\" | bc"
+ e | getline res
+ close (e)
+ return res
+}
+
+BEGIN {nnames = 0}
+
+/^ .* heuristics: .*.$/ {
+ name=$0
+ sub (/^ /,"",name)
+ sub (/ heuristics: .*.$/,"",name)
+ if (!(name in branches))
+ {
+ names[nnames] = name
+ branches[name]=0
+ counts[name]=0
+ hits[name]=0
+ phits[name]=0
+ nnames++
+ }
+ branches[name]+=1
+ }
+
+/^ .* heuristics: .*. exec [0-9]* hit [0-9]* (.*.)$/ {
+ name=$0
+ sub (/^ /,"",name)
+ sub (/ heuristics: .*. exec [0-9]* hit [0-9]* (.*.)$/,"",name)
+ pred=$0
+ sub (/^ .* heuristics: /,"",pred)
+ sub (/. exec [0-9]* hit [0-9]* (.*.)$/,"",pred)
+ count=$0
+ sub (/^ .* heuristics: .*. exec /,"",count)
+ sub (/ hit [0-9]* (.*.)$/,"",count)
+ hit=$0
+ sub (/^ .* heuristics: .*. exec [0-9]* hit /,"",hit)
+ sub (/ (.*.)$/,"",hit)
+
+ if (int(pred) < 50.0)
+ {
+ hit = count"-"hit;
+ }
+ counts[name]=counts[name] "+" count
+ hits[name]=hits[name] "+" hit
+ phits[name]=phits[name] "+(("hit")<"count"/2)*("count"-("hit"))+(("hit")>="count"/2)*("hit")"
+
+ #BC crashes on long strings. Irritating.
+ if (length(counts[name]) > 2000)
+ counts[name] = longeval(counts[name])
+ if (length(hits[name]) > 2000)
+ hits[name] = longeval(hits[name])
+ if (length(phits[name]) > 2000)
+ phits[name] = longeval(phits[name])
+ }
+END {
+ # Heuristics called combined predicts just everything.
+ 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)"),
+ longeval("("phits[name]") * 100 /(" counts[name]"-0.00001)"),
+ counts[name], longeval(counts[name]" * 100 / ("maxcounts"-0.00001)"))
+ }
+}
diff --git a/contrib/check_GNU_style.sh b/contrib/check_GNU_style.sh
new file mode 100755
index 000000000..8fb579fd1
--- /dev/null
+++ b/contrib/check_GNU_style.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+# Checks some of the GNU style formatting rules in a set of patches.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# Contributed by Sebastian Pop <sebastian.pop@amd.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 3 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+usage() {
+ cat <<EOF
+check_GNU_style.sh [patch]...
+
+ Checks the patches for some of the GNU style formatting problems.
+ Please note that these checks are not always accurate, and
+ complete. The reference documentation of the GNU Coding Standards
+ can be found here: http://www.gnu.org/prep/standards_toc.html
+ and there are also some additional coding conventions for GCC:
+ http://gcc.gnu.org/codingconventions.html
+
+EOF
+ exit 1
+}
+
+test $# -eq 0 && usage
+
+tmp=check_GNU_style.tmp
+
+# Grep
+g (){
+ msg="$1"
+ arg="$2"
+ shift 2
+ grep -nH '^+' $* \
+ | grep -v ':+++' \
+ | egrep --color=always -- "$arg" \
+ > $tmp && printf "\n$msg\n"
+ cat $tmp
+}
+
+# And Grep
+ag (){
+ msg="$1"
+ arg1="$2"
+ arg2="$3"
+ shift 3
+ grep -nH '^+' $* \
+ | grep -v ':+++' \
+ | egrep --color=always -- "$arg1" \
+ | egrep --color=always -- "$arg2" \
+ > $tmp && printf "\n$msg\n"
+ cat $tmp
+}
+
+# reVerse Grep
+vg (){
+ msg="$1"
+ varg="$2"
+ arg="$3"
+ shift 3
+ grep -nH '^+' $* \
+ | grep -v ':+++' \
+ | egrep -v -- "$varg" \
+ | egrep --color=always -- "$arg" \
+ > $tmp && printf "\n$msg\n"
+ cat $tmp
+}
+
+col (){
+ msg="$1"
+ shift 1
+ grep -nH '^+' $* \
+ | grep -v ':+++' \
+ | cut -f 2 -d '+' \
+ | awk '{ if (length ($0) > 80) print $0 }' \
+ > $tmp
+ if [ -s $tmp ]; then
+ printf "\n$msg\n"
+ cat $tmp
+ fi
+}
+
+col 'Lines should not exceed 80 characters.' $*
+
+g 'Trailing whitespace.' \
+ '[[:space:]]$' $*
+
+g 'Space before dot.' \
+ '[[:alnum:]][[:blank:]]+\.' $*
+
+g 'Dot, space, space, new sentence.' \
+ '[[:alnum:]]\.([[:blank:]]|[[:blank:]]{3,})[[:alnum:]]' $*
+
+g 'Dot, space, space, end of comment.' \
+ '[[:alnum:]]\.([[:blank:]]{0,1}|[[:blank:]]{3,})\*/' $*
+
+g 'Sentences should end with a dot. Dot, space, space, end of the comment.' \
+ '[[:alnum:]][[:blank:]]*\*/' $*
+
+vg 'There should be exactly one space between function name and parentheses.' \
+ '\#define' '[[:alnum:]]([^[:blank:]]|[[:blank:]]{2,})\(' $*
+
+g 'There should be no space before closing parentheses.' \
+ '[[:graph:]][[:blank:]]+\)' $*
+
+ag 'Braces should be on a separate line.' \
+ '\{' 'if[[:blank:]]\(|while[[:blank:]]\(|switch[[:blank:]]\(' $*
+
+
diff --git a/contrib/check_makefile_deps.sh b/contrib/check_makefile_deps.sh
new file mode 100644
index 000000000..60b9c1757
--- /dev/null
+++ b/contrib/check_makefile_deps.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+#
+# Check for accurate dependencies in gcc/Makefile.in.
+#
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# Written by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
+#
+# 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
+#
+# Start this script in an up to date build-tree/gcc directory.
+# Using it in stage1 only works if the host compiler is GCC.
+
+# To continue an interrupted check, make sure there are no *.o.backup
+# files lying around (i.e., move them back to their original name),
+# and set $start_after to the name of the last object that should be skipped.
+start_after=
+
+# Skip some objects unconditionally; make sure each name in this list is
+# surrounded by spaces.
+skip=" crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o crtfastmath.o crtprec64.o crtprec80.o crtprec32.o "
+
+# Files which show up as dependencies other than through unconditional #include.
+# This is an egrep pattern.
+hidden_dep_files='(BASE-VER|DATESTAMP|DEV-PHASE|Makefile|xcoffout\.h|basic-block\.h|bconfig\.h)$'
+
+: ${MAKE=make}
+: ${EGREP="grep -E"}
+
+# -------------------------------------------------------------------------
+# There should be no need for changes beyond this point.
+
+set -e
+st=0
+
+if test -f c-common.o; then :; else
+ echo "$0: rerun in an up to date build-tree/gcc directory" >&2
+ exit 1
+fi
+
+for obj in *.o
+do
+ if test -n "$start_after"; then
+ if test $obj = $start_after; then
+ start_after=
+ fi
+ continue
+ fi
+ case $skip in *\ $obj\ *) continue ;; esac
+
+ mv -f $obj $obj.backup
+ ${MAKE} $obj CFLAGS='-MM -MF depfile'
+ mv -f $obj.backup $obj
+ ${MAKE} -t
+ LC_ALL=C ${MAKE} -d $obj >make-d-log
+ hdrs=`cat depfile`
+ for hdr in $hdrs; do
+ case $hdr in
+ *: | *.o | \\ | /* ) ;;
+ *)
+ echo $hdr ;;
+ esac
+ done < depfile |
+ LC_ALL=C sort -u > hdrs
+
+
+ sed -n '/.*Prerequisite..\([^ ]*\). is newer than target .'"$obj"'.*/s//\1/p' \
+ < make-d-log |
+ LC_ALL=C sort -u > not-up-to-date
+ if test -s not-up-to-date; then
+ st=1
+ echo "$0: error: prerequisites for $obj are not up to date:" >&2
+ cat not-up-to-date >&2
+ fi
+ sed -n '/.*Prerequisite..\([^ ]*\). is older than target .'"$obj"'.*/s//\1/p' \
+ < make-d-log |
+ LC_ALL=C sort -u > deps
+ missing_deps=`LC_ALL=C join -v 1 hdrs deps`
+ unneeded_deps=`LC_ALL=C join -v 2 hdrs deps | $EGREP -v "$hidden_dep_files" || :`
+ if test -n "$missing_deps"; then
+ st=1
+ echo "missing deps for $obj:"
+ echo "$missing_deps" | sed 's/^/ /'
+ fi
+ if test -n "$unneeded_deps"; then
+ # unneeded dependencies are not a big problem, so they cause no failure.
+ echo "unneeded deps for $obj:"
+ echo "$unneeded_deps" | sed 's/^/ /'
+ fi
+done
+exit $st
+
+# vi:sw=2:
diff --git a/contrib/check_warning_flags.sh b/contrib/check_warning_flags.sh
new file mode 100755
index 000000000..d9c5735ab
--- /dev/null
+++ b/contrib/check_warning_flags.sh
@@ -0,0 +1,180 @@
+#! /bin/sh
+#
+# Check that the warning flags documented in invoke.texi match up
+# with what the compiler accepts.
+#
+# Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+# Written by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
+#
+# 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
+#
+# Call this script as
+# check_warning_flags.sh path/to/invoke.texi
+# with CC set to the compiler to be tested.
+# The script scribbles in the current directory.
+
+progname=`echo "$0" | sed 's,.*/,,'`
+usage ()
+{
+ echo "usage: $progname path/to/gcc/doc"
+ echo "set \$CC to the compiler to be checked"
+ exit 1
+}
+
+ret=0
+LC_ALL=C
+export LC_ALL
+: ${CC=gcc}
+test $# = 1 || usage
+gcc_docdir=$1
+invoke_texi=$gcc_docdir/invoke.texi
+test -r "$invoke_texi" || {
+ echo "$progname: error: cannot read '$invoke_texi'" >&2
+ usage
+}
+filebase=check_warning_flags_file$$
+stderr=check_warning_flags_stderr$$
+
+remove_problematic_flags='
+ /-Wlarger-than-/d
+ /-Wframe-larger-than/d
+ /-Wdisallowed-function-list/d
+ /-W[alp],/d
+ /-Werror/d
+ /-Wpadded/d
+ /pedantic-ms-format/d
+ /=/d'
+
+# Ensure that indexed warnings are accepted.
+set x `sed '/^@opindex W/{
+ s/^@opindex /-/
+ '"$remove_problematic_flags"'
+ /-W[alp]$/d
+ p
+}
+d' <"$invoke_texi"`
+shift
+: >$filebase.c
+$CC -c $filebase.c "$@" 2>&1 |
+ grep -v 'command line option.*is valid for.*but not for' >$stderr
+if test -s $stderr; then
+ echo "options listed in @opindex but not accepted by the compiler:" >&2
+ cat $stderr >&2
+ ret=1
+fi
+rm -f $filebase.c $stderr
+
+# Check documentation of warning options.
+for lang in c c++ objc obj-c++; do
+ case $lang in
+ c) ext=c; langmatch='[^-]C[^+].*only' ;;
+ c++) ext=C; langmatch='[^-]C++.*only' ;;
+ objc) ext=m; langmatch='Objective-C[^+].*only' ;;
+ obj-c++) ext=M; langmatch='Objective-C++.*only' ;;
+ esac
+ file=$filebase.$ext
+ : >$file
+ $CC -c $file 2>$stderr
+ if grep 'not installed on this system' $stderr >/dev/null ||
+ grep 'installation problem, cannot exec' $stderr >/dev/null ||
+ grep 'error trying to exec' $stderr >/dev/null
+ then
+ echo "$progname: $CC is not configured for language $lang, skipping checks" >&2
+ rm -f $file $filebase.o $filebase.obj $stderr
+ continue
+ fi
+
+ # Verify good warning flags.
+ set x `sed '
+ t a
+ :a
+ /^@item -W/{
+ /'"$langmatch"'/b x
+ / only)/d
+ b x
+ }
+ d
+ :x
+ '"$remove_problematic_flags"'
+ s/^@item //
+ s/ .*//
+ ' <"$invoke_texi"`
+ shift
+ $CC -c $file -O "$@" 2>$stderr
+ if test -s $stderr; then
+ echo failures: >&2
+ cat $stderr >&2
+ ret=1
+ fi
+
+ # Verify bad warning flags.
+ set x `sed '
+ t a
+ :a
+ /^@item -W/{
+ / only)/!d
+ /'"$langmatch"'/d
+ b x
+ }
+ d
+ :x
+ '"$remove_problematic_flags"'
+ s/^@item //
+ s/ .*//
+ ' <"$invoke_texi"`
+ shift
+ $CC -c $file -O "$@" 2>$stderr
+ # cat $stderr >&2
+ test $# = `grep 'command line option.*valid.*but not for' <$stderr | wc -l` || {
+ for warning
+ do
+ grep "command line option.*$warning.*valid" <$stderr >&2 ||
+ echo "valid for $lang but not annotated as such: $warning"
+ done
+ ret=1
+ }
+ rm -f $file $filebase.o $filebase.obj $stderr
+done
+
+
+remove_problematic_help_flags='
+ /^W$/d
+ /^W[alp]$/d
+ /^Werror-implicit-function-declaration$/d
+ /^Wsynth$/d
+ /-$/d
+ /=/d'
+help_flags=`
+ $CC --help -v 2>/dev/null | tr ' ' '\012' |
+ sed -n '
+ b a
+ :a
+ s/^-\(W[^<,]*\).*/\1/
+ t x
+ d
+ :x
+ '"$remove_problematic_help_flags"'
+ p' | sort -u`
+: >$filebase.c
+for flag in $help_flags; do
+ $CC -c $filebase.c -$flag 2>/dev/null || {
+ echo "warning -$flag not supported" >&2
+ ret=1
+ }
+ grep "@item.*$flag" $gcc_docdir/../*/*.texi >/dev/null || {
+ # For @item, we are satisfied with either -Wfoo or -Wno-foo.
+ inverted_flag=`echo "$flag" | sed '
+ s/^Wno-/W/
+ t
+ s/^W/Wno-/'`
+ grep "@item.*$inverted_flag" $gcc_docdir/../*/*.texi >/dev/null || {
+ echo "warning -$flag not documented in $gcc_docdir/../*/*.texi" >&2
+ ret=1
+ }
+ }
+done
+rm -f $filebase.c $filebase.o
+
+exit $ret
diff --git a/contrib/compare-all-tests b/contrib/compare-all-tests
new file mode 100644
index 000000000..91d0e7852
--- /dev/null
+++ b/contrib/compare-all-tests
@@ -0,0 +1,99 @@
+#! /bin/bash
+
+# Compare the assembly language output for all the gcc tests.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# Contributed by Paolo Bonzini.
+#
+# Invoke it as "bash compare-all-tests target1 target2 ... targetN".
+# Assumptions are:
+#
+# 1) that the base and patched compilers reside respectively in
+# base-$target-build and $target-build, where $target is the commandline
+# argument to compare-all-tests, and should match the variables in the
+# script itself so that the correct set of options is tested. Both
+# compilers should be fully built (including target libraries).
+#
+# 2) that the testsuite has been run on the base compiler (since it's
+# just compilation testing, using RUNTESTFLAGS=--target_board=basic-sim
+# usually suffices).
+#
+# Tests that fail to compile on the base compiler are not compared.
+
+alpha_opts='-mlong-double-64/-mieee -mlong-double-64 -mlong-double-128/-mieee -mlong-double-128'
+arm_opts='-mthumb/-march=armv5t -mthumb/-march=armv6t2 -march=armv5 -mthumb/-march=armv6t2/-mfpu=vfp/-mfloat-abi=softfp -march=armv5/-mfpu=vfp/-mfloat-abi=softfp'
+cris_opts='-march=v32 -march=v1'
+h8300_opts='/ -mh -mh/-mn -ms -ms/-mn -msx -msx/-mn -mint32 -mh/-mint32 -mh/-mn/-mint32 -ms/-mint32 -ms/-mn/-mint32 -msx/-mint32 -msx/-mn/-mint32'
+i386_opts='-m32 -m64 -m32/-msse/-msse2/-mfpmath=sse'
+m32c_opts='-mcpu=r8c -mcpu=m16c -mcpu=m32c'
+m68k_opts='-m68000 -m68020 -m68020/-m68881 -m68040/-m68881 -m68060/-m68881 -mcfv4e'
+mips_opts='-msoft-float/-mgp32/-mips16 -mabi=32/-mfp32/-mgp32/-mips16 -mabi=o64/-mfp64/-mgp64/-mips16 -msoft-float/-mgp32 -mfp32/-mgp32 -march=mips64r2/-mabi=32/-mfp64/-mgp32 -msoft-float/-mgp64 -msingle-float/-mfp32/-mgp64 -mfp64/-mgp64'
+mn10300_opts='-mam33 -mam33-2'
+pa_opts='-march=2.0 -march=1.0 -march=1.1'
+ppc_opts='-m32 -m64'
+s390_opts='-m31 -m31/-mzarch -m64'
+score_opts='-mscore3 -mscore7'
+sh64_opts='-m5-32media -m5-32media-nofpu -m5-64media -m5-64media-nofpu -m5-compact -m5-compact-nofpu'
+sh_opts='-m3 -m3e -m4 -m4a -m4al -m4/-mieee -m1 -m1/-mno-cbranchdi -m2a -m2a/-mieee -m2e -m2e/-mieee'
+sparc_opts='-mcpu=v8/-m32 -mcpu=v9/-m32 -m64'
+
+all_targets='alpha arm avr bfin cris crx fr30 frv h8300 ia64 iq2000 m32c m32r m68hc11 m68k mcore mips mmix mn10300 pa pdp11 picochip ppc score sh sh64 sparc spu v850 vax xstormy16 xtensa' # e500
+
+test_one_file ()
+{
+ local bdir pdir opts bline pline
+ bdir=base-$1-gcc-build
+ pdir=$1-gcc-build
+ bline=$2
+ pline=${2//$bdir/$pdir}
+ opts=${3//\// }
+ echo "$pline $opts"
+ $bline $opts 2>/dev/null >/dev/null || return 0
+ diff -L "$bdir/gcc/cc1 $opts" -L "$pdir/gcc/cc1 $opts" -u \
+ <( $bline $opts 2>&1 ) <( $pline $opts 2>&1 ) || { echo -n . >&2; return 1; }
+}
+
+test_all_opts ()
+{
+ eval opts=\$${1}_opts
+ if test -z "$opts"; then
+ test_one_file $1 "$2"
+ else
+ for opt in $opts; do
+ test_one_file $1 "$2" $opt
+ done
+ fi
+}
+
+for target in ${*-$all_targets}; do
+ mkdir -p $target-gcc-build/gcc/testsuite/gcc
+ cp -R base-$target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1 \
+ $target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1
+
+ # Provide targ-include files for newlib
+ # for newlib_path in `echo base-$target-gcc-build/*/newlib`; do
+ # test -d $newlib_path && ln -sf ../../$newlib_path ${newlib_path/base-}
+ # done
+
+ echo -n Testing $target >&2
+ sed '/^Executing on host: /!d
+ /xgcc -B/!d
+ / -E /d
+ / -g/d
+ / -print-prog-name=/d
+ s/^Executing on host: //
+ s/ *(timeout.*//
+ s/ -fverbose-asm / /
+ s/ -frtl-abstract-sequences / /
+ s/ -fdump[-a-z0-9]* / /g
+ s/ -da / /g
+ s/ -\{1,2\}save-temps / /
+ s/ -c / -S /
+ / -S /! s/ -o / -S -o /
+ s/ -o [^ ]*/ -frandom-seed=0 -o -/' base-$target-gcc-build/gcc/testsuite/gcc/gcc.log | while read line; do
+ case "$line" in
+ *" -m"*) test_one_file $target "$line" "" ;;
+ *) test_all_opts $target "$line" ;;
+ esac
+ done > compare-$target.log
+ echo >&2
+done
diff --git a/contrib/compare-debug b/contrib/compare-debug
new file mode 100755
index 000000000..010d17f9c
--- /dev/null
+++ b/contrib/compare-debug
@@ -0,0 +1,170 @@
+#! /bin/sh
+
+# Compare stripped copies of two given object files.
+
+# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation
+# Originally by Alexandre Oliva <aoliva@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 3, 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 COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+rm='rm -f'
+
+case $1 in
+-p | --preserve)
+ rm='echo preserving'
+ shift
+ ;;
+esac
+
+if test $# != 2; then
+ echo 'usage: compare-debug file1.o file2.o' >&2
+ exit 1
+fi
+
+if test ! -f "$1"; then
+ echo "$1" does not exist >&2
+ exit 1
+fi
+
+if test ! -f "$2"; then
+ echo "$2" does not exist >&2
+ exit 1
+fi
+
+suf1=stripped
+while test -f "$1.$suf1"; do
+ suf1=$suf1.
+done
+
+suf2=stripped
+while test -f "$2.$suf2"; do
+ suf2=$suf2.
+done
+
+trap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15
+
+case `uname -s` in
+Darwin)
+ # The strip command on darwin does not remove all debug info.
+ # Fortunately, we can use ld to do it instead.
+ ld -S -r -no_uuid "$1" -o "$1.$suf1"
+ ld -S -r -no_uuid "$2" -o "$2.$suf2"
+ ;;
+*)
+ cp "$1" "$1.$suf1"
+ strip "$1.$suf1"
+
+ cp "$2" "$2.$suf2"
+ strip "$2.$suf2"
+ ;;
+esac
+
+if cmp "$1.$suf1" "$2.$suf2"; then
+ status=0
+else
+ status=1
+
+ # Assembler-generated CFI will add an .eh_frame section for -g not
+ # present in -g0. Try to cope with it by checking that an .eh_frame
+ # section is present in either object file, and then stripping it
+ # off before re-comparing.
+
+ cmd=
+ cmp1=
+ cmp2=
+
+ for t in objdump readelf eu-readelf; do
+ if ($t --help) 2>&1 | grep ' --\[*section-\]*headers' > /dev/null; then
+ cmd=$t
+
+ $cmd --section-headers "$1.$suf1" | grep '\.eh_frame' > /dev/null
+ cmp1=$?
+
+ $cmd --section-headers "$2.$suf2" | grep '\.eh_frame' > /dev/null
+ cmp2=$?
+
+ break
+ fi
+ done
+
+ # If we found .eh_frame in one but not the other, or if we could not
+ # find a command to tell, or if there are LTO sections, try to strip
+ # off the .eh_frame and LTO sections from both.
+ if test "x$cmp1" != "x$cmp2" || test "x$cmd" = "x" ||
+ $cmd --section-headers "$1.$suf1" | grep '.gnu.lto_' > /dev/null ||
+ $cmd --section-headers "$2.$suf2" | grep '.gnu.lto_' > /dev/null ; then
+ suf3=$suf1.
+ while test -f "$1.$suf3"; do
+ suf3=$suf3.
+ done
+
+ suf4=$suf2.
+ while test -f "$2.$suf4"; do
+ suf4=$suf4.
+ done
+
+ trap 'rm -f "$1.$suf1" "$2.$suf2" "$1.$suf3" "$2.$suf4"' 0 1 2 15
+
+ echo stripping off .eh_frame and LTO sections, then retrying >&2
+
+ seclist=".eh_frame .rel.eh_frame .rela.eh_frame"
+ if test "x$cmd" != "x"; then
+ seclist="$seclist "`{ $cmd --section-headers "$1.$suf1"; $cmd --section-headers "$2.$suf2"; } | sed -n 's,.* \(\.gnu\.lto_[^ ]*\).*,\1,p' | sort -u`
+ fi
+ rsopts=`for sec in $seclist; do echo " --remove-section $sec"; done`
+
+ if (objcopy -v) 2>&1 | grep ' --remove-section' > /dev/null; then
+ objcopy $rsopts "$1.$suf1" "$1.$suf3"
+ mv "$1.$suf3" "$1.$suf1"
+
+ objcopy $rsopts "$2.$suf2" "$2.$suf4"
+ mv "$2.$suf4" "$2.$suf2"
+ elif (strip --help) 2>&1 | grep ' --remove-section' > /dev/null; then
+ cp "$1.$suf1" "$1.$suf3"
+ strip $rsopts "$1.$suf3"
+ mv "$1.$suf3" "$1.$suf1"
+
+ cp "$2.$suf2" "$2.$suf4"
+ strip $rsopts "$2.$suf4"
+ mv "$2.$suf4" "$2.$suf2"
+ else
+ echo failed to strip off .eh_frame >&2
+ fi
+
+ trap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15
+
+ if cmp "$1.$suf1" "$2.$suf2"; then
+ status=0
+ else
+ status=1
+ fi
+ fi
+fi
+
+$rm "$1.$suf1" "$2.$suf2"
+
+trap "exit $status; exit" 0 1 2 15
+
+if test -f "$1".gkd || test -f "$2".gkd; then
+ if cmp "$1".gkd "$2".gkd; then
+ :
+ else
+ status=$?
+ fi
+fi
+
+exit $status
diff --git a/contrib/compareSumTests3 b/contrib/compareSumTests3
new file mode 100755
index 000000000..64f35d74e
--- /dev/null
+++ b/contrib/compareSumTests3
@@ -0,0 +1,250 @@
+#!/usr/bin/perl
+
+# Three-way DejaGNU comparison; uses dglib.pm. Run perldoc on this file for
+# usage.
+#
+# Author: Matthew Sachs <msachs@apple.com>
+#
+# Copyright (c) 2006 Free Software Foundation.
+#
+# 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+=pod
+
+=head1 SYNOPSIS
+
+compareSumTests3 -- Two-way or three-way compare between DejaGNU .sum files
+
+=head1 USAGE
+
+ compareSumTests3 old1.sum [old2.sum] new.sum
+ compareSumTests3 -i 1:2 -x 2:3 old1.sum old2.sum new.sum
+
+=head1 DESCRIPTION
+
+Gives results in terms of 'new' (e.g. things that work in 'new' and don't in
+other compilers are improvements, things that don't in 'new' and do in others
+are regressions, and it tells you which of the two old compilers (or both)
+the test is a regression from.
+
+We treat any DG result other than PASS or XFAIL as a failure, e.g.
+UNRESOLVED, UNTESTED or test was not run.
+
+We merge some tests into 'logical tests' with multiple subphases.
+For instance, some tests will have compile, execute, and link
+subtests. For these tests, if one of the phases fails, we
+indicate which phase the failure originates in. For instance,
+in the following test results:
+
+ gcc.c-torture/compile_execute/xxxx.c: [FAIL:C,FAIL:X,PASS]
+
+the "compile_execute" replaces the compile or execute portion of the test name,
+and "FAIL:C" and "FAIL:X" indicates where the combined test failed.
+
+=head1 OPTIONS
+
+=head2 OVERVIEW
+
+=over 4
+
+=item *
+
+C<-i X:Y>: Only display differences between the two indicated runs.
+
+=item *
+
+C<-p>: Give plain output, suitable for piping to another program.
+
+=item *
+
+C<-x X:Y>: Exclude differences between the two indicated runs.
+
+=back
+
+=head2 PLAIN OUTPUT FORMAT
+
+In the plain
+output format, the category headers are not displayed and there are no tabs
+in front of each result line. Instead, each result line has two characters
+followed by a space in front of it. The first character will be either an 'I'
+for improvement or 'R' for regression; the second character will be a 1, 2, or 3,
+indicating which run was the odd one out.
+
+=head2 SELECTING CHANGE SUBSETS
+
+The following options cause only a selected subset of changes to be displayed.
+These options ask for a "run", a number which is used to select
+one of the three runs (C<old1>, C<old2>, or C<new>.) C<1> and C<2> signify C<old1> and C<old2>
+respectively; 3 signifies C<new>. If multiple options are given, the changes displayed
+will be those which obey all of the given restrictions.
+
+Typical usage of these options is to express something like "give me all changes
+between 2 and 3, except for those where there was the same difference betwen 1 and 2
+(as between 2 and 3.)" This would be given as:
+
+ -i 2:3 -x 1:2
+
+=over 4
+
+=item *
+
+C<-i X:Y>: Only differences which are present between the two runs given
+are displayed. For instance, if C<-i 1:2> is given and test A passes in
+runs 1 and 2 but fails in run 3, that result will not be displayed.
+
+=item *
+
+C<-x X:Y>: Differences which are identical to a difference between the two runs
+given will B<not> be displayed. For instance, if C<-x 1:2> is given and
+test A passes in run 1 and fails in runs 2 and 3, that result will not be
+displayed (since C<-x> will cause the difference between 1 and 2 to be ignored,
+and the difference in 1 and 3 parallels the difference between 1 and 2.)
+This option may only be used in conjunction with C<-i>.
+
+=back
+
+=cut
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+use FindBin qw($Bin);
+use lib "$Bin";
+use dglib;
+
+my %options;
+my $error = undef;
+
+if(!GetOptions(
+ "p" => \$options{p},
+ "i=s" => \$options{i},
+ "x=s" => \$options{x},
+)) {
+ $error = "";
+} elsif(@ARGV != 2 and @ARGV != 3) {
+ $error = "";
+} elsif($options{x} and !$options{i}) {
+ $error = "-x may only be given in conjunction with -i.";
+} else {
+ foreach my $opt("i", "x") {
+ if($options{$opt} and
+ ($options{$opt} !~ /^([123]):([123])$/ or
+ $1 == $2)
+ ) {
+ $error = "Invalid -$opt argument.";
+ }
+ }
+}
+
+if(defined($error)) {
+ print STDERR "$error\n" if $error;
+ print STDERR "Usage: compareSumTests3 [-p] [-i X:Y [-x X:Y]] old1.sum old2.sum new.sum\n";
+ print STDERR "Try 'perldoc $0' for further information.\n";
+ exit 1;
+}
+
+my(@sumfiles) = @ARGV;
+-f $_ || die "$_ is not a regular file!\n" foreach @sumfiles;
+my(%results, @inc_changes, @exc_changes, %checksums);
+
+# We decrement the values given so that they correspond
+# to indices into our results array.
+if($options{i}) {
+ $options{i} =~ /(\d+):(\d+)/;
+ @inc_changes = ($1 - 1, $2 - 1);
+}
+if($options{x}) {
+ $options{x} =~ /(\d+):(\d+)/;
+ @exc_changes = ($1 - 1, $2 - 1);
+}
+
+
+my %analyzed_results = compareSumFiles(\@sumfiles);
+
+foreach my $cat (qw(improvements regressions miscellaneous)) {
+ if(@sumfiles == 3) {
+ my @subcounts;
+ if(!$options{p}) {
+ $subcounts[$_] = @{$analyzed_results{$cat}->[$_] || []} for(0..2);
+ print "\u$cat: ", ($subcounts[0]+$subcounts[1]+$subcounts[2]), "\n";
+ }
+
+ for(my $i = 0; $i < 3; $i++) {
+ if(!$options{p} and $cat ne "miscellaneous") {
+ if($i == 0) {
+ if($cat eq "regressions") {
+ print "\tSuccess in old1 only: $subcounts[$i]\n";
+ } else {
+ print "\tFailure in old1 only: $subcounts[$i]\n";
+ }
+ } elsif($i == 1) {
+ if($cat eq "regressions") {
+ print "\tSuccess in old2 only: $subcounts[$i]\n";
+ } else {
+ print "\tFailure in old2 only: $subcounts[$i]\n";
+ }
+ } else {
+ if($cat eq "regressions") {
+ print "\tFailure in new only: $subcounts[$i]\n";
+ } else {
+ print "\tSuccess in new only: $subcounts[$i]\n";
+ }
+ }
+ }
+
+ foreach my $test (sort {$a->{name} cmp $b->{name}} @{$analyzed_results{$cat}->[$i] || []}) {
+ if(!$options{p}) {
+ if($cat eq "miscellaneous") {
+ print "\t";
+ } else {
+ print "\t\t";
+ }
+ } else {
+ if($cat eq "regressions") {
+ print "R";
+ } else {
+ print "I";
+ }
+
+ print $i+1, " ";
+ }
+ printf "%s [%s,%s,%s]\n", $test->{name}, $test->{data}->[0], $test->{data}->[1], $test->{data}->[2];
+ }
+ }
+ } else {
+ if(!$options{p}) {
+ my $subcount = @{$analyzed_results{$cat}};
+ print "\u$cat: $subcount\n";
+ }
+
+ foreach my $test (sort {$a->{name} cmp $b->{name}} @{$analyzed_results{$cat}}) {
+ if(!$options{p}) {
+ print "\t";
+ } else {
+ if($cat eq "regressions") {
+ print "R"; } else {
+ print "I";
+ }
+
+ print " ";
+ }
+ printf "%s [%s,%s]\n", $test->{name}, $test->{data}->[0], $test->{data}->[1], $test->{data}->[2];
+ }
+ }
+}
diff --git a/contrib/compare_tests b/contrib/compare_tests
new file mode 100755
index 000000000..bed97429d
--- /dev/null
+++ b/contrib/compare_tests
@@ -0,0 +1,111 @@
+#!/bin/sh
+# This script automatically test the given tool with the tool's test cases,
+# reporting anything of interest.
+
+# exits with 0 if there is nothing of interest
+# exits with 1 if there is something interesting
+# exits with 2 if an error occurred
+
+# Give two .sum files to compare them
+
+# Written by Mike Stump <mrs@cygnus.com>
+
+tool=gxx
+
+tmp1=/tmp/$tool-testing.$$a
+tmp2=/tmp/$tool-testing.$$b
+now_s=/tmp/$tool-testing.$$d
+before_s=/tmp/$tool-testing.$$e
+
+if [ "$2" = "" ]; then
+ echo "Usage: $0 previous current" >&2
+ exit 2
+fi
+
+sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp1
+sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp2
+
+before=$tmp1
+now=$tmp2
+
+exit_status=0
+trap "rm -f $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15
+
+if sort -k 2 </dev/null >/dev/null 2>&1; then
+ skip1='-k 2'
+else
+ skip1='+1'
+fi
+
+sort -t ':' $skip1 "$now" > "$now_s"
+sort -t ':' $skip1 "$before" > "$before_s"
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now fail, but worked before:"
+ echo
+ cat $tmp2
+ echo
+ exit_status=1
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now work, but didn't before:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^FAIL' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that FAIL:"
+ echo
+ cat $tmp2
+ echo
+ exit_status=1
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that PASS:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that passed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that failed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+exit $exit_status
diff --git a/contrib/dg-cmp-results.sh b/contrib/dg-cmp-results.sh
new file mode 100755
index 000000000..d29176954
--- /dev/null
+++ b/contrib/dg-cmp-results.sh
@@ -0,0 +1,211 @@
+#!/bin/bash
+# Copyright (C) 2006, 2008 Free Software Foundation
+#
+# Analyze changes in GCC DejaGNU test logs for binutils, gcc, gdb, etc.
+# Original version written in 2005 by James Lemke <jwlemke@wasabisystems.com>.
+#
+# See usage() below.
+
+usage () {
+ cat <<EOF >&2
+Usage:
+ dg-cmp-results.sh [-v] [-v] [-v] <variant-name> <old-file> <new-file>
+ <variant-name> names the desired variant, "/" must be written as "\/".
+ Use the empty string ("") for the first variant in each file.
+ Output is to stdout.
+ Non-verbose output is degradation info like PASS->FAIL.
+ -v adds improvement info like FAIL->PASS.
+ -v -v adds info like tests that are no longer run.
+ -v -v -v adds info for tests that have not changed status.
+ -v -v -v -v is used for debugging.
+EOF
+}
+
+verbose=0
+while test "$1" = "-v"; do
+ verbose=`expr $verbose + 1`
+ shift
+done
+
+if test $# -ne 3 ; then
+ usage
+ exit 1
+fi
+
+if test ! -f "$2"; then
+ echo "unable to open $2" >&2
+ exit 1
+fi
+
+if test ! -f "$3"; then
+ echo "unable to open $3" >&2
+ exit 1
+fi
+
+# Command differences for various platforms.
+case `uname -s` in
+Darwin|NetBSD)
+ E=-E # sed
+ ;;
+*)
+ E=-r # sed
+ ;;
+esac
+
+# sections are identified by separator lines beginning with '\t\t==='.
+# section 0 identifies run date, target, and host.
+# section 1 and subsequent contain test data for a target variant.
+# -skip to /^Running target/ and use that line to identify the variant.
+# -subsequent lines contain the result data. They begin with:
+# '(PASS|FAIL|XFAIL|XPASS|UNTESTED|UNSUPPORTED|UNRESOLVED):'
+VARIANT="$1"
+OFILE="$2"
+OBASE=`basename "$2"`
+NFILE="$3"
+NBASE=`basename "$3"`
+
+echo "dg-cmp-results.sh: Verbosity is ${verbose}, Variant is \"${VARIANT}\""
+echo
+
+header="^Running target $VARIANT"
+
+temp=`grep "$header" $OFILE`
+if test -z "$temp"; then
+ echo "Error: variant \"$VARIANT\" not found in $OFILE."
+ exit 1
+fi
+temp=`grep "$header" $NFILE`
+if test -z "$temp"; then
+ echo "Error: variant \"$VARIANT\" not found in $NFILE."
+ exit 1
+fi
+unset temp
+
+# Copy out the old file's section 0.
+echo "Older log file: $OFILE"
+sed $E -e '/^[[:space:]]+===/,$d' $OFILE
+
+# Copy out the new file's section 0.
+echo "Newer log file: $NFILE"
+sed $E -e '/^[[:space:]]+===/,$d' $NFILE
+
+# Create a temporary file from the old file's interesting section.
+sed $E -e "1,/$header/d" \
+ -e '/^[[:space:]]+===/,$d' \
+ -e '/^[A-Z]+:/!d' \
+ -e '/^(WARNING|ERROR):/d' \
+ -e 's/\r$//' \
+ -e 's/^/O:/' \
+ $OFILE |
+ sort -s -t : -k 3b - \
+ >/tmp/o$$-$OBASE
+
+# Create a temporary file from the new file's interesting section.
+sed $E -e "1,/$header/d" \
+ -e '/^[[:space:]]+===/,$d' \
+ -e '/^[A-Z]+:/!d' \
+ -e '/^(WARNING|ERROR):/d' \
+ -e 's/\r$//' \
+ -e 's/^/N:/' \
+ $NFILE |
+ sort -s -t : -k 3b - \
+ >/tmp/n$$-$NBASE
+
+# Merge the two files, then compare adjacent lines.
+# Comparison is complicated by tests that may be run multiple times.
+# If that case, we assume that the order is the same in both files.
+cat <<EOF >compare-$$.awk
+BEGIN {
+ FS = ":"
+ queue1 = 1; queueN = 0; status[queue1] = ""; name[queue1] = ""
+ verbose = verbose + 0 # Make sure it's defined.
+}
+
+# FIFO circular queue
+function push(st, nm) {
+ queueN += 1; status[queueN] = st; name[queueN] = nm
+}
+function peek() {
+ result = 0
+ if (queueN >= queue1) result = queue1
+ return result
+}
+function drop() {
+ queue1 += 1
+ if (queue1 > queueN) { queue1 = 1; queueN = 0; }
+}
+
+function compare(st, nm) {
+ old = peek()
+ if (old == 0) {
+ # This new test wasn't run last time.
+ if (verbose >= 2) printf("NA->%s:%s\n", st, nm)
+ }
+ else {
+ # Compare this new test to the first queued old one.
+ if (verbose >= 4) {
+ printf("Comparing two lines:\n O:%s:%s\n N:%s:%s\n",
+ status[old], name[old], st, nm)
+ }
+ if (name[old] != nm) {
+ # The old test wasn't run this time and
+ # the new test wasn't run last time.
+ if (verbose >= 2) {
+ printf("%s->NA:%s\n", status[old], name[old])
+ if (nm != "") printf("NA->%s:%s\n", st, nm)
+ }
+ drop()
+ }
+ else {
+ notable = 0
+ if (status[old] == st) {
+ # Status of this test has not changed.
+ if (verbose >= 3) printf("%s:%s\n", st, nm)
+ }
+ else if(status[old] == "PASS" && st == "XFAIL") {
+ if (verbose >= 1) notable = 1
+ }
+ else if(status[old] == "PASS" || st == "FAIL") {
+ # Test did pass but doesn't now
+ # or didn't fail but does now.
+ notable = 1
+ }
+ else if(st == "PASS") {
+ # Test didn't pass but does now.
+ if (verbose >= 1) notable = 1
+ }
+ else if(verbose >= 2) {
+ # Miscellaneous status change.
+ notable = 1
+ }
+ if (notable > 0) printf("%s->%s:%s\n", status[old], st, nm)
+ drop()
+ }
+ }
+}
+
+/^O:/ {
+ while (old = peek()) {
+ if (name[old] == \$3) break;
+ # The queued test is no longer run.
+ compare("", "");
+ }
+ # Save this test for later comparison.
+ push(\$2, \$3)
+}
+
+/^N:/ {
+ compare(\$2, \$3)
+}
+
+END {
+ while (old = peek()) compare("", "")
+}
+EOF
+sort -m -s -t : -k 3b /tmp/o$$-$OBASE /tmp/n$$-$NBASE |
+ awk -v verbose=$verbose -f compare-$$.awk /dev/stdin
+
+# Delete the temporary files.
+rm -f compare-$$.awk /tmp/o$$-$OBASE /tmp/n$$-$NBASE
+
+exit 0
diff --git a/contrib/dg-extract-results.sh b/contrib/dg-extract-results.sh
new file mode 100755
index 000000000..be7d47b1e
--- /dev/null
+++ b/contrib/dg-extract-results.sh
@@ -0,0 +1,423 @@
+#! /bin/sh
+
+# For a specified tool and optional list of test variants, extract
+# test results from one or more test summary (.sum) files and combine
+# the results into a new test summary file, sent to the standard output.
+# The resulting file can be used with test result comparison scripts for
+# results from tests that were run in parallel. See usage() below.
+
+# Copyright (C) 2008, 2009, 2010 Free Software Foundation
+# Contributed by Janis Johnson <janis187@us.ibm.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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+PROGNAME=dg-extract-results.sh
+
+usage() {
+ cat <<EOF >&2
+Usage: $PROGNAME [-t tool] [-l variant-list] [-L] sum-file ...
+
+ tool The tool (e.g. g++, libffi) for which to create a
+ new test summary file. If not specified then all
+ specified sum files must be for the same tool.
+ variant-list One or more test variant names. If the list is
+ not specified then one is constructed from all
+ variants in the files for <tool>.
+ sum-file A test summary file with the format of those
+ created by runtest from DejaGnu.
+ If -L is used, merge *.log files instead of *.sum. In this
+ mode the exact order of lines may not be preserved, just different
+ Running *.exp chunks should be in correct order.
+EOF
+}
+
+# Write a message to the standard error.
+
+msg() {
+ echo "$@" >&2
+}
+
+# Parse the command-line options.
+
+VARIANTS=""
+TOOL=""
+MODE="sum"
+
+while getopts "l:t:L" ARG; do
+ case $ARG in
+ l) VARIANTS="${VARIANTS} ${OPTARG}";;
+ t) test -z "$TOOL" || (msg "${PROGNAME}: only one tool can be specified"; exit 1);
+ TOOL="${OPTARG}";;
+ L) MODE="log";;
+ \?) usage; exit 0;;
+ esac
+done
+shift `expr ${OPTIND} - 1`
+
+if test $# -lt 1 ; then
+ usage
+ exit 1
+fi
+
+TMPDIR=${TMPDIR-/tmp}
+SUM_FILES="$@"
+FIRST_SUM=$1
+TMP=
+trap 'EXIT_STATUS=$?; rm -rf $TMP && exit $EXIT_STATUS' 0
+# Create a (secure) tmp directory for tmp files.
+{
+ TMP=`(umask 077 && mktemp -d -q "${TMPDIR}/dg-combine-results-$$-XXXXXX") 2>/dev/null` &&
+ test -n "$TMP" && test -d "$TMP"
+} ||
+{
+ TMP=${TMPDIR}/dg-combine-results-$$-$RANDOM
+ (umask 077 && mkdir $TMP)
+} ||
+{
+ msg "${PROGNAME}: cannot create a temporary directory"
+ { (exit 1); exit 1; }
+}
+
+# Find a good awk.
+
+if test -z "$AWK" ; then
+ for AWK in gawk nawk awk
+ do
+ if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then
+ :
+ else
+ break
+ fi
+ done
+fi
+
+# Verify that the specified summary files exist.
+
+ERROR=0
+for FILE in $SUM_FILES
+do
+ if ! test -f $FILE ; then
+ msg "${PROGNAME}: file $FILE does not exist."
+ ERROR=1
+ fi
+done
+test $ERROR -eq 0 || exit 1
+
+if [ -z "$TOOL" ]; then
+ # If no tool was specified, all specified summary files must be for
+ # the same tool.
+
+ CNT=`grep '=== .* tests ===' $SUM_FILES | $AWK '{ print $3 }' | sort -u | wc -l`
+ if [ $CNT -eq 1 ]; then
+ TOOL=`grep '=== .* tests ===' $FIRST_SUM | $AWK '{ print $2 }'`
+ else
+ msg "${PROGNAME}: sum files are for multiple tools, specify a tool"
+ msg ""
+ usage
+ exit 1
+ fi
+else
+ # Ignore the specified summary files that are not for this tool. This
+ # should keep the relevant files in the same order.
+
+ SUM_FILES=`grep -l "=== $TOOL" $SUM_FILES`
+ if test -z "$SUM_FILES" ; then
+ msg "${PROGNAME}: none of the specified files are results for $TOOL"
+ exit 1
+ fi
+fi
+
+if [ "$TOOL" = acats ]; then
+ # Acats *.sum or *.log files aren't dejagnu generated, and they have
+ # somewhat different format.
+ ACATS_AWK=${TMP}/acats.awk
+ cat <<EOF > $ACATS_AWK
+BEGIN {
+ print_prologue=1; curfile=""; insummary=0
+ passcnt=0; failcnt=0; unsupcnt=0; failures=""
+}
+/^[ \t]*=== acats configuration ===/ {
+ insummary=0
+ if (print_prologue) print
+ next
+}
+/^[ \t]*=== acats tests ===/ {
+ if (print_prologue) print
+ print_prologue=0
+ next
+}
+/^Running chapter / {
+ if (curfile) close (curfile)
+ curfile="${TMP}/chapter-"\$3
+ print >> curfile
+ next
+}
+/^[ \t]*=== acats Summary ===/ {
+ if (curfile) close (curfile)
+ curfile=""
+ insummary=1
+ next
+}
+/^# of expected passes/ { if (insummary == 1) passcnt += \$5; next; }
+/^# of unexpected failures/ { if (insummary == 1) failcnt += \$5; next; }
+/^# of unsupported tests/ { if (insummary == 1) unsupcnt += \$5; next; }
+/^\*\*\* FAILURES: / {
+ if (insummary == 1) {
+ if (failures) sub(/^\*\*\* FAILURES:/,"")
+ failures=failures""\$0
+ }
+}
+{
+ if (print_prologue) { print; next }
+ if (curfile) print >> curfile
+}
+END {
+ system ("cat ${TMP}/chapter-*")
+ print " === acats Summary ==="
+ print "# of expected passes " passcnt
+ print "# of unexpected failures " failcnt
+ if (unsupcnt) print "# of unsupported tests " unsupcnt
+ if (failures) print failures
+}
+EOF
+
+ rm -f ${TMP}/chapter-*
+ $AWK -f $ACATS_AWK $SUM_FILES
+ exit 0
+fi
+
+# If no variants were specified, find all variants in the remaining
+# summary files. Otherwise, ignore specified variants that aren't in
+# any of those summary files.
+
+if test -z "$VARIANTS" ; then
+ VAR_AWK=${TMP}/variants.awk
+ cat <<EOF > $VAR_AWK
+/^Schedule of variations:/ { in_vars=1; next }
+/^$/ { in_vars=0 }
+/^Running target/ { exit }
+{ if (in_vars==1) print \$1; else next }
+EOF
+
+ touch ${TMP}/varlist
+ for FILE in $SUM_FILES; do
+ $AWK -f $VAR_AWK $FILE >> ${TMP}/varlist
+ done
+ VARIANTS="`sort -u ${TMP}/varlist`"
+else
+ VARS="$VARIANTS"
+ VARIANTS=""
+ for VAR in $VARS
+ do
+ grep "Running target $VAR" $SUM_FILES > /dev/null && VARIANTS="$VARIANTS $VAR"
+ done
+fi
+
+# Find out if we have more than one variant, or any at all.
+
+VARIANT_COUNT=0
+for VAR in $VARIANTS
+do
+ VARIANT_COUNT=`expr $VARIANT_COUNT + 1`
+done
+
+if test $VARIANT_COUNT -eq 0 ; then
+ msg "${PROGNAME}: no file for $TOOL has results for the specified variants"
+ exit 1
+fi
+
+cat $SUM_FILES \
+ | $AWK '/^Running/ { if ($2 != "target" && $3 == "...") print "EXPFILE: "$2 } ' \
+ | sort -u > ${TMP}/expfiles
+
+# Write the begining of the combined summary file.
+
+head -n 2 $FIRST_SUM
+echo
+echo " === $TOOL tests ==="
+echo
+echo "Schedule of variations:"
+for VAR in $VARIANTS
+do
+ echo " $VAR"
+done
+echo
+
+# For each test variant for the tool, copy test reports from each of the
+# summary files. Set up two awk scripts from within the loop to
+# initialize VAR and TOOL with the script, rather than assuming that the
+# available version of awk can pass variables from the command line.
+
+for VAR in $VARIANTS
+do
+ GUTS_AWK=${TMP}/guts.awk
+ cat << EOF > $GUTS_AWK
+BEGIN {
+ variant="$VAR"
+ firstvar=1
+ expfileno=1
+ cnt=0
+ print_using=0
+ need_close=0
+}
+/^EXPFILE: / {
+ expfiles[expfileno] = \$2
+ expfilesr[\$2] = expfileno
+ expfileno = expfileno + 1
+}
+/^Running target / {
+ curvar = \$3
+ if (variant == curvar && firstvar == 1) { print; print_using=1; firstvar = 0 }
+ next
+}
+/^Using / {
+ if (variant == curvar && print_using) { print; next }
+}
+/^Running / {
+ print_using=0
+ if (variant == curvar) {
+ if (need_close) close(curfile)
+ curfile="${TMP}/list"expfilesr[\$2]
+ expfileseen[\$2]=expfileseen[\$2] + 1
+ need_close=0
+ testname="00"
+ next
+ }
+}
+/^\t\t=== .* ===$/ { curvar = ""; next }
+/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL):/ {
+ testname=\$2
+ # Ugly hack for gfortran.dg/dg.exp
+ if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
+ testname="h"testname
+}
+/^$/ { if ("$MODE" == "sum") next }
+{ if (variant == curvar && curfile) {
+ if ("$MODE" == "sum") {
+ printf "%s %08d|", testname, cnt >> curfile
+ cnt = cnt + 1
+ }
+ filewritten[curfile]=1
+ need_close=1
+ print >> curfile
+ } else
+ next
+}
+END {
+ n=1
+ while (n < expfileno) {
+ if (expfileseen[expfiles[n]]) {
+ print "Running "expfiles[n]" ..."
+ if (filewritten["${TMP}/list"n]) {
+ if (expfileseen[expfiles[n]] == 1)
+ cmd="cat"
+ else
+ cmd="LC_ALL=C sort"
+ if ("$MODE" == "sum")
+ system (cmd" ${TMP}/list"n" | sed -n 's/^[^ ]* [^ |]*|//p'")
+ else
+ system ("cat ${TMP}/list"n)
+ }
+ }
+ n = n + 1
+ }
+}
+EOF
+
+ SUMS_AWK=${TMP}/sums.awk
+ rm -f $SUMS_AWK
+ cat << EOF > $SUMS_AWK
+BEGIN {
+ variant="$VAR"
+ tool="$TOOL"
+ passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0;
+ curvar=""; insummary=0
+}
+/^Running target / { curvar = \$3; next }
+/^# of / { if (variant == curvar) insummary = 1 }
+/^# of expected passes/ { if (insummary == 1) passcnt += \$5; next; }
+/^# of unexpected successes/ { if (insummary == 1) xpasscnt += \$5; next; }
+/^# of unexpected failures/ { if (insummary == 1) failcnt += \$5; next; }
+/^# of expected failures/ { if (insummary == 1) xfailcnt += \$5; next; }
+/^# of untested testcases/ { if (insummary == 1) untstcnt += \$5; next; }
+/^# of unresolved testcases/ { if (insummary == 1) unrescnt += \$5; next; }
+/^# of unsupported tests/ { if (insummary == 1) unsupcnt += \$5; next; }
+/^$/ { if (insummary == 1)
+ { insummary = 0; curvar = "" }
+ next
+ }
+{ next }
+END {
+ printf ("\t\t=== %s Summary for %s ===\n\n", tool, variant)
+ if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
+ if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
+ if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
+ if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
+ if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
+ if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
+ if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+}
+EOF
+
+ PVAR=`echo $VAR | sed 's,/,.,g'`
+ TMPFILE=${TMP}/var-$PVAR
+ rm -f $TMPFILE
+ rm -f ${TMP}/list*
+ cat ${TMP}/expfiles $SUM_FILES | $AWK -f $GUTS_AWK
+ cat $SUM_FILES | $AWK -f $SUMS_AWK > $TMPFILE
+ # If there are multiple variants, output the counts for this one;
+ # otherwise there will just be the final counts at the end.
+ test $VARIANT_COUNT -eq 1 || cat $TMPFILE
+done
+
+# Set up an awk script to get the combined summary counts for the tool.
+
+TOTAL_AWK=${TMP}/total.awk
+cat << EOF > $TOTAL_AWK
+BEGIN {
+ tool="$TOOL"
+ passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0
+}
+/^# of expected passes/ { passcnt += \$5 }
+/^# of unexpected failures/ { failcnt += \$5 }
+/^# of unexpected successes/ { xpasscnt += \$5 }
+/^# of expected failures/ { xfailcnt += \$5 }
+/^# of untested testcases/ { untstcnt += \$5 }
+/^# of unresolved testcases/ { unrescnt += \$5 }
+/^# of unsupported tests/ { unsupcnt += \$5 }
+END {
+ printf ("\n\t\t=== %s Summary ===\n\n", tool)
+ if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
+ if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
+ if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
+ if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
+ if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
+ if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
+ if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
+}
+EOF
+
+# Find the total summaries for the tool and add to the end of the output.
+cat ${TMP}/var-* | $AWK -f $TOTAL_AWK
+
+# This is ugly, but if there's version output from the compiler under test
+# at the end of the file, we want it. The other thing that might be there
+# is the final summary counts.
+tail -2 $FIRST_SUM | grep '^#' > /dev/null || tail -2 $FIRST_SUM
+
+exit 0
diff --git a/contrib/dglib.pm b/contrib/dglib.pm
new file mode 100644
index 000000000..c86d4f014
--- /dev/null
+++ b/contrib/dglib.pm
@@ -0,0 +1,424 @@
+# Library of functions for dealing with DejaGNU, or which are otherwise
+# generally useful for the DejaGNU tool stack.
+#
+# Author: Matthew Sachs <msachs@apple.com>
+#
+# Functions:
+# parseLogFile: See "sub parseLogFile" below for details. This function
+# returns a detailed parse of a DejaGNU log or sum file.
+# ispass: Takes a DejaGNU result (e.g. "PASS", "XPASS") and returns
+# true if and only if it is a passing result (PASS, XFAIL, or
+# KFAIL.)
+#
+# Copyright (c) 2006 Free Software Foundation.
+#
+# 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+package dglib;
+
+use strict;
+use warnings;
+use Exporter;
+
+our @ISA = qw(Exporter);
+our @EXPORT = qw(ispass parseLogFile);
+
+use File::Basename;
+use POSIX qw(mktime);
+
+
+# Create a group hierarchy, returning the leaf node
+sub mkGroupPath {
+ my($root, $groups, @newgroups) = @_;
+
+ my $parent = $root;
+ my $fullname = "";
+ foreach my $group(@newgroups) {
+ $fullname .= "/" if $fullname;
+ $fullname .= $group;
+ if(exists($groups->{$fullname})) {
+ $parent = $groups->{$fullname};
+ } else {
+ my $newgroup = {name => $group, parent => $parent};
+ $groups->{$fullname} = $newgroup;
+ $parent->{testgroup} ||= [];
+ push @{$parent->{testgroup}}, $newgroup;
+ $parent = $newgroup;
+ }
+ }
+
+ return $parent;
+}
+
+# Extract information from DejaGNU log or sum files.
+# Options, if provided, should be a hashref with zero or more of the following keys:
+# gccdir:
+# Passing in the full path to the root of the gcc/testsuite directory
+# will help in the parsing, but if it isn't provided, it will be guessed.
+# diagnostics:
+# If set to 0, diagnostics will not be returned. This can save a lot
+# of memory if you are not using this information.
+# fullname:
+# If set to 0, the fullname key will not be included in tests.
+# Returns a hash with the following keys:
+# incomplete: 1 if the summary file appears truncated, otherwise 0
+# diagnostics: List of (type, value) for any errors detected. Type can be ERROR, WARNING, or NOTE.
+# test: Array of root-level tests, with keys:
+# name: Name of the test, relative to the enclosing test group.
+# fullname: Fully-qualified name of the test.
+# result: DejaGNU result (PASS, FAIL, XPASS, &c)
+# detail: For multi-phase (e.g. compile/link/execute), this will be
+# the furthest phase which the test was able to attempt,
+# so if the result is FAIL and this is "link phase", the test
+# compiled but failed to link. This key may contain other
+# auxiliary data.
+# pseudotest: If 1, this test may not really exist; see "pseudotest" below.
+# testgroup: Array of root-level testgroups, with keys:
+# name: Name of the group.
+# parent: Parent test group.
+# test: As per above.
+# testgroup: Child test groups.
+# compiler: Version string from compiler used to run the tests (if detected)
+sub parseLogFile($;$) {
+ my($logfile, $options) = @_;
+ $options ||= {};
+ my $gccdir = $options->{gccdir} || "";
+ my $return_diags = exists($options->{diagnostics}) ? $options->{diagnostics} : 1;
+ my $emit_fullname = exists($options->{fullname}) ? $options->{fullname} : 1;
+ my $is_gdb = 0;
+ my $gdbhack = "";
+
+ my %ret = (incomplete => 1, diagnostics => [], testgroup => []);
+ my(%testindex, %groupindex);
+
+ open(LOGFILE, $logfile) or die "Couldn't open log file $logfile: $!\n";
+
+ my($currgroup, $currtest, $lastrun);
+ $currgroup = \%ret;
+
+ my %monmap = (Jan => 0, Feb => 1, Mar => 2, Apr => 3, May => 4, Jun => 5, Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11);
+
+ # We don't want gccdir matching on an empty string.
+ $gccdir ||= "this will never match, or my name isn't Reginald St. Croix";
+
+ my $line = 1;
+ while(<LOGFILE>) {
+ chomp;
+ s/\x{d}$//; #^M
+ next if $_ eq "";
+
+ if(/^gcc version/) {
+ $ret{compiler} = $_;
+ } elsif(/^got a .* signal, interrupted by user /) {
+ $ret{incomplete} = 2;
+ } elsif(/^\s*=== gdb/) {
+ $is_gdb = 1;
+ # The log file from the GDB test suite is prone to have random crap
+ # in front of test result lines, so we need to be looser about how
+ # we parse those for GDB.
+ $gdbhack = ".*";
+ } elsif(/^(Test Run By \S+ on|runtest completed at) ... (.{3}) (\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2}) (\d{4})/) {
+ my $time = mktime($6, $5, $4, $3, $monmap{$2}, $7 - 1900);
+ if($1 eq "runtest completed at") {
+ $ret{end_time} = $time;
+ } else {
+ $ret{start_time} = $time;
+ }
+ } elsif(m<^Running (?!target )\Q$gccdir\E/?(\S+)> or m<^Running (?!target )\S*?((?:gcc|gdb|libstdc\+\+-v3)/testsuite/\S+)>) {
+ # We keep track of the last "Running foo/bar/baz.exp" line because
+ # some tests don't bother printing out the full paths of their files,
+ # and this gives us the directory information.
+
+ $lastrun = $1;
+ $lastrun =~ s!/[^/]*/\.\.!!; # foo/bar/../baz -> foo/baz
+ $currgroup = mkGroupPath(\%ret, \%groupindex, split(m!/!, $lastrun));
+ #$currgroup->{testfile} = $lastrun;
+ } elsif(/^Executing on (.*?):(.*)/) {
+ # Okay, if it's "Executing on host", it's a new
+ # file. If it's "Executing on unix", it's probably
+ # a test within the file -- an execution test, specifically --
+ # (makes sense, no?) But not always, sometimes we
+ # see "Executing on unix" outside the context of a
+ # file.
+
+ # Try to pick out the gccdir-relative filename.
+ # If we can't find it, it isn't really a new testfile,
+ # but a derived file.
+ my($exectype, $execwhat) = ($1, $2);
+ next if $execwhat =~ /^dsymutil/;
+ $execwhat =~
+ s!.*?\s\Q$gccdir\E/?(\S+).*!$1! or
+ s!.*?/((?:gcc|gdb|libstdc\+\+-v3)/testsuite/\S+).*!$1! or
+ $exectype = "unix";
+
+ if($exectype eq "host" or !$currgroup) {
+ # New file
+
+ my $nogroup = 0;
+ if($execwhat =~ / /) {
+ # We probably haven't parsed the file correctly.
+ # Try getting it from $lastrun.
+
+ $execwhat = dirname($lastrun) . "/" . basename($execwhat) if $lastrun and $execwhat;
+ $execwhat =~ s/\s.*//;
+
+ # At the end of each tool, it invokes "gcc -v" or "c++ -v"
+ # as a test. We don't really want to treat this as a test.
+ if($execwhat =~ m!/(gcc|c\+\+)$!) {
+ undef $currtest;
+ undef $currgroup;
+ $nogroup = 1;
+ }
+ }
+
+ if(!$nogroup) {
+ undef $currtest;
+ $execwhat =~ s!/[^/]*/\.\.!!; # foo/bar/../baz -> foo/baz
+
+ if($lastrun) {
+ my $lastbase = dirname($lastrun);
+ my $basegroup = $execwhat;
+ $basegroup =~ s!^\Q$lastbase\E/!!;
+ $execwhat = "$lastrun/$basegroup";
+ }
+
+ $currgroup = mkGroupPath(\%ret, \%groupindex, split(m!/!, $execwhat));
+ #$currgroup->{testfile} = $execwhat;
+ }
+ } else {
+ # New test within current file
+
+ $currtest = {};
+ }
+ } elsif(/^# of/) {
+ # This line appears should appear near the end of summary files.
+ # If it doesn't, something went wrong.
+
+ if($ret{incomplete} == 2) {
+ #Ah, but we previously saw indication that we were killed via a signal.
+ $ret{incomplete} = 1;
+ } else {
+ $ret{incomplete} = 0;
+ }
+ } elsif(/^testcase .* completed/) {
+ # End of a .exp file
+ undef $currtest;
+ undef $currgroup;
+ } elsif(/^$gdbhack(FAIL|PASS|UNRESOLVED|UNSUPPORTED|UNTESTED|XFAIL|XPASS|KFAIL|KPASS): (.*)/) {
+ # If the currtest already has a name, that means we've already seen
+ # its results, so what we have now is a new test. However, if we
+ # haven't seen results for currtest yet, that means currtest just
+ # has some diagnostics associated with it but no actual results,
+ # so just use that one.
+ undef $currtest if $currtest->{name};
+
+ my $phase = ""; # compile/link/execute
+ my($test, $result) = ($2, $1);
+
+ # Compile/(link/)execute combining
+ if($test =~ /^(.*) compile\s*$/) {
+ $test = "$1 compile,link,execute";
+ $phase = "compile";
+ } elsif($test =~ /^(.*)-(.*) (link|execute)\s*$/) {
+ $test = "$1 compile,link,execute";
+ if($3 eq "link") {
+ $phase = "link";
+ } else {
+ $phase = "execute";
+ }
+ } elsif($test =~ /(compile|compilation|execute|execution)/) {
+ my $phasematch = $1;
+ if($test =~ /^com/) {
+ $phase = "compile";
+ } else {
+ $phase = "execute";
+ }
+ $test =~ s!\Q$phasematch\E!compile,execute!;
+ }
+
+ # gcov tests behave in non-standard fashion.
+ my $failwhy = "";
+ $test =~ s/ gcov failed: (.*)// and $failwhy = $1;
+
+ # And some other tests have random information after a colon :(
+ # But for scan-assembler, this really is part of the name.
+ if(!$is_gdb and $test !~ /scan-assembler/ and $test =~ s/:\s*(.+)//) {
+ $failwhy = $1;
+ }
+
+ $test =~ s/\s*$//;
+ $test =~ s/^\s*$//;
+
+ # Sometimes there's a test which shows up as:
+ # foo (test for excess errors)
+ # foo (something else)
+ # foo: error executing dg-final
+ # if it runs, but just:
+ # foo
+ # if it doesn't. When we see the top form, we create a
+ # "pseudotest" in the bottom form, so that comparisons
+ # can be made.
+ my $basetest = $test;
+ $basetest =~ s/:? .*//;
+
+ if(exists($testindex{$test}) and !$testindex{$test}->{pseudotest}) {
+ $currtest = $testindex{$test};
+ if(ispass($currtest->{result})) {
+ $currtest->{result} = $result;
+ $currtest->{detail} = "$phase phase";
+ $currtest->{detail} .= "; $failwhy" if $failwhy;
+ }
+ } else {
+ # This might have been created earlier as a pseudotest.
+ # If so, overwrite it.
+ $currtest ||= $testindex{$test} || {};
+
+ $currtest->{name} = basename($test);
+ if($emit_fullname) {
+ $currtest->{fullname} = ($currgroup->{name} || dirname($test)) . "/$currtest->{name}";
+ }
+ my $grpname = $currgroup->{name} || "";
+ $currtest->{name} =~ s/^\s*\Q$grpname\E\s*//;
+ $currtest->{name} =~ s/^: // if $is_gdb;
+ # Sometimes there's a test at the root of the group.
+ # For instance, you'll have:
+ # FAIL: foo/bar.c (test for excess errors)
+ # UNRESOLVED: foo/bar.c: couldn't open "bar.s": no such file or directory
+ # In this case, groupname *is* the entire name, so the regex above will make the test name empty.
+ # In this case, we actually want to use the parent group and make this a test within that group.
+ my $orig_currgroup = $currgroup;
+ if(!$currtest->{name}) {
+ $currtest->{name} = $grpname;
+ $currgroup = $currgroup->{parent};
+ $grpname = $currgroup->{name} || "";
+ }
+
+ $currtest->{result} = $result;
+ if($phase and $failwhy) {
+ $currtest->{detail} = "$phase phase; $failwhy" if $phase;
+ } elsif($phase) {
+ $currtest->{detail} = "$phase phase";
+ } elsif($failwhy) {
+ $currtest->{detail} = $failwhy;
+ }
+
+ $currgroup->{test} ||= [];
+ push @{$currgroup->{test}}, $currtest;
+ $testindex{$test} = $currtest;
+ $currgroup = $orig_currgroup;
+
+ if($basetest ne $test) {
+ if(!exists($testindex{$basetest}) ) {
+ my $btbase = basename($basetest);
+ $testindex{$basetest} = {
+ name => $btbase,
+ result => $result,
+ pseudotest => 1,
+ fullname => $btbase
+ };
+ if($emit_fullname) {
+ $testindex{basetest}->{fullname} = ($currgroup->{name} || dirname($basetest)) . "/$btbase";
+ }
+ push @{$currgroup->{parent}->{test}}, $testindex{$basetest};
+ } else {
+ # Only let the base test pass if all the sub-tests pass
+ $testindex{$basetest}->{result} = $result if !ispass($result);
+ }
+ }
+
+ }
+ } elsif(/^\s+=== .* Summary ===\s*$/) {
+ undef $currgroup;
+ undef $currtest;
+ }
+
+ my $severity;
+ if(/^(ERROR|WARNING|NOTE): (.*)/) {
+ $severity = $1;
+ my $message = $2;
+
+ if($message eq "program timed out.") {
+ $currtest->{result} = "TIMEDOUT";
+ } elsif(
+ $message =~ /can't read "(HOSTCC|libiconv)": no such variable/ or
+ $message =~ /no files matched glob pattern/ or
+ $message =~ /error executing dg-final: .*: no such file/
+ ) {
+ $severity = "NOTE";
+ }
+ } else {
+ $severity = "logline";
+ }
+
+ if($return_diags) {
+ my $dobj;
+ if($currtest) {
+ $currtest->{diagnostics} ||= [];
+ $dobj = $currtest->{diagnostics};
+ } elsif($currgroup) {
+ $currgroup->{diagnostics} ||= [];
+ $dobj = $currgroup->{diagnostics};
+ } else {
+ $dobj = $ret{diagnostics};
+ }
+
+ push @$dobj, {message => $_, severity => $severity, line => $line};
+ }
+ } continue {
+ $line++;
+ }
+ close LOGFILE;
+
+ return %ret;
+}
+
+# Split a test into testdivs
+sub splitTest($$) {
+ my($root, $test) = @_;
+
+ $test->{fullname} =~ /^(\S+)\s*(.*)/;
+ my($path, $descriptor) = ($1, $2);
+ my @nodes = split(m!/!, $path);
+ push @nodes, $descriptor if $descriptor;
+ my $lastnode = pop @nodes;
+
+ my $hash = $root;
+ foreach (@nodes) {
+ $hash->{testdiv} ||= {};
+ $hash = $hash->{testdiv}->{$_} ||= {};
+ }
+
+
+ $hash->{test} ||= {};
+ $hash->{test}->{$lastnode} = $test;
+}
+
+
+# ==== Comparison ====
+
+sub ispass($) {
+ my $result = shift;
+
+ if($result eq "PASS" or $result eq "XFAIL" or $result eq "KFAIL") {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+1;
diff --git a/contrib/download_ecj b/contrib/download_ecj
new file mode 100755
index 000000000..5043f9407
--- /dev/null
+++ b/contrib/download_ecj
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+#
+# Download the ecj jar file needed by gcj.
+# Run this from the top level of the gcc source tree and the libjava
+# build will do the right thing.
+#
+# (C) 2006 Free Software Foundation
+#
+# 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
+#
+
+ftp -n sourceware.org << EOF
+verbose
+hash
+user ftp ''
+cd /pub/java
+binary
+get ecj-latest.jar
+EOF
+
+mv ecj-latest.jar ecj.jar
+
diff --git a/contrib/download_prerequisites b/contrib/download_prerequisites
new file mode 100755
index 000000000..f86f56121
--- /dev/null
+++ b/contrib/download_prerequisites
@@ -0,0 +1,38 @@
+#! /bin/sh
+
+# Download some prerequisites needed by gcc.
+# Run this from the top level of the gcc source tree and the gcc
+# build will do the right thing.
+#
+# (C) 2010 Free Software Foundation
+#
+# 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 3 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, see http://www.gnu.org/licenses/.
+
+MPFR=mpfr-2.4.2
+GMP=gmp-4.3.2
+MPC=mpc-0.8.1
+
+wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
+tar xjf $MPFR.tar.bz2 || exit 1
+ln -sf $MPFR mpfr || exit 1
+
+wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
+tar xjf $GMP.tar.bz2 || exit 1
+ln -sf $GMP gmp || exit 1
+
+wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1
+tar xzf $MPC.tar.gz || exit 1
+ln -sf $MPC mpc || exit 1
+
+rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1
diff --git a/contrib/filter_gcc_for_doxygen b/contrib/filter_gcc_for_doxygen
new file mode 100755
index 000000000..3787eebbf
--- /dev/null
+++ b/contrib/filter_gcc_for_doxygen
@@ -0,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 --git a/contrib/filter_knr2ansi.pl b/contrib/filter_knr2ansi.pl
new file mode 100755
index 000000000..6b43e4077
--- /dev/null
+++ b/contrib/filter_knr2ansi.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+#
+# Goes through 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 --git a/contrib/filter_params.pl b/contrib/filter_params.pl
new file mode 100755
index 000000000..22dae6cc5
--- /dev/null
+++ b/contrib/filter_params.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+# Filters out some of the #defines used throughout 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 --git a/contrib/gcc.doxy b/contrib/gcc.doxy
new file mode 100644
index 000000000..7a284e754
--- /dev/null
+++ b/contrib/gcc.doxy
@@ -0,0 +1,1267 @@
+# Doxyfile 1.5.2
+
+# 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. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER = @INPUT_FILTER@
+
+#-----------------------------------------------------------------------------
+
+
+
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that
+# follow. The default is UTF-8 which is also the encoding used for all text before
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
+# possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "GCC Middle and Back End API Reference"
+
+# 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 =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# 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:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# 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. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_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 the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = 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
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# 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
+
+# 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
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# 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
+# and Mac 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
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# 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
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# 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
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# 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. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+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 = gcc
+
+# This tag can be used to specify the character encoding of the source files that
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# 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 *.m *.mm *.py
+
+FILE_PATTERNS =
+
+# 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. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS = c-* */testsuite/* */config/* */.svn/* */po/*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the output.
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# 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 =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# 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 = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# 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 REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# 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 = YES
+
+# 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_DEFINED 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. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+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::additions 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
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
+# be found in the default search path.
+
+MSCGEN_PATH =
+
+# 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 GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = 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 CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a caller 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 caller graphs for selected
+# functions only using the \callergraph command.
+
+CALLER_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
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = 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 in 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_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen will always
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# 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::additions 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 --git a/contrib/gcc_build b/contrib/gcc_build
new file mode 100755
index 000000000..6713066d7
--- /dev/null
+++ b/contrib/gcc_build
@@ -0,0 +1,325 @@
+#! /bin/sh
+
+########################################################################
+#
+# File: gcc_build
+# Author: Mark Mitchell
+# Date: 2000-07-10
+#
+# Adapted to Subversion by Ben Elliston <bje@au.ibm.com>, 2005-07-14.
+#
+# Contents:
+# Script to automatically download and build GCC.
+#
+# Copyright (c) 2000, 2001, 2003, 2005 Free Software Foundation.
+#
+# 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
+########################################################################
+
+########################################################################
+# Notes
+########################################################################
+
+# You can set the following variables in the environment. They
+# have no corresponding command-line options because they should
+# only be needed infrequently:
+#
+# MAKE The path to `make'.
+
+########################################################################
+# Functions
+########################################################################
+
+# Issue the error message given by $1 and exit with a non-zero
+# exit code.
+
+error() {
+ echo "gcc_build: error: $1"
+ exit 1
+}
+
+# Issue a usage message explaining how to use this script.
+
+usage() {
+cat <<EOF
+gcc_build [-c configure_options]
+ [-d destination_directory]
+ [-m make_boot_options]
+ [-o objdir]
+ [-b branch_name]
+ [-u username]
+ [-p protocol]
+ [-t tarfile]
+ [-x make_check_options]
+ [bootstrap]
+ [build]
+ [checkout]
+ [configure]
+ [export]
+ [install]
+ [test]
+ [update]
+EOF
+ exit 1
+}
+
+# Change to the directory given by $1.
+
+changedir() {
+ cd $1 || \
+ error "Could not change directory to $1"
+}
+
+# Checkout a fresh copy of the GCC build tree.
+
+checkout_gcc() {
+ # If the destination already exists, don't risk destroying it.
+ test -e ${DESTINATION} && \
+ error "${DESTINATION} already exists"
+
+ # Checkout the tree
+ test -n "${SVN_USERNAME}" && SVN_USERNAME="${SVN_USERNAME}@"
+ SVNROOT="${SVN_PROTOCOL}://${SVN_USERNAME}${SVN_SERVER}${SVN_REPOSITORY}${SVN_BRANCH}"
+
+ $GCC_SVN co $SVNROOT ${DESTINATION} || \
+ error "Could not check out GCC"
+}
+
+# Update GCC.
+
+update_gcc() {
+ # If the destination does not already exist, complain.
+ test -d ${DESTINATION} || \
+ error "${DESTINATION} does not exist"
+
+ # Enter the destination directory.
+ changedir ${DESTINATION}
+
+ # Update the tree
+ ./contrib/gcc_update || \
+ error "Could not update GCC"
+}
+
+# Configure for a build of GCC.
+
+configure_gcc() {
+ # Go to the source directory.
+ changedir ${DESTINATION}
+
+ # Remove the object directory.
+ rm -rf ${OBJDIR}
+ # Create it again.
+ mkdir ${OBJDIR} || \
+ error "Could not create ${OBJDIR}"
+ # Enter it.
+ changedir ${OBJDIR}
+
+ # Configure the tree.
+ echo "Configuring: ${DESTINATION}/configure ${CONFIGURE_OPTIONS}"
+ eval ${DESTINATION}/configure ${CONFIGURE_OPTIONS} || \
+ error "Could not configure the compiler"
+}
+
+# Bootstrap GCC. Assume configuration has already occurred.
+
+bootstrap_gcc() {
+ # Go to the source directory.
+ changedir ${DESTINATION}
+ # Go to the object directory.
+ changedir ${OBJDIR}
+
+ # Bootstrap the compiler
+ echo "Building: ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap"
+ eval ${MAKE} ${MAKE_BOOTSTRAP_OPTIONS} bootstrap || \
+ error "Could not bootstrap the compiler"
+}
+
+# Test GCC.
+
+test_gcc() {
+ # Go to the source directory.
+ changedir ${DESTINATION}
+ # Go to the object directory.
+ changedir ${OBJDIR}
+
+ echo "Running tests... This will take a while."
+ eval \${MAKE} -k ${MAKE_CHECK_OPTIONS} check
+ ${DESTINATION}/contrib/test_summary
+}
+
+# Export the GCC source tree.
+
+export_gcc() {
+ # Go to the source directory.
+ changedir ${DESTINATION}
+ # Go up one level.
+ changedir ..
+ # Build a tarball of the source directory.
+ tar czf ${TARFILE} \
+ --exclude=${OBJDIR} \
+ --exclude=.svn \
+ --exclude='.#*' \
+ --exclude='*~' \
+ `basename ${DESTINATION}`
+}
+
+# Install GCC.
+
+install_gcc() {
+ # Go to the source directory.
+ changedir ${DESTINATION}
+ # Go to the object directory.
+ changedir ${OBJDIR}
+
+ ${MAKE} install || error "Installation failed"
+}
+
+########################################################################
+# Initialization
+########################################################################
+
+# SVN command
+GCC_SVN=${GCC_SVN-${SVN-svn}}
+# The SVN server containing the GCC repository.
+SVN_SERVER="gcc.gnu.org"
+# The path to the repository on that server.
+SVN_REPOSITORY="/svn/gcc/"
+# The branch to check out from that server.
+# Defaults to trunk if no branch is defined with -b.
+SVN_BRANCH=""
+# The SVN protocol to use.
+SVN_PROTOCOL="svn"
+# The username to use when connecting to the server.
+# An empty string means anonymous.
+SVN_USERNAME=""
+
+# The directory where the checked out GCC will be placed.
+DESTINATION="${HOME}/dev/gcc"
+# The relative path from the top of the source tree to the
+# object directory.
+OBJDIR="objdir"
+
+# The file where the tarred up sources will be placed.
+TARFILE="${HOME}/dev/gcc.tgz"
+
+# Options to pass to configure.
+CONFIGURE_OPTIONS=
+# The `make' program.
+MAKE=${MAKE:-make}
+# Options to pass to "make bootstrap".
+MAKE_BOOTSTRAP_OPTIONS=
+# Options to pass to "make check".
+MAKE_CHECK_OPTIONS=
+
+# Modes of operation
+BOOTSTRAP=0
+CHECKOUT=0
+CONFIGURE=0
+EXPORT=0
+INSTALL=0
+TEST=0
+UPDATE=0
+
+########################################################################
+# Main Program
+########################################################################
+
+# Issue usage if no parameters are given.
+test $# -eq 0 && usage
+
+# Parse the options.
+while getopts "c:d:m:o:p:t:b:u:x:" ARG; do
+ case $ARG in
+ c) CONFIGURE_OPTIONS="${OPTARG}";;
+ d) DESTINATION="${OPTARG}";;
+ m) MAKE_BOOTSTRAP_OPTIONS="${OPTARG}";;
+ o) OBJDIR="${OPTARG}";;
+ p) SVN_PROTOCOL="${OPTARG}";;
+ t) TARFILE="${OPTARG}";;
+ x) MAKE_CHECK_OPTIONS="${OPTARG}";;
+ b) SVN_BRANCH="${OPTARG}";;
+ u) SVN_USERNAME="${OPTARG}";;
+ \?) usage;;
+ esac
+done
+shift `expr ${OPTIND} - 1`
+
+# Handle the major modes.
+while [ $# -ne 0 ]; do
+ case $1 in
+ bootstrap) BOOTSTRAP=1;;
+ build) CONFIGURE=1; BOOTSTRAP=1;;
+ checkout) CHECKOUT=1;;
+ configure) CONFIGURE=1;;
+ export) EXPORT=1;;
+ install) INSTALL=1;;
+ test) TEST=1;;
+ update) UPDATE=1;;
+ *) usage;;
+ esac
+ shift
+done
+
+# Check the arguments for sanity.
+if [ ${CHECKOUT} -ne 0 ] && [ ${UPDATE} -ne 0 ]; then
+ error "Cannot checkout and update simultaneously"
+fi
+
+if [ ${CHECKOUT} -eq 0 ] && test -n "${SVN_BRANCH}"; then
+ error "Branch argument only makes sense when doing a checkout"
+fi
+
+# Validate the branch name.
+if test -n "${SVN_BRANCH}"; then
+ SVN_BRANCH="branches/${SVN_BRANCH}";
+else
+ SVN_BRANCH="trunk";
+fi
+
+# Checkout the tree.
+if [ ${CHECKOUT} -ne 0 ]; then
+ checkout_gcc
+elif [ ${UPDATE} -ne 0 ]; then
+ update_gcc
+fi
+
+# Configure to build the tree.
+if [ ${CONFIGURE} -ne 0 ]; then
+ configure_gcc
+fi
+
+# Bootstrap the compiler.
+if [ ${BOOTSTRAP} -ne 0 ]; then
+ bootstrap_gcc
+fi
+
+# Test the compiler
+if [ ${TEST} -ne 0 ]; then
+ test_gcc
+fi
+
+# Install the compiler.
+if [ ${INSTALL} -ne 0 ]; then
+ install_gcc
+fi
+
+# Export the sources
+if [ ${EXPORT} -ne 0 ]; then
+ export_gcc
+fi
diff --git a/contrib/gcc_update b/contrib/gcc_update
new file mode 100755
index 000000000..b989ffdc5
--- /dev/null
+++ b/contrib/gcc_update
@@ -0,0 +1,372 @@
+#! /bin/sh
+#
+# Update a local Subversion, Git or Mercurial tree from the GCC
+# repository, with an emphasis on treating generated files correctly, so
+# that autoconf, gperf et al are not required for the ``end'' user.
+#
+# (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
+# 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
+# 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
+#
+#
+# By default all command-line options are passed to `svn update` or `hg/git
+# pull` in addition to $UPDATE_OPTIONS (defined below). If the first parameter
+# reads --nostdflags, $UPDATE_OPTIONS as well as this parameter itself
+# are omitted.
+#
+# If the first parameter reads --patch, the second parameter is considered
+# a patch file.
+#
+# If the first parameter is --touch, no svn operation will be performed,
+# only generated files that appear to be out of date in the local tree
+# will be touched.
+#
+# 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 8712
+# contrib/gcc_update --patch some-patch
+# contrib/gcc_update --touch
+# contrib/gcc_update --list
+
+
+# Default options used when updating (none).
+UPDATE_OPTIONS=""
+
+# Set the locale to C to make this script work for users with foreign
+# locale like e.g. French UTF-8.
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+######## Anything below shouldn't be changed by regular users.
+
+# 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
+# Similarly, without this, you will see:
+# direct2s.c:35: warning: current file is older than direct2.c
+gcc/testsuite/gcc.dg/cpp/direct2s.c: gcc/testsuite/gcc.dg/cpp/direct2.c
+# lto-plugin
+lto-plugin/configure: lto-plugin/configure.ac lto-plugin/aclocal.m4
+lto-plugin/Makefile.in: lto-plugin/Makefile.am lto-plugin/aclocal.m4
+# 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/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
+libgomp/aclocal.m4: libgomp/configure.ac libgomp/acinclude.m4
+libgomp/Makefile.in: libgomp/Makefile.am libgomp/aclocal.m4
+libgomp/testsuite/Makefile.in: libgomp/Makefile.am libgomp/aclocal.m4
+libgomp/configure: libgomp/configure.ac libgomp/aclocal.m4
+libgomp/config.h.in: libgomp/configure.ac libgomp/aclocal.m4
+# Top level
+Makefile.in: Makefile.tpl Makefile.def
+configure: configure.ac config/acx.m4
+EOF
+}
+
+
+# This function touches generated files such that the ``end'' user does
+# not have to rebuild them.
+touch_files () {
+ rm -f Makefile.$$
+ echo 'all: \' > Makefile.$$
+ files_and_dependencies | sed 's, .*, \\,' >> Makefile.$$
+ echo '; @true' >> Makefile.$$
+ files_and_dependencies | sed 's, ,: ,' >> Makefile.$$
+ files_and_dependencies | sed 's, .*, \\,' >> Makefile.$$
+ 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.$$
+}
+
+
+# Whenever we update the tree or install a patch, we may be modifying
+# 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
+}
+
+# Check whether this indeed looks like a local tree.
+if [ ! -f gcc/version.c ]; then
+ echo "This does not seem to be a GCC tree!"
+ exit
+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
+ echo "$1" expects only one argument >&2
+ exit 1
+ fi
+ apply_patch "${2}"
+ exit $?
+ ;;
+
+--touch)
+ if test "$#" != 1; then
+ echo "$1" does not expect any argument >&2
+ exit 1
+ fi
+ touch_files
+ exit $?
+ ;;
+
+--list)
+ if test "$#" != 1; then
+ echo "$1" does not expect any argument >&2
+ exit 1
+ fi
+ files_and_dependencies | sed 's/ /: /'
+ exit $?
+ ;;
+
+--help)
+ sed -e '1,2d' -e '/^UPDATE_OPTIONS=/{i\
+\
+
+p
+}' \
+ -e '/^$/,$d' -e 's/#//' -e 's/^ //' < $0
+ exit $?
+ ;;
+
+esac
+
+# Check for known version control systems.
+if [ -d .git ]; then
+ GCC_GIT=${GCC_GIT-${GIT-git}}
+ vcs_type="git"
+elif [ -d .hg ]; then
+ GCC_HG=${GCC_HG-${HG-hg}}
+ vcs_type="hg"
+elif [ -d .svn ]; then
+ GCC_SVN=${GCC_SVN-${SVN-svn}}
+ vcs_type="svn"
+else
+ echo "This does not seem to be a GCC GIT/HG/SVN tree!"
+ exit
+fi
+
+# Check command-line options
+if [ x"${1}"x = x"--nostdflags"x ]; then
+ shift
+else
+ set -- $UPDATE_OPTIONS ${1+"$@"}
+fi
+
+case $vcs_type in
+ git)
+ chat "Updating GIT tree"
+
+ $GCC_GIT diff --quiet --exit-code HEAD
+ if [ $? -ne 0 ]; then
+ echo "Attempting to update a dirty git tree!" >&2
+ echo "Commit or stash your changes first and retry." >&2
+ exit 1
+ fi
+
+ $GCC_GIT pull ${silent+-q} --rebase ${1+"$@"}
+ if [ $? -ne 0 ]; then
+ (touch_files_reexec)
+ echo "git pull of full tree failed." >&2
+ exit 1
+ fi
+
+ revision=`$GCC_GIT log -n1 --pretty=%p:%t:%H`
+ branch=`$GCC_GIT name-rev --name-only HEAD || :`
+ ;;
+
+ hg)
+ chat "Updating HG tree"
+
+ # Add -q so untracked files aren't listed.
+ if [ `$GCC_HG status -q | wc -l` -gt 0 ]; then
+ echo "Attempting to update a dirty hg tree!" >&2
+ echo "Commit or revert your changes first and retry." >&2
+ exit 1
+ fi
+
+ # Check for mq extension. mq patches must be popped so tip has
+ # been converted from the SVN tree.
+ if [ -d .hg/patches ] && [ `$GCC_HG qapplied | wc -l` -gt 0 ]; then
+ # FIXME: Perhaps pop queue instead? We could do that since we
+ # know the tree is clean.
+ echo "Attempting to update hg tree with mq patches applied!" >&2
+ echo "Pop your patches first and retry." >&2
+ exit 1
+ fi
+
+ # Update tree, but make sure to only pull the default branch.
+ # Otherwise all branches in the upstream repo are added, even if
+ # only a single one has been cloned.
+ $GCC_HG pull ${silent+-q} -r`$GCC_HG branch` ${1+"$@"}
+ if [ $? -ne 0 ]; then
+ (touch_files_reexec)
+ echo "hg pull of full tree failed." >&2
+ exit 1
+ fi
+
+ # Update tree. Needs to be done separately from pull so
+ # gcc_update -rREV works.
+ $GCC_HG update ${silent+-q} ${1+"$@"}
+ if [ $? -ne 0 ]; then
+ (touch_files_reexec)
+ echo "hg update of full tree failed." >&2
+ exit 1
+ fi
+
+ # Extract SVN revision corresponding to parents, as stored by
+ # hg convert. Before hg 1.4.3, there's no template keyword
+ # corresponding to the extra: tag, so need to use hg log --debug
+ # to extract the info.
+ parents=`$GCC_HG parents --template '{rev}'`
+ revision=`$GCC_HG log --debug -r$parents | \
+ sed -ne "/^extra:.*convert_revision=svn:/ {
+ s%^.*@%%
+ p
+ }"`
+ branch=`$GCC_HG branch`
+ # trunk in SVN parlance shows up as default branch in hg.
+ [ x$branch = x"default" ] && branch="trunk"
+ ;;
+
+ svn)
+ chat "Updating SVN tree"
+
+ $GCC_SVN ${silent+-q} --non-interactive update ${1+"$@"}
+ if [ $? -ne 0 ]; then
+ (touch_files_reexec)
+ echo "SVN update of full tree failed." >&2
+ exit 1
+ fi
+
+ revision=`svn info | awk '/Revision:/ { print $2 }'`
+ branch=`svn info | sed -ne "/URL:/ {
+ s,.*/trunk,trunk,
+ s,.*/branches/,,
+ s,.*/tags/,,
+ p
+ }"`
+ ;;
+esac
+
+rm -f LAST_UPDATED gcc/REVISION
+{
+ date
+ echo "`TZ=UTC date` (revision $revision)"
+} > LAST_UPDATED
+echo "[$branch revision $revision]" > gcc/REVISION
+
+touch_files_reexec
diff --git a/contrib/gennews b/contrib/gennews
new file mode 100755
index 000000000..27c7dae4b
--- /dev/null
+++ b/contrib/gennews
@@ -0,0 +1,66 @@
+#! /bin/sh
+#
+# 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, 2008, 2009, 2010, 2011
+# 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+website=http://gcc.gnu.org/
+files="
+ gcc-4.6/index.html gcc-4.6/changes.html
+ gcc-4.5/index.html gcc-4.5/changes.html
+ gcc-4.4/index.html gcc-4.4/changes.html
+ gcc-4.3/index.html gcc-4.3/changes.html
+ gcc-4.2/index.html gcc-4.2/changes.html
+ gcc-4.1/index.html gcc-4.1/changes.html
+ 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
+ gcc-3.0/gcc-3.0.html gcc-3.0/features.html gcc-3.0/caveats.html
+ gcc-2.95/index.html gcc-2.95/features.html gcc-2.95/caveats.html
+ egcs-1.1/index.html egcs-1.1/features.html egcs-1.1/caveats.html
+ egcs-1.0/index.html egcs-1.0/features.html egcs-1.0/caveats.html"
+
+set -e
+
+cat <<EOF
+This file contains information about GCC releases which has been generated
+automatically from the online release notes. It covers releases of GCC
+(and the former EGCS project) since EGCS 1.0, on the line of development
+that led to GCC 3. For information on GCC 2.8.1 and older releases of GCC 2,
+see ONEWS.
+
+EOF
+
+header="======================================================================"
+
+echo $header
+
+for file in $files; do
+ wfile=$website$file
+ echo $wfile
+ # We lie to Lynx about the kind of terminal in use because we
+ # want to get consistent output everywhere, and we want this
+ # script to work even when it is not run interactively.
+ env TERM=vt100 lynx -dump $wfile
+ echo $header
+done
diff --git a/contrib/gthr_supp_vxw_5x.c b/contrib/gthr_supp_vxw_5x.c
new file mode 100644
index 000000000..6ce288f3e
--- /dev/null
+++ b/contrib/gthr_supp_vxw_5x.c
@@ -0,0 +1,92 @@
+/* Kernel-side additional module for the VxWorks threading support
+ logic for GCC. Written 2002 by Zack Weinberg.
+
+ This file is distributed with GCC, but it is not part of GCC.
+ The contents of this file are in the public domain. */
+
+/* If you are using the Tornado IDE, copy this file to
+ $WIND_BASE/target/config/comps/src/gthread_supp.c. Then create a
+ file named 10comp_gthread_supp.cdf in target/config/comps/vxWorks
+ with the following contents:
+
+ Component INCLUDE_GCC_GTHREAD {
+ NAME GCC 3.x gthread support (required by C++)
+ CONFIGLETTES gthread_supp.c
+ REQUIRES INCLUDE_CPLUS
+ INCLUDE_WHEN INCLUDE_CPLUS
+ _FOLDER FOLDER_CPLUS
+ }
+
+ If you are using command line builds, instead copy this file to
+ $WIND_BASE/target/src/config/gthread_supp.c, and add the following
+ block to target/src/config/usrExtra.c:
+
+ #ifdef INCLUDE_CPLUS
+ #include "../../src/config/gthread_supp.c"
+ #endif
+
+ You should now be able to rebuild your application using GCC 3.x. */
+
+#include <vxWorks.h>
+#include <taskLib.h>
+
+/* This file provides these routines: */
+extern void *__gthread_get_tsd_data (WIND_TCB *tcb);
+extern void __gthread_set_tsd_data (WIND_TCB *tcb, void *data);
+
+extern void __gthread_enter_tsd_dtor_context (WIND_TCB *tcb);
+extern void __gthread_leave_tsd_dtor_context (WIND_TCB *tcb);
+
+/* Set and retrieve the TSD data block for the task TCB.
+
+ Possible choices for TSD_SLOT are:
+ reserved1
+ reserved2
+ spare1
+ spare2
+ spare3
+ spare4
+ (these are all fields of the TCB structure; all have type 'int').
+
+ If you find that the slot chosen by default is already used for
+ something else, simply change the #define below and recompile this
+ file. No other file should reference TSD_SLOT directly. */
+
+/* WARNING: This code is not 64-bit clean (it assumes that a pointer
+ can be held in an 'int' without truncation). As much of the rest
+ of VxWorks also makes this assumption, we can't really avoid it. */
+
+#define TSD_SLOT reserved1
+
+void *
+__gthread_get_tsd_data (WIND_TCB *tcb)
+{
+ return (void *) (tcb->TSD_SLOT);
+}
+
+void
+__gthread_set_tsd_data (WIND_TCB *tcb, void *data)
+{
+ tcb->TSD_SLOT = (int) data;
+}
+
+/* Enter and leave "TSD destructor context". This is defined as a
+ state in which it is safe to call free() from a task delete hook
+ on a memory block allocated by the task being deleted.
+ For VxWorks 5.x, nothing needs to be done. */
+
+#if __GNUC__ >= 2
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+
+void
+__gthread_enter_tsd_dtor_context (WIND_TCB *tcb UNUSED)
+{
+}
+
+void
+__gthread_leave_tsd_dtor_context (WIND_TCB *tcb UNUSED)
+{
+}
diff --git a/contrib/index-prop b/contrib/index-prop
new file mode 100755
index 000000000..1ea648989
--- /dev/null
+++ b/contrib/index-prop
@@ -0,0 +1,26 @@
+#! /usr/bin/perl -wi
+# Fix up the output of cvs diff -c so that it works with patch.
+# We do this by propagating the full pathname from the Index: line
+# into the diff itself.
+#
+# Thrown together by Jason Merrill <jason@cygnus.com>
+
+while (<>)
+{
+ if (/^Index: (.*)/)
+ {
+ $full = $1;
+ print;
+ for (1..7)
+ {
+ $_ = <>;
+ s/^([-+*]{3}) [^\t]+\t/$1 $full\t/
+ unless m{ /dev/null\t};
+ print;
+ }
+ }
+ else
+ {
+ print;
+ }
+}
diff --git a/contrib/make_sunver.pl b/contrib/make_sunver.pl
new file mode 100644
index 000000000..b3abd8add
--- /dev/null
+++ b/contrib/make_sunver.pl
@@ -0,0 +1,350 @@
+#!/usr/bin/perl -w
+
+# make_sunver.pl
+#
+# This script takes at least two arguments, a GNU style version script and
+# a list of object and archive files, and generates a corresponding Sun
+# style version script as follows:
+#
+# Each glob pattern, C++ mangled pattern or literal in the input script is
+# matched against all global symbols in the input objects, emitting those
+# that matched (or nothing if no match was found).
+# A comment with the original pattern and its type is left in the output
+# file to make it easy to understand the matches.
+#
+# It uses elfdump when present (native), GNU readelf otherwise.
+# It depends on the GNU version of c++filt, since it must understand the
+# GNU mangling style.
+
+use File::Glob ':glob';
+use FileHandle;
+use IPC::Open2;
+
+# Input version script, GNU style.
+my $symvers = shift;
+
+##########
+# Get all the symbols from the library, match them, and add them to a hash.
+
+my %sym_hash = ();
+
+# List of objects and archives to process.
+my @OBJECTS = ();
+
+# List of shared objects to omit from processing.
+my @SHAREDOBJS = ();
+
+# Filter out those input archives that have corresponding shared objects to
+# avoid adding all symbols matched in the archive to the output map.
+foreach $file (@ARGV) {
+ if (($so = $file) =~ s/\.a$/.so/ && -e $so) {
+ printf STDERR "omitted $file -> $so\n";
+ push (@SHAREDOBJS, $so);
+ } else {
+ push (@OBJECTS, $file);
+ }
+}
+
+# We need to detect and ignore hidden symbols. Solaris nm can only detect
+# this in the harder to parse default output format, and GNU nm not at all,
+# so use elfdump -s in the native case and GNU readelf -s otherwise.
+# GNU objdump -t cannot be used since it produces a variable number of
+# columns.
+
+# The path to elfdump.
+my $elfdump = "/usr/ccs/bin/elfdump";
+
+if (-f $elfdump) {
+ open ELFDUMP,$elfdump.' -s '.(join ' ',@OBJECTS).'|' or die $!;
+ my $skip_arsym = 0;
+
+ while (<ELFDUMP>) {
+ chomp;
+
+ # Ignore empty lines.
+ if (/^$/) {
+ # End of archive symbol table, stop skipping.
+ $skip_arsym = 0 if $skip_arsym;
+ next;
+ }
+
+ # Keep skipping until end of archive symbol table.
+ next if ($skip_arsym);
+
+ # Ignore object name header for individual objects and archives.
+ next if (/:$/);
+
+ # Ignore table header lines.
+ next if (/^Symbol Table Section:/);
+ next if (/index.*value.*size/);
+
+ # Start of archive symbol table: start skipping.
+ if (/^Symbol Table: \(archive/) {
+ $skip_arsym = 1;
+ next;
+ }
+
+ # Split table.
+ (undef, undef, undef, undef, $bind, $oth, undef, $shndx, $name) = split;
+
+ # Error out for unknown input.
+ die "unknown input line:\n$_" unless defined($bind);
+
+ # Ignore local symbols.
+ next if ($bind eq "LOCL");
+ # Ignore hidden symbols.
+ next if ($oth eq "H");
+ # Ignore undefined symbols.
+ next if ($shndx eq "UNDEF");
+ # Error out for unhandled cases.
+ if ($bind !~ /^(GLOB|WEAK)/ or $oth ne "D") {
+ die "unhandled symbol:\n$_";
+ }
+
+ # Remember symbol.
+ $sym_hash{$name}++;
+ }
+ close ELFDUMP or die "$elfdump error";
+} else {
+ open READELF, 'readelf -s -W '.(join ' ',@OBJECTS).'|' or die $!;
+ # Process each symbol.
+ while (<READELF>) {
+ chomp;
+
+ # Ignore empty lines.
+ next if (/^$/);
+
+ # Ignore object name header.
+ next if (/^File: .*$/);
+
+ # Ignore table header lines.
+ next if (/^Symbol table.*contains.*:/);
+ next if (/Num:.*Value.*Size/);
+
+ # Split table.
+ (undef, undef, undef, undef, $bind, $vis, $ndx, $name) = split;
+
+ # Error out for unknown input.
+ die "unknown input line:\n$_" unless defined($bind);
+
+ # Ignore local symbols.
+ next if ($bind eq "LOCAL");
+ # Ignore hidden symbols.
+ next if ($vis eq "HIDDEN");
+ # Ignore undefined symbols.
+ next if ($ndx eq "UND");
+ # Error out for unhandled cases.
+ if ($bind !~ /^(GLOBAL|WEAK)/ or $vis ne "DEFAULT") {
+ die "unhandled symbol:\n$_";
+ }
+
+ # Remember symbol.
+ $sym_hash{$name}++;
+ }
+ close READELF or die "readelf error";
+}
+
+##########
+# The various types of glob patterns.
+#
+# A glob pattern that is to be applied to the demangled name: 'cxx'.
+# A glob patterns that applies directly to the name in the .o files: 'glob'.
+# This pattern is ignored; used for local variables (usually just '*'): 'ign'.
+
+# The type of the current pattern.
+my $glob = 'glob';
+
+# We're currently inside `extern "C++"', which Sun ld doesn't understand.
+my $in_extern = 0;
+
+# We're currently inside a conditional section: just skip it.
+my $in_ifdef = 0;
+
+# The c++filt command to use. This *must* be GNU c++filt; the Sun Studio
+# c++filt doesn't handle the GNU mangling style.
+my $cxxfilt = $ENV{'CXXFILT'} || "c++filt";
+
+# The current version name.
+my $current_version = "";
+
+# Was there any attempt to match a symbol to this version?
+my $matches_attempted;
+
+# The number of versions which matched this symbol.
+my $matched_symbols;
+
+open F,$symvers or die $!;
+
+# Print information about generating this file
+print "# This file was generated by make_sunver.pl. DO NOT EDIT!\n";
+print "# It was generated by:\n";
+printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV);
+printf "# Omitted archives with corresponding shared libraries: %s\n",
+ (join ' ', @SHAREDOBJS) if $#SHAREDOBJS >= 0;
+print "#\n\n";
+
+while (<F>) {
+ # End of skipped section.
+ if (/^[ \t]*\#endif/) {
+ $in_ifdef = 0;
+ next;
+ }
+
+ # Just skip a conditional section.
+ if ($in_ifdef) { next; }
+
+ # Lines of the form '};'
+ if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) {
+ $glob = 'glob';
+ if ($in_extern) {
+ $in_extern--;
+ print "$1##$2";
+ } else {
+ print;
+ }
+ next;
+ }
+
+ # Lines of the form '} SOME_VERSION_NAME_1.0;'
+ if (/^[ \t]*\}[ \tA-Z0-9_.a-z]+;[ \t]*$/) {
+ $glob = 'glob';
+ # We tried to match symbols agains this version, but none matched.
+ # Emit dummy hidden symbol to avoid marking this version WEAK.
+ if ($matches_attempted && $matched_symbols == 0) {
+ print " hidden:\n";
+ print " .force_WEAK_off_$current_version = DATA S0x0 V0x0;\n";
+ }
+ print; next;
+ }
+
+ # Special comments that look like C preprocessor conditionals.
+ # Just skip the contents for now.
+ # FIXME: Allow passing in conditionals from the command line to really
+ # control the skipping.
+ if (/^[ \t]*\#ifdef/) {
+ $in_ifdef = 1;
+ next;
+ }
+
+ # Comment and blank lines
+ if (/^[ \t]*\#/) { print; next; }
+ if (/^[ \t]*$/) { print; next; }
+
+ # Lines of the form '{'
+ if (/^([ \t]*){$/) {
+ if ($in_extern) {
+ print "$1##{\n";
+ } else {
+ print;
+ }
+ next;
+ }
+
+ # Lines of the form 'SOME_VERSION_NAME_1.1 {'
+ if (/^([A-Z0-9_.]+)[ \t]+{$/) {
+ # Record version name.
+ $current_version = $1;
+ # Reset match attempts, #matched symbols for this version.
+ $matches_attempted = 0;
+ $matched_symbols = 0;
+ print;
+ next;
+ }
+
+ # Ignore 'global:'
+ if (/^[ \t]*global:$/) { print; next; }
+
+ # After 'local:', globs should be ignored, they won't be exported.
+ if (/^[ \t]*local:$/) {
+ $glob = 'ign';
+ print;
+ next;
+ }
+
+ # After 'extern "C++"', globs are C++ patterns
+ if (/^([ \t]*)(extern \"C\+\+\"[ \t]*)$/) {
+ $in_extern++;
+ $glob = 'cxx';
+ # Need to comment, Sun ld cannot handle this.
+ print "$1##$2\n"; next;
+ }
+
+ # Chomp newline now we're done with passing through the input file.
+ chomp;
+
+ # Catch globs. Note that '{}' is not allowed in globs by this script,
+ # so only '*' and '[]' are available.
+ if (/^([ \t]*)([^ \t;{}#]+);?[ \t]*$/) {
+ my $ws = $1;
+ my $ptn = $2;
+ # Turn the glob into a regex by replacing '*' with '.*'.
+ # Keep $ptn so we can still print the original form.
+ ($pattern = $ptn) =~ s/\*/\.\*/g;
+
+ if ($glob eq 'ign') {
+ # We're in a local: * section; just continue.
+ print "$_\n";
+ next;
+ }
+
+ # Print the glob commented for human readers.
+ print "$ws##$ptn ($glob)\n";
+ # We tried to match a symbol to this version.
+ $matches_attempted++;
+
+ if ($glob eq 'glob') {
+ my %ptn_syms = ();
+
+ # Match ptn against symbols in %sym_hash.
+ foreach my $sym (keys %sym_hash) {
+ # Maybe it matches one of the patterns based on the symbol in
+ # the .o file.
+ $ptn_syms{$sym}++ if ($sym =~ /^$pattern$/);
+ }
+
+ foreach my $sym (sort keys(%ptn_syms)) {
+ $matched_symbols++;
+ print "$ws$sym;\n";
+ }
+ } elsif ($glob eq 'cxx') {
+ my %dem_syms = ();
+
+ # Verify that we're actually using GNU c++filt. Other versions
+ # most likely cannot handle GNU style symbol mangling.
+ my $cxxout = `$cxxfilt --version 2>&1`;
+ $cxxout =~ m/GNU/ or die "$0 requires GNU c++filt to function";
+
+ # Talk to c++filt through a pair of file descriptors.
+ # Need to start a fresh instance per pattern, otherwise the
+ # process grows to 500+ MB.
+ my $pid = open2(*FILTIN, *FILTOUT, $cxxfilt) or die $!;
+
+ # Match ptn against symbols in %sym_hash.
+ foreach my $sym (keys %sym_hash) {
+ # No? Well, maybe its demangled form matches one of those
+ # patterns.
+ printf FILTOUT "%s\n",$sym;
+ my $dem = <FILTIN>;
+ chomp $dem;
+ $dem_syms{$sym}++ if ($dem =~ /^$pattern$/);
+ }
+
+ close FILTOUT or die "c++filt error";
+ close FILTIN or die "c++filt error";
+ # Need to wait for the c++filt process to avoid lots of zombies.
+ waitpid $pid, 0;
+
+ foreach my $sym (sort keys(%dem_syms)) {
+ $matched_symbols++;
+ print "$ws$sym;\n";
+ }
+ } else {
+ # No? Well, then ignore it.
+ }
+ next;
+ }
+ # Important sanity check. This script can't handle lots of formats
+ # that GNU ld can, so be sure to error out if one is seen!
+ die "strange line `$_'";
+}
+close F;
diff --git a/contrib/paranoia.cc b/contrib/paranoia.cc
new file mode 100644
index 000000000..ce21d3520
--- /dev/null
+++ b/contrib/paranoia.cc
@@ -0,0 +1,2714 @@
+/* A C version of Kahan's Floating Point Test "Paranoia"
+
+Thos Sumner, UCSF, Feb. 1985
+David Gay, BTL, Jan. 1986
+
+This is a rewrite from the Pascal version by
+
+B. A. Wichmann, 18 Jan. 1985
+
+(and does NOT exhibit good C programming style).
+
+Adjusted to use Standard C headers 19 Jan. 1992 (dmg);
+
+(C) Apr 19 1983 in BASIC version by:
+Professor W. M. Kahan,
+567 Evans Hall
+Electrical Engineering & Computer Science Dept.
+University of California
+Berkeley, California 94720
+USA
+
+converted to Pascal by:
+B. A. Wichmann
+National Physical Laboratory
+Teddington Middx
+TW11 OLW
+UK
+
+converted to C by:
+
+David M. Gay and Thos Sumner
+AT&T Bell Labs Computer Center, Rm. U-76
+600 Mountain Avenue University of California
+Murray Hill, NJ 07974 San Francisco, CA 94143
+USA USA
+
+with simultaneous corrections to the Pascal source (reflected
+in the Pascal source available over netlib).
+[A couple of bug fixes from dgh = sun!dhough incorporated 31 July 1986.]
+
+Reports of results on various systems from all the versions
+of Paranoia are being collected by Richard Karpinski at the
+same address as Thos Sumner. This includes sample outputs,
+bug reports, and criticisms.
+
+You may copy this program freely if you acknowledge its source.
+Comments on the Pascal version to NPL, please.
+
+The following is from the introductory commentary from Wichmann's work:
+
+The BASIC program of Kahan is written in Microsoft BASIC using many
+facilities which have no exact analogy in Pascal. The Pascal
+version below cannot therefore be exactly the same. Rather than be
+a minimal transcription of the BASIC program, the Pascal coding
+follows the conventional style of block-structured languages. Hence
+the Pascal version could be useful in producing versions in other
+structured languages.
+
+Rather than use identifiers of minimal length (which therefore have
+little mnemonic significance), the Pascal version uses meaningful
+identifiers as follows [Note: A few changes have been made for C]:
+
+
+BASIC C BASIC C BASIC C
+
+A J S StickyBit
+A1 AInverse J0 NoErrors T
+B Radix [Failure] T0 Underflow
+B1 BInverse J1 NoErrors T2 ThirtyTwo
+B2 RadixD2 [SeriousDefect] T5 OneAndHalf
+B9 BMinusU2 J2 NoErrors T7 TwentySeven
+C [Defect] T8 TwoForty
+C1 CInverse J3 NoErrors U OneUlp
+D [Flaw] U0 UnderflowThreshold
+D4 FourD K PageNo U1
+E0 L Milestone U2
+E1 M V
+E2 Exp2 N V0
+E3 N1 V8
+E5 MinSqEr O Zero V9
+E6 SqEr O1 One W
+E7 MaxSqEr O2 Two X
+E8 O3 Three X1
+E9 O4 Four X8
+F1 MinusOne O5 Five X9 Random1
+F2 Half O8 Eight Y
+F3 Third O9 Nine Y1
+F6 P Precision Y2
+F9 Q Y9 Random2
+G1 GMult Q8 Z
+G2 GDiv Q9 Z0 PseudoZero
+G3 GAddSub R Z1
+H R1 RMult Z2
+H1 HInverse R2 RDiv Z9
+I R3 RAddSub
+IO NoTrials R4 RSqrt
+I3 IEEE R9 Random9
+
+SqRWrng
+
+All the variables in BASIC are true variables and in consequence,
+the program is more difficult to follow since the "constants" must
+be determined (the glossary is very helpful). The Pascal version
+uses Real constants, but checks are added to ensure that the values
+are correctly converted by the compiler.
+
+The major textual change to the Pascal version apart from the
+identifiersis that named procedures are used, inserting parameters
+wherehelpful. New procedures are also introduced. The
+correspondence is as follows:
+
+
+BASIC Pascal
+lines
+
+90- 140 Pause
+170- 250 Instructions
+380- 460 Heading
+480- 670 Characteristics
+690- 870 History
+2940-2950 Random
+3710-3740 NewD
+4040-4080 DoesYequalX
+4090-4110 PrintIfNPositive
+4640-4850 TestPartialUnderflow
+
+*/
+
+ /* This version of paranoia has been modified to work with GCC's internal
+ software floating point emulation library, as a sanity check of same.
+
+ I'm doing this in C++ so that I can do operator overloading and not
+ have to modify so damned much of the existing code. */
+
+ extern "C" {
+#include <stdio.h>
+#include <stddef.h>
+#include <limits.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <unistd.h>
+#include <float.h>
+
+ /* This part is made all the more awful because many gcc headers are
+ not prepared at all to be parsed as C++. The biggest stickler
+ here is const structure members. So we include exactly the pieces
+ that we need. */
+
+#define GTY(x)
+
+#include "ansidecl.h"
+#include "auto-host.h"
+#include "hwint.h"
+
+#undef EXTRA_MODES_FILE
+
+ struct rtx_def;
+ typedef struct rtx_def *rtx;
+ struct rtvec_def;
+ typedef struct rtvec_def *rtvec;
+ union tree_node;
+ typedef union tree_node *tree;
+
+#define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
+ enum tree_code {
+#include "tree.def"
+ LAST_AND_UNUSED_TREE_CODE
+ };
+#undef DEFTREECODE
+
+#define ENUM_BITFIELD(X) enum X
+#define class klass
+
+#include "real.h"
+
+#undef class
+ }
+
+/* We never produce signals from the library. Thus setjmp need do nothing. */
+#undef setjmp
+#define setjmp(x) (0)
+
+static bool verbose = false;
+static int verbose_index = 0;
+
+/* ====================================================================== */
+/* The implementation of the abstract floating point class based on gcc's
+ real.c. I.e. the object of this exercise. Templated so that we can
+ all fp sizes. */
+
+class real_c_float
+{
+ public:
+ static const enum machine_mode MODE = SFmode;
+
+ private:
+ static const int external_max = 128 / 32;
+ static const int internal_max
+ = (sizeof (REAL_VALUE_TYPE) + sizeof (long) + 1) / sizeof (long);
+ long image[external_max < internal_max ? internal_max : external_max];
+
+ void from_long(long);
+ void from_str(const char *);
+ void binop(int code, const real_c_float&);
+ void unop(int code);
+ bool cmp(int code, const real_c_float&) const;
+
+ public:
+ real_c_float()
+ { }
+ real_c_float(long l)
+ { from_long(l); }
+ real_c_float(const char *s)
+ { from_str(s); }
+ real_c_float(const real_c_float &b)
+ { memcpy(image, b.image, sizeof(image)); }
+
+ const real_c_float& operator= (long l)
+ { from_long(l); return *this; }
+ const real_c_float& operator= (const char *s)
+ { from_str(s); return *this; }
+ const real_c_float& operator= (const real_c_float &b)
+ { memcpy(image, b.image, sizeof(image)); return *this; }
+
+ const real_c_float& operator+= (const real_c_float &b)
+ { binop(PLUS_EXPR, b); return *this; }
+ const real_c_float& operator-= (const real_c_float &b)
+ { binop(MINUS_EXPR, b); return *this; }
+ const real_c_float& operator*= (const real_c_float &b)
+ { binop(MULT_EXPR, b); return *this; }
+ const real_c_float& operator/= (const real_c_float &b)
+ { binop(RDIV_EXPR, b); return *this; }
+
+ real_c_float operator- () const
+ { real_c_float r(*this); r.unop(NEGATE_EXPR); return r; }
+ real_c_float abs () const
+ { real_c_float r(*this); r.unop(ABS_EXPR); return r; }
+
+ bool operator < (const real_c_float &b) const { return cmp(LT_EXPR, b); }
+ bool operator <= (const real_c_float &b) const { return cmp(LE_EXPR, b); }
+ bool operator == (const real_c_float &b) const { return cmp(EQ_EXPR, b); }
+ bool operator != (const real_c_float &b) const { return cmp(NE_EXPR, b); }
+ bool operator >= (const real_c_float &b) const { return cmp(GE_EXPR, b); }
+ bool operator > (const real_c_float &b) const { return cmp(GT_EXPR, b); }
+
+ const char * str () const;
+ const char * hex () const;
+ long integer () const;
+ int exp () const;
+ void ldexp (int);
+};
+
+void
+real_c_float::from_long (long l)
+{
+ REAL_VALUE_TYPE f;
+
+ real_from_integer (&f, MODE, l, l < 0 ? -1 : 0, 0);
+ real_to_target (image, &f, MODE);
+}
+
+void
+real_c_float::from_str (const char *s)
+{
+ REAL_VALUE_TYPE f;
+ const char *p = s;
+
+ if (*p == '-' || *p == '+')
+ p++;
+ if (strcasecmp(p, "inf") == 0)
+ {
+ real_inf (&f);
+ if (*s == '-')
+ real_arithmetic (&f, NEGATE_EXPR, &f, NULL);
+ }
+ else if (strcasecmp(p, "nan") == 0)
+ real_nan (&f, "", 1, MODE);
+ else
+ real_from_string (&f, s);
+
+ real_to_target (image, &f, MODE);
+}
+
+void
+real_c_float::binop (int code, const real_c_float &b)
+{
+ REAL_VALUE_TYPE ai, bi, ri;
+
+ real_from_target (&ai, image, MODE);
+ real_from_target (&bi, b.image, MODE);
+ real_arithmetic (&ri, code, &ai, &bi);
+ real_to_target (image, &ri, MODE);
+
+ if (verbose)
+ {
+ char ab[64], bb[64], rb[64];
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
+ char symbol_for_code;
+
+ real_from_target (&ri, image, MODE);
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
+ real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
+
+ switch (code)
+ {
+ case PLUS_EXPR:
+ symbol_for_code = '+';
+ break;
+ case MINUS_EXPR:
+ symbol_for_code = '-';
+ break;
+ case MULT_EXPR:
+ symbol_for_code = '*';
+ break;
+ case RDIV_EXPR:
+ symbol_for_code = '/';
+ break;
+ default:
+ abort ();
+ }
+
+ fprintf (stderr, "%6d: %s %c %s = %s\n", verbose_index++,
+ ab, symbol_for_code, bb, rb);
+ }
+}
+
+void
+real_c_float::unop (int code)
+{
+ REAL_VALUE_TYPE ai, ri;
+
+ real_from_target (&ai, image, MODE);
+ real_arithmetic (&ri, code, &ai, NULL);
+ real_to_target (image, &ri, MODE);
+
+ if (verbose)
+ {
+ char ab[64], rb[64];
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
+ const char *symbol_for_code;
+
+ real_from_target (&ri, image, MODE);
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (rb, &ri, sizeof(rb), digits, 0);
+
+ switch (code)
+ {
+ case NEGATE_EXPR:
+ symbol_for_code = "-";
+ break;
+ case ABS_EXPR:
+ symbol_for_code = "abs ";
+ break;
+ default:
+ abort ();
+ }
+
+ fprintf (stderr, "%6d: %s%s = %s\n", verbose_index++,
+ symbol_for_code, ab, rb);
+ }
+}
+
+bool
+real_c_float::cmp (int code, const real_c_float &b) const
+{
+ REAL_VALUE_TYPE ai, bi;
+ bool ret;
+
+ real_from_target (&ai, image, MODE);
+ real_from_target (&bi, b.image, MODE);
+ ret = real_compare (code, &ai, &bi);
+
+ if (verbose)
+ {
+ char ab[64], bb[64];
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
+ const char *symbol_for_code;
+
+ real_to_hexadecimal (ab, &ai, sizeof(ab), digits, 0);
+ real_to_hexadecimal (bb, &bi, sizeof(bb), digits, 0);
+
+ switch (code)
+ {
+ case LT_EXPR:
+ symbol_for_code = "<";
+ break;
+ case LE_EXPR:
+ symbol_for_code = "<=";
+ break;
+ case EQ_EXPR:
+ symbol_for_code = "==";
+ break;
+ case NE_EXPR:
+ symbol_for_code = "!=";
+ break;
+ case GE_EXPR:
+ symbol_for_code = ">=";
+ break;
+ case GT_EXPR:
+ symbol_for_code = ">";
+ break;
+ default:
+ abort ();
+ }
+
+ fprintf (stderr, "%6d: %s %s %s = %s\n", verbose_index++,
+ ab, symbol_for_code, bb, (ret ? "true" : "false"));
+ }
+
+ return ret;
+}
+
+const char *
+real_c_float::str() const
+{
+ REAL_VALUE_TYPE f;
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = int(fmt->p * fmt->log2_b * .30102999566398119521 + 1);
+
+ real_from_target (&f, image, MODE);
+ char *buf = new char[digits + 10];
+ real_to_decimal (buf, &f, digits+10, digits, 0);
+
+ return buf;
+}
+
+const char *
+real_c_float::hex() const
+{
+ REAL_VALUE_TYPE f;
+ const real_format *fmt = real_format_for_mode[MODE - QFmode];
+ const int digits = (fmt->p * fmt->log2_b + 3) / 4;
+
+ real_from_target (&f, image, MODE);
+ char *buf = new char[digits + 10];
+ real_to_hexadecimal (buf, &f, digits+10, digits, 0);
+
+ return buf;
+}
+
+long
+real_c_float::integer() const
+{
+ REAL_VALUE_TYPE f;
+ real_from_target (&f, image, MODE);
+ return real_to_integer (&f);
+}
+
+int
+real_c_float::exp() const
+{
+ REAL_VALUE_TYPE f;
+ real_from_target (&f, image, MODE);
+ return real_exponent (&f);
+}
+
+void
+real_c_float::ldexp (int exp)
+{
+ REAL_VALUE_TYPE ai;
+
+ real_from_target (&ai, image, MODE);
+ real_ldexp (&ai, &ai, exp);
+ real_to_target (image, &ai, MODE);
+}
+
+/* ====================================================================== */
+/* An implementation of the abstract floating point class that uses native
+ arithmetic. Exists for reference and debugging. */
+
+template<typename T>
+class native_float
+{
+ private:
+ // Force intermediate results back to memory.
+ volatile T image;
+
+ static T from_str (const char *);
+ static T do_abs (T);
+ static T verbose_binop (T, char, T, T);
+ static T verbose_unop (const char *, T, T);
+ static bool verbose_cmp (T, const char *, T, bool);
+
+ public:
+ native_float()
+ { }
+ native_float(long l)
+ { image = l; }
+ native_float(const char *s)
+ { image = from_str(s); }
+ native_float(const native_float &b)
+ { image = b.image; }
+
+ const native_float& operator= (long l)
+ { image = l; return *this; }
+ const native_float& operator= (const char *s)
+ { image = from_str(s); return *this; }
+ const native_float& operator= (const native_float &b)
+ { image = b.image; return *this; }
+
+ const native_float& operator+= (const native_float &b)
+ {
+ image = verbose_binop(image, '+', b.image, image + b.image);
+ return *this;
+ }
+ const native_float& operator-= (const native_float &b)
+ {
+ image = verbose_binop(image, '-', b.image, image - b.image);
+ return *this;
+ }
+ const native_float& operator*= (const native_float &b)
+ {
+ image = verbose_binop(image, '*', b.image, image * b.image);
+ return *this;
+ }
+ const native_float& operator/= (const native_float &b)
+ {
+ image = verbose_binop(image, '/', b.image, image / b.image);
+ return *this;
+ }
+
+ native_float operator- () const
+ {
+ native_float r;
+ r.image = verbose_unop("-", image, -image);
+ return r;
+ }
+ native_float abs () const
+ {
+ native_float r;
+ r.image = verbose_unop("abs ", image, do_abs(image));
+ return r;
+ }
+
+ bool operator < (const native_float &b) const
+ { return verbose_cmp(image, "<", b.image, image < b.image); }
+ bool operator <= (const native_float &b) const
+ { return verbose_cmp(image, "<=", b.image, image <= b.image); }
+ bool operator == (const native_float &b) const
+ { return verbose_cmp(image, "==", b.image, image == b.image); }
+ bool operator != (const native_float &b) const
+ { return verbose_cmp(image, "!=", b.image, image != b.image); }
+ bool operator >= (const native_float &b) const
+ { return verbose_cmp(image, ">=", b.image, image >= b.image); }
+ bool operator > (const native_float &b) const
+ { return verbose_cmp(image, ">", b.image, image > b.image); }
+
+ const char * str () const;
+ const char * hex () const;
+ long integer () const
+ { return long(image); }
+ int exp () const;
+ void ldexp (int);
+};
+
+template<typename T>
+inline T
+native_float<T>::from_str (const char *s)
+{
+ return strtold (s, NULL);
+}
+
+template<>
+inline float
+native_float<float>::from_str (const char *s)
+{
+ return strtof (s, NULL);
+}
+
+template<>
+inline double
+native_float<double>::from_str (const char *s)
+{
+ return strtod (s, NULL);
+}
+
+template<typename T>
+inline T
+native_float<T>::do_abs (T image)
+{
+ return fabsl (image);
+}
+
+template<>
+inline float
+native_float<float>::do_abs (float image)
+{
+ return fabsf (image);
+}
+
+template<>
+inline double
+native_float<double>::do_abs (double image)
+{
+ return fabs (image);
+}
+
+template<typename T>
+T
+native_float<T>::verbose_binop (T a, char symbol, T b, T r)
+{
+ if (verbose)
+ {
+ const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
+#ifdef NO_LONG_DOUBLE
+ fprintf (stderr, "%6d: %.*a %c %.*a = %.*a\n", verbose_index++,
+ digits, (double)a, symbol,
+ digits, (double)b, digits, (double)r);
+#else
+ fprintf (stderr, "%6d: %.*La %c %.*La = %.*La\n", verbose_index++,
+ digits, (long double)a, symbol,
+ digits, (long double)b, digits, (long double)r);
+#endif
+ }
+ return r;
+}
+
+template<typename T>
+T
+native_float<T>::verbose_unop (const char *symbol, T a, T r)
+{
+ if (verbose)
+ {
+ const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
+#ifdef NO_LONG_DOUBLE
+ fprintf (stderr, "%6d: %s%.*a = %.*a\n", verbose_index++,
+ symbol, digits, (double)a, digits, (double)r);
+#else
+ fprintf (stderr, "%6d: %s%.*La = %.*La\n", verbose_index++,
+ symbol, digits, (long double)a, digits, (long double)r);
+#endif
+ }
+ return r;
+}
+
+template<typename T>
+bool
+native_float<T>::verbose_cmp (T a, const char *symbol, T b, bool r)
+{
+ if (verbose)
+ {
+ const int digits = int(sizeof(T) * CHAR_BIT / 4) - 1;
+#ifndef NO_LONG_DOUBLE
+ fprintf (stderr, "%6d: %.*a %s %.*a = %s\n", verbose_index++,
+ digits, (double)a, symbol,
+ digits, (double)b, (r ? "true" : "false"));
+#else
+ fprintf (stderr, "%6d: %.*La %s %.*La = %s\n", verbose_index++,
+ digits, (long double)a, symbol,
+ digits, (long double)b, (r ? "true" : "false"));
+#endif
+ }
+ return r;
+}
+
+template<typename T>
+const char *
+native_float<T>::str() const
+{
+ char *buf = new char[50];
+ const int digits = int(sizeof(T) * CHAR_BIT * .30102999566398119521 + 1);
+#ifndef NO_LONG_DOUBLE
+ sprintf (buf, "%.*e", digits - 1, (double) image);
+#else
+ sprintf (buf, "%.*Le", digits - 1, (long double) image);
+#endif
+ return buf;
+}
+
+template<typename T>
+const char *
+native_float<T>::hex() const
+{
+ char *buf = new char[50];
+ const int digits = int(sizeof(T) * CHAR_BIT / 4);
+#ifndef NO_LONG_DOUBLE
+ sprintf (buf, "%.*a", digits - 1, (double) image);
+#else
+ sprintf (buf, "%.*La", digits - 1, (long double) image);
+#endif
+ return buf;
+}
+
+template<typename T>
+int
+native_float<T>::exp() const
+{
+ int e;
+ frexp (image, &e);
+ return e;
+}
+
+template<typename T>
+void
+native_float<T>::ldexp (int exp)
+{
+ image = ldexpl (image, exp);
+}
+
+template<>
+void
+native_float<float>::ldexp (int exp)
+{
+ image = ldexpf (image, exp);
+}
+
+template<>
+void
+native_float<double>::ldexp (int exp)
+{
+ image = ::ldexp (image, exp);
+}
+
+/* ====================================================================== */
+/* Some libm routines that Paranoia expects to be available. */
+
+template<typename FLOAT>
+inline FLOAT
+FABS (const FLOAT &f)
+{
+ return f.abs();
+}
+
+template<typename FLOAT, typename RHS>
+inline FLOAT
+operator+ (const FLOAT &a, const RHS &b)
+{
+ return FLOAT(a) += FLOAT(b);
+}
+
+template<typename FLOAT, typename RHS>
+inline FLOAT
+operator- (const FLOAT &a, const RHS &b)
+{
+ return FLOAT(a) -= FLOAT(b);
+}
+
+template<typename FLOAT, typename RHS>
+inline FLOAT
+operator* (const FLOAT &a, const RHS &b)
+{
+ return FLOAT(a) *= FLOAT(b);
+}
+
+template<typename FLOAT, typename RHS>
+inline FLOAT
+operator/ (const FLOAT &a, const RHS &b)
+{
+ return FLOAT(a) /= FLOAT(b);
+}
+
+template<typename FLOAT>
+FLOAT
+FLOOR (const FLOAT &f)
+{
+ /* ??? This is only correct when F is representable as an integer. */
+ long i = f.integer();
+ FLOAT r;
+
+ r = i;
+ if (i < 0 && f != r)
+ r = i - 1;
+
+ return r;
+}
+
+template<typename FLOAT>
+FLOAT
+SQRT (const FLOAT &f)
+{
+#if 0
+ FLOAT zero = long(0);
+ FLOAT two = 2;
+ FLOAT one = 1;
+ FLOAT diff, diff2;
+ FLOAT z, t;
+
+ if (f == zero)
+ return zero;
+ if (f < zero)
+ return zero / zero;
+ if (f == one)
+ return f;
+
+ z = f;
+ z.ldexp (-f.exp() / 2);
+
+ diff2 = FABS (z * z - f);
+ if (diff2 > zero)
+ while (1)
+ {
+ t = (f / (two * z)) + (z / two);
+ diff = FABS (t * t - f);
+ if (diff >= diff2)
+ break;
+ z = t;
+ diff2 = diff;
+ }
+
+ return z;
+#elif defined(NO_LONG_DOUBLE)
+ double d;
+ char buf[64];
+
+ d = strtod (f.hex(), NULL);
+ d = sqrt (d);
+ sprintf(buf, "%.35a", d);
+
+ return FLOAT(buf);
+#else
+ long double ld;
+ char buf[64];
+
+ ld = strtold (f.hex(), NULL);
+ ld = sqrtl (ld);
+ sprintf(buf, "%.35La", ld);
+
+ return FLOAT(buf);
+#endif
+}
+
+template<typename FLOAT>
+FLOAT
+LOG (FLOAT x)
+{
+#if 0
+ FLOAT zero = long(0);
+ FLOAT one = 1;
+
+ if (x <= zero)
+ return zero / zero;
+ if (x == one)
+ return zero;
+
+ int exp = x.exp() - 1;
+ x.ldexp(-exp);
+
+ FLOAT xm1 = x - one;
+ FLOAT y = xm1;
+ long n = 2;
+
+ FLOAT sum = xm1;
+ while (1)
+ {
+ y *= xm1;
+ FLOAT term = y / FLOAT (n);
+ FLOAT next = sum + term;
+ if (next == sum)
+ break;
+ sum = next;
+ if (++n == 1000)
+ break;
+ }
+
+ if (exp)
+ sum += FLOAT (exp) * FLOAT(".69314718055994530941");
+
+ return sum;
+#elif defined (NO_LONG_DOUBLE)
+ double d;
+ char buf[64];
+
+ d = strtod (x.hex(), NULL);
+ d = log (d);
+ sprintf(buf, "%.35a", d);
+
+ return FLOAT(buf);
+#else
+ long double ld;
+ char buf[64];
+
+ ld = strtold (x.hex(), NULL);
+ ld = logl (ld);
+ sprintf(buf, "%.35La", ld);
+
+ return FLOAT(buf);
+#endif
+}
+
+template<typename FLOAT>
+FLOAT
+EXP (const FLOAT &x)
+{
+ /* Cheat. */
+#ifdef NO_LONG_DOUBLE
+ double d;
+ char buf[64];
+
+ d = strtod (x.hex(), NULL);
+ d = exp (d);
+ sprintf(buf, "%.35a", d);
+
+ return FLOAT(buf);
+#else
+ long double ld;
+ char buf[64];
+
+ ld = strtold (x.hex(), NULL);
+ ld = expl (ld);
+ sprintf(buf, "%.35La", ld);
+
+ return FLOAT(buf);
+#endif
+}
+
+template<typename FLOAT>
+FLOAT
+POW (const FLOAT &base, const FLOAT &exp)
+{
+ /* Cheat. */
+#ifdef NO_LONG_DOUBLE
+ double d1, d2;
+ char buf[64];
+
+ d1 = strtod (base.hex(), NULL);
+ d2 = strtod (exp.hex(), NULL);
+ d1 = pow (d1, d2);
+ sprintf(buf, "%.35a", d1);
+
+ return FLOAT(buf);
+#else
+ long double ld1, ld2;
+ char buf[64];
+
+ ld1 = strtold (base.hex(), NULL);
+ ld2 = strtold (exp.hex(), NULL);
+ ld1 = powl (ld1, ld2);
+ sprintf(buf, "%.35La", ld1);
+
+ return FLOAT(buf);
+#endif
+}
+
+/* ====================================================================== */
+/* Real Paranoia begins again here. We wrap the thing in a template so
+ that we can instantiate it for each floating point type we care for. */
+
+int NoTrials = 20; /*Number of tests for commutativity. */
+bool do_pause = false;
+
+enum Guard { No, Yes };
+enum Rounding { Other, Rounded, Chopped };
+enum Class { Failure, Serious, Defect, Flaw };
+
+template<typename FLOAT>
+struct Paranoia
+{
+ FLOAT Radix, BInvrse, RadixD2, BMinusU2;
+
+ /* Small floating point constants. */
+ FLOAT Zero;
+ FLOAT Half;
+ FLOAT One;
+ FLOAT Two;
+ FLOAT Three;
+ FLOAT Four;
+ FLOAT Five;
+ FLOAT Eight;
+ FLOAT Nine;
+ FLOAT TwentySeven;
+ FLOAT ThirtyTwo;
+ FLOAT TwoForty;
+ FLOAT MinusOne;
+ FLOAT OneAndHalf;
+
+ /* Declarations of Variables. */
+ int Indx;
+ char ch[8];
+ FLOAT AInvrse, A1;
+ FLOAT C, CInvrse;
+ FLOAT D, FourD;
+ FLOAT E0, E1, Exp2, E3, MinSqEr;
+ FLOAT SqEr, MaxSqEr, E9;
+ FLOAT Third;
+ FLOAT F6, F9;
+ FLOAT H, HInvrse;
+ int I;
+ FLOAT StickyBit, J;
+ FLOAT MyZero;
+ FLOAT Precision;
+ FLOAT Q, Q9;
+ FLOAT R, Random9;
+ FLOAT T, Underflow, S;
+ FLOAT OneUlp, UfThold, U1, U2;
+ FLOAT V, V0, V9;
+ FLOAT W;
+ FLOAT X, X1, X2, X8, Random1;
+ FLOAT Y, Y1, Y2, Random2;
+ FLOAT Z, PseudoZero, Z1, Z2, Z9;
+ int ErrCnt[4];
+ int Milestone;
+ int PageNo;
+ int M, N, N1;
+ Guard GMult, GDiv, GAddSub;
+ Rounding RMult, RDiv, RAddSub, RSqrt;
+ int Break, Done, NotMonot, Monot, Anomaly, IEEE, SqRWrng, UfNGrad;
+
+ /* Computed constants. */
+ /*U1 gap below 1.0, i.e, 1.0-U1 is next number below 1.0 */
+ /*U2 gap above 1.0, i.e, 1.0+U2 is next number above 1.0 */
+
+ int main ();
+
+ FLOAT Sign (FLOAT);
+ FLOAT Random ();
+ void Pause ();
+ void BadCond (int, const char *);
+ void SqXMinX (int);
+ void TstCond (int, int, const char *);
+ void notify (const char *);
+ void IsYeqX ();
+ void NewD ();
+ void PrintIfNPositive ();
+ void SR3750 ();
+ void TstPtUf ();
+
+ // Pretend we're bss.
+ Paranoia() { memset(this, 0, sizeof (*this)); }
+};
+
+template<typename FLOAT>
+int
+Paranoia<FLOAT>::main()
+{
+ /* First two assignments use integer right-hand sides. */
+ Zero = long(0);
+ One = long(1);
+ Two = long(2);
+ Three = long(3);
+ Four = long(4);
+ Five = long(5);
+ Eight = long(8);
+ Nine = long(9);
+ TwentySeven = long(27);
+ ThirtyTwo = long(32);
+ TwoForty = long(240);
+ MinusOne = long(-1);
+ Half = "0x1p-1";
+ OneAndHalf = "0x3p-1";
+ ErrCnt[Failure] = 0;
+ ErrCnt[Serious] = 0;
+ ErrCnt[Defect] = 0;
+ ErrCnt[Flaw] = 0;
+ PageNo = 1;
+ /*=============================================*/
+ Milestone = 7;
+ /*=============================================*/
+ printf ("Program is now RUNNING tests on small integers:\n");
+
+ TstCond (Failure, (Zero + Zero == Zero), "0+0 != 0");
+ TstCond (Failure, (One - One == Zero), "1-1 != 0");
+ TstCond (Failure, (One > Zero), "1 <= 0");
+ TstCond (Failure, (One + One == Two), "1+1 != 2");
+
+ Z = -Zero;
+ if (Z != Zero)
+ {
+ ErrCnt[Failure] = ErrCnt[Failure] + 1;
+ printf ("Comparison alleges that -0.0 is Non-zero!\n");
+ U2 = "0.001";
+ Radix = 1;
+ TstPtUf ();
+ }
+
+ TstCond (Failure, (Three == Two + One), "3 != 2+1");
+ TstCond (Failure, (Four == Three + One), "4 != 3+1");
+ TstCond (Failure, (Four + Two * (-Two) == Zero), "4 + 2*(-2) != 0");
+ TstCond (Failure, (Four - Three - One == Zero), "4-3-1 != 0");
+
+ TstCond (Failure, (MinusOne == (Zero - One)), "-1 != 0-1");
+ TstCond (Failure, (MinusOne + One == Zero), "-1+1 != 0");
+ TstCond (Failure, (One + MinusOne == Zero), "1+(-1) != 0");
+ TstCond (Failure, (MinusOne + FABS (One) == Zero), "-1+abs(1) != 0");
+ TstCond (Failure, (MinusOne + MinusOne * MinusOne == Zero),
+ "-1+(-1)*(-1) != 0");
+
+ TstCond (Failure, Half + MinusOne + Half == Zero, "1/2 + (-1) + 1/2 != 0");
+
+ /*=============================================*/
+ Milestone = 10;
+ /*=============================================*/
+
+ TstCond (Failure, (Nine == Three * Three), "9 != 3*3");
+ TstCond (Failure, (TwentySeven == Nine * Three), "27 != 9*3");
+ TstCond (Failure, (Eight == Four + Four), "8 != 4+4");
+ TstCond (Failure, (ThirtyTwo == Eight * Four), "32 != 8*4");
+ TstCond (Failure, (ThirtyTwo - TwentySeven - Four - One == Zero),
+ "32-27-4-1 != 0");
+
+ TstCond (Failure, Five == Four + One, "5 != 4+1");
+ TstCond (Failure, TwoForty == Four * Five * Three * Four, "240 != 4*5*3*4");
+ TstCond (Failure, TwoForty / Three - Four * Four * Five == Zero,
+ "240/3 - 4*4*5 != 0");
+ TstCond (Failure, TwoForty / Four - Five * Three * Four == Zero,
+ "240/4 - 5*3*4 != 0");
+ TstCond (Failure, TwoForty / Five - Four * Three * Four == Zero,
+ "240/5 - 4*3*4 != 0");
+
+ if (ErrCnt[Failure] == 0)
+ {
+ printf ("-1, 0, 1/2, 1, 2, 3, 4, 5, 9, 27, 32 & 240 are O.K.\n");
+ printf ("\n");
+ }
+ printf ("Searching for Radix and Precision.\n");
+ W = One;
+ do
+ {
+ W = W + W;
+ Y = W + One;
+ Z = Y - W;
+ Y = Z - One;
+ }
+ while (MinusOne + FABS (Y) < Zero);
+ /*.. now W is just big enough that |((W+1)-W)-1| >= 1 ... */
+ Precision = Zero;
+ Y = One;
+ do
+ {
+ Radix = W + Y;
+ Y = Y + Y;
+ Radix = Radix - W;
+ }
+ while (Radix == Zero);
+ if (Radix < Two)
+ Radix = One;
+ printf ("Radix = %s .\n", Radix.str());
+ if (Radix != One)
+ {
+ W = One;
+ do
+ {
+ Precision = Precision + One;
+ W = W * Radix;
+ Y = W + One;
+ }
+ while ((Y - W) == One);
+ }
+ /*... now W == Radix^Precision is barely too big to satisfy (W+1)-W == 1
+ ... */
+ U1 = One / W;
+ U2 = Radix * U1;
+ printf ("Closest relative separation found is U1 = %s .\n\n", U1.str());
+ printf ("Recalculating radix and precision\n ");
+
+ /*save old values */
+ E0 = Radix;
+ E1 = U1;
+ E9 = U2;
+ E3 = Precision;
+
+ X = Four / Three;
+ Third = X - One;
+ F6 = Half - Third;
+ X = F6 + F6;
+ X = FABS (X - Third);
+ if (X < U2)
+ X = U2;
+
+ /*... now X = (unknown no.) ulps of 1+... */
+ do
+ {
+ U2 = X;
+ Y = Half * U2 + ThirtyTwo * U2 * U2;
+ Y = One + Y;
+ X = Y - One;
+ }
+ while (!((U2 <= X) || (X <= Zero)));
+
+ /*... now U2 == 1 ulp of 1 + ... */
+ X = Two / Three;
+ F6 = X - Half;
+ Third = F6 + F6;
+ X = Third - Half;
+ X = FABS (X + F6);
+ if (X < U1)
+ X = U1;
+
+ /*... now X == (unknown no.) ulps of 1 -... */
+ do
+ {
+ U1 = X;
+ Y = Half * U1 + ThirtyTwo * U1 * U1;
+ Y = Half - Y;
+ X = Half + Y;
+ Y = Half - X;
+ X = Half + Y;
+ }
+ while (!((U1 <= X) || (X <= Zero)));
+ /*... now U1 == 1 ulp of 1 - ... */
+ if (U1 == E1)
+ printf ("confirms closest relative separation U1 .\n");
+ else
+ printf ("gets better closest relative separation U1 = %s .\n", U1.str());
+ W = One / U1;
+ F9 = (Half - U1) + Half;
+
+ Radix = FLOOR (FLOAT ("0.01") + U2 / U1);
+ if (Radix == E0)
+ printf ("Radix confirmed.\n");
+ else
+ printf ("MYSTERY: recalculated Radix = %s .\n", Radix.str());
+ TstCond (Defect, Radix <= Eight + Eight,
+ "Radix is too big: roundoff problems");
+ TstCond (Flaw, (Radix == Two) || (Radix == 10)
+ || (Radix == One), "Radix is not as good as 2 or 10");
+ /*=============================================*/
+ Milestone = 20;
+ /*=============================================*/
+ TstCond (Failure, F9 - Half < Half,
+ "(1-U1)-1/2 < 1/2 is FALSE, prog. fails?");
+ X = F9;
+ I = 1;
+ Y = X - Half;
+ Z = Y - Half;
+ TstCond (Failure, (X != One)
+ || (Z == Zero), "Comparison is fuzzy,X=1 but X-1/2-1/2 != 0");
+ X = One + U2;
+ I = 0;
+ /*=============================================*/
+ Milestone = 25;
+ /*=============================================*/
+ /*... BMinusU2 = nextafter(Radix, 0) */
+ BMinusU2 = Radix - One;
+ BMinusU2 = (BMinusU2 - U2) + One;
+ /* Purify Integers */
+ if (Radix != One)
+ {
+ X = -TwoForty * LOG (U1) / LOG (Radix);
+ Y = FLOOR (Half + X);
+ if (FABS (X - Y) * Four < One)
+ X = Y;
+ Precision = X / TwoForty;
+ Y = FLOOR (Half + Precision);
+ if (FABS (Precision - Y) * TwoForty < Half)
+ Precision = Y;
+ }
+ if ((Precision != FLOOR (Precision)) || (Radix == One))
+ {
+ printf ("Precision cannot be characterized by an Integer number\n");
+ printf
+ ("of significant digits but, by itself, this is a minor flaw.\n");
+ }
+ if (Radix == One)
+ printf
+ ("logarithmic encoding has precision characterized solely by U1.\n");
+ else
+ printf ("The number of significant digits of the Radix is %s .\n",
+ Precision.str());
+ TstCond (Serious, U2 * Nine * Nine * TwoForty < One,
+ "Precision worse than 5 decimal figures ");
+ /*=============================================*/
+ Milestone = 30;
+ /*=============================================*/
+ /* Test for extra-precise subexpressions */
+ X = FABS (((Four / Three - One) - One / Four) * Three - One / Four);
+ do
+ {
+ Z2 = X;
+ X = (One + (Half * Z2 + ThirtyTwo * Z2 * Z2)) - One;
+ }
+ while (!((Z2 <= X) || (X <= Zero)));
+ X = Y = Z = FABS ((Three / Four - Two / Three) * Three - One / Four);
+ do
+ {
+ Z1 = Z;
+ Z = (One / Two - ((One / Two - (Half * Z1 + ThirtyTwo * Z1 * Z1))
+ + One / Two)) + One / Two;
+ }
+ while (!((Z1 <= Z) || (Z <= Zero)));
+ do
+ {
+ do
+ {
+ Y1 = Y;
+ Y =
+ (Half - ((Half - (Half * Y1 + ThirtyTwo * Y1 * Y1)) + Half)) +
+ Half;
+ }
+ while (!((Y1 <= Y) || (Y <= Zero)));
+ X1 = X;
+ X = ((Half * X1 + ThirtyTwo * X1 * X1) - F9) + F9;
+ }
+ while (!((X1 <= X) || (X <= Zero)));
+ if ((X1 != Y1) || (X1 != Z1))
+ {
+ BadCond (Serious, "Disagreements among the values X1, Y1, Z1,\n");
+ printf ("respectively %s, %s, %s,\n", X1.str(), Y1.str(), Z1.str());
+ printf ("are symptoms of inconsistencies introduced\n");
+ printf ("by extra-precise evaluation of arithmetic subexpressions.\n");
+ notify ("Possibly some part of this");
+ if ((X1 == U1) || (Y1 == U1) || (Z1 == U1))
+ printf ("That feature is not tested further by this program.\n");
+ }
+ else
+ {
+ if ((Z1 != U1) || (Z2 != U2))
+ {
+ if ((Z1 >= U1) || (Z2 >= U2))
+ {
+ BadCond (Failure, "");
+ notify ("Precision");
+ printf ("\tU1 = %s, Z1 - U1 = %s\n", U1.str(), (Z1 - U1).str());
+ printf ("\tU2 = %s, Z2 - U2 = %s\n", U2.str(), (Z2 - U2).str());
+ }
+ else
+ {
+ if ((Z1 <= Zero) || (Z2 <= Zero))
+ {
+ printf ("Because of unusual Radix = %s", Radix.str());
+ printf (", or exact rational arithmetic a result\n");
+ printf ("Z1 = %s, or Z2 = %s ", Z1.str(), Z2.str());
+ notify ("of an\nextra-precision");
+ }
+ if (Z1 != Z2 || Z1 > Zero)
+ {
+ X = Z1 / U1;
+ Y = Z2 / U2;
+ if (Y > X)
+ X = Y;
+ Q = -LOG (X);
+ printf ("Some subexpressions appear to be calculated "
+ "extra precisely\n");
+ printf ("with about %s extra B-digits, i.e.\n",
+ (Q / LOG (Radix)).str());
+ printf ("roughly %s extra significant decimals.\n",
+ (Q / LOG (FLOAT (10))).str());
+ }
+ printf
+ ("That feature is not tested further by this program.\n");
+ }
+ }
+ }
+ Pause ();
+ /*=============================================*/
+ Milestone = 35;
+ /*=============================================*/
+ if (Radix >= Two)
+ {
+ X = W / (Radix * Radix);
+ Y = X + One;
+ Z = Y - X;
+ T = Z + U2;
+ X = T - Z;
+ TstCond (Failure, X == U2,
+ "Subtraction is not normalized X=Y,X+Z != Y+Z!");
+ if (X == U2)
+ printf ("Subtraction appears to be normalized, as it should be.");
+ }
+ printf ("\nChecking for guard digit in *, /, and -.\n");
+ Y = F9 * One;
+ Z = One * F9;
+ X = F9 - Half;
+ Y = (Y - Half) - X;
+ Z = (Z - Half) - X;
+ X = One + U2;
+ T = X * Radix;
+ R = Radix * X;
+ X = T - Radix;
+ X = X - Radix * U2;
+ T = R - Radix;
+ T = T - Radix * U2;
+ X = X * (Radix - One);
+ T = T * (Radix - One);
+ if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero))
+ GMult = Yes;
+ else
+ {
+ GMult = No;
+ TstCond (Serious, false, "* lacks a Guard Digit, so 1*X != X");
+ }
+ Z = Radix * U2;
+ X = One + Z;
+ Y = FABS ((X + Z) - X * X) - U2;
+ X = One - U2;
+ Z = FABS ((X - U2) - X * X) - U1;
+ TstCond (Failure, (Y <= Zero)
+ && (Z <= Zero), "* gets too many final digits wrong.\n");
+ Y = One - U2;
+ X = One + U2;
+ Z = One / Y;
+ Y = Z - X;
+ X = One / Three;
+ Z = Three / Nine;
+ X = X - Z;
+ T = Nine / TwentySeven;
+ Z = Z - T;
+ TstCond (Defect, X == Zero && Y == Zero && Z == Zero,
+ "Division lacks a Guard Digit, so error can exceed 1 ulp\n"
+ "or 1/3 and 3/9 and 9/27 may disagree");
+ Y = F9 / One;
+ X = F9 - Half;
+ Y = (Y - Half) - X;
+ X = One + U2;
+ T = X / One;
+ X = T - X;
+ if ((X == Zero) && (Y == Zero) && (Z == Zero))
+ GDiv = Yes;
+ else
+ {
+ GDiv = No;
+ TstCond (Serious, false, "Division lacks a Guard Digit, so X/1 != X");
+ }
+ X = One / (One + U2);
+ Y = X - Half - Half;
+ TstCond (Serious, Y < Zero, "Computed value of 1/1.000..1 >= 1");
+ X = One - U2;
+ Y = One + Radix * U2;
+ Z = X * Radix;
+ T = Y * Radix;
+ R = Z / Radix;
+ StickyBit = T / Radix;
+ X = R - X;
+ Y = StickyBit - Y;
+ TstCond (Failure, X == Zero && Y == Zero,
+ "* and/or / gets too many last digits wrong");
+ Y = One - U1;
+ X = One - F9;
+ Y = One - Y;
+ T = Radix - U2;
+ Z = Radix - BMinusU2;
+ T = Radix - T;
+ if ((X == U1) && (Y == U1) && (Z == U2) && (T == U2))
+ GAddSub = Yes;
+ else
+ {
+ GAddSub = No;
+ TstCond (Serious, false,
+ "- lacks Guard Digit, so cancellation is obscured");
+ }
+ if (F9 != One && F9 - One >= Zero)
+ {
+ BadCond (Serious, "comparison alleges (1-U1) < 1 although\n");
+ printf (" subtraction yields (1-U1) - 1 = 0 , thereby vitiating\n");
+ printf (" such precautions against division by zero as\n");
+ printf (" ... if (X == 1.0) {.....} else {.../(X-1.0)...}\n");
+ }
+ if (GMult == Yes && GDiv == Yes && GAddSub == Yes)
+ printf
+ (" *, /, and - appear to have guard digits, as they should.\n");
+ /*=============================================*/
+ Milestone = 40;
+ /*=============================================*/
+ Pause ();
+ printf ("Checking rounding on multiply, divide and add/subtract.\n");
+ RMult = Other;
+ RDiv = Other;
+ RAddSub = Other;
+ RadixD2 = Radix / Two;
+ A1 = Two;
+ Done = false;
+ do
+ {
+ AInvrse = Radix;
+ do
+ {
+ X = AInvrse;
+ AInvrse = AInvrse / A1;
+ }
+ while (!(FLOOR (AInvrse) != AInvrse));
+ Done = (X == One) || (A1 > Three);
+ if (!Done)
+ A1 = Nine + One;
+ }
+ while (!(Done));
+ if (X == One)
+ A1 = Radix;
+ AInvrse = One / A1;
+ X = A1;
+ Y = AInvrse;
+ Done = false;
+ do
+ {
+ Z = X * Y - Half;
+ TstCond (Failure, Z == Half, "X * (1/X) differs from 1");
+ Done = X == Radix;
+ X = Radix;
+ Y = One / X;
+ }
+ while (!(Done));
+ Y2 = One + U2;
+ Y1 = One - U2;
+ X = OneAndHalf - U2;
+ Y = OneAndHalf + U2;
+ Z = (X - U2) * Y2;
+ T = Y * Y1;
+ Z = Z - X;
+ T = T - X;
+ X = X * Y2;
+ Y = (Y + U2) * Y1;
+ X = X - OneAndHalf;
+ Y = Y - OneAndHalf;
+ if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T <= Zero))
+ {
+ X = (OneAndHalf + U2) * Y2;
+ Y = OneAndHalf - U2 - U2;
+ Z = OneAndHalf + U2 + U2;
+ T = (OneAndHalf - U2) * Y1;
+ X = X - (Z + U2);
+ StickyBit = Y * Y1;
+ S = Z * Y2;
+ T = T - Y;
+ Y = (U2 - Y) + StickyBit;
+ Z = S - (Z + U2 + U2);
+ StickyBit = (Y2 + U2) * Y1;
+ Y1 = Y2 * Y1;
+ StickyBit = StickyBit - Y2;
+ Y1 = Y1 - Half;
+ if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
+ && (StickyBit == Zero) && (Y1 == Half))
+ {
+ RMult = Rounded;
+ printf ("Multiplication appears to round correctly.\n");
+ }
+ else if ((X + U2 == Zero) && (Y < Zero) && (Z + U2 == Zero)
+ && (T < Zero) && (StickyBit + U2 == Zero) && (Y1 < Half))
+ {
+ RMult = Chopped;
+ printf ("Multiplication appears to chop.\n");
+ }
+ else
+ printf ("* is neither chopped nor correctly rounded.\n");
+ if ((RMult == Rounded) && (GMult == No))
+ notify ("Multiplication");
+ }
+ else
+ printf ("* is neither chopped nor correctly rounded.\n");
+ /*=============================================*/
+ Milestone = 45;
+ /*=============================================*/
+ Y2 = One + U2;
+ Y1 = One - U2;
+ Z = OneAndHalf + U2 + U2;
+ X = Z / Y2;
+ T = OneAndHalf - U2 - U2;
+ Y = (T - U2) / Y1;
+ Z = (Z + U2) / Y2;
+ X = X - OneAndHalf;
+ Y = Y - T;
+ T = T / Y1;
+ Z = Z - (OneAndHalf + U2);
+ T = (U2 - OneAndHalf) + T;
+ if (!((X > Zero) || (Y > Zero) || (Z > Zero) || (T > Zero)))
+ {
+ X = OneAndHalf / Y2;
+ Y = OneAndHalf - U2;
+ Z = OneAndHalf + U2;
+ X = X - Y;
+ T = OneAndHalf / Y1;
+ Y = Y / Y1;
+ T = T - (Z + U2);
+ Y = Y - Z;
+ Z = Z / Y2;
+ Y1 = (Y2 + U2) / Y2;
+ Z = Z - OneAndHalf;
+ Y2 = Y1 - Y2;
+ Y1 = (F9 - U1) / F9;
+ if ((X == Zero) && (Y == Zero) && (Z == Zero) && (T == Zero)
+ && (Y2 == Zero) && (Y2 == Zero) && (Y1 - Half == F9 - Half))
+ {
+ RDiv = Rounded;
+ printf ("Division appears to round correctly.\n");
+ if (GDiv == No)
+ notify ("Division");
+ }
+ else if ((X < Zero) && (Y < Zero) && (Z < Zero) && (T < Zero)
+ && (Y2 < Zero) && (Y1 - Half < F9 - Half))
+ {
+ RDiv = Chopped;
+ printf ("Division appears to chop.\n");
+ }
+ }
+ if (RDiv == Other)
+ printf ("/ is neither chopped nor correctly rounded.\n");
+ BInvrse = One / Radix;
+ TstCond (Failure, (BInvrse * Radix - Half == Half),
+ "Radix * ( 1 / Radix ) differs from 1");
+ /*=============================================*/
+ Milestone = 50;
+ /*=============================================*/
+ TstCond (Failure, ((F9 + U1) - Half == Half)
+ && ((BMinusU2 + U2) - One == Radix - One),
+ "Incomplete carry-propagation in Addition");
+ X = One - U1 * U1;
+ Y = One + U2 * (One - U2);
+ Z = F9 - Half;
+ X = (X - Half) - Z;
+ Y = Y - One;
+ if ((X == Zero) && (Y == Zero))
+ {
+ RAddSub = Chopped;
+ printf ("Add/Subtract appears to be chopped.\n");
+ }
+ if (GAddSub == Yes)
+ {
+ X = (Half + U2) * U2;
+ Y = (Half - U2) * U2;
+ X = One + X;
+ Y = One + Y;
+ X = (One + U2) - X;
+ Y = One - Y;
+ if ((X == Zero) && (Y == Zero))
+ {
+ X = (Half + U2) * U1;
+ Y = (Half - U2) * U1;
+ X = One - X;
+ Y = One - Y;
+ X = F9 - X;
+ Y = One - Y;
+ if ((X == Zero) && (Y == Zero))
+ {
+ RAddSub = Rounded;
+ printf ("Addition/Subtraction appears to round correctly.\n");
+ if (GAddSub == No)
+ notify ("Add/Subtract");
+ }
+ else
+ printf ("Addition/Subtraction neither rounds nor chops.\n");
+ }
+ else
+ printf ("Addition/Subtraction neither rounds nor chops.\n");
+ }
+ else
+ printf ("Addition/Subtraction neither rounds nor chops.\n");
+ S = One;
+ X = One + Half * (One + Half);
+ Y = (One + U2) * Half;
+ Z = X - Y;
+ T = Y - X;
+ StickyBit = Z + T;
+ if (StickyBit != Zero)
+ {
+ S = Zero;
+ BadCond (Flaw, "(X - Y) + (Y - X) is non zero!\n");
+ }
+ StickyBit = Zero;
+ if ((GMult == Yes) && (GDiv == Yes) && (GAddSub == Yes)
+ && (RMult == Rounded) && (RDiv == Rounded)
+ && (RAddSub == Rounded) && (FLOOR (RadixD2) == RadixD2))
+ {
+ printf ("Checking for sticky bit.\n");
+ X = (Half + U1) * U2;
+ Y = Half * U2;
+ Z = One + Y;
+ T = One + X;
+ if ((Z - One <= Zero) && (T - One >= U2))
+ {
+ Z = T + Y;
+ Y = Z - X;
+ if ((Z - T >= U2) && (Y - T == Zero))
+ {
+ X = (Half + U1) * U1;
+ Y = Half * U1;
+ Z = One - Y;
+ T = One - X;
+ if ((Z - One == Zero) && (T - F9 == Zero))
+ {
+ Z = (Half - U1) * U1;
+ T = F9 - Z;
+ Q = F9 - Y;
+ if ((T - F9 == Zero) && (F9 - U1 - Q == Zero))
+ {
+ Z = (One + U2) * OneAndHalf;
+ T = (OneAndHalf + U2) - Z + U2;
+ X = One + Half / Radix;
+ Y = One + Radix * U2;
+ Z = X * Y;
+ if (T == Zero && X + Radix * U2 - Z == Zero)
+ {
+ if (Radix != Two)
+ {
+ X = Two + U2;
+ Y = X / Two;
+ if ((Y - One == Zero))
+ StickyBit = S;
+ }
+ else
+ StickyBit = S;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (StickyBit == One)
+ printf ("Sticky bit apparently used correctly.\n");
+ else
+ printf ("Sticky bit used incorrectly or not at all.\n");
+ TstCond (Flaw, !(GMult == No || GDiv == No || GAddSub == No ||
+ RMult == Other || RDiv == Other || RAddSub == Other),
+ "lack(s) of guard digits or failure(s) to correctly round or chop\n\
+(noted above) count as one flaw in the final tally below");
+ /*=============================================*/
+ Milestone = 60;
+ /*=============================================*/
+ printf ("\n");
+ printf ("Does Multiplication commute? ");
+ printf ("Testing on %d random pairs.\n", NoTrials);
+ Random9 = SQRT (FLOAT (3));
+ Random1 = Third;
+ I = 1;
+ do
+ {
+ X = Random ();
+ Y = Random ();
+ Z9 = Y * X;
+ Z = X * Y;
+ Z9 = Z - Z9;
+ I = I + 1;
+ }
+ while (!((I > NoTrials) || (Z9 != Zero)));
+ if (I == NoTrials)
+ {
+ Random1 = One + Half / Three;
+ Random2 = (U2 + U1) + One;
+ Z = Random1 * Random2;
+ Y = Random2 * Random1;
+ Z9 = (One + Half / Three) * ((U2 + U1) + One) - (One + Half /
+ Three) * ((U2 + U1) +
+ One);
+ }
+ if (!((I == NoTrials) || (Z9 == Zero)))
+ BadCond (Defect, "X * Y == Y * X trial fails.\n");
+ else
+ printf (" No failures found in %d integer pairs.\n", NoTrials);
+ /*=============================================*/
+ Milestone = 70;
+ /*=============================================*/
+ printf ("\nRunning test of square root(x).\n");
+ TstCond (Failure, (Zero == SQRT (Zero))
+ && (-Zero == SQRT (-Zero))
+ && (One == SQRT (One)), "Square root of 0.0, -0.0 or 1.0 wrong");
+ MinSqEr = Zero;
+ MaxSqEr = Zero;
+ J = Zero;
+ X = Radix;
+ OneUlp = U2;
+ SqXMinX (Serious);
+ X = BInvrse;
+ OneUlp = BInvrse * U1;
+ SqXMinX (Serious);
+ X = U1;
+ OneUlp = U1 * U1;
+ SqXMinX (Serious);
+ if (J != Zero)
+ Pause ();
+ printf ("Testing if sqrt(X * X) == X for %d Integers X.\n", NoTrials);
+ J = Zero;
+ X = Two;
+ Y = Radix;
+ if ((Radix != One))
+ do
+ {
+ X = Y;
+ Y = Radix * Y;
+ }
+ while (!((Y - X >= NoTrials)));
+ OneUlp = X * U2;
+ I = 1;
+ while (I <= NoTrials)
+ {
+ X = X + One;
+ SqXMinX (Defect);
+ if (J > Zero)
+ break;
+ I = I + 1;
+ }
+ printf ("Test for sqrt monotonicity.\n");
+ I = -1;
+ X = BMinusU2;
+ Y = Radix;
+ Z = Radix + Radix * U2;
+ NotMonot = false;
+ Monot = false;
+ while (!(NotMonot || Monot))
+ {
+ I = I + 1;
+ X = SQRT (X);
+ Q = SQRT (Y);
+ Z = SQRT (Z);
+ if ((X > Q) || (Q > Z))
+ NotMonot = true;
+ else
+ {
+ Q = FLOOR (Q + Half);
+ if (!(I > 0 || Radix == Q * Q))
+ Monot = true;
+ else if (I > 0)
+ {
+ if (I > 1)
+ Monot = true;
+ else
+ {
+ Y = Y * BInvrse;
+ X = Y - U1;
+ Z = Y + U1;
+ }
+ }
+ else
+ {
+ Y = Q;
+ X = Y - U2;
+ Z = Y + U2;
+ }
+ }
+ }
+ if (Monot)
+ printf ("sqrt has passed a test for Monotonicity.\n");
+ else
+ {
+ BadCond (Defect, "");
+ printf ("sqrt(X) is non-monotonic for X near %s .\n", Y.str());
+ }
+ /*=============================================*/
+ Milestone = 110;
+ /*=============================================*/
+ printf ("Seeking Underflow thresholds UfThold and E0.\n");
+ D = U1;
+ if (Precision != FLOOR (Precision))
+ {
+ D = BInvrse;
+ X = Precision;
+ do
+ {
+ D = D * BInvrse;
+ X = X - One;
+ }
+ while (X > Zero);
+ }
+ Y = One;
+ Z = D;
+ /* ... D is power of 1/Radix < 1. */
+ do
+ {
+ C = Y;
+ Y = Z;
+ Z = Y * Y;
+ }
+ while ((Y > Z) && (Z + Z > Z));
+ Y = C;
+ Z = Y * D;
+ do
+ {
+ C = Y;
+ Y = Z;
+ Z = Y * D;
+ }
+ while ((Y > Z) && (Z + Z > Z));
+ if (Radix < Two)
+ HInvrse = Two;
+ else
+ HInvrse = Radix;
+ H = One / HInvrse;
+ /* ... 1/HInvrse == H == Min(1/Radix, 1/2) */
+ CInvrse = One / C;
+ E0 = C;
+ Z = E0 * H;
+ /* ...1/Radix^(BIG Integer) << 1 << CInvrse == 1/C */
+ do
+ {
+ Y = E0;
+ E0 = Z;
+ Z = E0 * H;
+ }
+ while ((E0 > Z) && (Z + Z > Z));
+ UfThold = E0;
+ E1 = Zero;
+ Q = Zero;
+ E9 = U2;
+ S = One + E9;
+ D = C * S;
+ if (D <= C)
+ {
+ E9 = Radix * U2;
+ S = One + E9;
+ D = C * S;
+ if (D <= C)
+ {
+ BadCond (Failure,
+ "multiplication gets too many last digits wrong.\n");
+ Underflow = E0;
+ Y1 = Zero;
+ PseudoZero = Z;
+ Pause ();
+ }
+ }
+ else
+ {
+ Underflow = D;
+ PseudoZero = Underflow * H;
+ UfThold = Zero;
+ do
+ {
+ Y1 = Underflow;
+ Underflow = PseudoZero;
+ if (E1 + E1 <= E1)
+ {
+ Y2 = Underflow * HInvrse;
+ E1 = FABS (Y1 - Y2);
+ Q = Y1;
+ if ((UfThold == Zero) && (Y1 != Y2))
+ UfThold = Y1;
+ }
+ PseudoZero = PseudoZero * H;
+ }
+ while ((Underflow > PseudoZero)
+ && (PseudoZero + PseudoZero > PseudoZero));
+ }
+ /* Comment line 4530 .. 4560 */
+ if (PseudoZero != Zero)
+ {
+ printf ("\n");
+ Z = PseudoZero;
+ /* ... Test PseudoZero for "phoney- zero" violates */
+ /* ... PseudoZero < Underflow or PseudoZero < PseudoZero + PseudoZero
+ ... */
+ if (PseudoZero <= Zero)
+ {
+ BadCond (Failure, "Positive expressions can underflow to an\n");
+ printf ("allegedly negative value\n");
+ printf ("PseudoZero that prints out as: %s .\n", PseudoZero.str());
+ X = -PseudoZero;
+ if (X <= Zero)
+ {
+ printf ("But -PseudoZero, which should be\n");
+ printf ("positive, isn't; it prints out as %s .\n", X.str());
+ }
+ }
+ else
+ {
+ BadCond (Flaw, "Underflow can stick at an allegedly positive\n");
+ printf ("value PseudoZero that prints out as %s .\n",
+ PseudoZero.str());
+ }
+ TstPtUf ();
+ }
+ /*=============================================*/
+ Milestone = 120;
+ /*=============================================*/
+ if (CInvrse * Y > CInvrse * Y1)
+ {
+ S = H * S;
+ E0 = Underflow;
+ }
+ if (!((E1 == Zero) || (E1 == E0)))
+ {
+ BadCond (Defect, "");
+ if (E1 < E0)
+ {
+ printf ("Products underflow at a higher");
+ printf (" threshold than differences.\n");
+ if (PseudoZero == Zero)
+ E0 = E1;
+ }
+ else
+ {
+ printf ("Difference underflows at a higher");
+ printf (" threshold than products.\n");
+ }
+ }
+ printf ("Smallest strictly positive number found is E0 = %s .\n", E0.str());
+ Z = E0;
+ TstPtUf ();
+ Underflow = E0;
+ if (N == 1)
+ Underflow = Y;
+ I = 4;
+ if (E1 == Zero)
+ I = 3;
+ if (UfThold == Zero)
+ I = I - 2;
+ UfNGrad = true;
+ switch (I)
+ {
+ case 1:
+ UfThold = Underflow;
+ if ((CInvrse * Q) != ((CInvrse * Y) * S))
+ {
+ UfThold = Y;
+ BadCond (Failure, "Either accuracy deteriorates as numbers\n");
+ printf ("approach a threshold = %s\n", UfThold.str());
+ printf (" coming down from %s\n", C.str());
+ printf
+ (" or else multiplication gets too many last digits wrong.\n");
+ }
+ Pause ();
+ break;
+
+ case 2:
+ BadCond (Failure,
+ "Underflow confuses Comparison, which alleges that\n");
+ printf ("Q == Y while denying that |Q - Y| == 0; these values\n");
+ printf ("print out as Q = %s, Y = %s .\n", Q.str(), Y2.str());
+ printf ("|Q - Y| = %s .\n", FABS (Q - Y2).str());
+ UfThold = Q;
+ break;
+
+ case 3:
+ X = X;
+ break;
+
+ case 4:
+ if ((Q == UfThold) && (E1 == E0) && (FABS (UfThold - E1 / E9) <= E1))
+ {
+ UfNGrad = false;
+ printf ("Underflow is gradual; it incurs Absolute Error =\n");
+ printf ("(roundoff in UfThold) < E0.\n");
+ Y = E0 * CInvrse;
+ Y = Y * (OneAndHalf + U2);
+ X = CInvrse * (One + U2);
+ Y = Y / X;
+ IEEE = (Y == E0);
+ }
+ }
+ if (UfNGrad)
+ {
+ printf ("\n");
+ if (setjmp (ovfl_buf))
+ {
+ printf ("Underflow / UfThold failed!\n");
+ R = H + H;
+ }
+ else
+ R = SQRT (Underflow / UfThold);
+ if (R <= H)
+ {
+ Z = R * UfThold;
+ X = Z * (One + R * H * (One + H));
+ }
+ else
+ {
+ Z = UfThold;
+ X = Z * (One + H * H * (One + H));
+ }
+ if (!((X == Z) || (X - Z != Zero)))
+ {
+ BadCond (Flaw, "");
+ printf ("X = %s\n\tis not equal to Z = %s .\n", X.str(), Z.str());
+ Z9 = X - Z;
+ printf ("yet X - Z yields %s .\n", Z9.str());
+ printf (" Should this NOT signal Underflow, ");
+ printf ("this is a SERIOUS DEFECT\nthat causes ");
+ printf ("confusion when innocent statements like\n");;
+ printf (" if (X == Z) ... else");
+ printf (" ... (f(X) - f(Z)) / (X - Z) ...\n");
+ printf ("encounter Division by Zero although actually\n");
+ if (setjmp (ovfl_buf))
+ printf ("X / Z fails!\n");
+ else
+ printf ("X / Z = 1 + %s .\n", ((X / Z - Half) - Half).str());
+ }
+ }
+ printf ("The Underflow threshold is %s, below which\n", UfThold.str());
+ printf ("calculation may suffer larger Relative error than ");
+ printf ("merely roundoff.\n");
+ Y2 = U1 * U1;
+ Y = Y2 * Y2;
+ Y2 = Y * U1;
+ if (Y2 <= UfThold)
+ {
+ if (Y > E0)
+ {
+ BadCond (Defect, "");
+ I = 5;
+ }
+ else
+ {
+ BadCond (Serious, "");
+ I = 4;
+ }
+ printf ("Range is too narrow; U1^%d Underflows.\n", I);
+ }
+ /*=============================================*/
+ Milestone = 130;
+ /*=============================================*/
+ Y = -FLOOR (Half - TwoForty * LOG (UfThold) / LOG (HInvrse)) / TwoForty;
+ Y2 = Y + Y;
+ printf ("Since underflow occurs below the threshold\n");
+ printf ("UfThold = (%s) ^ (%s)\nonly underflow ", HInvrse.str(), Y.str());
+ printf ("should afflict the expression\n\t(%s) ^ (%s);\n",
+ HInvrse.str(), Y2.str());
+ printf ("actually calculating yields:");
+ if (setjmp (ovfl_buf))
+ {
+ BadCond (Serious, "trap on underflow.\n");
+ }
+ else
+ {
+ V9 = POW (HInvrse, Y2);
+ printf (" %s .\n", V9.str());
+ if (!((V9 >= Zero) && (V9 <= (Radix + Radix + E9) * UfThold)))
+ {
+ BadCond (Serious, "this is not between 0 and underflow\n");
+ printf (" threshold = %s .\n", UfThold.str());
+ }
+ else if (!(V9 > UfThold * (One + E9)))
+ printf ("This computed value is O.K.\n");
+ else
+ {
+ BadCond (Defect, "this is not between 0 and underflow\n");
+ printf (" threshold = %s .\n", UfThold.str());
+ }
+ }
+ /*=============================================*/
+ Milestone = 160;
+ /*=============================================*/
+ Pause ();
+ printf ("Searching for Overflow threshold:\n");
+ printf ("This may generate an error.\n");
+ Y = -CInvrse;
+ V9 = HInvrse * Y;
+ if (setjmp (ovfl_buf))
+ {
+ I = 0;
+ V9 = Y;
+ goto overflow;
+ }
+ do
+ {
+ V = Y;
+ Y = V9;
+ V9 = HInvrse * Y;
+ }
+ while (V9 < Y);
+ I = 1;
+overflow:
+ Z = V9;
+ printf ("Can `Z = -Y' overflow?\n");
+ printf ("Trying it on Y = %s .\n", Y.str());
+ V9 = -Y;
+ V0 = V9;
+ if (V - Y == V + V0)
+ printf ("Seems O.K.\n");
+ else
+ {
+ printf ("finds a ");
+ BadCond (Flaw, "-(-Y) differs from Y.\n");
+ }
+ if (Z != Y)
+ {
+ BadCond (Serious, "");
+ printf ("overflow past %s\n\tshrinks to %s .\n", Y.str(), Z.str());
+ }
+ if (I)
+ {
+ Y = V * (HInvrse * U2 - HInvrse);
+ Z = Y + ((One - HInvrse) * U2) * V;
+ if (Z < V0)
+ Y = Z;
+ if (Y < V0)
+ V = Y;
+ if (V0 - V < V0)
+ V = V0;
+ }
+ else
+ {
+ V = Y * (HInvrse * U2 - HInvrse);
+ V = V + ((One - HInvrse) * U2) * Y;
+ }
+ printf ("Overflow threshold is V = %s .\n", V.str());
+ if (I)
+ printf ("Overflow saturates at V0 = %s .\n", V0.str());
+ else
+ printf ("There is no saturation value because "
+ "the system traps on overflow.\n");
+ V9 = V * One;
+ printf ("No Overflow should be signaled for V * 1 = %s\n", V9.str());
+ V9 = V / One;
+ printf (" nor for V / 1 = %s.\n", V9.str());
+ printf ("Any overflow signal separating this * from the one\n");
+ printf ("above is a DEFECT.\n");
+ /*=============================================*/
+ Milestone = 170;
+ /*=============================================*/
+ if (!(-V < V && -V0 < V0 && -UfThold < V && UfThold < V))
+ {
+ BadCond (Failure, "Comparisons involving ");
+ printf ("+-%s, +-%s\nand +-%s are confused by Overflow.",
+ V.str(), V0.str(), UfThold.str());
+ }
+ /*=============================================*/
+ Milestone = 175;
+ /*=============================================*/
+ printf ("\n");
+ for (Indx = 1; Indx <= 3; ++Indx)
+ {
+ switch (Indx)
+ {
+ case 1:
+ Z = UfThold;
+ break;
+ case 2:
+ Z = E0;
+ break;
+ case 3:
+ Z = PseudoZero;
+ break;
+ }
+ if (Z != Zero)
+ {
+ V9 = SQRT (Z);
+ Y = V9 * V9;
+ if (Y / (One - Radix * E9) < Z || Y > (One + Radix * E9) * Z)
+ { /* dgh: + E9 --> * E9 */
+ if (V9 > U1)
+ BadCond (Serious, "");
+ else
+ BadCond (Defect, "");
+ printf ("Comparison alleges that what prints as Z = %s\n",
+ Z.str());
+ printf (" is too far from sqrt(Z) ^ 2 = %s .\n", Y.str());
+ }
+ }
+ }
+ /*=============================================*/
+ Milestone = 180;
+ /*=============================================*/
+ for (Indx = 1; Indx <= 2; ++Indx)
+ {
+ if (Indx == 1)
+ Z = V;
+ else
+ Z = V0;
+ V9 = SQRT (Z);
+ X = (One - Radix * E9) * V9;
+ V9 = V9 * X;
+ if (((V9 < (One - Two * Radix * E9) * Z) || (V9 > Z)))
+ {
+ Y = V9;
+ if (X < W)
+ BadCond (Serious, "");
+ else
+ BadCond (Defect, "");
+ printf ("Comparison alleges that Z = %s\n", Z.str());
+ printf (" is too far from sqrt(Z) ^ 2 (%s) .\n", Y.str());
+ }
+ }
+ /*=============================================*/
+ Milestone = 190;
+ /*=============================================*/
+ Pause ();
+ X = UfThold * V;
+ Y = Radix * Radix;
+ if (X * Y < One || X > Y)
+ {
+ if (X * Y < U1 || X > Y / U1)
+ BadCond (Defect, "Badly");
+ else
+ BadCond (Flaw, "");
+
+ printf (" unbalanced range; UfThold * V = %s\n\t%s\n",
+ X.str(), "is too far from 1.\n");
+ }
+ /*=============================================*/
+ Milestone = 200;
+ /*=============================================*/
+ for (Indx = 1; Indx <= 5; ++Indx)
+ {
+ X = F9;
+ switch (Indx)
+ {
+ case 2:
+ X = One + U2;
+ break;
+ case 3:
+ X = V;
+ break;
+ case 4:
+ X = UfThold;
+ break;
+ case 5:
+ X = Radix;
+ }
+ Y = X;
+ if (setjmp (ovfl_buf))
+ printf (" X / X traps when X = %s\n", X.str());
+ else
+ {
+ V9 = (Y / X - Half) - Half;
+ if (V9 == Zero)
+ continue;
+ if (V9 == -U1 && Indx < 5)
+ BadCond (Flaw, "");
+ else
+ BadCond (Serious, "");
+ printf (" X / X differs from 1 when X = %s\n", X.str());
+ printf (" instead, X / X - 1/2 - 1/2 = %s .\n", V9.str());
+ }
+ }
+ /*=============================================*/
+ Milestone = 210;
+ /*=============================================*/
+ MyZero = Zero;
+ printf ("\n");
+ printf ("What message and/or values does Division by Zero produce?\n");
+ printf (" Trying to compute 1 / 0 produces ...");
+ if (!setjmp (ovfl_buf))
+ printf (" %s .\n", (One / MyZero).str());
+ printf ("\n Trying to compute 0 / 0 produces ...");
+ if (!setjmp (ovfl_buf))
+ printf (" %s .\n", (Zero / MyZero).str());
+ /*=============================================*/
+ Milestone = 220;
+ /*=============================================*/
+ Pause ();
+ printf ("\n");
+ {
+ static const char *msg[] = {
+ "FAILUREs encountered =",
+ "SERIOUS DEFECTs discovered =",
+ "DEFECTs discovered =",
+ "FLAWs discovered ="
+ };
+ int i;
+ for (i = 0; i < 4; i++)
+ if (ErrCnt[i])
+ printf ("The number of %-29s %d.\n", msg[i], ErrCnt[i]);
+ }
+ printf ("\n");
+ if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect] + ErrCnt[Flaw]) > 0)
+ {
+ if ((ErrCnt[Failure] + ErrCnt[Serious] + ErrCnt[Defect] == 0)
+ && (ErrCnt[Flaw] > 0))
+ {
+ printf ("The arithmetic diagnosed seems ");
+ printf ("Satisfactory though flawed.\n");
+ }
+ if ((ErrCnt[Failure] + ErrCnt[Serious] == 0) && (ErrCnt[Defect] > 0))
+ {
+ printf ("The arithmetic diagnosed may be Acceptable\n");
+ printf ("despite inconvenient Defects.\n");
+ }
+ if ((ErrCnt[Failure] + ErrCnt[Serious]) > 0)
+ {
+ printf ("The arithmetic diagnosed has ");
+ printf ("unacceptable Serious Defects.\n");
+ }
+ if (ErrCnt[Failure] > 0)
+ {
+ printf ("Potentially fatal FAILURE may have spoiled this");
+ printf (" program's subsequent diagnoses.\n");
+ }
+ }
+ else
+ {
+ printf ("No failures, defects nor flaws have been discovered.\n");
+ if (!((RMult == Rounded) && (RDiv == Rounded)
+ && (RAddSub == Rounded) && (RSqrt == Rounded)))
+ printf ("The arithmetic diagnosed seems Satisfactory.\n");
+ else
+ {
+ if (StickyBit >= One &&
+ (Radix - Two) * (Radix - Nine - One) == Zero)
+ {
+ printf ("Rounding appears to conform to ");
+ printf ("the proposed IEEE standard P");
+ if ((Radix == Two) &&
+ ((Precision - Four * Three * Two) *
+ (Precision - TwentySeven - TwentySeven + One) == Zero))
+ printf ("754");
+ else
+ printf ("854");
+ if (IEEE)
+ printf (".\n");
+ else
+ {
+ printf (",\nexcept for possibly Double Rounding");
+ printf (" during Gradual Underflow.\n");
+ }
+ }
+ printf ("The arithmetic diagnosed appears to be Excellent!\n");
+ }
+ }
+ printf ("END OF TEST.\n");
+ return 0;
+}
+
+template<typename FLOAT>
+FLOAT
+Paranoia<FLOAT>::Sign (FLOAT X)
+{
+ return X >= FLOAT (long (0)) ? 1 : -1;
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::Pause ()
+{
+ if (do_pause)
+ {
+ fputs ("Press return...", stdout);
+ fflush (stdout);
+ getchar();
+ }
+ printf ("\nDiagnosis resumes after milestone Number %d", Milestone);
+ printf (" Page: %d\n\n", PageNo);
+ ++Milestone;
+ ++PageNo;
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::TstCond (int K, int Valid, const char *T)
+{
+ if (!Valid)
+ {
+ BadCond (K, T);
+ printf (".\n");
+ }
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::BadCond (int K, const char *T)
+{
+ static const char *msg[] = { "FAILURE", "SERIOUS DEFECT", "DEFECT", "FLAW" };
+
+ ErrCnt[K] = ErrCnt[K] + 1;
+ printf ("%s: %s", msg[K], T);
+}
+
+/* Random computes
+ X = (Random1 + Random9)^5
+ Random1 = X - FLOOR(X) + 0.000005 * X;
+ and returns the new value of Random1. */
+
+template<typename FLOAT>
+FLOAT
+Paranoia<FLOAT>::Random ()
+{
+ FLOAT X, Y;
+
+ X = Random1 + Random9;
+ Y = X * X;
+ Y = Y * Y;
+ X = X * Y;
+ Y = X - FLOOR (X);
+ Random1 = Y + X * FLOAT ("0.000005");
+ return (Random1);
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::SqXMinX (int ErrKind)
+{
+ FLOAT XA, XB;
+
+ XB = X * BInvrse;
+ XA = X - XB;
+ SqEr = ((SQRT (X * X) - XB) - XA) / OneUlp;
+ if (SqEr != Zero)
+ {
+ if (SqEr < MinSqEr)
+ MinSqEr = SqEr;
+ if (SqEr > MaxSqEr)
+ MaxSqEr = SqEr;
+ J = J + 1;
+ BadCond (ErrKind, "\n");
+ printf ("sqrt(%s) - %s = %s\n", (X * X).str(), X.str(),
+ (OneUlp * SqEr).str());
+ printf ("\tinstead of correct value 0 .\n");
+ }
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::NewD ()
+{
+ X = Z1 * Q;
+ X = FLOOR (Half - X / Radix) * Radix + X;
+ Q = (Q - X * Z) / Radix + X * X * (D / Radix);
+ Z = Z - Two * X * D;
+ if (Z <= Zero)
+ {
+ Z = -Z;
+ Z1 = -Z1;
+ }
+ D = Radix * D;
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::SR3750 ()
+{
+ if (!((X - Radix < Z2 - Radix) || (X - Z2 > W - Z2)))
+ {
+ I = I + 1;
+ X2 = SQRT (X * D);
+ Y2 = (X2 - Z2) - (Y - Z2);
+ X2 = X8 / (Y - Half);
+ X2 = X2 - Half * X2 * X2;
+ SqEr = (Y2 + Half) + (Half - X2);
+ if (SqEr < MinSqEr)
+ MinSqEr = SqEr;
+ SqEr = Y2 - X2;
+ if (SqEr > MaxSqEr)
+ MaxSqEr = SqEr;
+ }
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::IsYeqX ()
+{
+ if (Y != X)
+ {
+ if (N <= 0)
+ {
+ if (Z == Zero && Q <= Zero)
+ printf ("WARNING: computing\n");
+ else
+ BadCond (Defect, "computing\n");
+ printf ("\t(%s) ^ (%s)\n", Z.str(), Q.str());
+ printf ("\tyielded %s;\n", Y.str());
+ printf ("\twhich compared unequal to correct %s ;\n", X.str());
+ printf ("\t\tthey differ by %s .\n", (Y - X).str());
+ }
+ N = N + 1; /* ... count discrepancies. */
+ }
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::PrintIfNPositive ()
+{
+ if (N > 0)
+ printf ("Similar discrepancies have occurred %d times.\n", N);
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::TstPtUf ()
+{
+ N = 0;
+ if (Z != Zero)
+ {
+ printf ("Since comparison denies Z = 0, evaluating ");
+ printf ("(Z + Z) / Z should be safe.\n");
+ if (setjmp (ovfl_buf))
+ goto very_serious;
+ Q9 = (Z + Z) / Z;
+ printf ("What the machine gets for (Z + Z) / Z is %s .\n", Q9.str());
+ if (FABS (Q9 - Two) < Radix * U2)
+ {
+ printf ("This is O.K., provided Over/Underflow");
+ printf (" has NOT just been signaled.\n");
+ }
+ else
+ {
+ if ((Q9 < One) || (Q9 > Two))
+ {
+ very_serious:
+ N = 1;
+ ErrCnt[Serious] = ErrCnt[Serious] + 1;
+ printf ("This is a VERY SERIOUS DEFECT!\n");
+ }
+ else
+ {
+ N = 1;
+ ErrCnt[Defect] = ErrCnt[Defect] + 1;
+ printf ("This is a DEFECT!\n");
+ }
+ }
+ V9 = Z * One;
+ Random1 = V9;
+ V9 = One * Z;
+ Random2 = V9;
+ V9 = Z / One;
+ if ((Z == Random1) && (Z == Random2) && (Z == V9))
+ {
+ if (N > 0)
+ Pause ();
+ }
+ else
+ {
+ N = 1;
+ BadCond (Defect, "What prints as Z = ");
+ printf ("%s\n\tcompares different from ", Z.str());
+ if (Z != Random1)
+ printf ("Z * 1 = %s ", Random1.str());
+ if (!((Z == Random2) || (Random2 == Random1)))
+ printf ("1 * Z == %s\n", Random2.str());
+ if (!(Z == V9))
+ printf ("Z / 1 = %s\n", V9.str());
+ if (Random2 != Random1)
+ {
+ ErrCnt[Defect] = ErrCnt[Defect] + 1;
+ BadCond (Defect, "Multiplication does not commute!\n");
+ printf ("\tComparison alleges that 1 * Z = %s\n", Random2.str());
+ printf ("\tdiffers from Z * 1 = %s\n", Random1.str());
+ }
+ Pause ();
+ }
+ }
+}
+
+template<typename FLOAT>
+void
+Paranoia<FLOAT>::notify (const char *s)
+{
+ printf ("%s test appears to be inconsistent...\n", s);
+ printf (" PLEASE NOTIFY KARPINKSI!\n");
+}
+
+/* ====================================================================== */
+
+int main(int ac, char **av)
+{
+ setbuf(stdout, NULL);
+ setbuf(stderr, NULL);
+
+ while (1)
+ switch (getopt (ac, av, "pvg:fdl"))
+ {
+ case -1:
+ return 0;
+ case 'p':
+ do_pause = true;
+ break;
+ case 'v':
+ verbose = true;
+ break;
+ case 'g':
+ {
+ static const struct {
+ const char *name;
+ const struct real_format *fmt;
+ } fmts[] = {
+#define F(x) { #x, &x##_format }
+ F(ieee_single),
+ F(ieee_double),
+ F(ieee_extended_motorola),
+ F(ieee_extended_intel_96),
+ F(ieee_extended_intel_128),
+ F(ibm_extended),
+ F(ieee_quad),
+ F(vax_f),
+ F(vax_d),
+ F(vax_g),
+ F(i370_single),
+ F(i370_double),
+ F(real_internal),
+#undef F
+ };
+
+ int i, n = sizeof (fmts)/sizeof(*fmts);
+
+ for (i = 0; i < n; ++i)
+ if (strcmp (fmts[i].name, optarg) == 0)
+ break;
+
+ if (i == n)
+ {
+ printf ("Unknown implementation \"%s\"; "
+ "available implementations:\n", optarg);
+ for (i = 0; i < n; ++i)
+ printf ("\t%s\n", fmts[i].name);
+ return 1;
+ }
+
+ // We cheat and use the same mode all the time, but vary
+ // the format used for that mode.
+ real_format_for_mode[int(real_c_float::MODE) - int(QFmode)]
+ = fmts[i].fmt;
+
+ Paranoia<real_c_float>().main();
+ break;
+ }
+
+ case 'f':
+ Paranoia < native_float<float> >().main();
+ break;
+ case 'd':
+ Paranoia < native_float<double> >().main();
+ break;
+ case 'l':
+#ifndef NO_LONG_DOUBLE
+ Paranoia < native_float<long double> >().main();
+#endif
+ break;
+
+ case '?':
+ puts ("-p\tpause between pages");
+ puts ("-g<FMT>\treal.c implementation FMT");
+ puts ("-f\tnative float");
+ puts ("-d\tnative double");
+ puts ("-l\tnative long double");
+ return 0;
+ }
+}
+
+/* GCC stuff referenced by real.o. */
+
+extern "C" void
+fancy_abort ()
+{
+ abort ();
+}
+
+int target_flags = 0;
+
+extern "C" int
+floor_log2_wide (unsigned HOST_WIDE_INT x)
+{
+ int log = -1;
+ while (x != 0)
+ log++,
+ x >>= 1;
+ return log;
+}
diff --git a/contrib/patch_tester.sh b/contrib/patch_tester.sh
new file mode 100755
index 000000000..74b8e9e8c
--- /dev/null
+++ b/contrib/patch_tester.sh
@@ -0,0 +1,518 @@
+#!/bin/sh
+
+# Tests a set of patches from a directory.
+# Copyright (C) 2007, 2008, 2011 Free Software Foundation, Inc.
+# Contributed by Sebastian Pop <sebastian.pop@amd.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 3 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+cat <<EOF
+
+WARNING: This script should only be fed with patches from known
+ authorized and trusted sources. Don't even think about
+ hooking it up to a raw feed from the gcc-patches list or
+ you'll regret it.
+
+EOF
+
+args=$@
+
+svnpath=svn://gcc.gnu.org/svn/gcc
+dashj=
+default_standby=1
+standby=$default_standby
+default_watermark=0.60
+watermark=$default_watermark
+savecompilers=false
+nopristinecache=false
+nogpg=false
+stop=false
+
+usage() {
+ cat <<EOF
+patch_tester.sh [-j<N>] [-standby N] [-watermark N] [-savecompilers] [-nogpg]
+ [-svnpath URL] [-stop] [-nopristinecache]
+ <source_dir> [patches_dir [state_dir [build_dir]]]
+
+ J is the flag passed to make. Default is empty string.
+
+ STANDBY is the number of minutes between checks for new patches in
+ PATCHES_DIR. Default is ${default_standby} minutes.
+
+ WATERMARK is the 5 minute average system charge under which a new
+ compile can start. Default is ${default_watermark}.
+
+ SAVECOMPILERS copies the compilers in the same directory as the
+ test results for the non patched version. Default is not copy.
+
+ NOPRISTINECACHE prevents use of cached test results from any earlier
+ test runs on the pristine version of the branch and revision under
+ test (the default behaviour). This should be used when testing the
+ same revision and patch with multiple sets of configure options, as
+ these may affect the set of baseline failures.
+
+ NOGPG can be used to avoid checking the GPG signature of patches.
+
+ URL is the location of the GCC SVN repository. The default is
+ ${svnpath}.
+
+ STOP exits when PATCHES_DIR is empty.
+
+ SOURCE_DIR is the directory containing GCC's toplevel configure.
+
+ PATCHES_DIR is the directory containing the patches to be tested.
+ Default is SOURCE_DIR/patches.
+
+ STATE_DIR is where the tester maintains its internal state.
+ Default is SOURCE_DIR/state.
+
+ BUILD_DIR is the build tree, a temporary directory that this
+ script will delete and recreate. Default is SOURCE_DIR/obj.
+
+EOF
+ exit 1
+}
+
+makedir () {
+ DIRNAME=$1
+ mkdir -p $DIRNAME
+ if [ $? -ne 0 ]; then
+ echo "ERROR: could not make directory $DIRNAME"
+ exit 1
+ fi
+}
+
+while [ $# -ne 0 ]; do
+ case $1 in
+ -j*)
+ dashj=$1; shift
+ ;;
+ -standby)
+ [[ $# > 2 ]] || usage
+ standby=$2; shift; shift
+ ;;
+ -watermark)
+ [[ $# > 2 ]] || usage
+ watermark=$2; shift; shift
+ ;;
+ -savecompilers)
+ savecompilers=true; shift
+ ;;
+ -nopristinecache)
+ nopristinecache=true; shift
+ ;;
+ -nogpg)
+ nogpg=true; shift
+ ;;
+ -stop)
+ stop=true; shift
+ ;;
+ -svnpath)
+ svnpath=$2; shift; shift
+ ;;
+ -*)
+ echo "Invalid option: $1"
+ usage
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+test $# -eq 0 && usage
+
+SOURCE=$1
+PATCHES=
+STATE=
+BUILD=
+
+if [[ $# < 2 ]]; then
+ PATCHES=$SOURCE/patches
+else
+ PATCHES=$2
+fi
+if [[ $# < 3 ]]; then
+ STATE=$SOURCE/state
+else
+ STATE=$3
+fi
+if [[ $# < 4 ]]; then
+ BUILD=$SOURCE/obj
+else
+ BUILD=$4
+fi
+
+[ -d $PATCHES ] || makedir $PATCHES
+[ -d $STATE ] || makedir $STATE
+[ -d $STATE/patched ] || makedir $STATE/patched
+[ -d $SOURCE ] || makedir $SOURCE
+[ -f $SOURCE/config.guess ] || {
+ cd $SOURCE
+ svn -q co $svnpath/trunk .
+ if [ $? -ne 0 ]; then
+ echo "ERROR: initial svn checkout failed"
+ exit 1
+ fi
+}
+
+# This can contain required local settings:
+# default_config configure options, always passed
+# default_make make bootstrap options, always passed
+# default_check make check options, always passed
+[ -f $STATE/defaults ] && . $STATE/defaults
+
+VERSION=`svn info $SOURCE | grep "^Revision:" | sed -e "s/^Revision://g" -e "s/ //g"`
+
+exec >> $STATE/tester.log 2>&1 || exit 1
+set -x
+
+TESTING=$STATE/testing
+REPORT=$TESTING/report
+PRISTINE=$TESTING/pristine
+PATCHED=$TESTING/patched
+PATCH=
+TARGET=`$SOURCE/config.guess || exit 1`
+TESTLOGS="gcc/testsuite/gcc/gcc.sum
+gcc/testsuite/gfortran/gfortran.sum
+gcc/testsuite/g++/g++.sum
+gcc/testsuite/objc/objc.sum
+$TARGET/libstdc++-v3/testsuite/libstdc++.sum
+$TARGET/libffi/testsuite/libffi.sum
+$TARGET/libjava/testsuite/libjava.sum
+$TARGET/libgomp/testsuite/libgomp.sum
+$TARGET/libmudflap/testsuite/libmudflap.sum"
+COMPILERS="gcc/cc1
+gcc/cc1obj
+gcc/cc1plus
+gcc/f951
+gcc/jc1
+gcc/gnat1
+gcc/tree1"
+
+now () {
+ echo `TZ=UTC date +"%Y_%m_%d_%H_%M_%S"`
+}
+
+report () {
+ echo "$@" >> $REPORT
+}
+
+freport () {
+ if [ -s $1 ]; then
+ report "(cat $1"
+ cat $1 >> $REPORT
+ report "tac)"
+ fi
+}
+
+cleanup () {
+ cd $SOURCE
+ svn cleanup && svn revert -R . && svn st | cut -d' ' -f5- | xargs rm -v
+}
+
+selfexec () {
+ exec ${CONFIG_SHELL-/bin/sh} $0 $args
+}
+
+update () {
+ svn_branch=`grep "^branch:" $PATCH | sed -e "s/^branch://g" -e "s/ //g"`
+ if [ x$svn_branch = x ]; then
+ svn_branch=trunk
+ fi
+
+ svn_revision=`grep "^revision:" $PATCH | sed -e "s/^revision://g" -e "s/ //g"`
+ if [ x$svn_revision = x ]; then
+ svn_revision=HEAD
+ fi
+
+ cleanup
+ cd $SOURCE
+ case $svn_branch in
+ trunk)
+ if ! svn switch -r $svn_revision $svnpath/trunk &> $TESTING/svn ; then
+ report "failed to update svn sources with"
+ report "svn switch -r $svn_revision $svnpath/trunk"
+ freport $TESTING/svn
+ return 1
+ fi
+ ;;
+
+ ${svnpath}*)
+ if ! svn switch -r $svn_revision $svn_branch &> $TESTING/svn ; then
+ report "failed to update svn sources with"
+ report "svn switch -r $svn_revision $svn_branch"
+ freport $TESTING/svn
+ return 1
+ fi
+ ;;
+
+ *)
+ if ! svn switch -r $svn_revision $svnpath/branches/$svn_branch &> $TESTING/svn ; then
+ report "failed to update svn sources with"
+ report "svn switch -r $svn_revision $svnpath/branches/$svn_branch"
+ freport $TESTING/svn
+ return 1
+ fi
+ ;;
+ esac
+ contrib/gcc_update --touch
+
+ current_version=`svn info $SOURCE | grep "^Revision:" | sed -e "s/^Revision://g" -e "s/ //g"`
+ if [[ $VERSION < $current_version ]]; then
+ if [ -f $SOURCE/contrib/patch_tester.sh ]; then
+ selfexec
+ fi
+ fi
+
+ return 0
+}
+
+apply_patch () {
+ if [ $nogpg = false ]; then
+ if ! gpg --batch --verify $PATCH &> $TESTING/gpgverify ; then
+ report "your patch failed to verify:"
+ freport $TESTING/gpgverify
+ return 1
+ fi
+ fi
+
+ cd $SOURCE
+ if ! patch -p0 < $PATCH &> $TESTING/patching ; then
+ report "your patch failed to apply:"
+ report "(check that the patch was created at the top level)"
+ freport $TESTING/patching
+ return 1
+ fi
+
+ # Just assume indexes for now -- not really great, but svn always
+ # makes them.
+ grep "^Index: " $PATCH | sed -e 's/Index: //' | while read file; do
+ # If the patch resulted in an empty file, delete it.
+ # This is how svn reports deletions.
+ if [ ! -s $file ]; then
+ rm -f $file
+ report "Deleting empty file $file"
+ fi
+ done
+}
+
+save_compilers () {
+ for COMPILER in $COMPILERS ; do
+ if [ -f $BUILD/$COMPILER ]; then
+ cp $BUILD/$COMPILER $PRISTINE
+ fi
+ done
+}
+
+bootntest () {
+ rm -rf $BUILD
+ mkdir $BUILD
+ cd $BUILD
+
+ CONFIG_OPTIONS=`grep "^configure:" $PATCH | sed -e "s/^configure://g"`
+ CONFIG_OPTIONS="$default_config $CONFIG_OPTIONS"
+ if ! eval $SOURCE/configure $CONFIG_OPTIONS &> $1/configure ; then
+ report "configure with `basename $1` version failed with:"
+ freport $1/configure
+ return 1
+ fi
+
+ MAKE_ARGS=`grep "^make:" $PATCH | sed -e "s/^make://g"`
+ MAKE_ARGS="$default_make $MAKE_ARGS"
+ if ! eval make $dashj $MAKE_ARGS &> $1/bootstrap ; then
+ report "bootstrap with `basename $1` version failed with last lines:"
+ tail -30 $1/bootstrap > $1/last_bootstrap
+ freport $1/last_bootstrap
+ report "grep --context=20 Error bootstrap:"
+ grep --context=20 Error $1/bootstrap > $1/bootstrap_error
+ freport $1/bootstrap_error
+ return 1
+ fi
+
+ CHECK_OPTIONS=`grep "^check:" $PATCH | sed -e "s/^check://g"`
+ CHECK_OPTIONS="$default_check $CHECK_OPTIONS"
+ eval make $dashj $CHECK_OPTIONS -k check &> $1/check
+
+ SUITESRUN="`grep 'Summary ===' $1/check | cut -d' ' -f 2 | sort`"
+ if [ x$SUITESRUN = x ]; then
+ report "check with `basename $1` version failed, no testsuites were run"
+ return 1
+ fi
+
+ for LOG in $TESTLOGS ; do
+ if [ -f $BUILD/$LOG ]; then
+ mv $BUILD/$LOG $1
+ mv `echo "$BUILD/$LOG" | sed -e "s/\.sum/\.log/g"` $1
+ fi
+ done
+
+ return 0
+}
+
+bootntest_patched () {
+ cleanup
+ mkdir -p $PATCHED
+ apply_patch && bootntest $PATCHED
+ return $?
+}
+
+# Build the pristine tree with exactly the same options as the patch under test.
+bootntest_pristine () {
+ cleanup
+ current_branch=`svn info $SOURCE | grep "^URL:" | sed -e "s/URL: //g" -e "s,${svnpath},,g"`
+ current_version=`svn info $SOURCE | grep "^Revision:" | sed -e "s/^Revision://g" -e "s/ //g"`
+ PRISTINE=$STATE/$current_branch/$current_version
+
+ if [ $nopristinecache = true ]; then
+ rm -rf $PRISTINE
+ fi
+ if [ -d $PRISTINE ]; then
+ ln -s $PRISTINE $TESTING/pristine
+ return 0
+ else
+ mkdir -p $PRISTINE
+ ln -s $PRISTINE $TESTING/pristine
+ bootntest $PRISTINE
+ RETVAL=$?
+ if [ $RETVAL = 0 -a $savecompilers = true ]; then
+ save_compilers
+ fi
+ return $RETVAL
+ fi
+}
+
+regtest () {
+ touch $1/report
+ touch $1/passes
+ touch $1/failed
+ touch $1/regress
+
+ for LOG in $TESTLOGS ; do
+ NLOG=`basename $LOG`
+ if [ -f $1/$NLOG ]; then
+ awk '/^FAIL: / { print "'$NLOG'",$2; }' $1/$NLOG
+ fi
+ done | sort | uniq > $1/failed
+
+ comm -12 $1/failed $1/passes >> $1/regress
+ NUMREGRESS=`wc -l < $1/regress | tr -d ' '`
+
+ if [ $NUMREGRESS -eq 0 ] ; then
+ for LOG in $TESTLOGS ; do
+ NLOG=`basename $LOG`
+ if [ -f $1/$NLOG ] ; then
+ awk '/^PASS: / { print "'$NLOG'",$2; }' $1/$NLOG
+ fi
+ done | sort | uniq | comm -23 - $1/failed > $1/passes
+ echo "there are no regressions with your patch." >> $1/report
+ else
+ echo "with your patch there are $NUMREGRESS regressions." >> $1/report
+ echo "list of regressions with your patch:" >> $1/report
+ cat $1/regress >> $1/report
+ fi
+}
+
+contrib_compare_tests () {
+ report "comparing logs with contrib/compare_tests:"
+ for LOG in $TESTLOGS ; do
+ NLOG=`basename $LOG`
+ if [ -f $PRISTINE/$NLOG -a -f $PATCHED/$NLOG ]; then
+ $SOURCE/contrib/compare_tests $PRISTINE/$NLOG $PATCHED/$NLOG > $TESTING/compare_$NLOG
+ freport $TESTING/compare_$NLOG
+ fi
+ done
+}
+
+compare_passes () {
+ regtest $PRISTINE
+ cp $PRISTINE/passes $PATCHED
+ regtest $PATCHED
+ freport $PATCHED/report
+ report "FAILs with patched version:"
+ freport $PATCHED/failed
+ report "FAILs with pristine version:"
+ freport $PRISTINE/failed
+
+ # contrib_compare_tests
+}
+
+write_report () {
+ backup_patched=$STATE/patched/`now`
+ report "The files used for the validation of your patch are stored in $backup_patched on the tester machine."
+
+ EMAIL=`grep "^email:" $PATCH | sed -e "s/^email://g" -e "s/ //g"`
+ if [ x$EMAIL != x ]; then
+ mutt -s "[regtest] Results for `basename $PATCH` on $TARGET" -i $REPORT -a $PATCH $EMAIL
+ fi
+
+ mv $TESTING $backup_patched
+}
+
+announce () {
+ EMAIL=`grep "^email:" $PATCH | sed -e "s/^email://g" -e "s/ //g"`
+ if [ x$EMAIL != x ]; then
+
+ START_REPORT=$TESTING/start_report
+ echo "Hi, " >> $START_REPORT
+ echo "I'm the automatic tester running on $TARGET." >> $START_REPORT
+ echo "I just started to look at your patch `basename $PATCH`." >> $START_REPORT
+ echo "Bye, your automatic tester." >> $START_REPORT
+ mutt -s "[regtest] Starting bootstrap for `basename $PATCH` on $TARGET" -i $START_REPORT $EMAIL
+ fi
+}
+
+# After selfexec, $TESTING is already set up.
+if [ -d $TESTING ]; then
+ # The only file in $TESTING is the patch.
+ PATCH=`ls -rt -1 $TESTING | head -1`
+ PATCH=$TESTING/$PATCH
+ if [ -f $PATCH ]; then
+ bootntest_patched && bootntest_pristine && compare_passes
+ write_report
+ fi
+fi
+
+firstpatch=true
+while true; do
+ PATCH=`ls -rt -1 $PATCHES | head -1`
+ if [ x$PATCH = x ]; then
+ if [ $stop = true ]; then
+ if [ $firstpatch = true ]; then
+ echo "No patches ready to test, quitting."
+ exit 1
+ else
+ echo "No more patches to test."
+ exit 0
+ fi
+ fi
+ sleep ${standby}m
+ else
+ firstpatch=false
+ sysload=`uptime | cut -d, -f 5`
+ if [[ $sysload > $watermark ]]; then
+ # Wait a bit when system load is too high.
+ sleep ${standby}m
+ else
+ mkdir -p $TESTING
+ mv $PATCHES/$PATCH $TESTING/
+ PATCH=$TESTING/$PATCH
+
+ announce
+ update && bootntest_patched && bootntest_pristine && compare_passes
+ write_report
+ fi
+ fi
+done
diff --git a/contrib/prepare_patch.sh b/contrib/prepare_patch.sh
new file mode 100755
index 000000000..8385f315c
--- /dev/null
+++ b/contrib/prepare_patch.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+#set -x
+
+# Prepares a patch for the patch tester.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# Contributed by Sebastian Pop <sebastian.pop@amd.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 3 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+usage() {
+ cat <<EOF
+prepare_patch.sh <source_dir> [patches_dir]
+
+ SOURCE_DIR is the directory containing GCC's toplevel configure.
+
+ PATCHES_DIR is the directory where the patch will be copied to.
+ Default is SOURCE_DIR/patches.
+
+EOF
+ exit 1
+}
+
+test $# -eq 0 && usage
+
+SOURCE=$1
+PATCHES=
+
+if [[ "$#" < 2 ]]; then
+ PATCHES=$SOURCE/patches
+else
+ PATCHES=$2
+fi
+
+[ -f $SOURCE/config.guess ] || usage
+[ -d $PATCHES ] || mkdir -p $PATCHES
+
+echo "Enter a name for this patch: "
+read name
+PATCH=$PATCHES/`TZ=UTC date +"%Y_%m_%d_%H_%M_%S"`_$name.diff
+
+echo "Enter the email where the report should be sent: "
+read email
+echo "email:$email" >> $PATCH
+
+branch=`svn info $SOURCE | grep URL: | sed -e "s/^URL: //g"`
+echo "Enter svn branch (svn info in $SOURCE reports $branch, default is trunk): "
+read svn_branch
+if [ x$svn_branch = x ]; then
+ svn_branch=trunk
+fi
+echo "branch:$svn_branch" >> $PATCH
+
+revision=`svn info $SOURCE | grep Revision: | sed -e "s/^Revision: //g"`
+echo "Enter svn revision (svn info in $SOURCE reports $revision, default is HEAD): "
+read svn_revision
+if [ x$svn_revision = x ]; then
+ svn_revision=HEAD
+fi
+echo "revision:$svn_revision" >> $PATCH
+
+echo "Enter configure options: "
+read configure_options
+echo "configure:$configure_options" >> $PATCH
+
+echo "Enter make options: "
+read make_options
+echo "make:$make_options" >> $PATCH
+
+echo "Enter make check options: "
+read check_options
+echo "check:$check_options" >> $PATCH
+
+echo "" >> $PATCH
+
+svn diff $SOURCE | tee -a $PATCH
+
+cat <<EOF
+
+You can now edit your patch, include a ChangeLog, and before
+submitting to the patch tester, don't forget to sign it with:
+
+ gpg --clearsign $PATCH
+
+EOF
diff --git a/contrib/reghunt/ChangeLog b/contrib/reghunt/ChangeLog
new file mode 100644
index 000000000..60628f817
--- /dev/null
+++ b/contrib/reghunt/ChangeLog
@@ -0,0 +1,116 @@
+2013-04-12 Release Manager
+
+ * GCC 4.6.4 released.
+
+2012-03-01 Release Manager
+
+ * GCC 4.6.3 released.
+
+2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+
+2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+
+2011-03-25 Release Manager
+
+ * GCC 4.6.0 released.
+
+2010-06-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/gcc-svn-ids: Fix unportable shell quoting.
+ * date_based/reg_periodic: Likewise.
+ * date_based/reg_search: Likewise.
+
+2009-02-17 Janis Johnson <janis187@us.ibm.com>
+
+ * examples: New directory.
+ * examples/gcc-svn-env: New.
+ * examples/reg-watch: New.
+ * examples/reg-watch.awk: New.
+ * examples/common.config: New.
+ * examples/testall: New.
+ * examples/28970.config: New.
+ * examples/28970.list: New.
+ * examples/28970.c: New.
+ * examples/28970.log: New.
+ * examples/29106.config: New.
+ * examples/29106.list: New.
+ * examples/29106.test: New.
+ * examples/29106.cc: New.
+ * examples/29106.log: New.
+ * examples/29478.config: New.
+ * examples/29478.list: New.
+ * examples/29478.c: New.
+ * examples/29478.log: New.
+ * examples/29906a.config: New.
+ * examples/29906a.list: New.
+ * examples/29906a.cc: New.
+ * examples/29906a.log: New.
+ * examples/29906b.config: New.
+ * examples/29906b.list: New.
+ * examples/29906b.cc: New.
+ * examples/29906b.log: New.
+ * examples/30643.config: New.
+ * examples/30643.list: New.
+ * examples/30643.c: New.
+ * examples/30643.test: New.
+ * examples/30643.log: New.
+
+ * bin: New directory.
+ * bin/reg-hunt: New.
+ * bin/reg_periodic: New.
+ * bin/gcc-svn-update: New.
+ * bin/gcc-svn-update-fix: New.
+ * bin/gcc-build-simple: New.
+ * bin/gcc-build-full: New.
+ * bin/gcc-cleanup: New.
+ * bin/reg-test: New.
+ * bin/reg-newmid: New.
+ * bin/gcc-test-ice-on-valid-code: New.
+ * bin/gcc-test-ice-on-invalid-code: New.
+ * bin/gcc-test-compiler-hangs: New.
+ * bin/gcc-test-missing-warning: New.
+ * bin/gcc-test-bogus-warning: New.
+ * bin/gcc-test-segfault-on-valid-code: New.
+ * bin/gcc-test-rejects-valid: New.
+ * bin/gcc-test-accepts-invalid: New.
+ * bin/gcc-test-wrong-code: New.
+ * bin/gcc-svn-patchlist: New.
+ * bin/gcc-svn-checkfail: New.
+ * bin/gcc-svn-recordfail: New.
+ * bin/gcc-svn-report: New.
+ * bin/gcc-svn-ids: New.
+
+ * date_based: New directory.
+ * README: Move from here ...
+ * date_based/README: to here.
+ * reg_search: Move from here ...
+ * date_based/reg_search: to here.
+ * reg_periodic: Move from here ...
+ * date_based/reg_periodic: to here.
+ * reg_test_template: Move from here ...
+ * date_based_reg_test_template: to here.
+
+2005-07-14 Ben Elliston <bje@au.ibm.com>
+
+ * reg_test_template: Typo fix.
+
+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>
+
+ * reg_search: Replace existing uses of DATE with MADE_DATE and
+ use DATE for the date command.
+ * reg_periodic: Ditto.
+
+2003-03-27 Janis Johnson <janis187@us.ibm.com>
+ * README: New file.
+ * reg_search: New file.
+ * reg_periodic: New file.
+ * reg_test_template: New file.
+
diff --git a/contrib/reghunt/bin/gcc-build-full b/contrib/reghunt/bin/gcc-build-full
new file mode 100755
index 000000000..21e6d684f
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-build-full
@@ -0,0 +1,52 @@
+#! /bin/sh
+
+# Perform a simple build of GCC for a particular language, using several
+# environment variables defined by reghunt scripts and config files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+abort() {
+ echo "`date` $1"
+ exit 1
+}
+
+ID=$1
+LOGDIR=${REG_BUILDDIR}/logs/${BUGID}/${ID}
+mkdir -p $LOGDIR
+
+echo "`date` building GCC ($REG_LANGS) for id ${ID}"
+
+cd $REG_BUILDDIR
+rm -rf obj
+mkdir obj
+cd obj
+
+echo "REG_CONFOPTS = $REG_CONFOPTS" > ${LOGDIR}/configure.log
+echo "REG_PREFIX = $REG_PREFIX" >> ${LOGDIR}/configure.log
+echo "REG_LANGS = $REG_LANGS" >> ${LOGDIR}/configure.log
+echo >> ${LOGDIR}/configure.log
+
+${REG_GCCSRC}/configure \
+ --prefix=$REG_PREFIX \
+ $REG_CONFOPTS \
+ --enable-languages=$REG_LANGS \
+ >> ${LOGDIR}/configure.log 2>&1 || abort " configure failed"
+
+make $REG_MAKE_J > ${LOGDIR}/make.log 2>&1 || abort " make failed"
+make install > ${LOGDIR}/make.install.log 2>&1 || abort " make install failed"
+
+exit 0
diff --git a/contrib/reghunt/bin/gcc-build-simple b/contrib/reghunt/bin/gcc-build-simple
new file mode 100755
index 000000000..f2d8ea39c
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-build-simple
@@ -0,0 +1,79 @@
+#! /bin/sh
+
+# Build a GCC compiler, using environment variables defined by several
+# reghunt scripts and config files.
+#
+# This doesn't work for sources earlier than about 2003-02-25.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID="${1}"
+LOGDIR=${REG_BUILDDIR}/logs/${BUGID}/${ID}
+mkdir -p $LOGDIR
+
+msg() {
+ echo "`date` ${1}"
+}
+
+abort() {
+ msg "${1}"
+ exit 1
+}
+
+msg "building $REG_COMPILER for id $ID"
+
+rm -rf $REG_OBJDIR
+mkdir $REG_OBJDIR
+cd $REG_OBJDIR
+
+#msg "configure"
+${REG_GCCSRC}/configure \
+ --prefix=$REG_PREFIX \
+ --enable-languages=$REG_LANGS \
+ $REG_CONFOPTS \
+ > configure.log 2>&1 || abort " configure failed"
+
+#msg "make libraries"
+make all-build-libiberty > ${LOGDIR}/make.all-build-libiberty.log 2>&1 || true
+make all-libcpp > ${LOGDIR}/make.all-libcpp.log 2>&1 || true
+make all-libdecnumber > ${LOGDIR}/make.all-libdecnumber.log 2>&1 || true
+make all-intl > ${LOGDIR}/make.all-intl.log 2>&1 || true
+make all-libbanshee > ${LOGDIR}/make.all-libbanshee.log 2>&1 || true
+make configure-gcc > ${LOGDIR}/make.configure-gcc.log 2>&1 || true
+
+# hack for 3.3 branch
+if [ ! -f libiberty/libiberty.a ]; then
+ if [ -d libiberty ]; then
+ # another hack for 3.2!
+ cd libiberty
+ make > ${LOGDIR}/make.libiberty.log 2>&1 || true
+ cd ..
+ else
+ mkdir -p libiberty
+ cd libiberty
+ ln -s ../build-${REG_BLD}/libiberty/libiberty.a .
+ cd ..
+ fi
+fi
+
+cd gcc
+# REG_COMPILER is cc1, cc1plus, or f951
+#msg "make $REG_COMPILER"
+make $REG_MAKE_J $REG_COMPILER > ${LOGDIR}/make.${REG_COMPILER}.log 2>&1 \
+ || abort " make failed"
+msg "build completed"
+exit 0
diff --git a/contrib/reghunt/bin/gcc-cleanup b/contrib/reghunt/bin/gcc-cleanup
new file mode 100755
index 000000000..3ec1b8f05
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-cleanup
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+# Clean up between regression hunts.
+
+if [ "x${REG_SRCDIR}" = "x" ]; then
+ if [ -f gcc-svn-env ]; then
+ . ./gcc-svn-env
+ elif [ -f ../gcc-svn-env ]; then
+ . ../gcc-svn-env
+ elif [ -f ${HOME}/etc/gcc-svn-env ]; then
+ . ${HOME}/etc/gcc-svn-env
+ else
+ echo "$0: could not find gcc-svn-env file"
+ exit 1
+ fi
+fi
+
+rm -rf ${REG_SRCDIR}/gcc
+rm -rf ${REG_BUILDDIR}/obj
+rm -rf ${REG_PREFIX}
diff --git a/contrib/reghunt/bin/gcc-svn-checkfail b/contrib/reghunt/bin/gcc-svn-checkfail
new file mode 100755
index 000000000..3877a062b
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-checkfail
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+# Given an identifier that is an index into the current patch list,
+# return 1 if the corresponding SVN revision number is in the list of
+# known failures, 0 otherwise.
+
+ID=$1
+REV=`${REG_IDS} -f index -t rev ${ID}`
+grep -q "^${REV}$" ${REG_FAILLIST}
diff --git a/contrib/reghunt/bin/gcc-svn-ids b/contrib/reghunt/bin/gcc-svn-ids
new file mode 100755
index 000000000..2953e56da
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-ids
@@ -0,0 +1,88 @@
+#! /bin/sh
+
+# Convert one kind of changeset identifier to another.
+#
+# Usage: gcc-svn-ids -f from_kind -t to_kind id
+#
+# Where from_kind is one of:
+# index index into the changeset list used by the reghunt tools
+# rev is the Subversion revision name
+# and to_kind is one of:
+# index index into the changeset list used by the reghunt tools
+# rev is the Subversion revision name
+# date expanded UTC date string
+# branch the branch, or "trunk" for mainline
+# author the person who checked in the patch
+
+errmsg () {
+ echo $1 1>&2
+}
+
+usage () {
+ echo 'cvs_ids -f kind -t kind id' 1>&2
+ echo ' where from_kind is index or rev' 1>&2
+ echo ' and to_kind is index, rev, date, author, or branch' 1>&2
+ echo "error"
+ exit 1
+}
+
+if [ "x${REG_CHANGESET_LIST}" = "x" ]; then
+ errmsg "REG_CHANGESET_LIST is not defined"
+ echo "error"
+ exit 1
+fi
+
+if [ ! -f ${REG_CHANGESET_LIST} ]; then
+ errmsg "changeset list ${REG_CHANGESET_LIST} does not exist"
+ echo "error"
+ exit 1
+fi
+
+# Use a shorter name here.
+LIST=${REG_CHANGESET_LIST}
+
+while getopts "f:t:" ARG; do
+ case ${ARG} in
+ f) FROM_KIND="${OPTARG}";;
+ t) TO_KIND="${OPTARG}";;
+ h) usage;;
+ *) errmsg "unrecognized option: ${ARG}";
+ usage;;
+ esac
+done
+shift `expr ${OPTIND} - 1`
+
+if [ $# -eq 0 ]; then
+ errmsg "too few arguments, ID is missing"
+ usage
+fi
+if [ $# -gt 1 ]; then
+ errmsg "unexpected arguments: $*"
+ usage
+fi
+ID="$1"
+
+case ${FROM_KIND} in
+index) LINE=`awk -F '|' -v id="${ID}" '{if ($1 == id) print }' < ${LIST}`;;
+rev) LINE=`awk -F '|' -v id="${ID}" '{if ($2 == id) print }' < ${LIST}`;;
+*) errmsg "unrecognized FROM kind: ${FROM_KIND}";
+ usage;;
+esac
+
+if [ "x${LINE}" = "x" ]; then
+ errmsg "no entry found for ${FROM_KIND} = ${ID}"
+ echo "error"
+ exit 1
+fi
+
+case ${TO_KIND} in
+index) TO_ID="`echo ${LINE} | awk -F '|' '{ print $1 }'`";;
+rev) TO_ID="`echo ${LINE} | awk -F '|' '{ print $2 }'`";;
+author) TO_ID="`echo ${LINE} | awk -F '|' '{ print $3 }'`";;
+date) TO_ID="`echo ${LINE} | awk -F '|' '{ print $4 }'`";;
+branch) TO_ID="`echo ${LINE} | awk -F '|' '{ print $5 }'`";;
+*) errmsg "unrecognized TO kind: ${TO_KIND}";
+ usage;;
+esac
+
+echo ${TO_ID}
diff --git a/contrib/reghunt/bin/gcc-svn-patchlist b/contrib/reghunt/bin/gcc-svn-patchlist
new file mode 100755
index 000000000..02b2046a8
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-patchlist
@@ -0,0 +1,85 @@
+#! /bin/bash
+
+# Make a list of revisions for commits to the branch of interest (trunk
+# by default) between the specified dates. This skips commits that do
+# not modify any existing files and changes by gccadmin.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+#set -ex
+
+abort() {
+ echo "$@"
+ exit 1
+}
+
+test $# -lt 2 && abort "usage: $0 low_date high_date [branch]"
+
+export TZ=UTC
+LOW_DATE="$1"
+HIGH_DATE="$2"
+
+if [ $# -eq 3 ]; then
+ BRANCH="$3"
+else
+ BRANCH=""
+fi
+
+# Verify branch name, convert a short name to the real one.
+
+case $BRANCH in
+"") BRANCH="trunk";;
+mline) BRANCH="trunk";;
+mainline) BRANCH="trunk";;
+4.1) BRANCH="gcc-4_1-branch";;
+gcc-4_1-branch) ;;
+4.0) BRANCH="gcc-4_0-branch";;
+gcc-4_0-branch) ;;
+3.4) BRANCH="gcc-3_4-branch";;
+gcc-3_4-branch) ;;
+*) ;; # abort "$0: unrecognized branch $BRANCH"
+esac
+
+if [ "${BRANCH}" = "trunk" ]; then
+ BRANCHPATH=trunk
+else
+ BRANCHPATH=branches/${BRANCH}
+fi
+
+# Get the revision at the time of LOW_DATE.
+
+LOW_REV=`svn info --revision {"${LOW_DATE}"} \
+ ${REG_SVN_REPO}/${BRANCHPATH} \
+ | awk '/Revision:/ { print $2 }'`
+
+# Create the list of information for LOW_REV through HIGH_DATE in a
+# form expected by gcc-svn-ids.
+
+svn log --quiet --non-interactive \
+ --revision ${LOW_REV}:{"${HIGH_DATE}"} \
+ ${REG_SVN_REPO}/${BRANCHPATH} \
+ | awk -v branch=$BRANCH \
+ 'BEGIN { id=0 }
+ /---/ { next }
+ /(no author)/ { next }
+ /gccadmin/ { next }
+ { sub(" \\+0000 (.*)","")
+ sub("r","",$1)
+ gsub(" \\| ","|")
+ id++
+ print id "|" $0 "|" branch
+ }'
diff --git a/contrib/reghunt/bin/gcc-svn-recordfail b/contrib/reghunt/bin/gcc-svn-recordfail
new file mode 100755
index 000000000..cf5cde754
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-recordfail
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+# Given an identifier that is an index into the current patch list,
+# record the corresponding SVN number to the list of known failures.
+
+ID=$1
+REV=`${REG_IDS} -f index -t rev ${ID}`
+echo $REV >> ${REG_FAILLIST}
diff --git a/contrib/reghunt/bin/gcc-svn-report b/contrib/reghunt/bin/gcc-svn-report
new file mode 100755
index 000000000..a0de534b3
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-report
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+# Report a more informative version of the patch identifier.
+
+ID=$1
+
+test "x${REG_IDS}" != "x" || exit 1
+test "x${REG_CHANGESET_LIST}" != "x" || exit 1
+
+BRANCH=`${REG_IDS} -f index -t branch ${ID}`
+cd ${REG_SRCDIR}/gcc
+unset LANG
+unset LC_ALL
+REV=`${REG_IDS} -f index -t rev ${ID}`
+
+# long set of information
+TZ=UTC \
+svn log --revision $REV
+
+# URL of diffs
+echo
+echo ' http://gcc.gnu.org/viewcvs?view=rev&rev='$REV
+
+# short set of information, without final line of hyphens
+TZ=UTC \
+svn log --quiet --revision $REV | sed -e '/---/d' -e 's/^/ /'
diff --git a/contrib/reghunt/bin/gcc-svn-update b/contrib/reghunt/bin/gcc-svn-update
new file mode 100755
index 000000000..0f6aac866
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-update
@@ -0,0 +1,117 @@
+#! /bin/bash
+
+# Update or check out GCC sources for a particular Subversion revision
+# and a particular branch.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+#set -ex
+
+if [ $# != 1 ]; then
+ echo Usage: $0 id
+ exit 1
+fi
+
+if [ "x${REG_DO_CLEANUPS}" != "x" ]; then
+ reg_cleanup
+fi
+
+ID=$1
+BRANCH=""
+
+########################################################################
+# Get sources.
+########################################################################
+
+svn_get() {
+ # In case there are problems with updates (there were with CVS),
+ # creating a file called REMOVE in the REG_SRCDIR directory causes us
+ # to start with a clean tree each time.
+
+ unset LC_ALL
+ unset LANG
+
+ cd ${REG_SRCDIR}
+ if [ -d gcc ]; then
+ # There's already a tree; do an update with the new revision.
+ cd gcc
+ echo "`date` svn update begun for id ${ID}, rev ${REV}"
+ echo svn update --non-interactive --revision ${REV} >> $LOG
+ svn update --non-interactive --revision ${REV} >> $LOG
+ if [ $? -eq 0 ]; then
+ echo "`date` svn update done"
+ else
+ echo "`date` svn update failed"
+ exit 1
+ fi
+ else
+ echo "`date` svn checkout begun for id ${ID}, rev ${REV}"
+ echo svn checkout --non-interactive --revision ${REV} \
+ ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG
+ svn checkout --non-interactive --revision ${REV} \
+ ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG
+ if [ $? -eq 0 ]; then
+ echo "`date` svn checkout done"
+ else
+ echo "`date` svn checkout failed"
+ exit 1
+ fi
+ cd gcc
+ fi
+
+ # Touch generated files.
+ contrib/gcc_update --touch >> $LOG
+}
+
+########################################################################
+# Main program
+########################################################################
+
+cd ${REG_SRCDIR}
+
+# This is a simple way to stop a long regression search fairly cleanly;
+# just touch a file called STOP.
+
+if [ -f STOP ]; then
+ echo "`date` $0 detected STOP file"
+ rm -f STOP
+ exit 1
+fi
+
+# Set up the log file.
+REV=`${REG_IDS} -f index -t rev ${ID}`
+LOG=${REG_SRCDIR}/logs/${BUGID}/${REV}.log
+mkdir -p ${REG_SRCDIR}/logs/${BUGID}
+rm -f $LOG
+touch $LOG
+
+# Get the branch for this patch.
+BRANCH=`${REG_IDS} -f index -t branch ${ID}`
+if [ "${BRANCH}" = "error" ]; then
+ echo "`date` $0: cannot determine the SVN branch for id ${ID}"
+ exit 1
+fi
+
+if [ "${BRANCH}" = "trunk" ]; then
+ BRANCHPATH=trunk
+else
+ BRANCHPATH=branches/${BRANCH}
+fi
+
+svn_get
+
+exit 0
diff --git a/contrib/reghunt/bin/gcc-svn-update-fix b/contrib/reghunt/bin/gcc-svn-update-fix
new file mode 100755
index 000000000..977505502
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-svn-update-fix
@@ -0,0 +1,113 @@
+#! /bin/bash
+
+#set -ex
+
+# Update an SVN tree for a particular date.
+
+if [ $# != 1 ]; then
+ echo Usage: $0 id
+ exit 1
+fi
+
+if [ "x${REG_DO_CLEANUPS}" != "x" ]; then
+ reg_cleanup
+fi
+
+ID=$1
+BRANCH=""
+
+########################################################################
+# Get sources.
+########################################################################
+
+svn_get() {
+ # In case there are problems with updates (there were with CVS),
+ # creating a file called REMOVE in the REG_SRCDIR directory causes us
+ # to start with a clean tree each time.
+
+ unset LC_ALL
+ unset LANG
+
+ cd ${REG_SRCDIR}
+ if [ -d gcc ]; then
+ # There's already a tree; do an update with the new revision.
+ cd gcc
+ echo "`date` svn update begun for id ${ID}, rev ${REV} (fix)"
+ echo svn update --non-interactive --revision ${REV} >> $LOG
+ svn update --non-interactive --revision ${REV} >> $LOG
+ if [ $? -eq 0 ]; then
+ echo "`date` svn update done"
+ else
+ echo "`date` svn update failed"
+ exit 1
+ fi
+ else
+ echo "`date` svn checkout begun for id ${ID}, rev ${REV}"
+ echo svn checkout --non-interactive --revision ${REV} \
+ ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG
+ svn checkout --non-interactive --revision ${REV} \
+ ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG
+ if [ $? -eq 0 ]; then
+ echo "`date` svn checkout done"
+ else
+ echo "`date` svn checkout failed"
+ exit 1
+ fi
+ cd gcc
+ fi
+
+ # Touch generated files.
+ contrib/gcc_update --touch >> $LOG
+}
+
+########################################################################
+# Main program
+########################################################################
+
+cd ${REG_SRCDIR}
+
+# This is a simple way to stop a long regression search fairly cleanly;
+# just touch a file called STOP.
+
+if [ -f STOP ]; then
+ echo "`date` $0 detected STOP file"
+ rm -f STOP
+ exit 1
+fi
+
+# Set up the log file.
+REV=`${REG_IDS} -f index -t rev ${ID}`
+LOG=${REG_SRCDIR}/logs/${BUGID}/${REV}.log
+mkdir -p ${REG_SRCDIR}/logs/${BUGID}
+rm -f $LOG
+touch $LOG
+
+# Get the branch for this patch.
+BRANCH=`${REG_IDS} -f index -t branch ${ID}`
+if [ "${BRANCH}" = "error" ]; then
+ echo "`date` $0: cannot determine the SVN branch for id ${ID}"
+ exit 1
+fi
+
+if [ "${BRANCH}" = "trunk" ]; then
+ BRANCHPATH=trunk
+else
+ BRANCHPATH=branches/${BRANCH}
+fi
+
+svn_get
+
+# Look for a patch that's needed for this revision to build.
+FIX=${REG_PATCHES}/${REV}.fix
+echo "`date` looking for $FIX"
+if [ -f $FIX ]; then
+ echo "`date` fix needed; checking whether it is already applied"
+ cd ${REG_SRCDIR}/gcc
+ patch --dry-run -s -p0 -i $FIX < /dev/null > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "`date` applying fix"
+ patch -s -p0 -i $FIX
+ fi
+fi
+
+exit 0
diff --git a/contrib/reghunt/bin/gcc-test-accepts-invalid b/contrib/reghunt/bin/gcc-test-accepts-invalid
new file mode 100755
index 000000000..564c0bbd7
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-accepts-invalid
@@ -0,0 +1,48 @@
+#! /bin/sh
+
+# Test an "accepts-invalid" GCC bug, using environment variables set in
+# several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -eq 0 ]; then
+ echo "`date` test compiled successfully for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'error' ${LOG}
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: no error message for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` compilation failed for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/bin/gcc-test-bogus-warning b/contrib/reghunt/bin/gcc-test-bogus-warning
new file mode 100755
index 000000000..1bd0095ba
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-bogus-warning
@@ -0,0 +1,42 @@
+#! /bin/sh
+
+# Test a "bogus-warning" GCC bug, using environment variables set in
+# several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: compilation failed for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'warning' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` bogus warning detected for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+echo "`date` no bogus warning for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/bin/gcc-test-compiler-hangs b/contrib/reghunt/bin/gcc-test-compiler-hangs
new file mode 100755
index 000000000..043bc2699
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-compiler-hangs
@@ -0,0 +1,63 @@
+#! /bin/sh
+
+# Test a bug for which the compiler hangs, using environment variables
+# set in several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+trap "echo \"`date` compiler hang for ${MSGID}\"; pkill -9 cc1; exit $REG_FAIL" SIGUSR1
+SLEEPCNT=10
+
+# Set up to trap the hang.
+sleep $SLEEPCNT && /bin/kill -s SIGUSR1 0 &
+SLEEPID=$!
+
+# This might hang.
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+# The command didn't hang. Capture its return value so we can check
+# whether it had other unexpected problems.
+RET=$?
+
+# Kill the sleep command so it won't finish normally and cause this
+# process to get a signal telling it to report a failure.
+/bin/kill $SLEEPID
+
+if [ $RET -eq 0 ]; then
+ echo "`date` test compiled successfully for ${MSGID}"
+ exit $REG_PASS
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q "egmentation fault"
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: segfault for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` unexpected failure for ${MSGID}"
+exit $REG_ERROR
diff --git a/contrib/reghunt/bin/gcc-test-ice-on-invalid-code b/contrib/reghunt/bin/gcc-test-ice-on-invalid-code
new file mode 100755
index 000000000..6e449a84a
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-ice-on-invalid-code
@@ -0,0 +1,54 @@
+#! /bin/sh
+
+# Test an "ice-on-invalid-code" GCC bug, using environment variables set
+# in several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: compilation succeeded for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'internal compiler error' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` internal compiler error for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+grep -q 'error' ${LOG}
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: no error message for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` compilation failed for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/bin/gcc-test-ice-on-valid-code b/contrib/reghunt/bin/gcc-test-ice-on-valid-code
new file mode 100755
index 000000000..ecc5fe04a
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-ice-on-valid-code
@@ -0,0 +1,48 @@
+#! /bin/sh
+
+# Test an "ice-on-valid-code" GCC bug, using environment variables set
+# in several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -eq 0 ]; then
+ echo "`date` test compiled successfully for ${MSGID}"
+ exit $REG_PASS
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'nternal.* error' ${LOG}
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: no ICE message for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` compilation failed for ${MSGID}"
+exit $REG_FAIL
diff --git a/contrib/reghunt/bin/gcc-test-missing-warning b/contrib/reghunt/bin/gcc-test-missing-warning
new file mode 100755
index 000000000..0fc9b2dc8
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-missing-warning
@@ -0,0 +1,42 @@
+#! /bin/sh
+
+# Test a "missing-warning" GCC bug, using environment variables set in
+# several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: compilation failed for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'warning' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` warning detected for ${MSGID}"
+ exit $REG_PASS
+fi
+
+echo "`date` no warning for ${MSGID}"
+exit $REG_FAIL
diff --git a/contrib/reghunt/bin/gcc-test-rejects-valid b/contrib/reghunt/bin/gcc-test-rejects-valid
new file mode 100755
index 000000000..5672a0dfe
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-rejects-valid
@@ -0,0 +1,48 @@
+#! /bin/sh
+
+# Test a "rejects-valid" GCC bug, using environment variables set in
+# several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -eq 0 ]; then
+ echo "`date` test compiled successfully for ${MSGID}"
+ exit $REG_PASS
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'error' ${LOG}
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: no error message for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` compilation failed for ${MSGID}"
+exit $REG_FAIL
diff --git a/contrib/reghunt/bin/gcc-test-segfault-on-valid-code b/contrib/reghunt/bin/gcc-test-segfault-on-valid-code
new file mode 100755
index 000000000..0a1b1b722
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-segfault-on-valid-code
@@ -0,0 +1,49 @@
+#! /bin/sh
+
+# Test an "ice-on-valid-code" GCC bug that results in a compiler
+# segfault, using environment variables set in several reghunt scripts
+# and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -eq 0 ]; then
+ echo "`date` test compiled successfully for ${MSGID}"
+ exit $REG_PASS
+fi
+
+grep -q 'No such file or directory' ${LOG}
+if [ $? -eq 0 ]; then
+ echo "`date` unexpected failure: missing file for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'egmentation fault' ${LOG}
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: no segfault message for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+echo "`date` compilation failed for ${MSGID}"
+exit $REG_FAIL
diff --git a/contrib/reghunt/bin/gcc-test-wrong-code b/contrib/reghunt/bin/gcc-test-wrong-code
new file mode 100755
index 000000000..2c0398bea
--- /dev/null
+++ b/contrib/reghunt/bin/gcc-test-wrong-code
@@ -0,0 +1,42 @@
+#! /bin/sh
+
+# Test a "wrong-code" GCC bug, using environment variables set in
+# several reghunt scripts and configuration files.
+#
+# Copyright (C) 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: test compilation failed for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+./a.out >> ${LOG} 2>&1
+if [ $? -ne 0 ]; then
+ echo "`date` test run aborted for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+echo "`date` test ran successfully for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/bin/reg-hunt b/contrib/reghunt/bin/reg-hunt
new file mode 100755
index 000000000..aa0ea61ee
--- /dev/null
+++ b/contrib/reghunt/bin/reg-hunt
@@ -0,0 +1,363 @@
+#! /bin/bash
+
+#set -x
+
+########################################################################
+#
+# File: reg-hunt
+# Author: Janis Johnson <janis187@us.ibm.com>
+# Date: 2003/08/19
+#
+# Search for the patch identifier for which results for a test changed,
+# using a binary search. The functionality for getting sources,
+# building the component to test, and running the test are in other
+# scripts that are run from here. Before the search begins, we verify
+# that we get the expected behavior for the first and last patch
+# identifiers.
+#
+# Define these in a file whose name is the argument to this script:
+# LOW_PATCH: Patch identifier.
+# HIGH_PATCH: Patch identifier.
+# REG_UPDATE: Pathname of script to update your source tree; returns
+# zero for success, nonzero for failure.
+# REG_BUILD: Pathname of script to build enough of the product to run
+# the test; returns zero for success, nonzero for failure.
+# REG_TEST: Pathname of script to run the test; returns 1 if we
+# should search later patches, 0 if we should search
+# earlier patches, and something else if there was an
+# unexpected failure.
+# Optional:
+# REG_REPORT Pathname of script to call at the end with the id of the
+# patch that caused the change in behavior.
+# REG_FINISH Pathname of script to call at the end with the two final
+# patch identifiers as arguments.
+# REG_NEWMID Pathname of script to call when a build has failed, with
+# arguments of the failed id and the current low and high
+# SKIP_LOW If 1, skip verifying the low patch identifier of the
+# range; define this only if you're restarting and have
+# already tested the low patch.
+# SKIP_HIGH If 1, skip verifying the high patch identifier of the
+# range; define this only if you're restarting and have
+# already tested the high patch.
+# FIRST_MID Use this as the first midpoint, to avoid a midpoint that
+# is known not to build.
+# VERBOSITY Default is 0, to print only errors and final message.
+# DATE_IN_MSG If set to anything but 0, include the time and date in
+# messages.
+#
+#
+#
+# Copyright (c) 2002, 2003, 2004, 2005, 2007 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+#
+########################################################################
+
+########################################################################
+# Functions
+########################################################################
+
+# Issue a message if its verbosity level is high enough.
+
+msg() {
+ test ${1} -gt ${VERBOSITY} && return
+
+ if [ "x${DATE_IN_MSG}" = "x" ]; then
+ echo "${2}"
+ else
+ echo "`date` ${2}"
+ fi
+}
+
+# Issue an error message and exit with a non-zero status. If there
+# is a valid current range whose end points have been tested, report
+# it so the user can start again from there.
+
+error() {
+ msg 0 "error: ${1}"
+ test ${VALID_RANGE} -eq 1 && \
+ echo "current range:"
+ echo "LOW_PATCH=${LATER_THAN}"
+ echo "HIGH_PATCH=${EARLIER_THAN}"
+ exit 1
+}
+
+# Build the components to test using sources as of a particular patch
+# and run a test case. Pass each of the scripts the patch identifier
+# that we're testing; the first one needs it, the others can ignore it
+# if they want.
+
+process_patch () {
+ TEST_ID=${1}
+
+ # If we're keeping track of known failures, see if TEST_ID is one and
+ # if so, don't bother updating sources and trying to build.
+
+ FAILS=0
+ SKIP=0
+ if [ ${SKIP_FAILURES} -eq 1 ]; then
+ ${REG_CHECKFAIL} ${TEST_ID}
+ if [ $? -eq 0 ]; then
+ msg 1 "skipping ${TEST_ID}; it is a known build failure"
+ FAILS=1
+ SKIP=1
+ fi
+ fi
+
+ if [ ${FAILS} -eq 0 ]; then
+ ${REG_UPDATE} ${TEST_ID} || error "source update failed for ${TEST_ID}"
+ ${REG_BUILD} ${TEST_ID}
+ if [ $? -ne 0 ]; then
+ FAILS=1
+ msg 1 "build failed for ${TEST_ID}"
+ if [ ${SKIP_FAILURES} -eq 1 ]; then
+ ${REG_RECORDFAIL} ${TEST_ID}
+ fi
+ fi
+ fi
+
+ if [ ${FAILS} -eq 0 ]; then
+ ${REG_TEST} ${TEST_ID}
+ LATER=$?
+ if [ $LATER -ne 0 -a $LATER -ne 1 ]; then
+ msg 0 "unexpected test failure for ${TEST_ID}"
+ exit 1
+ fi
+ else
+
+ # The build failed, or this patch is already known to fail to build.
+ # If it's an endpoint, or if we don't have a way to recover from
+ # build failures, quit now.
+
+ if [ ${SKIP} -eq 0 ]; then
+ if [ "x${REG_NEWMID}" == "x" \
+ -o ${TEST_ID} -eq ${LATER_THAN} \
+ -o ${TEST_ID} -eq ${EARLIER_THAN} ]; then
+ error "build failed for ${TEST_ID}"
+ fi
+ fi
+
+ # Try to find a new patch to try within the current range.
+
+ FIRST_MID=`${REG_NEWMID} ${LATER_THAN} ${EARLIER_THAN}`
+ if [ ${FIRST_MID} -eq 0 ]; then
+
+ # The heuristics in the tool ran out of patches to try next;
+ # let the user handle it from here.+
+ error "build failed for ${TEST_ID}, could not find new candidate"
+ fi
+ msg 1 "using ${FIRST_MID}, between ${LATER_THAN} and ${EARLIER_THAN}"
+ fi
+
+ # Return with a valid LATER value or a new ID to try in FIRST_MID.
+}
+
+# Get the number of a patch within the range. It's not actually the
+# middle one, but the one that might minimize the number of checks.
+
+get_mid_special() {
+ LOW=$1
+ HIGH=$2
+
+ let DIFF=HIGH-LOW
+ M=1
+ POWER2=1
+ while
+ [ $POWER2 -lt $DIFF ]
+ do
+ let M=POWER2
+ let POWER2=POWER2*2
+ done
+ let MID=LOW+M
+}
+
+# Get the number of the patch in the middle of the range.
+
+get_mid () {
+ LOW=$1
+ HIGH=$2
+
+ let DIFF=HIGH-LOW
+ let M=DIFF/2
+ let MID=LOW+M
+}
+
+# Perform a binary search on patch identifiers within the range
+# specified by the arguments.
+
+search_patches () {
+ LOW=$1
+ HIGH=$2
+
+ # Get an identifier within the range. The user can override the
+ # initial mid patch if it is known to have problems, e.g., if a
+ # build fails for that patch.
+
+ if [ ${FIRST_MID} -ne 0 ]; then
+ MID=${FIRST_MID}
+ FIRST_MID=0
+ let DIFF=HIGH-LOW
+ else
+ get_mid $LOW $HIGH
+ fi
+
+ while [ ${DIFF} -gt 1 ]; do
+ TEST_ID="${MID}"
+
+ # Test it.
+
+ process_patch ${TEST_ID}
+
+ # FIRST_MID being set is a signal that the build failed and we
+ # should start over again.
+
+ test ${FIRST_MID} -ne 0 && return
+
+ # Narrow the search based on the outcome of testing TEST_ID.
+
+ if [ ${LATER} -eq 1 ]; then
+ msg 1 "search patches later than ${TEST_ID}"
+ LATER_THAN=${TEST_ID}
+ let LOW=MID
+ else
+ msg 1 "search patches earlier than ${TEST_ID}"
+ EARLIER_THAN=${TEST_ID}
+ let HIGH=MID
+ fi
+
+ get_mid $LOW $HIGH
+ done
+}
+
+########################################################################
+# Main program (so to speak)
+########################################################################
+
+# The error function uses this.
+
+VALID_RANGE=0
+
+# Process the configuration file.
+
+if [ $# != 1 ]; then
+ echo Usage: $0 config_file
+ exit 1
+fi
+
+CONFIG=${1}
+if [ ! -f ${CONFIG} ]; then
+ error "configuration file ${CONFIG} does not exist"
+fi
+
+# OK, the config file exists. Source it, make sure required parameters
+# are defined and their files exist, and give default values to optional
+# parameters.
+
+. ${CONFIG}
+
+test "x${REG_UPDATE}" = "x" && error "REG_UPDATE is not defined"
+test "x${REG_BUILD}" = "x" && error "REG_BUILD is not defined"
+test "x${REG_TEST}" = "x" && error "REG_TEST is not defined"
+test -x ${REG_TEST} || error "REG_TEST is not an executable file"
+test "x${SKIP_LOW}" = "x" && SKIP_LOW=0
+test "x${SKIP_HIGH}" = "x" && SKIP_HIGH=0
+test "x${VERBOSITY}" = "x" && VERBOSITY=0
+test "x${REG_FINISH}" = "x" && REG_FINISH=true
+test "x${REG_REPORT}" = "x" && REG_REPORT=true
+
+msg 2 "LOW_PATCH = ${LOW_PATCH}"
+msg 2 "HIGH_PATCH = ${HIGH_PATCH}"
+msg 2 "REG_UPDATE = ${REG_UPDATE}"
+msg 2 "REG_BUILD = ${REG_BUILD}"
+msg 2 "REG_TEST = ${REG_TEST}"
+msg 2 "REG_NEWMID = ${REG_NEWMID}"
+msg 2 "SKIP_LOW = ${SKIP_LOW}"
+msg 2 "SKIP_HIGH = ${SKIP_HIGH}"
+msg 2 "FIRST_MID = ${FIRST_MID}"
+msg 2 "VERBOSITY = ${VERBOSITY}"
+
+# If REG_NEWMID was defined, assume that we're skipping known failures
+# and adding to the list for new failures. If the list of failures
+# doesn't exist, create it. We use a different flag, SKIP_FAILURES,
+# to make it easier to separate the flag from REG_NEWMID if we want
+# to change the usage later.
+
+if [ "x${REG_NEWMID}" != "x" ]; then
+ touch ${REG_FAILLIST}
+ SKIP_FAILURES=1
+else
+ SKIP_FAILURES=0
+fi
+
+# If FIRST_MID was defined, make sure it's in the range.
+
+if [ "x${FIRST_MID}" != "x" ]; then
+ test ${FIRST_MID} -le ${LOW_PATCH} && \
+ error "FIRST_MID id is lower than LOW_PATCH"
+ test ${FIRST_MID} -ge ${HIGH_PATCH} && \
+ error "FIRST_MID is higher than HIGH_PATCH"
+else
+ FIRST_MID=0
+fi
+
+# Keep track of the bounds of the range where the test behavior changes.
+
+LATER_THAN=${LOW_PATCH}
+EARLIER_THAN=${HIGH_PATCH}
+LATER=1
+
+msg 1 "LATER_THAN = ${LATER_THAN}"
+msg 1 "EARLIER_THAN = ${EARLIER_THAN}"
+
+# Verify that the range isn't backwards.
+
+test ${LOW_PATCH} -lt ${HIGH_PATCH} || \
+ error "patch identifier range is backwards"
+
+# Verify that the first and last patches in the range get the results we
+# expect. If not, quit, because any of several things could be wrong.
+
+if [ ${SKIP_HIGH} -eq 0 ]; then
+ process_patch ${EARLIER_THAN}
+ test ${LATER} -ne 0 && \
+ error "unexpected result for high patch ${EARLIER_THAN}"
+ msg 1 "result for high patch ${EARLIER_THAN} is as expected"
+fi
+
+if [ ${SKIP_LOW} -eq 0 ]; then
+ process_patch ${LATER_THAN}
+ test ${LATER} -ne 1 && \
+ error "unexpected result for low patch ${LATER_THAN}"
+ msg 1 "result for low patch ${LATER_THAN} is as expected"
+fi
+
+# Search within the range, now that we know that the end points are valid.
+# If the build failed then FIRST_MID is set to a new patch to try.
+
+VALID_RANGE=1
+while true; do
+ search_patches ${LATER_THAN} ${EARLIER_THAN}
+ test ${FIRST_MID} -eq 0 && break
+done
+
+# Report where the test behavior changes.
+
+echo "Test result changes with id ${EARLIER_THAN}"
+${REG_REPORT} ${EARLIER_THAN}
+
+# Invoke the optional script to verify the result and report additional
+# information about changes between the two patches.
+
+${REG_FINISH} ${LATER_THAN} ${EARLIER_THAN}
diff --git a/contrib/reghunt/bin/reg-newmid b/contrib/reghunt/bin/reg-newmid
new file mode 100755
index 000000000..2a6b57362
--- /dev/null
+++ b/contrib/reghunt/bin/reg-newmid
@@ -0,0 +1,86 @@
+#! /bin/sh
+
+# The build failed for and identifier in the range bwetween LOW and HIGH.
+# Find a new patch id to try within that range.
+#
+# It's meant to be easy to modify the heuristics used to select the
+# next patch to try by adding to or rearranging the patches listed in
+# MIDLIST. Known failures are recorded in ${REG_FAILLIST}.
+#
+# A nifty improvement would be to record known ranges of failure as
+# ranges, and then pick revisions just before and just after the range.
+#
+# Copyright (C) 2006 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+
+LOW=$1
+HIGH=$2
+
+MIDLIST=""
+
+let MID01=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH
+let MID01=MID01/12
+let MID02=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH
+let MID02=MID02/12
+let MID03=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH
+let MID03=MID03/12
+let MID04=LOW+LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH
+let MID04=MID04/12
+let MID05=LOW+LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID05=MID05/12
+let MID06=LOW+LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID06=MID06/12
+let MID07=LOW+LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID07=MID07/12
+let MID08=LOW+LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID08=MID08/12
+let MID09=LOW+LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID09=MID09/12
+let MID10=LOW+LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID10=MID10/12
+let MID11=LOW+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH+HIGH
+let MID11=MID11/12
+
+# Look in this order; MID has already been done:
+#
+# LOW--10---7---6---3---2---MID---1---4---5---8---9---HIGH
+
+MIDLIST="${MIDLIST} ${MID07}"
+MIDLIST="${MIDLIST} ${MID05}"
+MIDLIST="${MIDLIST} ${MID04}"
+MIDLIST="${MIDLIST} ${MID08}"
+MIDLIST="${MIDLIST} ${MID09}"
+MIDLIST="${MIDLIST} ${MID03}"
+MIDLIST="${MIDLIST} ${MID02}"
+MIDLIST="${MIDLIST} ${MID10}"
+MIDLIST="${MIDLIST} ${MID11}"
+MIDLIST="${MIDLIST} ${MID01}"
+
+for MID in ${MIDLIST}
+do
+ # Skip this if it's the low endpoint.
+ if [ ${MID} != ${LOW} ]; then
+ # Is this patch already known to fail?
+ ${REG_CHECKFAIL} ${MID}
+ if [ $? -ne 0 ]; then
+ echo ${MID}
+ exit 0
+ fi
+ fi
+done
+
+echo 0
+exit 1
diff --git a/contrib/reghunt/bin/reg-test b/contrib/reghunt/bin/reg-test
new file mode 100755
index 000000000..622a65461
--- /dev/null
+++ b/contrib/reghunt/bin/reg-test
@@ -0,0 +1,152 @@
+#! /bin/bash
+
+#set -x
+
+########################################################################
+#
+# File: reg-test
+# Author: Janis Johnson
+# Date: 2005/09/08
+#
+# For each of a list of patches, invoke separate tools to update
+# sources, do a build, and run one or more tests.
+#
+# Define these in a file whose name is the argument to this script:
+# REG_IDLIST: List of patch identifiers.
+# REG_UPDATE: Pathname of script to update the source tree.
+# REG_BUILD: Pathname of script to build enough of the product to run
+# the test.
+# REG_TEST: Pathname of script to run one or more tests.
+# Optional:
+# VERBOSITY: Default is 0, to print only errors and final message.
+# DATE_IN_MSG If set to anything but 0, include the time and date in
+# messages
+# REG_STOP Pathname of a file whose existence says to quit; default
+# 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
+# the Free Software Foundation; either version 3 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.
+#
+# For a copy of the GNU General Public License, write the the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02111-1301, USA.
+#
+########################################################################
+
+########################################################################
+# Functions
+########################################################################
+
+# Issue a message if its verbosity level is high enough.
+
+msg() {
+ test ${1} -gt ${VERBOSITY} && return
+
+ if [ "x${DATE_IN_MSG}" = "x" ]; then
+ echo "${2}"
+ else
+ echo "`${DATE}` ${2}"
+ fi
+}
+
+# Issue an error message and exit with a nonzero status.
+
+error() {
+ msg 0 "error: ${1}"
+ exit 1
+}
+
+# Build the components to test using sources as of a particular patch
+# and run a test case. Pass each of the scripts the patch identifier
+# that we're testing; the first one needs it, the others can ignore it
+# if they want.
+
+process_patch () {
+ TEST_ID=${1}
+
+ ${REG_UPDATE} ${TEST_ID}
+ if [ $? -ne 0 ]; then
+ msg 0 "source update failed for id ${TEST_ID}"
+ return
+ fi
+ ${REG_BUILD} ${TEST_ID}
+ if [ $? -ne 0 ]; then
+ msg 0 "build failed for id ${TEST_ID}"
+ return
+ fi
+ ${REG_TEST} "${TEST_ID}"
+}
+
+########################################################################
+# Main program (so to speak)
+########################################################################
+
+# If DATE isn't defined, use the default date command; the configuration
+# file can override this.
+
+if [ "x${DATE}" = "x" ]; then
+ DATE=date
+fi
+
+# Process the configuration file.
+
+if [ $# -ne 1 ]; then
+ echo Usage: $0 config_file
+ exit 1
+fi
+
+CONFIG=${1}
+if [ ! -f ${CONFIG} ]; then
+ error "configuration file ${CONFIG} does not exist"
+fi
+
+# OK, the config file exists. Source it, make sure required parameters
+# are defined and their files exist, and give default values to optional
+# parameters.
+
+. ${CONFIG}
+
+test "x${REG_IDLIST}" = "x" && error "REG_IDLIST is not defined"
+test "x${REG_UPDATE}" = "x" && error "REG_UPDATE is not defined"
+test "x${REG_BUILD}" = "x" && error "REG_BUILD is not defined"
+test "x${REG_TEST}" = "x" && error "REG_TEST is not defined"
+test -x ${REG_TEST} || error "REG_TEST is not an executable file"
+test "x${VERBOSITY}" = "x" && VERBOSITY=0
+test "x${REG_STOP}" = "x" && REG_STOP="STOP"
+
+msg 2 "REG_IDLIST = ${REG_IDLIST}"
+msg 2 "REG_UPDATE = ${REG_UPDATE}"
+msg 2 "REG_BUILD = ${REG_BUILD}"
+msg 2 "REG_TEST = ${REG_TEST}"
+msg 2 "VERBOSITY = ${VERBOSITY}"
+
+# Process each patch identifier in the list.
+
+for TEST_ID in $REG_IDLIST; do
+
+ # If a file called STOP appears, stop; this allows a clean way to
+ # interrupt a search.
+
+ if [ -f ${REG_STOP} ]; then
+ msg 0 "STOP file detected"
+ rm -f ${REG_STOP}
+ exit 1
+ fi
+
+ # Process the new patch.
+
+ msg 2 "process id ${TEST_ID}"
+ process_patch ${TEST_ID}
+done
+
+msg 1 "done"
diff --git a/contrib/reghunt/date_based/README b/contrib/reghunt/date_based/README
new file mode 100644
index 000000000..c674ffc6c
--- /dev/null
+++ b/contrib/reghunt/date_based/README
@@ -0,0 +1,16 @@
+This directory contains scripts that are used for identifying the
+patch that introduced a regression. General information about such
+searches is covered in http://gcc.gnu.org/bugs/reghunt.html.
+
+ reg_search searches for a small time interval within a range of
+ dates in which results for a test changed, using a binary search.
+ The functionality for getting sources, building the component to
+ test, and running the test are in other scripts that are run from
+ here.
+
+ reg_periodic invokes separate tools (the same scripts invoked by
+ reg_search) over a range of dates at specified intervals.
+
+ reg_test_template shows the format for the script that runs a test
+ and determines whether to continue the search with a later or
+ earlier date.
diff --git a/contrib/reghunt/date_based/reg_periodic b/contrib/reghunt/date_based/reg_periodic
new file mode 100755
index 000000000..a77567d4d
--- /dev/null
+++ b/contrib/reghunt/date_based/reg_periodic
@@ -0,0 +1,171 @@
+#! /bin/bash
+
+########################################################################
+#
+# File: reg_periodic
+# Author: Janis Johnson
+# Date: 2002/12/28
+#
+# Over a range of dates at specified intervals, invoke separate tools to
+# update sources, do a build, and run one or more tests.
+#
+# Define these in a file whose name is the argument to this script:
+# LOW_DATE: Date string recognized by the date command.
+# HIGH_DATE: Date string recognized by the date command.
+# INTERVAL: Time (in seconds) between dates for which to build.
+# REG_UPDATE: Pathname of script to update your source tree.
+# REG_BUILD: Pathname of script to build enough of the product to run
+# the test.
+# REG_TEST: Pathname of script to run one or more tests.
+# Optional:
+# VERBOSITY: Default is 0, to print only errors and final message.
+# DATE_IN_MSG If set to anything but 0, include the time and date in
+# messages
+# REG_STOP Pathname of a file whose existence says to quit; default
+# is STOP in the current directory.
+#
+#
+# Copyright (c) 2002, 2003, 2005, 2009, 2010 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
+# the Free Software Foundation; either version 3 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+########################################################################
+
+########################################################################
+# Functions
+########################################################################
+
+# Issue a message if its verbosity level is high enough.
+
+msg() {
+ test ${1} -gt ${VERBOSITY} && return
+
+ if [ "x${DATE_IN_MSG}" = "x" ]; then
+ echo "${2}"
+ else
+ echo "`${DATE}` ${2}"
+ fi
+}
+
+# Issue an error message and exit with a nonzero status.
+
+error() {
+ msg 0 "error: ${1}"
+ exit 1
+}
+
+# Turn seconds since the epoch into a date we can use with source
+# 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"
+}
+
+# Build the components to test using sources as of a particular date and
+# run a test case. Pass each of the scripts the date that we're
+# testing; the first one needs it, the others can ignore it if they want.
+
+process_date() {
+ TEST_DATE="${1}"
+
+ ${REG_UPDATE} "${TEST_DATE}"
+ if [ $? -ne 0 ]; then
+ msg 0 "source update failed for ${TEST_DATE}"
+ return
+ fi
+ ${REG_BUILD} "${TEST_DATE}"
+ if [ $? -ne 0 ]; then
+ msg 0 "build failed for ${TEST_DATE}"
+ return
+ fi
+ ${REG_TEST} "${TEST_DATE}"
+}
+
+########################################################################
+# Main program (so to speak)
+########################################################################
+
+# If DATE isn't defined, use the default date command; the configuration
+# file can override this.
+
+if [ "x${DATE}" = "x" ]; then
+ DATE=date
+fi
+
+# Process the configuration file.
+
+if [ $# -ne 1 ]; then
+ echo Usage: $0 config_file
+ exit 1
+fi
+
+CONFIG=${1}
+if [ ! -f ${CONFIG} ]; then
+ error "configuration file ${CONFIG} does not exist"
+fi
+
+# OK, the config file exists. Source it, make sure required parameters
+# are defined and their files exist, and give default values to optional
+# parameters.
+
+. ${CONFIG}
+
+test "x${REG_UPDATE}" = "x" && error "REG_UPDATE is not defined"
+test "x${REG_BUILD}" = "x" && error "REG_BUILD is not defined"
+test "x${REG_TEST}" = "x" && error "REG_TEST is not defined"
+test "x${INTERVAL}" = "x" && error "INTERVAL is not defined"
+test -x ${REG_TEST} || error "REG_TEST is not an executable file"
+test "x${VERBOSITY}" = "x" && VERBOSITY=0
+test "x${REG_STOP}" = "x" && REG_STOP="STOP"
+
+msg 2 "LOW_DATE = ${LOW_DATE}"
+msg 2 "HIGH_DATE = ${HIGH_DATE}"
+msg 2 "INTERVAL = ${INTERVAL}"
+msg 2 "REG_UPDATE = ${REG_UPDATE}"
+msg 2 "REG_BUILD = ${REG_BUILD}"
+msg 2 "REG_TEST = ${REG_TEST}"
+msg 2 "VERBOSITY = ${VERBOSITY}"
+
+# Change the dates into seconds since the epoch. This uses an extension
+# in GNU date.
+
+LOW_DATE=`${DATE} +%s --date "${LOW_DATE}"` || \
+ error "date command failed for \"${LOW_DATE}\""
+HIGH_DATE=`${DATE} +%s --date "${HIGH_DATE}"` || \
+ error "date command failed for \"${LOW_DATE}\""
+
+# Process each date in the range.
+
+while [ ${LOW_DATE} -le ${HIGH_DATE} ]; do
+
+ # If a file called STOP appears, stop; this allows a clean way to
+ # interrupt a search.
+
+ if [ -f ${REG_STOP} ]; then
+ msg 0 "STOP file detected"
+ rm -f ${REG_STOP}
+ exit 1
+ fi
+
+ # Get a version of the date that is usable by tools and readable
+ # by people, then process it.
+
+ make_date ${LOW_DATE}
+ process_date "${MADE_DATE}"
+ let LOW_DATE=LOW_DATE+INTERVAL
+done
+
+msg 1 "done"
diff --git a/contrib/reghunt/date_based/reg_search b/contrib/reghunt/date_based/reg_search
new file mode 100755
index 000000000..46602054d
--- /dev/null
+++ b/contrib/reghunt/date_based/reg_search
@@ -0,0 +1,300 @@
+#! /bin/bash
+
+########################################################################
+#
+# File: reg_search
+# Author: Janis Johnson <janis187@us.ibm.com>
+# Date: 2002/12/15
+#
+# Search for a small time interval within a range of dates in which
+# results for a test changed, using a binary search. The functionality
+# for getting sources, building the component to test, and running the
+# test are in other scripts that are run from here. Before the search
+# begins, we verify that we get the expected behavior for the first and
+# last dates.
+#
+# Define these in a file whose name is the argument to this script:
+# LOW_DATE: Date string recognized by the date command (local time).
+# HIGH_DATE: Date string recognized by the date command (local time).
+# REG_UPDATE: Pathname of script to update your source tree; returns
+# zero for success, nonzero for failure.
+# REG_BUILD: Pathname of script to build enough of the product to run
+# the test; returns zero for success, nonzero for failure.
+# REG_TEST: Pathname of script to run the test; returns 1 if we
+# should search later dates, 0 if we should search earlier
+# dates.
+# Optional:
+# DELTA: Search to an interval within this many seconds; default
+# is one hour (although 300 works well).
+# REG_FINISH Pathname of script to call at the end with the two final
+# dates as arguments.
+# SKIP_LOW If 1, skip verifying the low date of the range;
+# define this only if you're restarting and have already
+# tested the low date.
+# SKIP_HIGH If 1, skip verifying the high date of the range;
+# define this only if you're restarting and have already
+# tested the high date.
+# FIRST_MID Use this as the first midpoint, to avoid a midpoint that
+# is known not to build.
+# HAS_CHANGES Pathname of script to report whether the current date has
+# no differences from one of the ends of the current range
+# to skip unnecessary build and testing; default is "true".
+# VERBOSITY Default is 0, to print only errors and final message.
+# DATE_IN_MSG If set to anything but 0, include the time and date in
+# messages.
+#
+#
+#
+# Copyright (c) 2002, 2003, 2005, 2009, 2010 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
+# the Free Software Foundation; either version 3 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+########################################################################
+
+########################################################################
+# Functions
+########################################################################
+
+# Issue a message if its verbosity level is high enough.
+
+msg() {
+ test ${1} -gt ${VERBOSITY} && return
+
+ if [ "x${DATE_IN_MSG}" = "x" ]; then
+ echo "${2}"
+ else
+ echo "`${DATE}` ${2}"
+ fi
+}
+
+# Issue an error message and exit with a non-zero status. If there
+# is a valid current range whose end points have been tested, report
+# it so the user can start again from there.
+
+error() {
+ msg 0 "error: ${1}"
+ test ${VALID_RANGE} -eq 1 && \
+ echo "current range:"
+ echo "LOW_DATE=\"${LATER_THAN}\""
+ echo "HIGH_DATE=\"${EARLIER_THAN}\""
+ exit 1
+}
+
+# Turn seconds since the epoch into a date we can use with source
+# 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"
+}
+
+# Build the components to test using sources as of a particular date and
+# run a test case. Pass each of the scripts the date that we're
+# testing; the first one needs it, the others can ignore it if they want.
+
+process_date() {
+ TEST_DATE="${1}"
+
+ ${REG_UPDATE} "${TEST_DATE}" || error "source update failed for ${TEST_DATE}"
+
+ # If we're already in a valid range, skip this date if there are no
+ # differences from either end of the range and adjust LATER.
+
+ if [ ${VALID_RANGE} = 1 ]; then
+ ${HAS_CHANGES} "${TEST_DATE}" "${LATER_THAN}" "${EARLIER_THAN}"
+ RET=$?
+ case ${RET} in
+ 0) ;;
+ 1) LATER=1; return;;
+ 2) LATER=0; return;;
+ *) error "process_date: unexpected return value from ${HAS_CHANGES}";;
+ esac
+ fi
+
+ ${REG_BUILD} "${TEST_DATE}" || error "build failed for ${TEST_DATE}"
+ ${REG_TEST} "${TEST_DATE}"
+ LATER=$?
+}
+
+# Perform a binary search on dates within the range specified by
+# the arguments, bounded by the number of seconds in DELTA.
+
+search_dates() {
+ let LOW=$1
+ let HIGH=$2
+ let DIFF=HIGH-LOW
+
+ # Get the date in the middle of the range; MID is in seconds since
+ # the epoch, DATE is readable by humans and tools. The user can
+ # override the initial mid date if it is known to have problems,
+ # e.g., if a build fails for that date.
+
+ if [ ${FIRST_MID} -ne 0 ]; then
+ let MID=${FIRST_MID}
+ else
+ let MID=LOW/2+HIGH/2
+ fi
+
+ while [ ${DIFF} -ge ${DELTA} ]; do
+ make_date ${MID}
+ TEST_DATE="${MADE_DATE}"
+
+ # Test it.
+
+ process_date "${TEST_DATE}"
+
+ # Narrow the search based on the outcome of testing DATE.
+
+ if [ ${LATER} -eq 1 ]; then
+ msg 1 "search dates later than \"${TEST_DATE}\""
+ LATER_THAN="${TEST_DATE}"
+ let LOW=MID
+ else
+ msg 1 "search dates earlier than \"${TEST_DATE}\""
+ EARLIER_THAN="${TEST_DATE}"
+ let HIGH=MID
+ fi
+
+ let DIFF=HIGH-LOW
+ let MID=LOW/2+HIGH/2
+ done
+}
+
+########################################################################
+# Main program (so to speak)
+########################################################################
+
+# If DATE isn't defined, use the default date command; the configuration
+# file can override this.
+
+if [ "x${DATE}" = "x" ]; then
+ DATE=date
+fi
+
+# The error function uses this.
+
+VALID_RANGE=0
+
+# Process the configuration file.
+
+if [ $# != 1 ]; then
+ echo Usage: $0 config_file
+ exit 1
+fi
+
+CONFIG=${1}
+if [ ! -f ${CONFIG} ]; then
+ error "configuration file ${CONFIG} does not exist"
+fi
+
+# OK, the config file exists. Source it, make sure required parameters
+# are defined and their files exist, and give default values to optional
+# parameters.
+
+. ${CONFIG}
+
+test "x${REG_UPDATE}" = "x" && error "REG_UPDATE is not defined"
+test "x${REG_BUILD}" = "x" && error "REG_BUILD is not defined"
+test "x${REG_TEST}" = "x" && error "REG_TEST is not defined"
+test -x ${REG_TEST} || error "REG_TEST is not an executable file"
+test "x${SKIP_LOW}" = "x" && SKIP_LOW=0
+test "x${SKIP_HIGH}" = "x" && SKIP_HIGH=0
+test "x${DELTA}" = "x" && DELTA=3600
+test "x${VERBOSITY}" = "x" && VERBOSITY=0
+test "x${HAS_CHANGES}" = "x" && HAS_CHANGES=true
+test "x${REG_FINISH}" = "x" && REG_FINISH=true
+
+msg 2 "LOW_DATE = ${LOW_DATE}"
+msg 2 "HIGH_DATE = ${HIGH_DATE}"
+msg 2 "REG_UPDATE = ${REG_UPDATE}"
+msg 2 "REG_BUILD = ${REG_BUILD}"
+msg 2 "REG_TEST = ${REG_TEST}"
+msg 2 "SKIP_LOW = ${SKIP_LOW}"
+msg 2 "SKIP_HIGH = ${SKIP_HIGH}"
+msg 2 "FIRST_MID = ${FIRST_MID}"
+msg 2 "VERBOSITY = ${VERBOSITY}"
+msg 2 "DELTA = ${DELTA}"
+
+# Verify that DELTA is at least two minutes.
+
+test ${DELTA} -lt 120 && \
+ error "DELTA is ${DELTA}, must be at least 120 (two minutes)"
+
+# Change the dates into seconds since the epoch. This uses an extension
+# in GNU date.
+
+LOW_DATE=`${DATE} +%s --date "${LOW_DATE}"` || \
+ error "date command failed for \"${LOW_DATE}\""
+HIGH_DATE=`${DATE} +%s --date "${HIGH_DATE}"` || \
+ error "date command failed for \"${LOW_DATE}\""
+
+# If FIRST_MID was defined, convert it and make sure it's in the range.
+
+if [ "x${FIRST_MID}" != "x" ]; then
+ FIRST_MID=`${DATE} +%s --date "${FIRST_MID}"` || \
+ error "date command failed for \"${FIRST_MID}\""
+ test ${FIRST_MID} -le ${LOW_DATE} && \
+ error "FIRST_MID date is earlier than LOW_DATE"
+ test ${FIRST_MID} -ge ${HIGH_DATE} && \
+ error "FIRST_MID is later than HIGH_DATE"
+else
+ FIRST_MID=0
+fi
+
+# Keep track of the bounds of the range where the test behavior changes,
+# using a human-readable version of each date.
+
+make_date ${LOW_DATE}
+LATER_THAN="${MADE_DATE}"
+make_date ${HIGH_DATE}
+EARLIER_THAN="${MADE_DATE}"
+
+msg 2 "LATER_THAN = ${LATER_THAN}"
+msg 2 "EARLIER_THAN = ${EARLIER_THAN}"
+
+# Verify that the range isn't backwards.
+
+test ${LOW_DATE} -lt ${HIGH_DATE} || error "date range is backwards"
+
+# Verify that the first and last date in the range get the results we
+# expect. If not, quit, because any of several things could be wrong.
+
+if [ ${SKIP_LOW} -eq 0 ]; then
+ process_date "${LATER_THAN}"
+ test ${LATER} -ne 1 && \
+ error "unexpected result for low date ${LATER_THAN}"
+ msg 1 "result for low date is as expected"
+fi
+
+if [ ${SKIP_HIGH} -eq 0 ]; then
+ process_date "${EARLIER_THAN}"
+ test ${LATER} -ne 0 && \
+ error "unexpected result for high date ${EARLIER_THAN}"
+ msg 1 "result for high date is as expected"
+fi
+
+# Search within the range, now that we know that the end points are valid.
+
+VALID_RANGE=1
+search_dates ${LOW_DATE} ${HIGH_DATE}
+
+# Report the range that's left to investigate.
+
+echo "Continue search between ${LATER_THAN} and ${EARLIER_THAN}"
+
+# Invoke the optional script to report additional information about
+# changes between the two dates.
+
+${REG_FINISH} "${LATER_THAN}" "${EARLIER_THAN}"
diff --git a/contrib/reghunt/date_based/reg_test_template b/contrib/reghunt/date_based/reg_test_template
new file mode 100755
index 000000000..ab5bbc106
--- /dev/null
+++ b/contrib/reghunt/date_based/reg_test_template
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+# Template for the test script specified for REG_TEST.
+
+# Run the test case for a regression search. The argument is the date
+# of the sources. The return value is 1 if the binary search should
+# continue with later dates, 0 if it should continue with earlier
+# dates.
+
+DATE="${1}"
+
+# Specify the PR number and the directory where the test should be run.
+PR=xxxx
+DIR=xxxx
+
+LOG_DATE="`echo ${DATE} | sed 's/[-: ]/_/g'`"
+LOG="${PR}.${LOG_DATE}.out"
+
+echo "`date` running test for PR ${PR}"
+cd ${DIR}
+
+# Compile the test case with whatever options are needed to trigger the
+# error.
+
+<compiler_to_run> <options> ${PR}.<x> > ${LOG} 2>&1
+
+# Some tests will require additional commands to determine whether the
+# test passed or failed, such as grepping compiler output for a
+# particular message, or running the test and possibly comparing its
+# output with the expected output.
+
+xxxxx
+
+# The return value depends on whether the last command is expected to be
+# zero or nonzero for a passing test, and whether we're looking for a
+# regression or for the patch that fixed the bug.
+
+# Return 1 to continue the search with later dates, 0 for earlier dates.
+
+test $? -eq 0 && exit 1
+exit 0
diff --git a/contrib/reghunt/examples/28970.c b/contrib/reghunt/examples/28970.c
new file mode 100644
index 000000000..4b6839b16
--- /dev/null
+++ b/contrib/reghunt/examples/28970.c
@@ -0,0 +1,28 @@
+extern void abort (void);
+
+int tar (int i)
+{
+ if (i != 36863)
+ abort ();
+ return -1;
+}
+
+void bug(int q, int bcount)
+{
+ int j = 0;
+ int outgo = 0;
+
+ while(j != -1)
+ {
+ outgo++;
+ if (outgo > q-1)
+ outgo = q-1;
+ j = tar (outgo*bcount);
+ }
+}
+
+int main(void)
+{
+ bug(5, 36863);
+ return 0;
+}
diff --git a/contrib/reghunt/examples/28970.config b/contrib/reghunt/examples/28970.config
new file mode 100644
index 000000000..f64b0e687
--- /dev/null
+++ b/contrib/reghunt/examples/28970.config
@@ -0,0 +1,19 @@
+BUGID=28970
+FIND=break
+LANG=c
+BUILD_KIND=full
+BUG_KIND=wrong-code
+OPTS="-O2"
+REG_CONFOPTS="--disable-bootstrap"
+
+. ./common.config
+
+#LOW_PATCH=101
+#HIGH_PATCH=111
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+#msg 0 'NOTE: skipping high patch, already verified'
+#SKIP_HIGH=1
+
+#REG_IDLIST="161"
diff --git a/contrib/reghunt/examples/28970.list b/contrib/reghunt/examples/28970.list
new file mode 100644
index 000000000..87b68f4d4
--- /dev/null
+++ b/contrib/reghunt/examples/28970.list
@@ -0,0 +1,324 @@
+1|99687|bryce|2005-05-14 00:42:46|trunk
+2|99691|kazu|2005-05-14 00:46:12|trunk
+3|99692|hp|2005-05-14 02:33:25|trunk
+4|99693|kazu|2005-05-14 03:25:44|trunk
+5|99694|rguenth|2005-05-14 12:53:20|trunk
+6|99695|kazu|2005-05-14 13:05:37|trunk
+7|99696|hubicka|2005-05-14 14:24:49|trunk
+8|99697|hubicka|2005-05-14 14:27:09|trunk
+9|99698|hubicka|2005-05-14 14:32:39|trunk
+10|99699|rguenth|2005-05-14 15:42:01|trunk
+11|99700|danglin|2005-05-14 17:38:46|trunk
+12|99701|danglin|2005-05-14 17:50:00|trunk
+13|99702|danglin|2005-05-14 17:55:33|trunk
+14|99703|danglin|2005-05-14 18:08:20|trunk
+15|99704|kazu|2005-05-14 20:22:58|trunk
+16|99705|kazu|2005-05-14 20:32:59|trunk
+17|99710|kkojima|2005-05-15 02:02:58|trunk
+18|99711|fengwang|2005-05-15 02:45:29|trunk
+19|99714|rsandifo|2005-05-15 08:10:10|trunk
+20|99715|rsandifo|2005-05-15 08:16:01|trunk
+21|99716|aj|2005-05-15 08:25:52|trunk
+22|99719|aj|2005-05-15 12:44:42|trunk
+23|99720|aj|2005-05-15 12:49:45|trunk
+24|99721|aj|2005-05-15 13:25:19|trunk
+25|99722|aj|2005-05-15 15:33:12|trunk
+26|99723|aj|2005-05-15 15:37:18|trunk
+27|99724|aj|2005-05-15 15:38:21|trunk
+28|99726|aj|2005-05-15 15:50:09|trunk
+29|99728|aj|2005-05-15 16:35:44|trunk
+30|99729|aj|2005-05-15 16:36:40|trunk
+31|99731|dberlin|2005-05-15 17:05:52|trunk
+32|99732|aj|2005-05-15 17:06:19|trunk
+33|99733|tromey|2005-05-15 17:07:20|trunk
+34|99735|aj|2005-05-15 17:33:14|trunk
+35|99736|aj|2005-05-15 17:39:35|trunk
+36|99737|aj|2005-05-15 17:40:00|trunk
+37|99738|drow|2005-05-15 18:17:10|trunk
+38|99739|tromey|2005-05-15 18:28:29|trunk
+39|99740|gdr|2005-05-15 18:28:36|trunk
+40|99741|rearnsha|2005-05-15 18:29:32|trunk
+41|99742|tromey|2005-05-15 18:31:26|trunk
+42|99745|gerald|2005-05-15 20:03:57|trunk
+43|99746|tromey|2005-05-15 21:09:45|trunk
+44|99747|mmitchel|2005-05-15 22:31:35|trunk
+45|99748|mmitchel|2005-05-15 22:33:49|trunk
+46|99749|mmitchel|2005-05-15 22:35:39|trunk
+47|99750|mmitchel|2005-05-15 22:51:59|trunk
+48|99757|billingd|2005-05-16 00:51:38|trunk
+49|99759|dberlin|2005-05-16 01:12:07|trunk
+50|99760|hjl|2005-05-16 02:11:59|trunk
+51|99765|sayle|2005-05-16 04:36:09|trunk
+52|99767|bonzini|2005-05-16 08:43:14|trunk
+53|99769|paolo|2005-05-16 10:45:59|trunk
+54|99773|neroden|2005-05-16 11:58:44|trunk
+55|99774|rsandifo|2005-05-16 12:30:06|trunk
+56|99775|aj|2005-05-16 13:52:39|trunk
+57|99777|kazu|2005-05-16 15:11:33|trunk
+58|99778|kazu|2005-05-16 15:18:15|trunk
+59|99779|fjahanian|2005-05-16 15:24:09|trunk
+60|99782|kazu|2005-05-16 18:10:20|trunk
+61|99783|rsandifo|2005-05-16 18:14:03|trunk
+62|99785|rth|2005-05-16 18:22:48|trunk
+63|99787|kazu|2005-05-16 18:45:55|trunk
+64|99789|tromey|2005-05-16 19:01:52|trunk
+65|99791|sayle|2005-05-16 19:40:35|trunk
+66|99792|tromey|2005-05-16 20:27:48|trunk
+67|99794|tromey|2005-05-16 21:00:49|trunk
+68|99796|ctice|2005-05-16 21:37:01|trunk
+69|99799|mmitchel|2005-05-16 22:52:26|trunk
+70|99800|rth|2005-05-16 23:05:45|trunk
+71|99801|rth|2005-05-16 23:14:02|trunk
+72|99803|hp|2005-05-17 00:07:54|trunk
+73|99810|tromey|2005-05-17 01:52:02|trunk
+74|99811|rth|2005-05-17 04:33:42|trunk
+75|99812|jakub|2005-05-17 06:31:51|trunk
+76|99813|jakub|2005-05-17 06:34:48|trunk
+77|99814|hp|2005-05-17 06:37:06|trunk
+78|99815|jakub|2005-05-17 06:45:49|trunk
+79|99816|jakub|2005-05-17 06:48:19|trunk
+80|99817|jakub|2005-05-17 06:51:48|trunk
+81|99823|bonzini|2005-05-17 07:33:39|trunk
+82|99824|rth|2005-05-17 08:15:41|trunk
+83|99825|rguenth|2005-05-17 09:00:03|trunk
+84|99826|bonzini|2005-05-17 09:55:44|trunk
+85|99827|bonzini|2005-05-17 10:26:27|trunk
+86|99828|bonzini|2005-05-17 12:10:19|trunk
+87|99829|ian|2005-05-17 12:50:32|trunk
+88|99830|bernds|2005-05-17 13:10:26|trunk
+89|99831|dje|2005-05-17 14:25:07|trunk
+90|99832|rguenth|2005-05-17 14:28:49|trunk
+91|99833|drow|2005-05-17 15:00:26|trunk
+92|99834|drow|2005-05-17 15:12:27|trunk
+93|99835|nathan|2005-05-17 15:37:47|trunk
+94|99837|law|2005-05-17 16:28:07|trunk
+95|99838|nathan|2005-05-17 16:47:49|trunk
+96|99839|aj|2005-05-17 16:54:58|trunk
+97|99840|hubicka|2005-05-17 16:56:32|trunk
+98|99842|aj|2005-05-17 17:02:38|trunk
+99|99843|sayle|2005-05-17 18:01:17|trunk
+100|99844|mmitchel|2005-05-17 18:25:58|trunk
+101|99846|hp|2005-05-17 18:53:11|trunk
+102|99847|kazu|2005-05-17 19:10:19|trunk
+103|99848|rakdver|2005-05-17 19:41:38|trunk
+104|99849|rakdver|2005-05-17 19:48:50|trunk
+105|99850|rakdver|2005-05-17 19:55:53|trunk
+106|99851|mrs|2005-05-17 19:59:15|trunk
+107|99852|mrs|2005-05-17 20:00:33|trunk
+108|99853|rakdver|2005-05-17 20:02:56|trunk
+109|99854|rakdver|2005-05-17 20:05:07|trunk
+110|99855|mrs|2005-05-17 20:05:24|trunk
+111|99856|ebotcazou|2005-05-17 20:06:11|trunk
+112|99857|mrs|2005-05-17 20:07:08|trunk
+113|99858|mrs|2005-05-17 20:11:44|trunk
+114|99859|mrs|2005-05-17 20:13:02|trunk
+115|99860|rakdver|2005-05-17 20:28:30|trunk
+116|99861|hjl|2005-05-17 21:47:13|trunk
+117|99862|dberlin|2005-05-17 23:00:18|trunk
+118|99877|daney|2005-05-18 01:00:16|trunk
+119|99878|kcook|2005-05-18 01:38:46|trunk
+120|99879|kcook|2005-05-18 01:49:43|trunk
+121|99880|kcook|2005-05-18 02:03:49|trunk
+122|99881|kcook|2005-05-18 02:05:35|trunk
+123|99882|dberlin|2005-05-18 03:07:44|trunk
+124|99884|bonzini|2005-05-18 07:21:07|trunk
+125|99885|ebotcazou|2005-05-18 07:22:28|trunk
+126|99889|paolo|2005-05-18 08:07:32|trunk
+127|99890|ebotcazou|2005-05-18 08:11:04|trunk
+128|99892|fengwang|2005-05-18 09:54:21|trunk
+129|99893|fengwang|2005-05-18 09:56:46|trunk
+130|99896|dberlin|2005-05-18 13:26:20|trunk
+131|99897|dberlin|2005-05-18 13:29:38|trunk
+132|99899|ian|2005-05-18 13:46:39|trunk
+133|99900|tobi|2005-05-18 13:57:48|trunk
+134|99901|nathan|2005-05-18 14:10:35|trunk
+135|99903|green|2005-05-18 14:20:53|trunk
+136|99904|fitzsim|2005-05-18 15:36:07|trunk
+137|99906|law|2005-05-18 16:49:49|trunk
+138|99908|paolo|2005-05-18 17:26:48|trunk
+139|99910|rth|2005-05-18 17:33:33|trunk
+140|99916|rsandifo|2005-05-18 18:43:53|trunk
+141|99919|tobi|2005-05-18 19:20:31|trunk
+142|99920|tobi|2005-05-18 19:21:46|trunk
+143|99922|mrs|2005-05-18 20:02:27|trunk
+144|99923|rguenth|2005-05-18 20:11:20|trunk
+145|99924|geoffk|2005-05-18 20:23:26|trunk
+146|99925|tkoenig|2005-05-18 20:24:32|trunk
+147|99926|tkoenig|2005-05-18 20:35:25|trunk
+148|99927|geoffk|2005-05-18 20:36:02|trunk
+149|99928|geoffk|2005-05-18 20:45:26|trunk
+150|99930|hubicka|2005-05-18 21:04:17|trunk
+151|99933|paolo|2005-05-18 22:11:24|trunk
+152|99935|rth|2005-05-18 23:21:17|trunk
+153|99936|dpatel|2005-05-18 23:54:36|trunk
+154|99941|jsm28|2005-05-19 00:33:47|trunk
+155|99942|rth|2005-05-19 01:05:06|trunk
+156|99943|rth|2005-05-19 01:10:13|trunk
+157|99944|kazu|2005-05-19 03:05:49|trunk
+158|99945|kcook|2005-05-19 03:38:34|trunk
+159|99946|kcook|2005-05-19 03:45:17|trunk
+160|99948|rth|2005-05-19 04:10:09|trunk
+161|99949|rth|2005-05-19 04:13:38|trunk
+162|99950|rth|2005-05-19 04:24:19|trunk
+163|99951|rth|2005-05-19 06:29:45|trunk
+164|99952|jbeulich|2005-05-19 06:47:50|trunk
+165|99953|ebotcazou|2005-05-19 07:05:45|trunk
+166|99957|ebotcazou|2005-05-19 07:12:05|trunk
+167|99960|jakub|2005-05-19 07:37:45|trunk
+168|99966|bernds|2005-05-19 08:42:26|trunk
+169|99967|redi|2005-05-19 08:59:46|trunk
+170|99971|rth|2005-05-19 09:42:23|trunk
+171|99972|rth|2005-05-19 09:49:55|trunk
+172|99974|nickc|2005-05-19 10:28:30|trunk
+173|99976|hubicka|2005-05-19 10:38:42|trunk
+174|99977|bonzini|2005-05-19 11:16:27|trunk
+175|99978|ayers|2005-05-19 12:22:21|trunk
+176|99981|rguenth|2005-05-19 19:17:49|trunk
+177|99982|pbrook|2005-05-19 20:03:22|trunk
+178|99984|jsm28|2005-05-19 20:42:12|trunk
+179|99986|rth|2005-05-19 21:28:02|trunk
+180|99988|bryce|2005-05-19 21:46:39|trunk
+181|99993|bryce|2005-05-19 22:24:26|trunk
+182|99996|janis|2005-05-19 23:22:23|trunk
+183|99997|janis|2005-05-19 23:23:27|trunk
+184|100001|rth|2005-05-20 00:59:02|trunk
+185|100002|rth|2005-05-20 01:24:50|trunk
+186|100003|rth|2005-05-20 01:26:56|trunk
+187|100004|rth|2005-05-20 01:28:35|trunk
+188|100005|rth|2005-05-20 02:38:56|trunk
+189|100006|rth|2005-05-20 05:00:29|trunk
+190|100007|bonzini|2005-05-20 07:10:30|trunk
+191|100009|hubicka|2005-05-20 08:05:07|trunk
+192|100010|nickc|2005-05-20 08:25:49|trunk
+193|100011|paolo|2005-05-20 08:58:23|trunk
+194|100013|jbeulich|2005-05-20 14:00:06|trunk
+195|100028|hubicka|2005-05-20 21:17:48|trunk
+196|100031|mrs|2005-05-20 22:14:16|trunk
+197|100035|mrs|2005-05-20 23:42:07|trunk
+198|100036|rth|2005-05-20 23:52:46|trunk
+199|100040|ebotcazou|2005-05-21 06:44:50|trunk
+200|100043|rguenth|2005-05-21 12:35:55|trunk
+201|100044|rmathew|2005-05-21 13:57:49|trunk
+202|100045|pinskia|2005-05-21 16:57:24|trunk
+203|100051|gerald|2005-05-21 21:56:24|trunk
+204|100056|mrs|2005-05-22 02:41:42|trunk
+205|100057|aj|2005-05-22 06:55:21|trunk
+206|100058|ebotcazou|2005-05-22 07:34:37|trunk
+207|100066|gdr|2005-05-22 17:01:02|trunk
+208|100068|fxcoudert|2005-05-22 21:17:42|trunk
+209|100070|fxcoudert|2005-05-22 22:12:48|trunk
+210|100074|sayle|2005-05-23 03:20:19|trunk
+211|100075|jbeulich|2005-05-23 06:42:19|trunk
+212|100077|ebotcazou|2005-05-23 07:09:03|trunk
+213|100078|nickc|2005-05-23 08:41:57|trunk
+214|100080|hubicka|2005-05-23 12:37:47|trunk
+215|100081|uweigand|2005-05-23 16:43:06|trunk
+216|100087|redi|2005-05-23 21:53:46|trunk
+217|100088|jason|2005-05-23 23:02:53|trunk
+218|100092|law|2005-05-24 02:54:06|trunk
+219|100093|nemet|2005-05-24 05:57:46|trunk
+220|100095|nickc|2005-05-24 07:45:24|trunk
+221|100097|nickc|2005-05-24 09:09:07|trunk
+222|100101|paolo|2005-05-24 10:58:22|trunk
+223|100102|irar|2005-05-24 11:56:58|trunk
+224|100103|law|2005-05-24 14:06:04|trunk
+225|100106|pinskia|2005-05-24 19:06:20|trunk
+226|100107|rth|2005-05-24 19:18:51|trunk
+227|100108|rth|2005-05-24 19:22:03|trunk
+228|100109|kazu|2005-05-24 19:57:52|trunk
+229|100110|law|2005-05-24 20:19:13|trunk
+230|100111|bkoz|2005-05-24 20:28:55|trunk
+231|100112|paolo|2005-05-24 20:38:40|trunk
+232|100114|fxcoudert|2005-05-24 20:46:54|trunk
+233|100115|gdr|2005-05-24 20:48:25|trunk
+234|100116|janis|2005-05-24 21:27:38|trunk
+235|100117|janis|2005-05-24 21:28:54|trunk
+236|100118|janis|2005-05-24 21:40:35|trunk
+237|100119|janis|2005-05-24 21:48:15|trunk
+238|100120|janis|2005-05-24 21:50:00|trunk
+239|100121|mrs|2005-05-24 22:18:43|trunk
+240|100122|mrs|2005-05-24 22:20:10|trunk
+241|100123|mrs|2005-05-24 22:21:01|trunk
+242|100125|mrs|2005-05-24 22:22:33|trunk
+243|100126|mrs|2005-05-24 22:24:38|trunk
+244|100127|paolo|2005-05-24 22:53:43|trunk
+245|100128|kcook|2005-05-24 23:18:46|trunk
+246|100129|ian|2005-05-24 23:20:39|trunk
+247|100130|janis|2005-05-24 23:41:44|trunk
+248|100131|kcook|2005-05-25 00:15:21|trunk
+249|100135|dj|2005-05-25 03:59:00|trunk
+250|100136|dj|2005-05-25 04:18:19|trunk
+251|100137|ebotcazou|2005-05-25 07:04:04|trunk
+252|100139|paolo|2005-05-25 09:25:25|trunk
+253|100140|reichelt|2005-05-25 09:47:18|trunk
+254|100142|paolo|2005-05-25 11:33:43|trunk
+255|100143|uweigand|2005-05-25 11:52:13|trunk
+256|100144|hubicka|2005-05-25 12:34:01|trunk
+257|100145|jakub|2005-05-25 13:10:00|trunk
+258|100146|uweigand|2005-05-25 13:12:05|trunk
+259|100149|ian|2005-05-25 13:22:27|trunk
+260|100150|dberlin|2005-05-25 14:05:22|trunk
+261|100151|bonzini|2005-05-25 14:18:54|trunk
+262|100152|kazu|2005-05-25 15:17:12|trunk
+263|100153|tromey|2005-05-25 15:23:56|trunk
+264|100154|tromey|2005-05-25 15:25:38|trunk
+265|100155|mrs|2005-05-25 15:48:44|trunk
+266|100156|dberlin|2005-05-25 18:53:25|trunk
+267|100157|paolo|2005-05-25 19:33:35|trunk
+268|100158|nemet|2005-05-25 20:06:33|trunk
+269|100159|uweigand|2005-05-25 20:19:26|trunk
+270|100163|tromey|2005-05-25 20:23:01|trunk
+271|100164|uweigand|2005-05-25 20:39:31|trunk
+272|100167|zlaski|2005-05-25 21:18:43|trunk
+273|100168|law|2005-05-25 21:36:24|trunk
+274|100171|rth|2005-05-25 22:08:31|trunk
+275|100172|rsandifo|2005-05-25 22:19:22|trunk
+276|100173|rth|2005-05-25 23:24:07|trunk
+277|100174|rth|2005-05-25 23:29:54|trunk
+278|100175|zlaski|2005-05-26 00:01:02|trunk
+279|100179|zlaski|2005-05-26 00:51:53|trunk
+280|100180|mrs|2005-05-26 01:08:04|trunk
+281|100181|mrs|2005-05-26 01:53:56|trunk
+282|100182|mrs|2005-05-26 02:00:19|trunk
+283|100183|mrs|2005-05-26 02:27:50|trunk
+284|100184|sayle|2005-05-26 04:38:51|trunk
+285|100185|rsandifo|2005-05-26 05:28:04|trunk
+286|100187|ian|2005-05-26 05:44:38|trunk
+287|100188|sayle|2005-05-26 05:51:22|trunk
+288|100189|tkoenig|2005-05-26 06:26:17|trunk
+289|100193|bkoz|2005-05-26 07:10:21|trunk
+290|100194|aj|2005-05-26 07:27:21|trunk
+291|100195|bonzini|2005-05-26 07:58:47|trunk
+292|100196|jakub|2005-05-26 08:07:30|trunk
+293|100197|bonzini|2005-05-26 08:12:35|trunk
+294|100198|bonzini|2005-05-26 08:15:31|trunk
+295|100201|reichelt|2005-05-26 13:33:02|trunk
+296|100205|paolo|2005-05-26 15:46:48|trunk
+297|100206|reichelt|2005-05-26 16:04:37|trunk
+298|100208|aj|2005-05-26 16:12:30|trunk
+299|100212|davidu|2005-05-26 17:23:35|trunk
+300|100218|kazu|2005-05-26 18:15:27|trunk
+301|100219|kazu|2005-05-26 18:36:11|trunk
+302|100220|aj|2005-05-26 19:10:52|trunk
+303|100222|bryce|2005-05-26 21:07:04|trunk
+304|100223|law|2005-05-26 21:07:38|trunk
+305|100224|aj|2005-05-26 21:12:11|trunk
+306|100225|aj|2005-05-26 21:22:01|trunk
+307|100226|zlaski|2005-05-26 21:24:29|trunk
+308|100229|janis|2005-05-26 21:25:27|trunk
+309|100230|aj|2005-05-26 21:40:35|trunk
+310|100232|aj|2005-05-26 22:00:56|trunk
+311|100233|mrs|2005-05-26 23:19:29|trunk
+312|100234|kazu|2005-05-27 00:14:08|trunk
+313|100238|sayle|2005-05-27 01:58:07|trunk
+314|100239|mrs|2005-05-27 02:38:16|trunk
+315|100240|sayle|2005-05-27 02:46:01|trunk
+316|100241|mrs|2005-05-27 02:55:21|trunk
+317|100242|mrs|2005-05-27 03:36:42|trunk
+318|100243|cgd|2005-05-27 04:53:37|trunk
+319|100244|aj|2005-05-27 05:06:43|trunk
+320|100245|rmathew|2005-05-27 05:11:44|trunk
+321|100246|rmathew|2005-05-27 05:15:26|trunk
+322|100247|rmathew|2005-05-27 05:22:05|trunk
+323|100248|aj|2005-05-27 06:13:54|trunk
+324|100249|corsepiu|2005-05-27 07:54:06|trunk
diff --git a/contrib/reghunt/examples/28970.log b/contrib/reghunt/examples/28970.log
new file mode 100644
index 000000000..f93989e7f
--- /dev/null
+++ b/contrib/reghunt/examples/28970.log
@@ -0,0 +1,80 @@
+Mon Feb 16 14:31:45 PST 2009 LATER_THAN = 1
+Mon Feb 16 14:31:45 PST 2009 EARLIER_THAN = 324
+Mon Feb 16 14:31:45 PST 2009 svn checkout begun for id 324, rev 100249
+Mon Feb 16 14:35:14 PST 2009 svn checkout done
+Mon Feb 16 14:35:15 PST 2009 building GCC (c) for id 324
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 29069 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 14:38:53 PST 2009 test run aborted for bug 28970, id 324
+Mon Feb 16 14:38:53 PST 2009 result for high patch 324 is as expected
+Mon Feb 16 14:38:53 PST 2009 svn update begun for id 1, rev 99687
+Mon Feb 16 14:39:14 PST 2009 svn update done
+Mon Feb 16 14:39:15 PST 2009 building GCC (c) for id 1
+Mon Feb 16 14:42:48 PST 2009 test ran successfully for bug 28970, id 1
+Mon Feb 16 14:42:48 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 14:42:48 PST 2009 svn update begun for id 162, rev 99950
+Mon Feb 16 14:42:58 PST 2009 svn update done
+Mon Feb 16 14:42:59 PST 2009 building GCC (c) for id 162
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 30641 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 14:46:36 PST 2009 test run aborted for bug 28970, id 162
+Mon Feb 16 14:46:36 PST 2009 search patches earlier than 162
+Mon Feb 16 14:46:36 PST 2009 svn update begun for id 81, rev 99823
+Mon Feb 16 14:46:49 PST 2009 svn update done
+Mon Feb 16 14:46:50 PST 2009 building GCC (c) for id 81
+Mon Feb 16 14:50:23 PST 2009 test ran successfully for bug 28970, id 81
+Mon Feb 16 14:50:23 PST 2009 search patches later than 81
+Mon Feb 16 14:50:23 PST 2009 svn update begun for id 121, rev 99880
+Mon Feb 16 14:50:29 PST 2009 svn update done
+Mon Feb 16 14:50:30 PST 2009 building GCC (c) for id 121
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 32209 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 14:54:03 PST 2009 test run aborted for bug 28970, id 121
+Mon Feb 16 14:54:03 PST 2009 search patches earlier than 121
+Mon Feb 16 14:54:03 PST 2009 svn update begun for id 101, rev 99846
+Mon Feb 16 14:54:10 PST 2009 svn update done
+Mon Feb 16 14:54:10 PST 2009 building GCC (c) for id 101
+Mon Feb 16 14:57:41 PST 2009 test ran successfully for bug 28970, id 101
+Mon Feb 16 14:57:41 PST 2009 search patches later than 101
+Mon Feb 16 14:57:42 PST 2009 svn update begun for id 111, rev 99856
+Mon Feb 16 14:57:49 PST 2009 svn update done
+Mon Feb 16 14:57:49 PST 2009 building GCC (c) for id 111
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 1320 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 15:01:27 PST 2009 test run aborted for bug 28970, id 111
+Mon Feb 16 15:01:27 PST 2009 search patches earlier than 111
+Mon Feb 16 15:01:27 PST 2009 svn update begun for id 106, rev 99851
+Mon Feb 16 15:01:33 PST 2009 svn update done
+Mon Feb 16 15:01:33 PST 2009 building GCC (c) for id 106
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 2076 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 15:05:04 PST 2009 test run aborted for bug 28970, id 106
+Mon Feb 16 15:05:04 PST 2009 search patches earlier than 106
+Mon Feb 16 15:05:05 PST 2009 svn update begun for id 103, rev 99848
+Mon Feb 16 15:05:08 PST 2009 svn update done
+Mon Feb 16 15:05:08 PST 2009 building GCC (c) for id 103
+Mon Feb 16 15:08:40 PST 2009 test ran successfully for bug 28970, id 103
+Mon Feb 16 15:08:40 PST 2009 search patches later than 103
+Mon Feb 16 15:08:40 PST 2009 svn update begun for id 104, rev 99849
+Mon Feb 16 15:08:44 PST 2009 svn update done
+Mon Feb 16 15:08:44 PST 2009 building GCC (c) for id 104
+Mon Feb 16 15:12:17 PST 2009 test ran successfully for bug 28970, id 104
+Mon Feb 16 15:12:17 PST 2009 search patches later than 104
+Mon Feb 16 15:12:17 PST 2009 svn update begun for id 105, rev 99850
+Mon Feb 16 15:12:21 PST 2009 svn update done
+Mon Feb 16 15:12:21 PST 2009 building GCC (c) for id 105
+/home/janis/reghunt/bin/gcc-test-wrong-code: line 35: 4458 Aborted ./a.out >> ${LOG} 2>&1
+Mon Feb 16 15:15:54 PST 2009 test run aborted for bug 28970, id 105
+Mon Feb 16 15:15:54 PST 2009 search patches earlier than 105
+Test result changes with id 105
+------------------------------------------------------------------------
+r99850 | rakdver | 2005-05-17 19:55:53 +0000 (Tue, 17 May 2005) | 9 lines
+
+ * tree-cfg.c (tree_can_merge_blocks_p): Allow phi nodes in the
+ merged block.
+ (replace_uses_by): New function.
+ (tree_merge_blocks): Eliminate the phi nodes in the merged block.
+ * tree-flow.h (fold_stmt_inplace): Declare.
+ * tree-ssa-ccp.c (fold_stmt_inplace): New function.
+ * tree-ssa-dom.c (tree_ssa_dominator_optimize): Update dominance
+ info after cfg cleanup.
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=99850
+ r99850 | rakdver | 2005-05-17 19:55:53 +0000 (Tue, 17 May 2005)
diff --git a/contrib/reghunt/examples/29106.cc b/contrib/reghunt/examples/29106.cc
new file mode 100644
index 000000000..ba028ba13
--- /dev/null
+++ b/contrib/reghunt/examples/29106.cc
@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+int main()
+{
+ int* const savepos = sizeof(*savepos) ? 0 : 0;
+
+ // code for the next line is left out!
+ printf("size of thingy is %d\n", sizeof(*savepos));
+}
diff --git a/contrib/reghunt/examples/29106.config b/contrib/reghunt/examples/29106.config
new file mode 100644
index 000000000..a8723d41c
--- /dev/null
+++ b/contrib/reghunt/examples/29106.config
@@ -0,0 +1,18 @@
+BUGID=29106
+FIND=break
+LANG=c++
+BUILD_KIND=full
+BUG_KIND=wrong-code
+OPTS=""
+
+. ./common.config
+
+export REG_TEST=${BUGID}.test
+
+#LOW_PATCH=532
+#HIGH_PATCH=550
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+#msg 0 'NOTE: skipping high patch, already verified'
+#SKIP_HIGH=1
diff --git a/contrib/reghunt/examples/29106.list b/contrib/reghunt/examples/29106.list
new file mode 100644
index 000000000..15dcb3009
--- /dev/null
+++ b/contrib/reghunt/examples/29106.list
@@ -0,0 +1,568 @@
+1|107221|hp|2005-11-19 16:46:24|gcc-4_1-branch
+2|107222|hp|2005-11-19 16:47:50|gcc-4_1-branch
+3|107224|rguenth|2005-11-19 17:25:41|gcc-4_1-branch
+4|107227|jakub|2005-11-19 20:44:07|gcc-4_1-branch
+5|107232|hp|2005-11-19 21:58:23|gcc-4_1-branch
+6|107233|hp|2005-11-19 21:59:48|gcc-4_1-branch
+7|107234|jb|2005-11-19 22:03:41|gcc-4_1-branch
+8|107247|schwab|2005-11-20 10:44:27|gcc-4_1-branch
+9|107248|toon|2005-11-20 10:47:37|gcc-4_1-branch
+10|107250|ebotcazou|2005-11-20 11:27:41|gcc-4_1-branch
+11|107253|jsm28|2005-11-20 16:36:21|gcc-4_1-branch
+12|107254|jsm28|2005-11-20 16:37:19|gcc-4_1-branch
+13|107260|rth|2005-11-20 19:05:43|gcc-4_1-branch
+14|107262|rth|2005-11-20 20:38:26|gcc-4_1-branch
+15|107272|rth|2005-11-21 00:55:57|gcc-4_1-branch
+16|107280|ian|2005-11-21 05:43:32|gcc-4_1-branch
+17|107281|kazu|2005-11-21 06:52:01|gcc-4_1-branch
+18|107313|bonzini|2005-11-21 17:04:11|gcc-4_1-branch
+19|107314|dje|2005-11-21 18:04:14|gcc-4_1-branch
+20|107318|paolo|2005-11-21 18:40:52|gcc-4_1-branch
+21|107323|ebotcazou|2005-11-21 20:53:50|gcc-4_1-branch
+22|107330|joel|2005-11-21 23:28:29|gcc-4_1-branch
+23|107332|joel|2005-11-21 23:32:00|gcc-4_1-branch
+24|107351|jakub|2005-11-22 10:58:47|gcc-4_1-branch
+25|107353|amodra|2005-11-22 13:01:40|gcc-4_1-branch
+26|107355|amodra|2005-11-22 13:18:01|gcc-4_1-branch
+27|107360|amodra|2005-11-22 14:24:42|gcc-4_1-branch
+28|107363|paolo|2005-11-22 14:55:09|gcc-4_1-branch
+29|107365|hubicka|2005-11-22 16:56:48|gcc-4_1-branch
+30|107367|gdr|2005-11-22 18:08:17|gcc-4_1-branch
+31|107374|kazu|2005-11-22 20:53:08|gcc-4_1-branch
+32|107378|ebotcazou|2005-11-22 22:37:35|gcc-4_1-branch
+33|107397|jvdelisle|2005-11-23 02:28:44|gcc-4_1-branch
+34|107399|jvdelisle|2005-11-23 02:30:23|gcc-4_1-branch
+35|107400|amodra|2005-11-23 02:32:41|gcc-4_1-branch
+36|107404|uros|2005-11-23 08:52:28|gcc-4_1-branch
+37|107414|amodra|2005-11-23 10:19:44|gcc-4_1-branch
+38|107436|ian|2005-11-23 23:09:14|gcc-4_1-branch
+39|107462|jkj|2005-11-24 12:49:42|gcc-4_1-branch
+40|107485|bryce|2005-11-25 04:06:22|gcc-4_1-branch
+41|107511|aph|2005-11-25 17:20:09|gcc-4_1-branch
+42|107514|dje|2005-11-25 19:26:12|gcc-4_1-branch
+43|107518|korbb|2005-11-25 20:26:51|gcc-4_1-branch
+44|107521|rth|2005-11-25 22:25:59|gcc-4_1-branch
+45|107524|reichelt|2005-11-25 23:12:32|gcc-4_1-branch
+46|107534|mark|2005-11-26 00:48:29|gcc-4_1-branch
+47|107536|ghazi|2005-11-26 01:31:54|gcc-4_1-branch
+48|107539|jb|2005-11-26 09:27:22|gcc-4_1-branch
+49|107542|sayle|2005-11-26 21:46:19|gcc-4_1-branch
+50|107546|rth|2005-11-26 23:04:24|gcc-4_1-branch
+51|107569|kargl|2005-11-27 15:51:54|gcc-4_1-branch
+52|107572|kargl|2005-11-27 20:27:40|gcc-4_1-branch
+53|107596|jakub|2005-11-28 07:17:39|gcc-4_1-branch
+54|107609|jkj|2005-11-28 18:10:05|gcc-4_1-branch
+55|107612|aoliva|2005-11-28 18:23:54|gcc-4_1-branch
+56|107617|jakub|2005-11-28 19:55:15|gcc-4_1-branch
+57|107618|jakub|2005-11-28 19:56:27|gcc-4_1-branch
+58|107640|aoliva|2005-11-29 00:56:16|gcc-4_1-branch
+59|107653|ghazi|2005-11-29 05:17:56|gcc-4_1-branch
+60|107666|jakub|2005-11-29 12:01:56|gcc-4_1-branch
+61|107675|dje|2005-11-29 18:19:25|gcc-4_1-branch
+62|107677|tromey|2005-11-29 18:58:23|gcc-4_1-branch
+63|107697|jvdelisle|2005-11-30 02:09:13|gcc-4_1-branch
+64|107699|jvdelisle|2005-11-30 02:53:18|gcc-4_1-branch
+65|107705|jakub|2005-11-30 08:34:19|gcc-4_1-branch
+66|107706|jakub|2005-11-30 08:35:24|gcc-4_1-branch
+67|107709|ebotcazou|2005-11-30 08:45:52|gcc-4_1-branch
+68|107712|nathan|2005-11-30 10:29:09|gcc-4_1-branch
+69|107716|aph|2005-11-30 12:57:37|gcc-4_1-branch
+70|107724|law|2005-11-30 17:05:57|gcc-4_1-branch
+71|107728|nathan|2005-11-30 17:54:39|gcc-4_1-branch
+72|107732|pault|2005-11-30 19:26:23|gcc-4_1-branch
+73|107742|jason|2005-11-30 21:40:12|gcc-4_1-branch
+74|107747|amodra|2005-12-01 00:10:57|gcc-4_1-branch
+75|107761|jkj|2005-12-01 01:54:19|gcc-4_1-branch
+76|107763|ghazi|2005-12-01 02:32:58|gcc-4_1-branch
+77|107798|pinskia|2005-12-01 03:24:00|gcc-4_1-branch
+78|107809|jsm28|2005-12-01 08:22:06|gcc-4_1-branch
+79|107810|jsm28|2005-12-01 08:24:08|gcc-4_1-branch
+80|107829|green|2005-12-01 20:09:06|gcc-4_1-branch
+81|107835|rth|2005-12-01 22:50:31|gcc-4_1-branch
+82|107850|kargl|2005-12-02 00:35:41|gcc-4_1-branch
+83|107851|jvdelisle|2005-12-02 00:38:36|gcc-4_1-branch
+84|107854|kargl|2005-12-02 01:27:18|gcc-4_1-branch
+85|107872|amodra|2005-12-02 06:16:21|gcc-4_1-branch
+86|107875|jvdelisle|2005-12-02 06:37:32|gcc-4_1-branch
+87|107876|uros|2005-12-02 06:43:45|gcc-4_1-branch
+88|107893|reichelt|2005-12-02 14:34:34|gcc-4_1-branch
+89|107895|fxcoudert|2005-12-02 15:35:47|gcc-4_1-branch
+90|107897|fxcoudert|2005-12-02 15:50:30|gcc-4_1-branch
+91|107898|fxcoudert|2005-12-02 15:55:14|gcc-4_1-branch
+92|107956|jakub|2005-12-02 22:57:03|gcc-4_1-branch
+93|107978|mmitchel|2005-12-03 00:54:17|gcc-4_1-branch
+94|107979|mmitchel|2005-12-03 00:56:57|gcc-4_1-branch
+95|107980|mmitchel|2005-12-03 00:57:34|gcc-4_1-branch
+96|107982|jsm28|2005-12-03 01:01:21|gcc-4_1-branch
+97|107986|jsm28|2005-12-03 01:03:26|gcc-4_1-branch
+98|108011|hp|2005-12-04 13:01:48|gcc-4_1-branch
+99|108015|fxcoudert|2005-12-04 18:22:20|gcc-4_1-branch
+100|108016|jsm28|2005-12-04 19:28:05|gcc-4_1-branch
+101|108035|paolo|2005-12-05 00:34:11|gcc-4_1-branch
+102|108037|paolo|2005-12-05 01:58:19|gcc-4_1-branch
+103|108043|jakub|2005-12-05 07:49:01|gcc-4_1-branch
+104|108064|paolo|2005-12-05 16:39:42|gcc-4_1-branch
+105|108068|ebotcazou|2005-12-05 18:54:22|gcc-4_1-branch
+106|108079|janis|2005-12-05 22:51:40|gcc-4_1-branch
+107|108092|geoffk|2005-12-06 01:01:03|gcc-4_1-branch
+108|108098|tromey|2005-12-06 02:25:58|gcc-4_1-branch
+109|108104|wilson|2005-12-06 05:41:33|gcc-4_1-branch
+110|108111|amodra|2005-12-06 10:02:57|gcc-4_1-branch
+111|108116|schwab|2005-12-06 11:28:18|gcc-4_1-branch
+112|108118|jsm28|2005-12-06 13:41:23|gcc-4_1-branch
+113|108144|tromey|2005-12-07 00:34:36|gcc-4_1-branch
+114|108150|pault|2005-12-07 06:20:21|gcc-4_1-branch
+115|108157|aldyh|2005-12-07 11:37:53|gcc-4_1-branch
+116|108166|doko|2005-12-07 14:58:27|gcc-4_1-branch
+117|108170|krebbel|2005-12-07 17:39:38|gcc-4_1-branch
+118|108176|uweigand|2005-12-07 19:42:16|gcc-4_1-branch
+119|108179|uweigand|2005-12-07 19:58:41|gcc-4_1-branch
+120|108181|uweigand|2005-12-07 20:02:40|gcc-4_1-branch
+121|108188|reichelt|2005-12-07 21:20:25|gcc-4_1-branch
+122|108198|paolo|2005-12-07 23:51:47|gcc-4_1-branch
+123|108210|ghazi|2005-12-08 01:32:54|gcc-4_1-branch
+124|108216|krebbel|2005-12-08 08:32:34|gcc-4_1-branch
+125|108217|krebbel|2005-12-08 08:33:39|gcc-4_1-branch
+126|108224|ebotcazou|2005-12-08 09:30:59|gcc-4_1-branch
+127|108226|rguenth|2005-12-08 11:24:07|gcc-4_1-branch
+128|108230|aph|2005-12-08 13:52:39|gcc-4_1-branch
+129|108232|aph|2005-12-08 14:40:48|gcc-4_1-branch
+130|108233|aph|2005-12-08 14:44:29|gcc-4_1-branch
+131|108234|doko|2005-12-08 15:30:10|gcc-4_1-branch
+132|108236|rakdver|2005-12-08 15:44:22|gcc-4_1-branch
+133|108239|eedelman|2005-12-08 17:00:26|gcc-4_1-branch
+134|108240|eedelman|2005-12-08 17:01:28|gcc-4_1-branch
+135|108249|jakub|2005-12-08 21:52:19|gcc-4_1-branch
+136|108250|jakub|2005-12-08 21:53:20|gcc-4_1-branch
+137|108251|jakub|2005-12-08 21:53:59|gcc-4_1-branch
+138|108252|jakub|2005-12-08 21:54:34|gcc-4_1-branch
+139|108253|jakub|2005-12-08 21:56:44|gcc-4_1-branch
+140|108255|hp|2005-12-08 23:07:31|gcc-4_1-branch
+141|108258|amodra|2005-12-08 23:47:48|gcc-4_1-branch
+142|108273|hp|2005-12-09 04:00:10|gcc-4_1-branch
+143|108275|ths|2005-12-09 08:15:58|gcc-4_1-branch
+144|108279|uweigand|2005-12-09 11:26:47|gcc-4_1-branch
+145|108314|fxcoudert|2005-12-09 18:50:48|gcc-4_1-branch
+146|108319|bernds|2005-12-09 22:45:14|gcc-4_1-branch
+147|108323|ghazi|2005-12-09 23:38:19|gcc-4_1-branch
+148|108325|ghazi|2005-12-09 23:56:34|gcc-4_1-branch
+149|108327|ghazi|2005-12-10 00:04:44|gcc-4_1-branch
+150|108349|ghazi|2005-12-10 13:47:29|gcc-4_1-branch
+151|108351|danglin|2005-12-10 15:45:43|gcc-4_1-branch
+152|108356|ths|2005-12-10 18:28:23|gcc-4_1-branch
+153|108373|paolo|2005-12-11 00:43:32|gcc-4_1-branch
+154|108376|mmitchel|2005-12-11 04:24:42|gcc-4_1-branch
+155|108382|danglin|2005-12-11 16:12:48|gcc-4_1-branch
+156|108395|mmitchel|2005-12-12 01:41:16|gcc-4_1-branch
+157|108400|amodra|2005-12-12 10:02:51|gcc-4_1-branch
+158|108414|mmitchel|2005-12-12 16:30:24|gcc-4_1-branch
+159|108423|aph|2005-12-12 17:50:08|gcc-4_1-branch
+160|108428|ghazi|2005-12-12 22:37:46|gcc-4_1-branch
+161|108445|amodra|2005-12-13 01:16:11|gcc-4_1-branch
+162|108449|pbrook|2005-12-13 01:35:37|gcc-4_1-branch
+163|108464|jakub|2005-12-13 08:12:16|gcc-4_1-branch
+164|108466|jakub|2005-12-13 08:15:07|gcc-4_1-branch
+165|108467|jakub|2005-12-13 08:16:24|gcc-4_1-branch
+166|108468|jakub|2005-12-13 08:17:18|gcc-4_1-branch
+167|108469|jakub|2005-12-13 08:18:54|gcc-4_1-branch
+168|108470|jakub|2005-12-13 08:23:16|gcc-4_1-branch
+169|108475|aph|2005-12-13 09:44:35|gcc-4_1-branch
+170|108483|tkoenig|2005-12-13 21:11:23|gcc-4_1-branch
+171|108501|ghazi|2005-12-14 01:57:55|gcc-4_1-branch
+172|108507|jakub|2005-12-14 11:01:15|gcc-4_1-branch
+173|108522|ghazi|2005-12-14 17:34:21|gcc-4_1-branch
+174|108527|tromey|2005-12-14 18:35:37|gcc-4_1-branch
+175|108530|ghazi|2005-12-14 18:46:36|gcc-4_1-branch
+176|108531|kargl|2005-12-14 18:55:31|gcc-4_1-branch
+177|108535|aph|2005-12-14 20:23:19|gcc-4_1-branch
+178|108539|jakub|2005-12-14 20:38:31|gcc-4_1-branch
+179|108544|uweigand|2005-12-14 23:40:22|gcc-4_1-branch
+180|108559|ghazi|2005-12-15 02:00:58|gcc-4_1-branch
+181|108561|law|2005-12-15 07:15:56|gcc-4_1-branch
+182|108566|paolo|2005-12-15 10:22:19|gcc-4_1-branch
+183|108571|paolo|2005-12-15 11:33:48|gcc-4_1-branch
+184|108574|hainque|2005-12-15 12:59:26|gcc-4_1-branch
+185|108576|ebotcazou|2005-12-15 13:29:14|gcc-4_1-branch
+186|108577|hubicka|2005-12-15 13:48:22|gcc-4_1-branch
+187|108578|bonzini|2005-12-15 13:59:17|gcc-4_1-branch
+188|108579|bonzini|2005-12-15 14:02:02|gcc-4_1-branch
+189|108588|ayers|2005-12-15 18:01:17|gcc-4_1-branch
+190|108591|tromey|2005-12-15 18:37:35|gcc-4_1-branch
+191|108601|jsm28|2005-12-15 22:32:05|gcc-4_1-branch
+192|108603|jakub|2005-12-15 22:33:44|gcc-4_1-branch
+193|108631|krebbel|2005-12-16 09:02:49|gcc-4_1-branch
+194|108640|jakub|2005-12-16 12:07:52|gcc-4_1-branch
+195|108643|jakub|2005-12-16 12:14:15|gcc-4_1-branch
+196|108645|nathan|2005-12-16 12:27:29|gcc-4_1-branch
+197|108646|nathan|2005-12-16 12:30:18|gcc-4_1-branch
+198|108647|aph|2005-12-16 12:42:46|gcc-4_1-branch
+199|108649|nathan|2005-12-16 12:57:40|gcc-4_1-branch
+200|108650|nathan|2005-12-16 13:11:58|gcc-4_1-branch
+201|108651|nathan|2005-12-16 13:51:19|gcc-4_1-branch
+202|108660|tromey|2005-12-16 17:20:59|gcc-4_1-branch
+203|108663|aoliva|2005-12-16 17:28:38|gcc-4_1-branch
+204|108667|eedelman|2005-12-16 18:54:33|gcc-4_1-branch
+205|108669|ghazi|2005-12-16 19:14:20|gcc-4_1-branch
+206|108676|jvdelisle|2005-12-16 20:37:28|gcc-4_1-branch
+207|108677|jvdelisle|2005-12-16 20:40:13|gcc-4_1-branch
+208|108684|paolo|2005-12-16 21:34:49|gcc-4_1-branch
+209|108686|tromey|2005-12-16 21:45:24|gcc-4_1-branch
+210|108694|jsm28|2005-12-16 23:33:09|gcc-4_1-branch
+211|108718|danglin|2005-12-17 17:27:11|gcc-4_1-branch
+212|108744|jvdelisle|2005-12-18 08:24:04|gcc-4_1-branch
+213|108745|jvdelisle|2005-12-18 08:32:09|gcc-4_1-branch
+214|108750|dorit|2005-12-18 11:20:17|gcc-4_1-branch
+215|108754|hubicka|2005-12-18 14:51:53|gcc-4_1-branch
+216|108756|uweigand|2005-12-18 15:49:33|gcc-4_1-branch
+217|108780|green|2005-12-19 03:00:18|gcc-4_1-branch
+218|108789|nathan|2005-12-19 11:45:41|gcc-4_1-branch
+219|108797|reichelt|2005-12-19 17:29:41|gcc-4_1-branch
+220|108799|bonzini|2005-12-19 17:46:15|gcc-4_1-branch
+221|108831|kkojima|2005-12-20 01:45:27|gcc-4_1-branch
+222|108836|mmitchel|2005-12-20 04:39:30|gcc-4_1-branch
+223|108838|pinskia|2005-12-20 04:51:27|gcc-4_1-branch
+224|108839|pinskia|2005-12-20 04:53:06|gcc-4_1-branch
+225|108843|mmitchel|2005-12-20 05:34:22|gcc-4_1-branch
+226|108850|mmitchel|2005-12-20 08:26:04|gcc-4_1-branch
+227|108857|rguenth|2005-12-20 17:23:12|gcc-4_1-branch
+228|108861|kargl|2005-12-20 18:15:19|gcc-4_1-branch
+229|108896|jvdelisle|2005-12-21 04:50:19|gcc-4_1-branch
+230|108897|jvdelisle|2005-12-21 05:08:53|gcc-4_1-branch
+231|108899|jvdelisle|2005-12-21 06:51:02|gcc-4_1-branch
+232|108900|jvdelisle|2005-12-21 06:52:38|gcc-4_1-branch
+233|108903|eedelman|2005-12-21 12:07:58|gcc-4_1-branch
+234|108905|aph|2005-12-21 14:56:00|gcc-4_1-branch
+235|108907|steven|2005-12-21 15:32:09|gcc-4_1-branch
+236|108908|steven|2005-12-21 15:37:10|gcc-4_1-branch
+237|108910|rakdver|2005-12-21 15:49:19|gcc-4_1-branch
+238|108912|pinskia|2005-12-21 16:44:09|gcc-4_1-branch
+239|108917|pbrook|2005-12-21 17:20:36|gcc-4_1-branch
+240|108951|kargl|2005-12-22 16:29:18|gcc-4_1-branch
+241|108952|kargl|2005-12-22 16:41:41|gcc-4_1-branch
+242|108957|tromey|2005-12-22 17:43:02|gcc-4_1-branch
+243|108959|pinskia|2005-12-22 18:11:39|gcc-4_1-branch
+244|108965|pbrook|2005-12-22 18:56:03|gcc-4_1-branch
+245|108969|pbrook|2005-12-22 19:24:56|gcc-4_1-branch
+246|108971|mmitchel|2005-12-22 19:59:00|gcc-4_1-branch
+247|108983|jakub|2005-12-22 23:07:19|gcc-4_1-branch
+248|108986|jakub|2005-12-22 23:21:00|gcc-4_1-branch
+249|109002|jvdelisle|2005-12-23 02:02:52|gcc-4_1-branch
+250|109005|jvdelisle|2005-12-23 02:59:37|gcc-4_1-branch
+251|109011|mmitchel|2005-12-23 07:42:20|gcc-4_1-branch
+252|109014|jakub|2005-12-23 09:44:41|gcc-4_1-branch
+253|109019|uweigand|2005-12-23 18:38:43|gcc-4_1-branch
+254|109023|mmitchel|2005-12-23 23:17:12|gcc-4_1-branch
+255|109036|mmitchel|2005-12-24 08:56:10|gcc-4_1-branch
+256|109040|tobi|2005-12-24 13:20:56|gcc-4_1-branch
+257|109061|pault|2005-12-26 09:07:27|gcc-4_1-branch
+258|109063|paolo|2005-12-26 12:02:12|gcc-4_1-branch
+259|109076|mmitchel|2005-12-27 06:49:21|gcc-4_1-branch
+260|109081|mmitchel|2005-12-27 17:18:05|gcc-4_1-branch
+261|109084|ghazi|2005-12-27 20:08:39|gcc-4_1-branch
+262|109105|paolo|2005-12-28 12:53:49|gcc-4_1-branch
+263|109111|green|2005-12-28 17:25:43|gcc-4_1-branch
+264|109112|green|2005-12-28 17:29:16|gcc-4_1-branch
+265|109113|danglin|2005-12-28 17:41:07|gcc-4_1-branch
+266|109117|green|2005-12-28 18:39:10|gcc-4_1-branch
+267|109118|green|2005-12-28 18:46:09|gcc-4_1-branch
+268|109121|pinskia|2005-12-28 19:27:31|gcc-4_1-branch
+269|109134|amodra|2005-12-29 01:14:18|gcc-4_1-branch
+270|109137|hp|2005-12-29 04:27:24|gcc-4_1-branch
+271|109139|pault|2005-12-29 06:18:23|gcc-4_1-branch
+272|109142|pbrook|2005-12-29 15:10:35|gcc-4_1-branch
+273|109152|danglin|2005-12-29 19:40:15|gcc-4_1-branch
+274|109167|danglin|2005-12-30 05:47:53|gcc-4_1-branch
+275|109170|hp|2005-12-30 11:36:37|gcc-4_1-branch
+276|109172|eedelman|2005-12-30 15:07:48|gcc-4_1-branch
+277|109194|ghazi|2005-12-31 00:54:00|gcc-4_1-branch
+278|109198|danglin|2005-12-31 02:18:49|gcc-4_1-branch
+279|109199|kargl|2005-12-31 18:55:30|gcc-4_1-branch
+280|109202|jakub|2006-01-01 00:00:56|gcc-4_1-branch
+281|109212|jvdelisle|2006-01-01 03:49:00|gcc-4_1-branch
+282|109213|jvdelisle|2006-01-01 03:53:12|gcc-4_1-branch
+283|109214|jvdelisle|2006-01-01 04:16:39|gcc-4_1-branch
+284|109215|jvdelisle|2006-01-01 04:20:41|gcc-4_1-branch
+285|109216|jvdelisle|2006-01-01 05:04:06|gcc-4_1-branch
+286|109217|jvdelisle|2006-01-01 05:06:05|gcc-4_1-branch
+287|109244|reichelt|2006-01-02 20:42:35|gcc-4_1-branch
+288|109245|reichelt|2006-01-02 20:47:21|gcc-4_1-branch
+289|109259|jsm28|2006-01-03 02:09:18|gcc-4_1-branch
+290|109269|mmitchel|2006-01-03 08:40:18|gcc-4_1-branch
+291|109273|rguenth|2006-01-03 09:25:29|gcc-4_1-branch
+292|109276|paolo|2006-01-03 10:57:27|gcc-4_1-branch
+293|109292|steven|2006-01-03 22:37:46|gcc-4_1-branch
+294|109304|tromey|2006-01-04 00:25:28|gcc-4_1-branch
+295|109306|mmitchel|2006-01-04 01:04:03|gcc-4_1-branch
+296|109319|jakub|2006-01-04 09:13:56|gcc-4_1-branch
+297|109320|jakub|2006-01-04 09:16:09|gcc-4_1-branch
+298|109321|jakub|2006-01-04 09:17:16|gcc-4_1-branch
+299|109322|jakub|2006-01-04 09:19:53|gcc-4_1-branch
+300|109341|tromey|2006-01-04 18:26:17|gcc-4_1-branch
+301|109343|mmitchel|2006-01-04 18:49:21|gcc-4_1-branch
+302|109358|kristerw|2006-01-04 23:33:12|gcc-4_1-branch
+303|109369|rakdver|2006-01-05 00:29:34|gcc-4_1-branch
+304|109378|aldot|2006-01-05 12:49:03|gcc-4_1-branch
+305|109384|tromey|2006-01-05 17:40:44|gcc-4_1-branch
+306|109389|eedelman|2006-01-05 21:10:05|gcc-4_1-branch
+307|109401|tromey|2006-01-06 01:06:54|gcc-4_1-branch
+308|109423|tromey|2006-01-06 19:01:34|gcc-4_1-branch
+309|109425|kargl|2006-01-06 20:04:15|gcc-4_1-branch
+310|109428|tromey|2006-01-06 20:26:52|gcc-4_1-branch
+311|109430|jsm28|2006-01-06 20:36:43|gcc-4_1-branch
+312|109434|tromey|2006-01-06 21:23:36|gcc-4_1-branch
+313|109446|tromey|2006-01-07 01:10:51|gcc-4_1-branch
+314|109453|jakub|2006-01-07 18:14:24|gcc-4_1-branch
+315|109467|jvdelisle|2006-01-08 01:53:06|gcc-4_1-branch
+316|109468|jvdelisle|2006-01-08 01:56:22|gcc-4_1-branch
+317|109469|jvdelisle|2006-01-08 02:16:11|gcc-4_1-branch
+318|109470|jvdelisle|2006-01-08 02:17:54|gcc-4_1-branch
+319|109476|dje|2006-01-08 20:54:28|gcc-4_1-branch
+320|109487|paolo|2006-01-09 00:45:57|gcc-4_1-branch
+321|109491|fengwang|2006-01-09 02:54:25|gcc-4_1-branch
+322|109495|kazu|2006-01-09 04:37:09|gcc-4_1-branch
+323|109498|tromey|2006-01-09 06:46:32|gcc-4_1-branch
+324|109500|eedelman|2006-01-09 16:19:22|gcc-4_1-branch
+325|109504|pinskia|2006-01-09 19:46:23|gcc-4_1-branch
+326|109505|tromey|2006-01-09 20:07:22|gcc-4_1-branch
+327|109507|pinskia|2006-01-09 20:20:32|gcc-4_1-branch
+328|109509|pinskia|2006-01-09 20:44:48|gcc-4_1-branch
+329|109511|billingd|2006-01-09 22:48:00|gcc-4_1-branch
+330|109514|tromey|2006-01-09 23:19:03|gcc-4_1-branch
+331|109531|bkoz|2006-01-10 04:01:00|gcc-4_1-branch
+332|109538|jbeulich|2006-01-10 07:36:25|gcc-4_1-branch
+333|109545|bkoz|2006-01-10 17:14:00|gcc-4_1-branch
+334|109546|paolo|2006-01-10 18:09:00|gcc-4_1-branch
+335|109552|ebotcazou|2006-01-10 18:51:33|gcc-4_1-branch
+336|109566|danglin|2006-01-11 00:28:13|gcc-4_1-branch
+337|109574|pault|2006-01-11 07:27:31|gcc-4_1-branch
+338|109583|hubicka|2006-01-11 13:32:44|gcc-4_1-branch
+339|109586|bonzini|2006-01-11 14:29:29|gcc-4_1-branch
+340|109592|aldot|2006-01-11 17:06:44|gcc-4_1-branch
+341|109593|aldot|2006-01-11 17:07:55|gcc-4_1-branch
+342|109595|nathan|2006-01-11 18:09:17|gcc-4_1-branch
+343|109597|jb|2006-01-11 18:55:18|gcc-4_1-branch
+344|109628|hjl|2006-01-12 01:35:21|gcc-4_1-branch
+345|109639|jbeulich|2006-01-12 07:59:07|gcc-4_1-branch
+346|109640|aldot|2006-01-12 12:28:00|gcc-4_1-branch
+347|109644|nathan|2006-01-12 16:20:10|gcc-4_1-branch
+348|109668|pinskia|2006-01-13 14:38:03|gcc-4_1-branch
+349|109677|uweigand|2006-01-13 21:34:53|gcc-4_1-branch
+350|109698|pault|2006-01-14 06:31:08|gcc-4_1-branch
+351|109714|mmitchel|2006-01-15 00:57:22|gcc-4_1-branch
+352|109718|green|2006-01-15 02:59:55|gcc-4_1-branch
+353|109720|green|2006-01-15 03:11:53|gcc-4_1-branch
+354|109741|danglin|2006-01-16 02:46:09|gcc-4_1-branch
+355|109743|aj|2006-01-16 07:06:06|gcc-4_1-branch
+356|109744|rguenth|2006-01-16 09:37:10|gcc-4_1-branch
+357|109748|aph|2006-01-16 15:51:42|gcc-4_1-branch
+358|109749|aph|2006-01-16 15:52:22|gcc-4_1-branch
+359|109765|guerby|2006-01-16 19:35:02|gcc-4_1-branch
+360|109769|green|2006-01-16 20:45:11|gcc-4_1-branch
+361|109776|sayle|2006-01-16 23:29:38|gcc-4_1-branch
+362|109789|danglin|2006-01-17 00:42:39|gcc-4_1-branch
+363|109806|ian|2006-01-17 04:43:15|gcc-4_1-branch
+364|109813|jakub|2006-01-17 10:00:05|gcc-4_1-branch
+365|109815|jakub|2006-01-17 10:13:51|gcc-4_1-branch
+366|109834|aj|2006-01-17 18:48:13|gcc-4_1-branch
+367|109837|tromey|2006-01-17 19:59:29|gcc-4_1-branch
+368|109843|pinskia|2006-01-17 22:33:15|gcc-4_1-branch
+369|109863|jsm28|2006-01-18 01:59:19|gcc-4_1-branch
+370|109868|jvdelisle|2006-01-18 04:27:31|gcc-4_1-branch
+371|109869|jvdelisle|2006-01-18 04:32:16|gcc-4_1-branch
+372|109878|jakub|2006-01-18 08:03:09|gcc-4_1-branch
+373|109880|jakub|2006-01-18 08:06:25|gcc-4_1-branch
+374|109884|paolo|2006-01-18 11:24:59|gcc-4_1-branch
+375|109895|danglin|2006-01-18 16:30:18|gcc-4_1-branch
+376|109897|pbrook|2006-01-18 16:31:50|gcc-4_1-branch
+377|109900|pault|2006-01-18 18:56:43|gcc-4_1-branch
+378|109935|tromey|2006-01-19 00:45:55|gcc-4_1-branch
+379|109943|mmitchel|2006-01-19 06:52:56|gcc-4_1-branch
+380|109947|rsandifo|2006-01-19 07:37:56|gcc-4_1-branch
+381|109952|reichelt|2006-01-19 09:56:44|gcc-4_1-branch
+382|109955|paolo|2006-01-19 12:04:31|gcc-4_1-branch
+383|109958|hjl|2006-01-19 14:42:47|gcc-4_1-branch
+384|109976|reichelt|2006-01-19 17:33:07|gcc-4_1-branch
+385|109986|bkoz|2006-01-19 22:55:55|gcc-4_1-branch
+386|109991|danglin|2006-01-19 23:48:07|gcc-4_1-branch
+387|109993|pbrook|2006-01-20 00:01:55|gcc-4_1-branch
+388|110010|paolo|2006-01-20 02:33:21|gcc-4_1-branch
+389|110016|mmitchel|2006-01-20 03:07:49|gcc-4_1-branch
+390|110026|danglin|2006-01-20 14:32:10|gcc-4_1-branch
+391|110042|tromey|2006-01-20 22:01:51|gcc-4_1-branch
+392|110043|tromey|2006-01-20 22:13:10|gcc-4_1-branch
+393|110059|tromey|2006-01-21 00:44:41|gcc-4_1-branch
+394|110061|jvdelisle|2006-01-21 07:19:39|gcc-4_1-branch
+395|110062|jvdelisle|2006-01-21 07:21:11|gcc-4_1-branch
+396|110070|jsm28|2006-01-21 18:29:08|gcc-4_1-branch
+397|110083|mmitchel|2006-01-22 00:41:58|gcc-4_1-branch
+398|110107|pault|2006-01-23 05:37:47|gcc-4_1-branch
+399|110110|rguenth|2006-01-23 09:50:07|gcc-4_1-branch
+400|110112|rguenth|2006-01-23 10:01:36|gcc-4_1-branch
+401|110114|rguenth|2006-01-23 10:09:58|gcc-4_1-branch
+402|110132|ebotcazou|2006-01-23 17:22:40|gcc-4_1-branch
+403|110135|daney|2006-01-23 17:53:45|gcc-4_1-branch
+404|110145|jakub|2006-01-23 21:51:10|gcc-4_1-branch
+405|110178|tromey|2006-01-24 18:15:39|gcc-4_1-branch
+406|110180|reichelt|2006-01-24 21:38:56|gcc-4_1-branch
+407|110190|daney|2006-01-25 00:11:41|gcc-4_1-branch
+408|110211|paolo|2006-01-25 11:01:46|gcc-4_1-branch
+409|110212|paolo|2006-01-25 11:05:15|gcc-4_1-branch
+410|110213|ebotcazou|2006-01-25 14:06:59|gcc-4_1-branch
+411|110216|kazu|2006-01-25 16:11:17|gcc-4_1-branch
+412|110230|ebotcazou|2006-01-25 23:03:55|gcc-4_1-branch
+413|110232|tobi|2006-01-25 23:38:34|gcc-4_1-branch
+414|110241|tromey|2006-01-26 00:38:24|gcc-4_1-branch
+415|110248|pbrook|2006-01-26 04:09:07|gcc-4_1-branch
+416|110253|paolo|2006-01-26 11:49:48|gcc-4_1-branch
+417|110259|paolo|2006-01-26 16:05:03|gcc-4_1-branch
+418|110267|aoliva|2006-01-26 19:06:06|gcc-4_1-branch
+419|110271|guerby|2006-01-26 20:40:46|gcc-4_1-branch
+420|110280|danglin|2006-01-26 22:26:49|gcc-4_1-branch
+421|110283|sje|2006-01-26 22:40:15|gcc-4_1-branch
+422|110302|eedelman|2006-01-27 17:19:36|gcc-4_1-branch
+423|110305|jakub|2006-01-27 20:03:59|gcc-4_1-branch
+424|110310|pault|2006-01-27 22:16:04|gcc-4_1-branch
+425|110330|mmitchel|2006-01-28 19:24:11|gcc-4_1-branch
+426|110331|mmitchel|2006-01-28 19:24:45|gcc-4_1-branch
+427|110337|mmitchel|2006-01-28 22:10:17|gcc-4_1-branch
+428|110341|hp|2006-01-28 22:55:01|gcc-4_1-branch
+429|110343|hp|2006-01-28 22:58:24|gcc-4_1-branch
+430|110344|hp|2006-01-28 23:00:24|gcc-4_1-branch
+431|110345|hp|2006-01-28 23:01:20|gcc-4_1-branch
+432|110346|hp|2006-01-28 23:03:00|gcc-4_1-branch
+433|110347|hp|2006-01-28 23:03:58|gcc-4_1-branch
+434|110361|jvdelisle|2006-01-29 03:50:23|gcc-4_1-branch
+435|110362|jvdelisle|2006-01-29 03:58:42|gcc-4_1-branch
+436|110363|jvdelisle|2006-01-29 04:00:08|gcc-4_1-branch
+437|110383|ebotcazou|2006-01-29 22:24:10|gcc-4_1-branch
+438|110394|pault|2006-01-30 05:45:06|gcc-4_1-branch
+439|110401|amylaar|2006-01-30 16:19:11|gcc-4_1-branch
+440|110402|aph|2006-01-30 16:25:40|gcc-4_1-branch
+441|110404|amylaar|2006-01-30 17:01:58|gcc-4_1-branch
+442|110406|sje|2006-01-30 17:08:10|gcc-4_1-branch
+443|110408|amylaar|2006-01-30 19:02:39|gcc-4_1-branch
+444|110423|uweigand|2006-01-31 01:09:36|gcc-4_1-branch
+445|110433|rguenth|2006-01-31 09:46:21|gcc-4_1-branch
+446|110438|mark|2006-01-31 13:33:03|gcc-4_1-branch
+447|110444|nathan|2006-01-31 17:06:56|gcc-4_1-branch
+448|110447|eedelman|2006-01-31 20:45:40|gcc-4_1-branch
+449|110450|carlos|2006-01-31 21:59:53|gcc-4_1-branch
+450|110452|jakub|2006-01-31 22:37:17|gcc-4_1-branch
+451|110467|mmitchel|2006-02-01 02:55:45|gcc-4_1-branch
+452|110482|paolo|2006-02-01 21:57:48|gcc-4_1-branch
+453|110483|paolo|2006-02-01 22:00:10|gcc-4_1-branch
+454|110496|tromey|2006-02-02 00:48:20|gcc-4_1-branch
+455|110498|tromey|2006-02-02 01:47:04|gcc-4_1-branch
+456|110538|krebbel|2006-02-03 07:44:12|gcc-4_1-branch
+457|110542|amodra|2006-02-03 12:05:51|gcc-4_1-branch
+458|110549|sje|2006-02-03 18:02:04|gcc-4_1-branch
+459|110551|pinskia|2006-02-03 18:31:14|gcc-4_1-branch
+460|110560|kargl|2006-02-03 21:32:14|gcc-4_1-branch
+461|110564|jason|2006-02-03 21:56:03|gcc-4_1-branch
+462|110568|rth|2006-02-03 23:46:44|gcc-4_1-branch
+463|110581|fitzsim|2006-02-04 01:09:11|gcc-4_1-branch
+464|110582|danglin|2006-02-04 01:12:46|gcc-4_1-branch
+465|110593|mark|2006-02-04 20:21:48|gcc-4_1-branch
+466|110597|aoliva|2006-02-04 22:13:20|gcc-4_1-branch
+467|110600|tkoenig|2006-02-05 00:14:37|gcc-4_1-branch
+468|110612|jakub|2006-02-05 11:27:20|gcc-4_1-branch
+469|110616|danglin|2006-02-05 16:18:20|gcc-4_1-branch
+470|110624|ebotcazou|2006-02-05 21:53:48|gcc-4_1-branch
+471|110650|jakub|2006-02-06 16:07:46|gcc-4_1-branch
+472|110660|pinskia|2006-02-06 18:49:05|gcc-4_1-branch
+473|110662|mark|2006-02-06 19:18:36|gcc-4_1-branch
+474|110666|andreast|2006-02-06 21:48:30|gcc-4_1-branch
+475|110667|tromey|2006-02-06 22:06:21|gcc-4_1-branch
+476|110669|tromey|2006-02-06 22:41:34|gcc-4_1-branch
+477|110670|janis|2006-02-06 22:58:10|gcc-4_1-branch
+478|110683|tromey|2006-02-07 01:05:55|gcc-4_1-branch
+479|110689|jakub|2006-02-07 06:52:17|gcc-4_1-branch
+480|110698|paolo|2006-02-07 15:11:34|gcc-4_1-branch
+481|110701|tobi|2006-02-07 17:35:25|gcc-4_1-branch
+482|110703|aph|2006-02-07 18:15:45|gcc-4_1-branch
+483|110708|ebotcazou|2006-02-07 18:54:16|gcc-4_1-branch
+484|110718|ebotcazou|2006-02-07 20:51:43|gcc-4_1-branch
+485|110722|danglin|2006-02-07 22:11:30|gcc-4_1-branch
+486|110740|fitzsim|2006-02-08 05:55:47|gcc-4_1-branch
+487|110748|reichelt|2006-02-08 11:03:09|gcc-4_1-branch
+488|110752|reichelt|2006-02-08 11:23:17|gcc-4_1-branch
+489|110756|tobi|2006-02-08 13:14:43|gcc-4_1-branch
+490|110764|tkoenig|2006-02-08 20:14:00|gcc-4_1-branch
+491|110791|ebotcazou|2006-02-09 12:23:59|gcc-4_1-branch
+492|110795|dnovillo|2006-02-09 13:40:52|gcc-4_1-branch
+493|110797|pinskia|2006-02-09 14:00:59|gcc-4_1-branch
+494|110798|aph|2006-02-09 14:03:17|gcc-4_1-branch
+495|110802|pinskia|2006-02-09 14:46:04|gcc-4_1-branch
+496|110805|ro|2006-02-09 17:26:14|gcc-4_1-branch
+497|110808|ro|2006-02-09 17:30:56|gcc-4_1-branch
+498|110831|tromey|2006-02-10 01:54:34|gcc-4_1-branch
+499|110838|jason|2006-02-10 17:32:10|gcc-4_1-branch
+500|110847|tromey|2006-02-10 19:52:44|gcc-4_1-branch
+501|110848|kargl|2006-02-10 20:09:41|gcc-4_1-branch
+502|110851|jakub|2006-02-10 20:58:33|gcc-4_1-branch
+503|110856|kargl|2006-02-10 23:20:10|gcc-4_1-branch
+504|110872|jakub|2006-02-11 08:38:51|gcc-4_1-branch
+505|110875|ghazi|2006-02-11 19:16:31|gcc-4_1-branch
+506|110879|dje|2006-02-11 21:34:46|gcc-4_1-branch
+507|110887|jason|2006-02-12 08:00:51|gcc-4_1-branch
+508|110890|jason|2006-02-12 16:07:04|gcc-4_1-branch
+509|110894|tobi|2006-02-12 18:31:40|gcc-4_1-branch
+510|110921|pault|2006-02-13 19:32:02|gcc-4_1-branch
+511|110928|jakub|2006-02-13 21:29:13|gcc-4_1-branch
+512|110930|pault|2006-02-13 21:35:09|gcc-4_1-branch
+513|110937|tromey|2006-02-13 22:58:37|gcc-4_1-branch
+514|110948|danglin|2006-02-14 00:23:57|gcc-4_1-branch
+515|110960|pault|2006-02-14 07:18:44|gcc-4_1-branch
+516|110962|rguenth|2006-02-14 09:54:07|gcc-4_1-branch
+517|110970|amylaar|2006-02-14 14:36:15|gcc-4_1-branch
+518|110971|amylaar|2006-02-14 14:46:33|gcc-4_1-branch
+519|110973|fxcoudert|2006-02-14 14:50:40|gcc-4_1-branch
+520|110974|dberlin|2006-02-14 15:08:01|gcc-4_1-branch
+521|110975|fxcoudert|2006-02-14 15:47:49|gcc-4_1-branch
+522|110978|matz|2006-02-14 16:01:32|gcc-4_1-branch
+523|110980|reichelt|2006-02-14 16:08:06|gcc-4_1-branch
+524|110982|matz|2006-02-14 16:12:56|gcc-4_1-branch
+525|110986|ro|2006-02-14 16:50:45|gcc-4_1-branch
+526|110988|ro|2006-02-14 17:28:02|gcc-4_1-branch
+527|110989|eedelman|2006-02-14 17:34:07|gcc-4_1-branch
+528|110995|jb|2006-02-14 20:21:15|gcc-4_1-branch
+529|111014|danglin|2006-02-15 02:54:08|gcc-4_1-branch
+530|111016|doko|2006-02-15 03:48:39|gcc-4_1-branch
+531|111017|hp|2006-02-15 04:14:02|gcc-4_1-branch
+532|111111|amylaar|2006-02-15 13:28:05|gcc-4_1-branch
+533|111138|rakdver|2006-02-16 15:23:24|gcc-4_1-branch
+534|111145|sayle|2006-02-16 16:45:49|gcc-4_1-branch
+535|111176|jakub|2006-02-17 08:58:46|gcc-4_1-branch
+536|111179|ebotcazou|2006-02-17 11:21:20|gcc-4_1-branch
+537|111211|sayle|2006-02-17 21:38:59|gcc-4_1-branch
+538|111227|jakub|2006-02-18 07:49:27|gcc-4_1-branch
+539|111228|jakub|2006-02-18 08:35:54|gcc-4_1-branch
+540|111231|mmitchel|2006-02-18 08:37:34|gcc-4_1-branch
+541|111233|mmitchel|2006-02-18 09:40:03|gcc-4_1-branch
+542|111238|sje|2006-02-18 15:59:57|gcc-4_1-branch
+543|111240|danglin|2006-02-18 16:12:20|gcc-4_1-branch
+544|111248|jakub|2006-02-18 19:04:08|gcc-4_1-branch
+545|111252|danglin|2006-02-18 21:29:34|gcc-4_1-branch
+546|111257|mark|2006-02-19 00:08:09|gcc-4_1-branch
+547|111276|mmitchel|2006-02-19 19:31:22|gcc-4_1-branch
+548|111277|mmitchel|2006-02-19 19:46:54|gcc-4_1-branch
+549|111278|mmitchel|2006-02-19 19:56:01|gcc-4_1-branch
+550|111297|jakub|2006-02-20 09:26:29|gcc-4_1-branch
+551|111311|eedelman|2006-02-20 20:06:49|gcc-4_1-branch
+552|111340|ro|2006-02-21 19:17:27|gcc-4_1-branch
+553|111371|paolo|2006-02-22 20:03:32|gcc-4_1-branch
+554|111409|mmitchel|2006-02-24 01:18:27|gcc-4_1-branch
+555|111411|mmitchel|2006-02-24 01:37:22|gcc-4_1-branch
+556|111412|mmitchel|2006-02-24 01:47:22|gcc-4_1-branch
+557|111413|mmitchel|2006-02-24 03:49:43|gcc-4_1-branch
+558|111500|mmitchel|2006-02-28 00:29:00|gcc-4_1-branch
+559|111517|mmitchel|2006-02-28 08:09:17|gcc-4_1-branch
+560|111519|mmitchel|2006-02-28 08:12:35|gcc-4_1-branch
+561|111520|mmitchel|2006-02-28 08:14:04|gcc-4_1-branch
+562|111521|mmitchel|2006-02-28 08:27:36|gcc-4_1-branch
+563|111522|mmitchel|2006-02-28 08:27:44|gcc-4_1-branch
+564|111523|mmitchel|2006-02-28 08:27:53|gcc-4_1-branch
+565|111524|mmitchel|2006-02-28 08:27:55|gcc-4_1-branch
+566|111525|mmitchel|2006-02-28 08:27:59|gcc-4_1-branch
+567|111526|mmitchel|2006-02-28 08:28:02|gcc-4_1-branch
+568|111527|mmitchel|2006-02-28 08:28:06|gcc-4_1-branch
diff --git a/contrib/reghunt/examples/29106.log b/contrib/reghunt/examples/29106.log
new file mode 100644
index 000000000..fd4b6d863
--- /dev/null
+++ b/contrib/reghunt/examples/29106.log
@@ -0,0 +1,111 @@
+Mon Feb 16 15:16:01 PST 2009 LATER_THAN = 1
+Mon Feb 16 15:16:01 PST 2009 EARLIER_THAN = 568
+Mon Feb 16 15:16:01 PST 2009 svn checkout begun for id 568, rev 111527
+Mon Feb 16 15:19:11 PST 2009 svn checkout done
+Mon Feb 16 15:19:11 PST 2009 building GCC (c,c++) for id 568
+Mon Feb 16 15:29:17 PST 2009 no output for bug 29106, id 568
+Mon Feb 16 15:29:17 PST 2009 result for high patch 568 is as expected
+Mon Feb 16 15:29:17 PST 2009 svn update begun for id 1, rev 107221
+Mon Feb 16 15:29:48 PST 2009 svn update done
+Mon Feb 16 15:29:49 PST 2009 building GCC (c,c++) for id 1
+Mon Feb 16 15:40:07 PST 2009 test ran successfully for bug 29106, id 1
+Mon Feb 16 15:40:07 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 15:40:07 PST 2009 svn update begun for id 284, rev 109215
+Mon Feb 16 15:40:24 PST 2009 svn update done
+Mon Feb 16 15:40:24 PST 2009 building GCC (c,c++) for id 284
+Mon Feb 16 15:50:30 PST 2009 test ran successfully for bug 29106, id 284
+Mon Feb 16 15:50:30 PST 2009 search patches later than 284
+Mon Feb 16 15:50:30 PST 2009 svn update begun for id 426, rev 110331
+Mon Feb 16 15:50:59 PST 2009 svn update done
+Mon Feb 16 15:51:00 PST 2009 building GCC (c,c++) for id 426
+Mon Feb 16 16:01:06 PST 2009 test ran successfully for bug 29106, id 426
+Mon Feb 16 16:01:06 PST 2009 search patches later than 426
+Mon Feb 16 16:01:06 PST 2009 svn update begun for id 497, rev 110808
+Mon Feb 16 16:01:21 PST 2009 svn update done
+Mon Feb 16 16:01:22 PST 2009 building GCC (c,c++) for id 497
+Mon Feb 16 16:11:29 PST 2009 test ran successfully for bug 29106, id 497
+Mon Feb 16 16:11:29 PST 2009 search patches later than 497
+Mon Feb 16 16:11:29 PST 2009 svn update begun for id 532, rev 111111
+Mon Feb 16 16:11:38 PST 2009 svn update done
+Mon Feb 16 16:11:39 PST 2009 building GCC (c,c++) for id 532
+Mon Feb 16 16:21:47 PST 2009 test ran successfully for bug 29106, id 532
+Mon Feb 16 16:21:47 PST 2009 search patches later than 532
+Mon Feb 16 16:21:48 PST 2009 svn update begun for id 550, rev 111297
+Mon Feb 16 16:21:55 PST 2009 svn update done
+Mon Feb 16 16:21:56 PST 2009 building GCC (c,c++) for id 550
+Mon Feb 16 16:32:07 PST 2009 no output for bug 29106, id 550
+Mon Feb 16 16:32:07 PST 2009 search patches earlier than 550
+Mon Feb 16 16:32:07 PST 2009 svn update begun for id 541, rev 111233
+Mon Feb 16 16:32:11 PST 2009 svn update done
+Mon Feb 16 16:32:12 PST 2009 building GCC (c,c++) for id 541
+Mon Feb 16 16:42:19 PST 2009 no output for bug 29106, id 541
+Mon Feb 16 16:42:19 PST 2009 search patches earlier than 541
+Mon Feb 16 16:42:19 PST 2009 svn update begun for id 536, rev 111179
+Mon Feb 16 16:42:26 PST 2009 svn update done
+Mon Feb 16 16:42:26 PST 2009 building GCC (c,c++) for id 536
+Mon Feb 16 16:52:30 PST 2009 test ran successfully for bug 29106, id 536
+Mon Feb 16 16:52:30 PST 2009 search patches later than 536
+Mon Feb 16 16:52:30 PST 2009 svn update begun for id 538, rev 111227
+Mon Feb 16 16:52:35 PST 2009 svn update done
+Mon Feb 16 16:52:35 PST 2009 building GCC (c,c++) for id 538
+Mon Feb 16 17:02:35 PST 2009 test ran successfully for bug 29106, id 538
+Mon Feb 16 17:02:35 PST 2009 search patches later than 538
+Mon Feb 16 17:02:35 PST 2009 svn update begun for id 539, rev 111228
+Mon Feb 16 17:02:39 PST 2009 svn update done
+Mon Feb 16 17:02:39 PST 2009 building GCC (c,c++) for id 539
+Mon Feb 16 17:12:42 PST 2009 test ran successfully for bug 29106, id 539
+Mon Feb 16 17:12:42 PST 2009 search patches later than 539
+Mon Feb 16 17:12:42 PST 2009 svn update begun for id 540, rev 111231
+Mon Feb 16 17:12:47 PST 2009 svn update done
+Mon Feb 16 17:12:47 PST 2009 building GCC (c,c++) for id 540
+Mon Feb 16 17:22:53 PST 2009 no output for bug 29106, id 540
+Mon Feb 16 17:22:53 PST 2009 search patches earlier than 540
+Test result changes with id 540
+------------------------------------------------------------------------
+r111231 | mmitchel | 2006-02-18 08:37:34 +0000 (Sat, 18 Feb 2006) | 41 lines
+
+ PR c++/26266
+ * cp-tree.h (cp_finish_decl): Adjust declaration.
+ (grokbitfield): Likewise.
+ (finish_static_data_member_decl): Likewise.
+ * init.c (constant_value_1): Ensure processing_template_decl when
+ folding non-dependent initializers for static data members of
+ dependent types. Return error_mark_node for erroneous
+ initailizers.
+ * class.c (get_vtable_decl): Use finish_decl, not cp_finish_decl.
+ * decl.c (cp_make_fname_decl): Adjust call to cp_finish_decl.
+ (cp_finish_decl): Add init_const_expr_p parameter. Set
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
+ (finish_decl): Adjust call to cp_finish_decl.
+ (compute_array_index_type): Robustify.
+ (start_method): Use finish_decl, not cp_finish_decl.
+ * rtti.c (emit_tinfo_decl): Likewise.
+ * except.c (initialize_handler_parm): Adjust call to
+ cp_finish_decl.
+ (expand_start_catch_block): Likewise.
+ * cvt.c (build_up_reference): Adjust call to cp_finish_decl.
+ * pt.c (instantiate_class_template): Adjust call to
+ finish_static_data_member_decl.
+ (tsubst_expr): Use finish_decl, not cp_finish_decl.
+ (instantiate_decl): Adjust call to cp_finish_decl.
+ * name-lookup.c (pushdecl_top_level_1): Use finish_decl, not
+ cp_finish_decl.
+ * decl2.c (finish_static_data_member_decl): Add init_const_expr_p
+ parameter.
+ (grokfield): Likewise.
+ * parser.c (cp_parser_condition): Check for constant initializers.
+ (cp_parser_init_declarator): Adjust calls to grokfield and
+ cp_finish_decl. Don't set
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P here.
+ (cp_parser_member_declaration): Likewise.
+ (cp_parser_objc_class_ivars): Likewise.
+ PR c++/26266
+ * g++.dg/template/static22.C: New test.
+ * g++.dg/template/static23.C: New test.
+ * g++.dg/template/static24.C: New test.
+ * g++.dg/template/non-dependent13.C: New test.
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=111231
+ r111231 | mmitchel | 2006-02-18 08:37:34 +0000 (Sat, 18 Feb 2006)
diff --git a/contrib/reghunt/examples/29106.test b/contrib/reghunt/examples/29106.test
new file mode 100755
index 000000000..28f89a8e5
--- /dev/null
+++ b/contrib/reghunt/examples/29106.test
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: test compilation failed for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+./a.out >> ${LOG} 2>&1
+if [ $? -ne 0 ]; then
+ echo "`date` unexpected failure: test run aborted for ${MSGID}"
+ exit $REG_ERROR
+fi
+
+grep -q 'size of thingy is 4' $LOG
+if [ $? -ne 0 ]; then
+ echo "`date` no output for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+echo "`date` test ran successfully for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/examples/29478.c b/contrib/reghunt/examples/29478.c
new file mode 100644
index 000000000..0490f4d9d
--- /dev/null
+++ b/contrib/reghunt/examples/29478.c
@@ -0,0 +1,12 @@
+struct block;
+
+static int
+remove_out_of_scope_renamings (struct block *current_block)
+{
+ return 1;
+}
+int
+ada_lookup_symbol_list (const struct block *block0)
+{
+ return remove_out_of_scope_renamings ((struct block *) block0);
+}
diff --git a/contrib/reghunt/examples/29478.config b/contrib/reghunt/examples/29478.config
new file mode 100644
index 000000000..1398f6012
--- /dev/null
+++ b/contrib/reghunt/examples/29478.config
@@ -0,0 +1,16 @@
+BUGID=29478
+FIND=break
+LANG=c
+BUILD_KIND=simple
+BUG_KIND=bogus-warning
+OPTS="-O1"
+
+. ./common.config
+
+#LOW_PATCH=212
+#HIGH_PATCH=222
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+#msg 0 'NOTE: skipping high patch, already verified'
+#SKIP_HIGH=1
diff --git a/contrib/reghunt/examples/29478.list b/contrib/reghunt/examples/29478.list
new file mode 100644
index 000000000..a578a84c6
--- /dev/null
+++ b/contrib/reghunt/examples/29478.list
@@ -0,0 +1,340 @@
+1|115866|reichelt|2006-08-01 23:45:11|trunk
+2|115873|hubicka|2006-08-02 09:34:34|trunk
+3|115874|drow|2006-08-02 13:31:56|trunk
+4|115881|tkoenig|2006-08-02 20:05:23|trunk
+5|115883|andreast|2006-08-02 20:18:05|trunk
+6|115886|mmitchel|2006-08-02 20:35:41|trunk
+7|115887|rguenth|2006-08-02 20:48:59|trunk
+8|115893|reichelt|2006-08-03 02:30:49|trunk
+9|115896|reichelt|2006-08-03 02:49:07|trunk
+10|115899|schwab|2006-08-03 09:28:37|trunk
+11|115902|dje|2006-08-03 13:48:01|trunk
+12|115903|danglin|2006-08-03 16:32:29|trunk
+13|115907|tromey|2006-08-03 17:13:51|trunk
+14|115910|dorit|2006-08-03 20:35:05|trunk
+15|115911|paolo|2006-08-03 21:11:13|trunk
+16|115912|hubicka|2006-08-03 21:21:22|trunk
+17|115919|mmitchel|2006-08-04 04:58:36|trunk
+18|115921|kazu|2006-08-04 06:10:15|trunk
+19|115923|paolo|2006-08-04 09:34:17|trunk
+20|115924|danglin|2006-08-04 14:15:37|trunk
+21|115927|hubicka|2006-08-04 17:03:32|trunk
+22|115928|hubicka|2006-08-04 17:05:38|trunk
+23|115931|lmillward|2006-08-04 18:08:14|trunk
+24|115934|kseitz|2006-08-04 20:34:02|trunk
+25|115942|tromey|2006-08-05 01:28:36|trunk
+26|115943|tromey|2006-08-05 03:17:07|trunk
+27|115947|paolo|2006-08-05 10:11:13|trunk
+28|115949|fxcoudert|2006-08-05 13:37:52|trunk
+29|115952|reichelt|2006-08-05 23:08:54|trunk
+30|115955|reichelt|2006-08-05 23:26:38|trunk
+31|115957|reichelt|2006-08-05 23:41:22|trunk
+32|115963|kargl|2006-08-06 01:38:46|trunk
+33|115966|pault|2006-08-06 04:58:04|trunk
+34|115968|schwab|2006-08-06 10:15:33|trunk
+35|115969|bonzini|2006-08-06 12:06:31|trunk
+36|115972|paolo|2006-08-06 14:45:04|trunk
+37|115973|schwab|2006-08-06 17:05:28|trunk
+38|115974|amylaar|2006-08-06 19:43:03|trunk
+39|115976|tromey|2006-08-06 21:52:04|trunk
+40|115977|tromey|2006-08-06 22:43:05|trunk
+41|115978|danglin|2006-08-06 23:41:57|trunk
+42|115979|danglin|2006-08-06 23:56:24|trunk
+43|115980|danglin|2006-08-07 00:04:06|trunk
+44|115987|danglin|2006-08-07 00:22:26|trunk
+45|115988|ebotcazou|2006-08-07 06:44:41|trunk
+46|115991|ebotcazou|2006-08-07 07:23:49|trunk
+47|115992|ebotcazou|2006-08-07 07:45:11|trunk
+48|115993|ebotcazou|2006-08-07 08:13:22|trunk
+49|115994|ebotcazou|2006-08-07 08:18:53|trunk
+50|115995|victork|2006-08-07 11:28:31|trunk
+51|115996|gary|2006-08-07 14:14:14|trunk
+52|115998|gary|2006-08-07 14:42:48|trunk
+53|115999|gary|2006-08-07 14:48:59|trunk
+54|116003|tromey|2006-08-07 20:37:50|trunk
+55|116006|dannysmith|2006-08-07 23:40:54|trunk
+56|116012|ebotcazou|2006-08-08 07:56:32|trunk
+57|116031|aoliva|2006-08-09 06:46:22|trunk
+58|116032|gary|2006-08-09 08:38:28|trunk
+59|116033|gary|2006-08-09 08:46:34|trunk
+60|116034|paolo|2006-08-09 09:56:15|trunk
+61|116038|gary|2006-08-09 14:59:16|trunk
+62|116041|ebotcazou|2006-08-09 16:38:45|trunk
+63|116043|lmillward|2006-08-09 18:43:06|trunk
+64|116044|tromey|2006-08-09 19:00:54|trunk
+65|116045|nathan|2006-08-09 19:09:06|trunk
+66|116049|paolo|2006-08-09 23:39:16|trunk
+67|116058|gary|2006-08-10 09:56:03|trunk
+68|116059|paolo|2006-08-10 10:35:27|trunk
+69|116060|dorit|2006-08-10 12:07:22|trunk
+70|116061|paolo|2006-08-10 14:38:11|trunk
+71|116064|pbrook|2006-08-10 16:31:40|trunk
+72|116069|aph|2006-08-10 19:35:07|trunk
+73|116071|ebotcazou|2006-08-10 22:13:42|trunk
+74|116072|ebotcazou|2006-08-10 22:17:15|trunk
+75|116079|rguenth|2006-08-11 07:44:45|trunk
+76|116081|paolo|2006-08-11 10:39:37|trunk
+77|116088|ebotcazou|2006-08-11 19:01:45|trunk
+78|116091|dje|2006-08-11 20:40:52|trunk
+79|116097|fxcoudert|2006-08-12 01:03:29|trunk
+80|116098|fxcoudert|2006-08-12 07:30:04|trunk
+81|116099|jakub|2006-08-12 13:39:05|trunk
+82|116107|doko|2006-08-13 07:27:30|trunk
+83|116109|mueller|2006-08-13 15:04:41|trunk
+84|116111|pinskia|2006-08-13 16:49:24|trunk
+85|116116|pinskia|2006-08-13 20:16:46|trunk
+86|116124|rsandifo|2006-08-14 11:55:52|trunk
+87|116128|gary|2006-08-14 14:24:52|trunk
+88|116129|rguenth|2006-08-14 15:05:37|trunk
+89|116134|kazu|2006-08-14 17:55:03|trunk
+90|116137|jason|2006-08-14 21:25:03|trunk
+91|116139|mark|2006-08-14 23:12:35|trunk
+92|116140|sje|2006-08-14 23:13:54|trunk
+93|116141|sje|2006-08-14 23:15:57|trunk
+94|116142|mrs|2006-08-14 23:40:41|trunk
+95|116148|pinskia|2006-08-15 01:43:28|trunk
+96|116149|paolo|2006-08-15 02:28:45|trunk
+97|116151|paolo|2006-08-15 09:08:31|trunk
+98|116152|andreast|2006-08-15 09:36:39|trunk
+99|116153|jakub|2006-08-15 14:56:28|trunk
+100|116154|jakub|2006-08-15 14:57:52|trunk
+101|116155|paolo|2006-08-15 15:11:24|trunk
+102|116157|reichelt|2006-08-15 16:52:25|trunk
+103|116159|nickc|2006-08-15 17:06:18|trunk
+104|116160|lmillward|2006-08-15 17:21:09|trunk
+105|116163|mrs|2006-08-15 18:01:19|trunk
+106|116167|kgallowa|2006-08-15 20:40:10|trunk
+107|116168|kgallowa|2006-08-15 21:04:05|trunk
+108|116169|kgallowa|2006-08-15 21:10:01|trunk
+109|116170|dannysmith|2006-08-15 21:46:30|trunk
+110|116171|jvdelisle|2006-08-15 23:03:28|trunk
+111|116172|jvdelisle|2006-08-15 23:06:44|trunk
+112|116173|jvdelisle|2006-08-15 23:14:03|trunk
+113|116180|nickc|2006-08-16 08:20:51|trunk
+114|116187|mrs|2006-08-16 20:36:23|trunk
+115|116188|reichelt|2006-08-16 20:50:18|trunk
+116|116189|rakdver|2006-08-16 21:14:11|trunk
+117|116190|rakdver|2006-08-16 21:25:39|trunk
+118|116191|reichelt|2006-08-16 21:35:18|trunk
+119|116194|jsm28|2006-08-16 23:10:46|trunk
+120|116196|dj|2006-08-17 00:05:07|trunk
+121|116197|rakdver|2006-08-17 00:13:24|trunk
+122|116203|jason|2006-08-17 00:51:37|trunk
+123|116204|tromey|2006-08-17 01:03:21|trunk
+124|116205|pinskia|2006-08-17 01:56:47|trunk
+125|116206|tromey|2006-08-17 01:57:55|trunk
+126|116207|danglin|2006-08-17 02:26:59|trunk
+127|116208|bonzini|2006-08-17 07:02:55|trunk
+128|116209|jakub|2006-08-17 07:58:02|trunk
+129|116210|reichelt|2006-08-17 08:02:39|trunk
+130|116211|reichelt|2006-08-17 08:06:27|trunk
+131|116213|rakdver|2006-08-17 08:22:05|trunk
+132|116214|mkuvyrkov|2006-08-17 08:48:37|trunk
+133|116215|aoliva|2006-08-17 08:55:02|trunk
+134|116217|reichelt|2006-08-17 09:07:39|trunk
+135|116220|hubicka|2006-08-17 09:44:12|trunk
+136|116221|hubicka|2006-08-17 10:08:31|trunk
+137|116222|jakub|2006-08-17 11:52:26|trunk
+138|116224|amylaar|2006-08-17 13:28:03|trunk
+139|116227|hjl|2006-08-17 17:03:34|trunk
+140|116230|andreast|2006-08-17 19:07:29|trunk
+141|116237|uros|2006-08-18 05:48:13|trunk
+142|116240|paolo|2006-08-18 15:42:05|trunk
+143|116245|paolo|2006-08-18 17:15:43|trunk
+144|116247|tromey|2006-08-18 17:27:29|trunk
+145|116249|jsm28|2006-08-18 19:15:31|trunk
+146|116251|tromey|2006-08-18 19:58:06|trunk
+147|116258|rmathew|2006-08-19 15:35:11|trunk
+148|116261|eedelman|2006-08-19 21:05:59|trunk
+149|116268|pault|2006-08-20 05:45:43|trunk
+150|116270|dannysmith|2006-08-20 08:46:13|trunk
+151|116271|jb|2006-08-20 09:22:04|trunk
+152|116273|paolo|2006-08-20 16:05:05|trunk
+153|116274|hubicka|2006-08-20 18:46:54|trunk
+154|116276|mmitchel|2006-08-20 23:53:10|trunk
+155|116277|hubicka|2006-08-21 00:00:14|trunk
+156|116284|hubicka|2006-08-21 01:42:39|trunk
+157|116285|hubicka|2006-08-21 01:53:11|trunk
+158|116291|shinwell|2006-08-21 10:10:58|trunk
+159|116296|ghazi|2006-08-21 12:34:25|trunk
+160|116300|hainque|2006-08-21 16:01:03|trunk
+161|116301|lmillward|2006-08-21 17:27:48|trunk
+162|116302|lmillward|2006-08-21 17:34:44|trunk
+163|116303|lmillward|2006-08-21 17:41:18|trunk
+164|116304|amylaar|2006-08-21 18:07:00|trunk
+165|116305|lmillward|2006-08-21 18:43:36|trunk
+166|116308|shinwell|2006-08-21 19:15:15|trunk
+167|116311|jason|2006-08-21 20:54:57|trunk
+168|116312|jason|2006-08-21 20:56:28|trunk
+169|116313|tromey|2006-08-21 22:07:30|trunk
+170|116321|sayle|2006-08-22 12:42:41|trunk
+171|116323|dberlin|2006-08-22 14:04:16|trunk
+172|116324|aph|2006-08-22 15:00:37|trunk
+173|116325|hubicka|2006-08-22 15:44:56|trunk
+174|116326|rguenth|2006-08-22 16:26:32|trunk
+175|116327|paolo|2006-08-22 18:07:55|trunk
+176|116328|paolo|2006-08-22 18:15:22|trunk
+177|116329|jason|2006-08-22 18:27:26|trunk
+178|116330|jason|2006-08-22 18:51:40|trunk
+179|116331|geoffk|2006-08-22 19:16:03|trunk
+180|116332|fitzsim|2006-08-22 20:37:36|trunk
+181|116333|pmj|2006-08-22 22:34:45|trunk
+182|116334|paolo|2006-08-22 22:57:53|trunk
+183|116341|pinskia|2006-08-23 02:56:43|trunk
+184|116342|jason|2006-08-23 04:27:43|trunk
+185|116345|bkoz|2006-08-23 10:16:31|trunk
+186|116350|jason|2006-08-23 14:04:24|trunk
+187|116355|dannysmith|2006-08-23 18:30:57|trunk
+188|116356|stuart|2006-08-23 21:41:35|trunk
+189|116357|kseitz|2006-08-23 22:18:08|trunk
+190|116358|hubicka|2006-08-23 22:29:14|trunk
+191|116361|kargl|2006-08-23 23:10:39|trunk
+192|116362|kargl|2006-08-23 23:41:19|trunk
+193|116368|jvdelisle|2006-08-24 01:10:55|trunk
+194|116369|pault|2006-08-24 04:47:28|trunk
+195|116374|hubicka|2006-08-24 13:30:45|trunk
+196|116375|gary|2006-08-24 14:28:49|trunk
+197|116376|kargl|2006-08-24 14:43:42|trunk
+198|116379|jason|2006-08-24 15:54:39|trunk
+199|116383|kseitz|2006-08-24 18:55:53|trunk
+200|116384|hubicka|2006-08-24 19:43:43|trunk
+201|116385|mrs|2006-08-24 19:45:30|trunk
+202|116392|dannysmith|2006-08-25 00:24:10|trunk
+203|116393|pinskia|2006-08-25 07:13:48|trunk
+204|116394|nickc|2006-08-25 07:21:47|trunk
+205|116395|rguenth|2006-08-25 10:32:03|trunk
+206|116399|kazu|2006-08-25 13:39:02|trunk
+207|116400|dje|2006-08-25 13:53:39|trunk
+208|116402|paolo|2006-08-25 16:02:23|trunk
+209|116403|bwilson|2006-08-25 16:13:54|trunk
+210|116409|nathan|2006-08-25 16:56:07|trunk
+211|116410|mmitchel|2006-08-25 17:03:50|trunk
+212|116411|mmitchel|2006-08-25 17:04:35|trunk
+213|116415|paolo|2006-08-25 17:11:10|trunk
+214|116424|amylaar|2006-08-25 18:51:57|trunk
+215|116425|dje|2006-08-25 18:56:08|trunk
+216|116431|pbrook|2006-08-25 20:39:48|trunk
+217|116435|jsm28|2006-08-25 21:11:46|trunk
+218|116436|jsm28|2006-08-25 21:14:24|trunk
+219|116439|rguenth|2006-08-25 22:01:28|trunk
+220|116450|jsm28|2006-08-25 23:01:16|trunk
+221|116455|reichelt|2006-08-26 00:17:10|trunk
+222|116463|reichelt|2006-08-26 00:25:59|trunk
+223|116464|reichelt|2006-08-26 00:37:48|trunk
+224|116467|jakub|2006-08-26 07:31:30|trunk
+225|116468|mmitchel|2006-08-26 16:23:33|trunk
+226|116469|bwilson|2006-08-26 17:03:22|trunk
+227|116470|kargl|2006-08-26 17:13:42|trunk
+228|116472|kargl|2006-08-26 17:28:09|trunk
+229|116473|lmillward|2006-08-26 17:41:18|trunk
+230|116475|jsm28|2006-08-26 18:30:44|trunk
+231|116477|rguenth|2006-08-26 19:27:17|trunk
+232|116478|dje|2006-08-26 21:36:39|trunk
+233|116479|jsm28|2006-08-26 21:38:46|trunk
+234|116480|kargl|2006-08-26 21:55:28|trunk
+235|116481|sayle|2006-08-26 23:51:14|trunk
+236|116487|kazu|2006-08-27 06:46:38|trunk
+237|116489|paolo|2006-08-27 15:19:23|trunk
+238|116490|lmillward|2006-08-27 15:22:05|trunk
+239|116491|mmitchel|2006-08-27 17:45:25|trunk
+240|116493|ian|2006-08-27 21:42:55|trunk
+241|116494|ian|2006-08-27 23:50:30|trunk
+242|116501|sayle|2006-08-28 00:58:47|trunk
+243|116502|jvdelisle|2006-08-28 05:14:05|trunk
+244|116503|jvdelisle|2006-08-28 05:17:09|trunk
+245|116508|paolo|2006-08-28 13:26:22|trunk
+246|116509|kazu|2006-08-28 13:51:04|trunk
+247|116510|kazu|2006-08-28 17:18:29|trunk
+248|116520|paolo|2006-08-28 18:32:35|trunk
+249|116527|bkoz|2006-08-28 20:18:22|trunk
+250|116529|rakdver|2006-08-28 21:15:19|trunk
+251|116541|reichelt|2006-08-28 22:34:55|trunk
+252|116550|pinskia|2006-08-29 03:23:04|trunk
+253|116551|jason|2006-08-29 04:42:46|trunk
+254|116552|pault|2006-08-29 04:51:32|trunk
+255|116554|jason|2006-08-29 06:55:03|trunk
+256|116555|jason|2006-08-29 06:55:35|trunk
+257|116556|jason|2006-08-29 07:10:38|trunk
+258|116557|gary|2006-08-29 08:15:29|trunk
+259|116558|bkoz|2006-08-29 10:53:04|trunk
+260|116559|paolo|2006-08-29 11:46:54|trunk
+261|116561|amylaar|2006-08-29 14:34:36|trunk
+262|116562|amylaar|2006-08-29 15:08:07|trunk
+263|116564|amylaar|2006-08-29 15:52:54|trunk
+264|116569|hjl|2006-08-29 18:47:20|trunk
+265|116570|kargl|2006-08-29 19:47:31|trunk
+266|116577|pinskia|2006-08-30 04:33:10|trunk
+267|116578|pault|2006-08-30 05:18:36|trunk
+268|116580|kazu|2006-08-30 06:00:35|trunk
+269|116582|rakdver|2006-08-30 08:14:29|trunk
+270|116583|rguenth|2006-08-30 09:12:48|trunk
+271|116584|bkoz|2006-08-30 09:39:45|trunk
+272|116586|dj|2006-08-30 13:46:50|trunk
+273|116587|dj|2006-08-30 13:48:49|trunk
+274|116588|jsm28|2006-08-30 14:35:14|trunk
+275|116590|kazu|2006-08-30 15:10:26|trunk
+276|116591|jason|2006-08-30 15:51:17|trunk
+277|116593|amylaar|2006-08-30 18:57:54|trunk
+278|116599|krebbel|2006-08-31 07:43:36|trunk
+279|116601|bkoz|2006-08-31 10:45:59|trunk
+280|116602|bkoz|2006-08-31 11:46:31|trunk
+281|116603|tromey|2006-08-31 17:23:57|trunk
+282|116604|sayle|2006-08-31 17:35:32|trunk
+283|116605|rakdver|2006-08-31 19:33:56|trunk
+284|116606|paolo|2006-08-31 19:52:16|trunk
+285|116608|bkoz|2006-08-31 22:20:09|trunk
+286|116609|kseitz|2006-08-31 22:37:25|trunk
+287|116610|kseitz|2006-08-31 22:37:48|trunk
+288|116611|kseitz|2006-08-31 22:56:23|trunk
+289|116613|jconner|2006-08-31 23:44:00|trunk
+290|116621|gary|2006-09-01 10:06:13|trunk
+291|116622|gary|2006-09-01 13:30:50|trunk
+292|116623|nathan|2006-09-01 13:46:19|trunk
+293|116627|gary|2006-09-01 15:38:00|trunk
+294|116633|jconner|2006-09-01 16:56:14|trunk
+295|116634|jconner|2006-09-01 16:56:45|trunk
+296|116635|kseitz|2006-09-01 17:42:23|trunk
+297|116636|kseitz|2006-09-01 17:58:22|trunk
+298|116637|jason|2006-09-01 17:59:41|trunk
+299|116638|nathan|2006-09-01 18:10:17|trunk
+300|116639|geoffk|2006-09-01 19:52:10|trunk
+301|116641|rguenth|2006-09-01 20:25:34|trunk
+302|116653|dj|2006-09-02 02:38:20|trunk
+303|116654|jakub|2006-09-02 06:52:24|trunk
+304|116655|jakub|2006-09-02 06:54:04|trunk
+305|116656|jakub|2006-09-02 06:55:09|trunk
+306|116659|geoffk|2006-09-02 07:26:21|trunk
+307|116660|paolo|2006-09-02 08:31:45|trunk
+308|116661|lmillward|2006-09-02 14:15:37|trunk
+309|116668|jsm28|2006-09-03 11:52:48|trunk
+310|116670|jsm28|2006-09-03 11:54:34|trunk
+311|116678|paolo|2006-09-04 08:00:35|trunk
+312|116679|nathan|2006-09-04 15:21:50|trunk
+313|116680|bkoz|2006-09-04 15:41:18|trunk
+314|116681|ebotcazou|2006-09-04 16:29:51|trunk
+315|116683|ebotcazou|2006-09-04 19:33:24|trunk
+316|116690|pault|2006-09-05 04:26:10|trunk
+317|116692|ebotcazou|2006-09-05 07:05:08|trunk
+318|116694|gary|2006-09-05 07:49:08|trunk
+319|116695|rguenth|2006-09-05 08:34:00|trunk
+320|116696|rguenth|2006-09-05 08:36:39|trunk
+321|116697|rguenth|2006-09-05 08:39:42|trunk
+322|116698|paolo|2006-09-05 15:43:47|trunk
+323|116699|denisc|2006-09-05 17:23:08|trunk
+324|116700|paolo|2006-09-05 17:38:44|trunk
+325|116701|bonzini|2006-09-05 17:41:22|trunk
+326|116702|geoffk|2006-09-05 18:11:49|trunk
+327|116703|kkojima|2006-09-05 21:41:23|trunk
+328|116709|jason|2006-09-06 01:15:09|trunk
+329|116710|jason|2006-09-06 01:15:39|trunk
+330|116711|pault|2006-09-06 04:12:09|trunk
+331|116714|jason|2006-09-06 05:25:29|trunk
+332|116715|jason|2006-09-06 05:28:08|trunk
+333|116716|pinskia|2006-09-06 06:06:55|trunk
+334|116717|pinskia|2006-09-06 06:13:22|trunk
+335|116718|pinskia|2006-09-06 06:37:06|trunk
+336|116719|nickc|2006-09-06 06:58:41|trunk
+337|116722|rguenth|2006-09-06 13:47:42|trunk
+338|116724|jason|2006-09-06 17:06:00|trunk
+339|116727|dnovillo|2006-09-06 21:04:21|trunk
+340|116730|kseitz|2006-09-06 22:16:59|trunk
diff --git a/contrib/reghunt/examples/29478.log b/contrib/reghunt/examples/29478.log
new file mode 100644
index 000000000..1ce0be1f3
--- /dev/null
+++ b/contrib/reghunt/examples/29478.log
@@ -0,0 +1,78 @@
+Mon Feb 16 17:23:03 PST 2009 LATER_THAN = 1
+Mon Feb 16 17:23:03 PST 2009 EARLIER_THAN = 340
+Mon Feb 16 17:23:03 PST 2009 svn checkout begun for id 340, rev 116730
+Mon Feb 16 17:26:27 PST 2009 svn checkout done
+Mon Feb 16 17:26:28 PST 2009 building cc1 for id 340
+Mon Feb 16 17:30:29 PST 2009 build completed
+Mon Feb 16 17:30:29 PST 2009 bogus warning detected for bug 29478, id 340
+Mon Feb 16 17:30:29 PST 2009 result for high patch 340 is as expected
+Mon Feb 16 17:30:29 PST 2009 svn update begun for id 1, rev 115866
+Mon Feb 16 17:30:55 PST 2009 svn update done
+Mon Feb 16 17:30:56 PST 2009 building cc1 for id 1
+Mon Feb 16 17:34:41 PST 2009 build completed
+Mon Feb 16 17:34:41 PST 2009 no bogus warning for bug 29478, id 1
+Mon Feb 16 17:34:41 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 17:34:41 PST 2009 svn update begun for id 170, rev 116321
+Mon Feb 16 17:34:55 PST 2009 svn update done
+Mon Feb 16 17:34:56 PST 2009 building cc1 for id 170
+Mon Feb 16 17:38:40 PST 2009 build completed
+Mon Feb 16 17:38:40 PST 2009 no bogus warning for bug 29478, id 170
+Mon Feb 16 17:38:40 PST 2009 search patches later than 170
+Mon Feb 16 17:38:41 PST 2009 svn update begun for id 255, rev 116554
+Mon Feb 16 17:38:52 PST 2009 svn update done
+Mon Feb 16 17:38:53 PST 2009 building cc1 for id 255
+Mon Feb 16 17:42:38 PST 2009 build completed
+Mon Feb 16 17:42:38 PST 2009 bogus warning detected for bug 29478, id 255
+Mon Feb 16 17:42:38 PST 2009 search patches earlier than 255
+Mon Feb 16 17:42:38 PST 2009 svn update begun for id 212, rev 116411
+Mon Feb 16 17:42:45 PST 2009 svn update done
+Mon Feb 16 17:42:46 PST 2009 building cc1 for id 212
+Mon Feb 16 17:46:30 PST 2009 build completed
+Mon Feb 16 17:46:30 PST 2009 no bogus warning for bug 29478, id 212
+Mon Feb 16 17:46:30 PST 2009 search patches later than 212
+Mon Feb 16 17:46:30 PST 2009 svn update begun for id 233, rev 116479
+Mon Feb 16 17:46:40 PST 2009 svn update done
+Mon Feb 16 17:46:41 PST 2009 building cc1 for id 233
+Mon Feb 16 17:50:26 PST 2009 build completed
+Mon Feb 16 17:50:26 PST 2009 bogus warning detected for bug 29478, id 233
+Mon Feb 16 17:50:26 PST 2009 search patches earlier than 233
+Mon Feb 16 17:50:26 PST 2009 svn update begun for id 222, rev 116463
+Mon Feb 16 17:50:31 PST 2009 svn update done
+Mon Feb 16 17:50:32 PST 2009 building cc1 for id 222
+Mon Feb 16 17:54:17 PST 2009 build completed
+Mon Feb 16 17:54:17 PST 2009 bogus warning detected for bug 29478, id 222
+Mon Feb 16 17:54:17 PST 2009 search patches earlier than 222
+Mon Feb 16 17:54:17 PST 2009 svn update begun for id 217, rev 116435
+Mon Feb 16 17:54:23 PST 2009 svn update done
+Mon Feb 16 17:54:23 PST 2009 building cc1 for id 217
+Mon Feb 16 17:58:07 PST 2009 build completed
+Mon Feb 16 17:58:07 PST 2009 bogus warning detected for bug 29478, id 217
+Mon Feb 16 17:58:07 PST 2009 search patches earlier than 217
+Mon Feb 16 17:58:08 PST 2009 svn update begun for id 214, rev 116424
+Mon Feb 16 17:58:13 PST 2009 svn update done
+Mon Feb 16 17:58:13 PST 2009 building cc1 for id 214
+Mon Feb 16 18:01:59 PST 2009 build completed
+Mon Feb 16 18:01:59 PST 2009 bogus warning detected for bug 29478, id 214
+Mon Feb 16 18:01:59 PST 2009 search patches earlier than 214
+Mon Feb 16 18:01:59 PST 2009 svn update begun for id 213, rev 116415
+Mon Feb 16 18:02:05 PST 2009 svn update done
+Mon Feb 16 18:02:05 PST 2009 building cc1 for id 213
+Mon Feb 16 18:05:51 PST 2009 build completed
+Mon Feb 16 18:05:51 PST 2009 no bogus warning for bug 29478, id 213
+Mon Feb 16 18:05:51 PST 2009 search patches later than 213
+Test result changes with id 214
+------------------------------------------------------------------------
+r116424 | amylaar | 2006-08-25 18:51:57 +0000 (Fri, 25 Aug 2006) | 8 lines
+
+gcc:
+ PR tree-optimization/16876
+ * c-typeck.c (c_convert_parm_for_inlining): Don't take early
+ exit if PARM doesn't match VALUE.
+
+testsuite:
+ gcc.dg/noncompile/pr16876.c: New test.
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=116424
+ r116424 | amylaar | 2006-08-25 18:51:57 +0000 (Fri, 25 Aug 2006)
diff --git a/contrib/reghunt/examples/29906a.cc b/contrib/reghunt/examples/29906a.cc
new file mode 100644
index 000000000..ef644eee5
--- /dev/null
+++ b/contrib/reghunt/examples/29906a.cc
@@ -0,0 +1,7 @@
+struct A{
+ typedef int T;
+ virtual ~A();
+};
+struct B:public A{
+ using A::T;
+};
diff --git a/contrib/reghunt/examples/29906a.config b/contrib/reghunt/examples/29906a.config
new file mode 100644
index 000000000..e643f96b6
--- /dev/null
+++ b/contrib/reghunt/examples/29906a.config
@@ -0,0 +1,16 @@
+BUGID=29906a
+FIND=break
+LANG=c++
+BUILD_KIND=simple
+BUG_KIND=ice-on-valid-code
+OPTS="-g"
+
+. ./common.config
+
+#LOW_PATCH=384
+#HIGH_PATCH=389
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+#msg 0 'NOTE: skipping high patch, already verified'
+#SKIP_HIGH=1
diff --git a/contrib/reghunt/examples/29906a.list b/contrib/reghunt/examples/29906a.list
new file mode 100644
index 000000000..46b6e7d2c
--- /dev/null
+++ b/contrib/reghunt/examples/29906a.list
@@ -0,0 +1,623 @@
+1|75951|giovannibajo|2004-01-15 23:49:13|trunk
+2|75956|zack|2004-01-16 01:27:38|trunk
+3|75957|kazu|2004-01-16 01:44:06|trunk
+4|75960|geoffk|2004-01-16 07:07:27|trunk
+5|75961|geoffk|2004-01-16 07:20:38|trunk
+6|75962|geoffk|2004-01-16 07:28:11|trunk
+7|75963|dannysmith|2004-01-16 08:43:45|trunk
+8|75964|aj|2004-01-16 08:51:38|trunk
+9|75968|rth|2004-01-16 11:30:48|trunk
+10|75969|giovannibajo|2004-01-16 12:29:40|trunk
+11|75970|giovannibajo|2004-01-16 12:33:28|trunk
+12|75971|rodimina|2004-01-16 14:22:23|trunk
+13|75975|amylaar|2004-01-16 16:11:56|trunk
+14|75976|amylaar|2004-01-16 16:13:52|trunk
+15|75977|fnasser|2004-01-16 16:15:49|trunk
+16|75978|kazu|2004-01-16 16:59:17|trunk
+17|75979|mmitchel|2004-01-16 16:59:30|trunk
+18|75980|aph|2004-01-16 17:11:08|trunk
+19|75981|aph|2004-01-16 17:16:29|trunk
+20|75982|aph|2004-01-16 17:25:26|trunk
+21|75983|mmitchel|2004-01-16 17:54:25|trunk
+22|75984|kazu|2004-01-16 18:04:22|trunk
+23|75985|amylaar|2004-01-16 18:24:09|trunk
+24|75986|mmitchel|2004-01-16 18:39:58|trunk
+25|75987|amylaar|2004-01-16 18:43:04|trunk
+26|75988|hubicka|2004-01-16 18:53:51|trunk
+27|75991|mmitchel|2004-01-16 19:28:11|trunk
+28|75992|mmitchel|2004-01-16 19:41:35|trunk
+29|75993|kho|2004-01-16 20:05:41|trunk
+30|75994|ro|2004-01-16 20:58:27|trunk
+31|75995|kazu|2004-01-16 21:19:07|trunk
+32|75997|fitzsim|2004-01-16 21:55:21|trunk
+33|75998|fnasser|2004-01-16 22:26:49|trunk
+34|75999|fnasser|2004-01-16 22:30:11|trunk
+35|76000|echristo|2004-01-16 22:37:49|trunk
+36|76001|reichelt|2004-01-16 23:27:12|trunk
+37|76003|tromey|2004-01-16 23:54:22|trunk
+38|76004|tromey|2004-01-17 00:01:59|trunk
+39|76007|hubicka|2004-01-17 00:03:14|trunk
+40|76008|jsm28|2004-01-17 00:04:13|trunk
+41|76016|geoffk|2004-01-17 00:37:47|trunk
+42|76017|bkoz|2004-01-17 00:51:35|trunk
+43|76018|pinskia|2004-01-17 01:19:20|trunk
+44|76021|pinskia|2004-01-17 01:57:09|trunk
+45|76025|brobecke|2004-01-17 05:30:48|trunk
+46|76026|brobecke|2004-01-17 06:20:03|trunk
+47|76028|geoffk|2004-01-17 07:46:49|trunk
+48|76030|tromey|2004-01-17 08:40:41|trunk
+49|76031|geoffk|2004-01-17 09:31:30|trunk
+50|76032|hubicka|2004-01-17 11:41:43|trunk
+51|76035|hubicka|2004-01-17 12:28:57|trunk
+52|76037|gerald|2004-01-17 17:41:36|trunk
+53|76038|pinskia|2004-01-17 18:59:46|trunk
+54|76041|pinskia|2004-01-17 19:04:05|trunk
+55|76043|pinskia|2004-01-17 19:48:50|trunk
+56|76058|steven|2004-01-17 21:03:57|trunk
+57|76060|drow|2004-01-17 22:11:58|trunk
+58|76062|drow|2004-01-17 22:14:17|trunk
+59|76064|sayle|2004-01-17 23:49:44|trunk
+60|76072|zlaski|2004-01-18 01:15:30|trunk
+61|76075|jsm28|2004-01-18 01:20:48|trunk
+62|76078|jsm28|2004-01-18 02:10:34|trunk
+63|76081|pinskia|2004-01-18 03:46:56|trunk
+64|76083|dje|2004-01-18 04:39:34|trunk
+65|76084|bernie|2004-01-18 05:07:35|trunk
+66|76088|rsandifo|2004-01-18 09:42:11|trunk
+67|76090|rsandifo|2004-01-18 09:45:32|trunk
+68|76091|paolo|2004-01-18 09:54:46|trunk
+69|76092|paolo|2004-01-18 10:51:13|trunk
+70|76093|paolo|2004-01-18 11:18:29|trunk
+71|76098|jsm28|2004-01-18 11:57:17|trunk
+72|76100|rsandifo|2004-01-18 14:01:52|trunk
+73|76102|hubicka|2004-01-18 15:10:23|trunk
+74|76104|jason|2004-01-18 15:38:08|trunk
+75|76105|pinskia|2004-01-18 15:45:51|trunk
+76|76108|phython|2004-01-18 19:49:34|trunk
+77|76109|pinskia|2004-01-18 19:50:18|trunk
+78|76111|sayle|2004-01-18 20:04:59|trunk
+79|76112|kazu|2004-01-18 21:25:06|trunk
+80|76113|kazu|2004-01-18 21:36:34|trunk
+81|76115|hubicka|2004-01-18 21:51:30|trunk
+82|76117|drow|2004-01-18 22:37:29|trunk
+83|76120|kazu|2004-01-18 22:49:23|trunk
+84|76131|mmitchel|2004-01-19 00:47:59|trunk
+85|76135|mmitchel|2004-01-19 00:51:56|trunk
+86|76138|kazu|2004-01-19 03:08:14|trunk
+87|76140|steven|2004-01-19 08:38:38|trunk
+88|76141|paolo|2004-01-19 08:53:32|trunk
+89|76142|hubicka|2004-01-19 09:43:53|trunk
+90|76145|rth|2004-01-19 09:55:42|trunk
+91|76146|charlet|2004-01-19 10:37:59|trunk
+92|76147|paolo|2004-01-19 12:11:50|trunk
+93|76148|kho|2004-01-19 14:08:19|trunk
+94|76149|kho|2004-01-19 14:27:45|trunk
+95|76150|fnasser|2004-01-19 14:51:54|trunk
+96|76151|paolo|2004-01-19 15:10:17|trunk
+97|76152|sayle|2004-01-19 15:15:56|trunk
+98|76155|law|2004-01-19 16:30:05|trunk
+99|76156|ebotcazou|2004-01-19 16:57:05|trunk
+100|76158|ebotcazou|2004-01-19 17:03:45|trunk
+101|76160|fnasser|2004-01-19 17:32:29|trunk
+102|76161|fnasser|2004-01-19 17:38:36|trunk
+103|76163|paolo|2004-01-19 18:10:55|trunk
+104|76165|fnasser|2004-01-19 18:22:29|trunk
+105|76166|kho|2004-01-19 18:41:52|trunk
+106|76168|doko|2004-01-19 19:01:59|trunk
+107|76170|ebotcazou|2004-01-19 19:17:50|trunk
+108|76172|rth|2004-01-19 19:49:33|trunk
+109|76173|mmitchel|2004-01-19 20:33:29|trunk
+110|76177|mmitchel|2004-01-19 21:24:46|trunk
+111|76179|sayle|2004-01-19 21:51:06|trunk
+112|76180|mmitchel|2004-01-19 22:10:31|trunk
+113|76191|ljrittle|2004-01-20 01:30:03|trunk
+114|76192|jsm28|2004-01-20 01:38:27|trunk
+115|76193|kcook|2004-01-20 01:52:02|trunk
+116|76194|phython|2004-01-20 01:57:58|trunk
+117|76195|kkojima|2004-01-20 02:34:23|trunk
+118|76197|bothner|2004-01-20 05:17:48|trunk
+119|76198|bothner|2004-01-20 05:30:18|trunk
+120|76200|bkoz|2004-01-20 06:35:21|trunk
+121|76201|bothner|2004-01-20 07:35:21|trunk
+122|76202|ebotcazou|2004-01-20 07:38:18|trunk
+123|76204|nickc|2004-01-20 10:17:23|trunk
+124|76206|steven|2004-01-20 12:11:14|trunk
+125|76210|aph|2004-01-20 15:18:33|trunk
+126|76211|hpenner|2004-01-20 16:51:07|trunk
+127|76212|hpenner|2004-01-20 16:54:34|trunk
+128|76213|rakdver|2004-01-20 16:55:56|trunk
+129|76215|jason|2004-01-20 17:01:28|trunk
+130|76216|denisc|2004-01-20 17:38:44|trunk
+131|76220|kazu|2004-01-20 18:29:24|trunk
+132|76224|rsandifo|2004-01-20 19:58:59|trunk
+133|76226|hubicka|2004-01-20 20:36:18|trunk
+134|76227|fitzsim|2004-01-20 20:56:53|trunk
+135|76228|fitzsim|2004-01-20 21:05:39|trunk
+136|76230|fitzsim|2004-01-20 21:24:09|trunk
+137|76231|jakub|2004-01-20 21:25:27|trunk
+138|76232|hubicka|2004-01-20 22:08:17|trunk
+139|76233|hubicka|2004-01-20 22:16:59|trunk
+140|76234|danglin|2004-01-20 22:20:07|trunk
+141|76235|amodra|2004-01-20 22:29:24|trunk
+142|76237|sayle|2004-01-20 22:59:59|trunk
+143|76240|korbb|2004-01-20 23:49:34|trunk
+144|76246|korbb|2004-01-21 00:23:04|trunk
+145|76249|kcook|2004-01-21 02:01:55|trunk
+146|76253|ghazi|2004-01-21 02:53:20|trunk
+147|76261|aj|2004-01-21 06:11:09|trunk
+148|76264|rakdver|2004-01-21 07:41:49|trunk
+149|76269|zack|2004-01-21 10:32:10|trunk
+150|76271|charlet|2004-01-21 10:35:18|trunk
+151|76274|paolo|2004-01-21 11:29:51|trunk
+152|76275|nickc|2004-01-21 12:16:07|trunk
+153|76278|djee|2004-01-21 14:39:15|trunk
+154|76282|paolo|2004-01-21 15:43:45|trunk
+155|76283|falk|2004-01-21 15:52:47|trunk
+156|76287|jakub|2004-01-21 16:01:26|trunk
+157|76288|aj|2004-01-21 17:26:08|trunk
+158|76295|gerald|2004-01-21 19:05:30|trunk
+159|76298|danglin|2004-01-21 20:08:22|trunk
+160|76299|kho|2004-01-21 20:11:08|trunk
+161|76300|kazu|2004-01-21 20:19:23|trunk
+162|76301|ctice|2004-01-21 20:23:51|trunk
+163|76302|kazu|2004-01-21 20:40:04|trunk
+164|76303|ctice|2004-01-21 20:45:25|trunk
+165|76304|kazu|2004-01-21 20:52:28|trunk
+166|76305|pinskia|2004-01-21 20:53:43|trunk
+167|76306|kazu|2004-01-21 21:00:41|trunk
+168|76308|danglin|2004-01-21 21:52:35|trunk
+169|76314|kcook|2004-01-21 22:25:02|trunk
+170|76316|kazu|2004-01-22 00:03:52|trunk
+171|76317|uweigand|2004-01-22 00:05:36|trunk
+172|76319|kazu|2004-01-22 00:15:25|trunk
+173|76325|fitzsim|2004-01-22 00:22:27|trunk
+174|76332|pinskia|2004-01-22 02:44:37|trunk
+175|76335|kazu|2004-01-22 03:32:20|trunk
+176|76339|ebotcazou|2004-01-22 09:15:50|trunk
+177|76342|ebotcazou|2004-01-22 09:33:24|trunk
+178|76344|graydon|2004-01-22 09:54:19|trunk
+179|76345|hubicka|2004-01-22 10:52:20|trunk
+180|76346|ebotcazou|2004-01-22 11:15:37|trunk
+181|76349|hubicka|2004-01-22 11:35:58|trunk
+182|76350|kazu|2004-01-22 11:50:01|trunk
+183|76352|sayle|2004-01-22 12:44:54|trunk
+184|76353|paolo|2004-01-22 12:46:28|trunk
+185|76355|paolo|2004-01-22 14:25:37|trunk
+186|76360|uweigand|2004-01-22 16:38:14|trunk
+187|76362|drow|2004-01-22 17:00:56|trunk
+188|76365|danglin|2004-01-22 17:51:25|trunk
+189|76366|dj|2004-01-22 19:10:56|trunk
+190|76367|fitzsim|2004-01-22 20:17:43|trunk
+191|76368|drow|2004-01-22 20:23:27|trunk
+192|76370|kazu|2004-01-22 21:21:13|trunk
+193|76372|mkoch|2004-01-22 21:41:53|trunk
+194|76373|bwilson|2004-01-22 21:42:33|trunk
+195|76375|hubicka|2004-01-22 22:33:51|trunk
+196|76376|ro|2004-01-22 23:02:12|trunk
+197|76377|uweigand|2004-01-22 23:05:13|trunk
+198|76382|jsturm|2004-01-22 23:45:10|trunk
+199|76389|jsturm|2004-01-23 00:21:05|trunk
+200|76391|ian|2004-01-23 01:30:24|trunk
+201|76392|tromey|2004-01-23 01:43:36|trunk
+202|76393|sayle|2004-01-23 01:47:15|trunk
+203|76394|sayle|2004-01-23 02:03:25|trunk
+204|76395|tromey|2004-01-23 02:49:57|trunk
+205|76396|phython|2004-01-23 04:31:49|trunk
+206|76397|andreast|2004-01-23 04:42:39|trunk
+207|76398|ljrittle|2004-01-23 06:54:06|trunk
+208|76400|ebotcazou|2004-01-23 09:16:56|trunk
+209|76402|charlet|2004-01-23 09:53:05|trunk
+210|76403|charlet|2004-01-23 10:30:04|trunk
+211|76404|charlet|2004-01-23 10:35:42|trunk
+212|76405|hubicka|2004-01-23 11:02:09|trunk
+213|76408|mkoch|2004-01-23 11:45:54|trunk
+214|76409|mkoch|2004-01-23 11:56:48|trunk
+215|76410|mkoch|2004-01-23 12:01:23|trunk
+216|76411|mkoch|2004-01-23 12:29:05|trunk
+217|76412|mkoch|2004-01-23 12:32:23|trunk
+218|76413|mkoch|2004-01-23 12:42:10|trunk
+219|76415|amylaar|2004-01-23 13:01:42|trunk
+220|76416|jakub|2004-01-23 13:24:58|trunk
+221|76419|mkoch|2004-01-23 13:50:10|trunk
+222|76420|paolo|2004-01-23 13:57:19|trunk
+223|76421|mkoch|2004-01-23 14:07:28|trunk
+224|76422|mkoch|2004-01-23 14:37:09|trunk
+225|76423|mkoch|2004-01-23 15:15:31|trunk
+226|76424|mkoch|2004-01-23 15:19:28|trunk
+227|76425|aoliva|2004-01-23 15:29:09|trunk
+228|76426|mkoch|2004-01-23 15:29:38|trunk
+229|76427|mkoch|2004-01-23 15:53:51|trunk
+230|76428|sayle|2004-01-23 16:16:33|trunk
+231|76429|drow|2004-01-23 16:33:43|trunk
+232|76431|ghazi|2004-01-23 16:47:06|trunk
+233|76433|paolo|2004-01-23 16:51:24|trunk
+234|76434|ebotcazou|2004-01-23 16:52:07|trunk
+235|76437|jakub|2004-01-23 17:32:16|trunk
+236|76439|jakub|2004-01-23 17:42:58|trunk
+237|76441|zack|2004-01-23 18:13:55|trunk
+238|76444|sayle|2004-01-23 18:37:16|trunk
+239|76445|pinskia|2004-01-23 18:38:40|trunk
+240|76450|ro|2004-01-23 20:40:52|trunk
+241|76454|ian|2004-01-23 21:05:21|trunk
+242|76456|hubicka|2004-01-23 22:01:55|trunk
+243|76457|hubicka|2004-01-23 22:05:19|trunk
+244|76458|dje|2004-01-23 22:07:06|trunk
+245|76459|bwilson|2004-01-23 22:12:34|trunk
+246|76461|rth|2004-01-23 22:23:10|trunk
+247|76462|pinskia|2004-01-23 22:41:20|trunk
+248|76463|pinskia|2004-01-23 22:45:53|trunk
+249|76464|pinskia|2004-01-23 22:57:07|trunk
+250|76467|kazu|2004-01-23 23:49:36|trunk
+251|76474|ljrittle|2004-01-24 00:21:02|trunk
+252|76475|dj|2004-01-24 00:23:24|trunk
+253|76476|paolo|2004-01-24 00:27:19|trunk
+254|76477|jsm28|2004-01-24 00:30:58|trunk
+255|76478|hubicka|2004-01-24 00:38:50|trunk
+256|76479|paolo|2004-01-24 01:25:37|trunk
+257|76482|zack|2004-01-24 05:27:45|trunk
+258|76483|kazu|2004-01-24 05:32:06|trunk
+259|76484|kazu|2004-01-24 06:47:03|trunk
+260|76486|kazu|2004-01-24 09:54:32|trunk
+261|76487|andreast|2004-01-24 09:57:07|trunk
+262|76488|kazu|2004-01-24 10:09:48|trunk
+263|76490|jakub|2004-01-24 11:01:29|trunk
+264|76508|paolo|2004-01-24 11:34:06|trunk
+265|76509|paolo|2004-01-24 12:32:54|trunk
+266|76512|hubicka|2004-01-24 15:31:04|trunk
+267|76513|andreast|2004-01-24 16:13:48|trunk
+268|76514|paolo|2004-01-24 16:52:04|trunk
+269|76517|paolo|2004-01-24 18:54:23|trunk
+270|76519|mkoch|2004-01-24 20:32:57|trunk
+271|76520|mkoch|2004-01-24 20:34:41|trunk
+272|76522|ian|2004-01-24 20:54:58|trunk
+273|76523|mkoch|2004-01-24 20:56:47|trunk
+274|76525|kazu|2004-01-24 22:27:20|trunk
+275|76532|jsm28|2004-01-25 02:06:24|trunk
+276|76534|pinskia|2004-01-25 02:20:16|trunk
+277|76537|kazu|2004-01-25 03:28:25|trunk
+278|76539|kazu|2004-01-25 03:52:42|trunk
+279|76542|pinskia|2004-01-25 06:03:25|trunk
+280|76543|ebotcazou|2004-01-25 06:58:33|trunk
+281|76547|rsandifo|2004-01-25 10:16:21|trunk
+282|76550|paolo|2004-01-25 10:26:46|trunk
+283|76551|paolo|2004-01-25 11:07:50|trunk
+284|76553|hubicka|2004-01-25 11:11:47|trunk
+285|76554|mkoch|2004-01-25 13:08:08|trunk
+286|76556|lerdsuwa|2004-01-25 14:18:19|trunk
+287|76560|lerdsuwa|2004-01-25 15:03:09|trunk
+288|76563|jsm28|2004-01-25 16:48:48|trunk
+289|76565|kazu|2004-01-25 17:10:03|trunk
+290|76566|kazu|2004-01-25 17:14:41|trunk
+291|76568|kazu|2004-01-25 17:23:01|trunk
+292|76569|kazu|2004-01-25 17:28:19|trunk
+293|76570|kazu|2004-01-25 17:30:51|trunk
+294|76571|kazu|2004-01-25 17:35:43|trunk
+295|76572|kazu|2004-01-25 17:41:01|trunk
+296|76573|kazu|2004-01-25 17:51:51|trunk
+297|76574|fitzsim|2004-01-25 18:29:42|trunk
+298|76577|fitzsim|2004-01-25 18:36:04|trunk
+299|76579|ebotcazou|2004-01-25 20:09:27|trunk
+300|76581|kazu|2004-01-25 20:17:44|trunk
+301|76584|kazu|2004-01-25 20:23:09|trunk
+302|76586|rsandifo|2004-01-25 21:27:37|trunk
+303|76588|jsm28|2004-01-25 21:50:01|trunk
+304|76590|kazu|2004-01-25 22:20:15|trunk
+305|76592|paolo|2004-01-25 22:43:07|trunk
+306|76593|giovannibajo|2004-01-25 22:43:08|trunk
+307|76594|giovannibajo|2004-01-25 22:46:48|trunk
+308|76595|schwab|2004-01-25 23:31:43|trunk
+309|76597|cgd|2004-01-25 23:45:48|trunk
+310|76598|m.hayes|2004-01-25 23:58:39|trunk
+311|76599|kazu|2004-01-26 00:05:38|trunk
+312|76600|kazu|2004-01-26 00:09:47|trunk
+313|76601|m.hayes|2004-01-26 00:12:05|trunk
+314|76607|m.hayes|2004-01-26 00:20:07|trunk
+315|76608|m.hayes|2004-01-26 00:28:33|trunk
+316|76610|m.hayes|2004-01-26 00:31:50|trunk
+317|76611|m.hayes|2004-01-26 00:40:05|trunk
+318|76616|mmitchel|2004-01-26 03:13:49|trunk
+319|76617|m.hayes|2004-01-26 03:24:39|trunk
+320|76618|m.hayes|2004-01-26 03:36:07|trunk
+321|76619|ian|2004-01-26 04:44:11|trunk
+322|76621|ebotcazou|2004-01-26 07:39:29|trunk
+323|76623|rsandifo|2004-01-26 08:07:01|trunk
+324|76625|paolo|2004-01-26 09:07:18|trunk
+325|76628|ebotcazou|2004-01-26 11:11:11|trunk
+326|76630|paolo|2004-01-26 12:58:53|trunk
+327|76633|kho|2004-01-26 13:56:59|trunk
+328|76634|charlet|2004-01-26 14:47:48|trunk
+329|76635|kazu|2004-01-26 15:32:42|trunk
+330|76636|kazu|2004-01-26 15:40:04|trunk
+331|76638|kazu|2004-01-26 15:50:55|trunk
+332|76639|ian|2004-01-26 15:52:38|trunk
+333|76640|kazu|2004-01-26 15:54:45|trunk
+334|76643|kazu|2004-01-26 16:35:44|trunk
+335|76644|kazu|2004-01-26 17:33:37|trunk
+336|76645|fjahanian|2004-01-26 17:38:51|trunk
+337|76646|fjahanian|2004-01-26 17:40:06|trunk
+338|76647|mmitchel|2004-01-26 17:41:50|trunk
+339|76648|fjahanian|2004-01-26 17:43:46|trunk
+340|76649|fjahanian|2004-01-26 17:45:42|trunk
+341|76651|fjahanian|2004-01-26 17:47:42|trunk
+342|76652|fjahanian|2004-01-26 17:48:49|trunk
+343|76654|kazu|2004-01-26 18:17:58|trunk
+344|76655|law|2004-01-26 18:31:07|trunk
+345|76657|pinskia|2004-01-26 18:50:29|trunk
+346|76659|mmitchel|2004-01-26 20:11:46|trunk
+347|76663|kazu|2004-01-26 20:21:11|trunk
+348|76664|paolo|2004-01-26 20:23:20|trunk
+349|76665|hubicka|2004-01-26 20:34:22|trunk
+350|76666|hubicka|2004-01-26 20:38:54|trunk
+351|76667|djee|2004-01-26 21:04:06|trunk
+352|76668|djee|2004-01-26 21:55:42|trunk
+353|76669|ro|2004-01-26 21:56:05|trunk
+354|76671|ro|2004-01-26 22:13:38|trunk
+355|76674|rth|2004-01-26 22:57:19|trunk
+356|76675|rth|2004-01-26 22:59:40|trunk
+357|76676|rth|2004-01-26 23:02:04|trunk
+358|76677|kazu|2004-01-26 23:22:55|trunk
+359|76684|paolo|2004-01-27 00:49:03|trunk
+360|76686|ghazi|2004-01-27 02:33:22|trunk
+361|76688|jlquinn|2004-01-27 02:58:06|trunk
+362|76689|kazu|2004-01-27 02:59:35|trunk
+363|76694|jakub|2004-01-27 10:27:40|trunk
+364|76696|paolo|2004-01-27 10:46:36|trunk
+365|76697|amodra|2004-01-27 11:15:23|trunk
+366|76698|paolo|2004-01-27 12:37:37|trunk
+367|76701|amylaar|2004-01-27 12:49:31|trunk
+368|76702|ebotcazou|2004-01-27 13:29:26|trunk
+369|76707|lerdsuwa|2004-01-27 14:24:18|trunk
+370|76708|ebotcazou|2004-01-27 14:42:36|trunk
+371|76710|ian|2004-01-27 14:48:02|trunk
+372|76714|ian|2004-01-27 15:17:52|trunk
+373|76724|uweigand|2004-01-27 15:36:22|trunk
+374|76725|jlquinn|2004-01-27 15:45:43|trunk
+375|76729|kho|2004-01-27 16:39:45|trunk
+376|76730|kho|2004-01-27 16:43:12|trunk
+377|76732|aph|2004-01-27 17:30:06|trunk
+378|76733|aph|2004-01-27 17:33:38|trunk
+379|76734|zack|2004-01-27 17:42:59|trunk
+380|76735|zack|2004-01-27 18:03:17|trunk
+381|76736|mkoch|2004-01-27 18:53:05|trunk
+382|76737|mkoch|2004-01-27 18:55:11|trunk
+383|76738|phython|2004-01-27 19:10:10|trunk
+384|76739|kazu|2004-01-27 19:20:02|trunk
+385|76740|kho|2004-01-27 19:29:57|trunk
+386|76741|amylaar|2004-01-27 19:54:42|trunk
+387|76742|bwilson|2004-01-27 20:24:59|trunk
+388|76746|dpatel|2004-01-27 20:36:02|trunk
+389|76747|mkoch|2004-01-27 21:00:19|trunk
+390|76748|mkoch|2004-01-27 21:05:29|trunk
+391|76749|jlquinn|2004-01-27 21:07:30|trunk
+392|76750|dje|2004-01-27 21:09:59|trunk
+393|76751|djee|2004-01-27 21:28:39|trunk
+394|76752|dje|2004-01-27 22:00:55|trunk
+395|76753|ghazi|2004-01-27 22:13:28|trunk
+396|76754|rsandifo|2004-01-27 22:13:29|trunk
+397|76757|mkoch|2004-01-27 22:42:24|trunk
+398|76758|zack|2004-01-27 22:48:11|trunk
+399|76766|bkoz|2004-01-27 23:41:16|trunk
+400|76767|uweigand|2004-01-28 00:14:00|trunk
+401|76776|sayle|2004-01-28 01:37:28|trunk
+402|76778|kazu|2004-01-28 05:12:22|trunk
+403|76779|kazu|2004-01-28 05:27:12|trunk
+404|76780|rsandifo|2004-01-28 07:21:21|trunk
+405|76783|wilson|2004-01-28 08:17:55|trunk
+406|76786|paolo|2004-01-28 10:37:32|trunk
+407|76787|nickc|2004-01-28 11:41:38|trunk
+408|76791|hubicka|2004-01-28 14:13:35|trunk
+409|76792|djee|2004-01-28 16:23:54|trunk
+410|76795|bkoz|2004-01-28 17:50:34|trunk
+411|76798|zack|2004-01-28 18:13:28|trunk
+412|76800|ian|2004-01-28 18:24:11|trunk
+413|76801|rth|2004-01-28 18:49:26|trunk
+414|76802|mkoch|2004-01-28 19:37:59|trunk
+415|76803|ian|2004-01-28 19:43:45|trunk
+416|76804|hubicka|2004-01-28 20:15:40|trunk
+417|76807|kazu|2004-01-28 21:07:09|trunk
+418|76809|mkoch|2004-01-28 21:13:11|trunk
+419|76810|bkoz|2004-01-28 21:20:42|trunk
+420|76811|kazu|2004-01-28 22:00:26|trunk
+421|76812|zack|2004-01-28 22:09:27|trunk
+422|76814|danglin|2004-01-28 22:50:32|trunk
+423|76821|bkoz|2004-01-29 00:18:40|trunk
+424|76822|hubicka|2004-01-29 00:34:09|trunk
+425|76825|mmitchel|2004-01-29 01:29:03|trunk
+426|76826|kazu|2004-01-29 01:31:15|trunk
+427|76827|mmitchel|2004-01-29 01:32:20|trunk
+428|76830|kazu|2004-01-29 01:40:48|trunk
+429|76831|kazu|2004-01-29 01:47:24|trunk
+430|76832|kazu|2004-01-29 01:51:28|trunk
+431|76833|kazu|2004-01-29 01:56:28|trunk
+432|76834|kazu|2004-01-29 02:06:02|trunk
+433|76835|kazu|2004-01-29 02:13:52|trunk
+434|76836|kazu|2004-01-29 02:19:44|trunk
+435|76837|mmitchel|2004-01-29 02:21:51|trunk
+436|76842|wilson|2004-01-29 03:14:35|trunk
+437|76844|giovannibajo|2004-01-29 04:19:01|trunk
+438|76845|giovannibajo|2004-01-29 04:23:37|trunk
+439|76846|giovannibajo|2004-01-29 04:26:50|trunk
+440|76848|dberlin|2004-01-29 05:31:47|trunk
+441|76850|kazu|2004-01-29 07:35:40|trunk
+442|76851|rakdver|2004-01-29 07:47:56|trunk
+443|76852|jakub|2004-01-29 08:05:47|trunk
+444|76853|zlomek|2004-01-29 08:26:24|trunk
+445|76858|rakdver|2004-01-29 12:55:25|trunk
+446|76860|aph|2004-01-29 13:19:26|trunk
+447|76861|kho|2004-01-29 14:34:31|trunk
+448|76864|kazu|2004-01-29 15:59:24|trunk
+449|76867|giovannibajo|2004-01-29 16:45:35|trunk
+450|76868|mmitchel|2004-01-29 16:47:14|trunk
+451|76872|sayle|2004-01-29 17:13:21|trunk
+452|76874|sgilbertson|2004-01-29 18:21:01|trunk
+453|76886|ian|2004-01-29 18:40:01|trunk
+454|76887|dpatel|2004-01-29 18:42:58|trunk
+455|76888|jakub|2004-01-29 18:52:28|trunk
+456|76891|sgilbertson|2004-01-29 19:28:26|trunk
+457|76894|bkoz|2004-01-29 20:42:42|trunk
+458|76895|geoffk|2004-01-29 20:56:33|trunk
+459|76899|sgilbertson|2004-01-29 22:11:26|trunk
+460|76900|sgilbertson|2004-01-29 22:14:57|trunk
+461|76919|pinskia|2004-01-30 01:29:29|trunk
+462|76922|bkoz|2004-01-30 03:43:00|trunk
+463|76923|jason|2004-01-30 04:35:26|trunk
+464|76927|membar|2004-01-30 06:33:43|trunk
+465|76928|ebotcazou|2004-01-30 07:00:45|trunk
+466|76932|ljrittle|2004-01-30 08:24:27|trunk
+467|76934|uweigand|2004-01-30 09:07:21|trunk
+468|76937|paolo|2004-01-30 09:58:45|trunk
+469|76948|steven|2004-01-30 11:20:10|trunk
+470|76949|hubicka|2004-01-30 11:28:21|trunk
+471|76950|hubicka|2004-01-30 11:28:37|trunk
+472|76951|hubicka|2004-01-30 11:36:05|trunk
+473|76955|paolo|2004-01-30 13:23:42|trunk
+474|76956|membar|2004-01-30 13:43:21|trunk
+475|76958|ebotcazou|2004-01-30 14:16:43|trunk
+476|76961|ebotcazou|2004-01-30 14:46:43|trunk
+477|76963|giovannibajo|2004-01-30 15:08:37|trunk
+478|76964|giovannibajo|2004-01-30 15:12:45|trunk
+479|76965|kenner|2004-01-30 15:36:11|trunk
+480|76970|giovannibajo|2004-01-30 16:35:03|trunk
+481|76971|giovannibajo|2004-01-30 16:40:43|trunk
+482|76972|matz|2004-01-30 17:01:29|trunk
+483|76973|matz|2004-01-30 17:05:09|trunk
+484|76974|paolo|2004-01-30 17:06:42|trunk
+485|76976|pinskia|2004-01-30 17:43:24|trunk
+486|76977|dje|2004-01-30 17:45:01|trunk
+487|76978|bkoz|2004-01-30 17:54:10|trunk
+488|76979|bkoz|2004-01-30 18:14:42|trunk
+489|76981|kazu|2004-01-30 18:22:16|trunk
+490|76984|fjahanian|2004-01-30 18:51:35|trunk
+491|76985|rth|2004-01-30 19:16:39|trunk
+492|76989|hubicka|2004-01-30 20:42:24|trunk
+493|76990|dje|2004-01-30 20:47:32|trunk
+494|76993|mkoch|2004-01-30 22:01:11|trunk
+495|77003|uweigand|2004-01-30 23:10:36|trunk
+496|77005|kazu|2004-01-30 23:16:23|trunk
+497|77006|paolo|2004-01-30 23:26:13|trunk
+498|77008|rth|2004-01-30 23:37:39|trunk
+499|77009|kazu|2004-01-30 23:39:01|trunk
+500|77017|kcook|2004-01-31 00:50:03|trunk
+501|77018|kazu|2004-01-31 02:07:12|trunk
+502|77019|dberlin|2004-01-31 02:18:25|trunk
+503|77023|pinskia|2004-01-31 04:18:15|trunk
+504|77025|kazu|2004-01-31 08:02:55|trunk
+505|77026|paolo|2004-01-31 09:21:18|trunk
+506|77027|pinskia|2004-01-31 09:49:14|trunk
+507|77035|paolo|2004-01-31 15:39:52|trunk
+508|77036|uweigand|2004-01-31 17:01:24|trunk
+509|77037|kazu|2004-01-31 17:04:51|trunk
+510|77040|kazu|2004-01-31 17:31:40|trunk
+511|77042|bkoz|2004-01-31 17:38:45|trunk
+512|77043|kazu|2004-01-31 17:47:43|trunk
+513|77044|paolo|2004-01-31 17:50:46|trunk
+514|77045|kazu|2004-01-31 17:58:53|trunk
+515|77046|kazu|2004-01-31 18:42:55|trunk
+516|77047|kazu|2004-01-31 18:46:11|trunk
+517|77048|ebotcazou|2004-01-31 20:09:22|trunk
+518|77050|paolo|2004-01-31 21:37:11|trunk
+519|77051|kazu|2004-01-31 22:09:22|trunk
+520|77052|kazu|2004-01-31 22:12:55|trunk
+521|77053|kazu|2004-01-31 22:38:00|trunk
+522|77054|kazu|2004-01-31 22:58:46|trunk
+523|77055|kazu|2004-01-31 23:08:52|trunk
+524|77056|rth|2004-01-31 23:13:23|trunk
+525|77057|kazu|2004-01-31 23:21:25|trunk
+526|77058|paolo|2004-01-31 23:51:44|trunk
+527|77064|cgd|2004-02-01 08:05:50|trunk
+528|77065|paolo|2004-02-01 11:25:21|trunk
+529|77066|rsandifo|2004-02-01 11:46:42|trunk
+530|77070|sayle|2004-02-01 14:59:15|trunk
+531|77071|sayle|2004-02-01 15:03:15|trunk
+532|77072|jsm28|2004-02-01 15:15:29|trunk
+533|77074|ebotcazou|2004-02-01 15:19:12|trunk
+534|77076|kazu|2004-02-01 17:01:34|trunk
+535|77077|paolo|2004-02-01 17:34:44|trunk
+536|77078|paolo|2004-02-01 17:56:06|trunk
+537|77079|mkoch|2004-02-01 20:05:03|trunk
+538|77080|kazu|2004-02-01 21:21:45|trunk
+539|77081|paolo|2004-02-01 22:14:43|trunk
+540|77082|paolo|2004-02-01 23:19:55|trunk
+541|77088|hubicka|2004-02-02 00:17:18|trunk
+542|77089|giovannibajo|2004-02-02 01:07:08|trunk
+543|77090|giovannibajo|2004-02-02 01:09:22|trunk
+544|77091|giovannibajo|2004-02-02 01:11:03|trunk
+545|77093|fitzsim|2004-02-02 02:18:33|trunk
+546|77094|kazu|2004-02-02 02:32:23|trunk
+547|77098|kazu|2004-02-02 06:31:08|trunk
+548|77100|ebotcazou|2004-02-02 09:17:19|trunk
+549|77105|paolo|2004-02-02 10:44:28|trunk
+550|77107|ebotcazou|2004-02-02 12:20:52|trunk
+551|77110|charlet|2004-02-02 12:32:01|trunk
+552|77111|paolo|2004-02-02 12:39:55|trunk
+553|77113|paolo|2004-02-02 13:04:36|trunk
+554|77114|giovannibajo|2004-02-02 14:33:11|trunk
+555|77116|kazu|2004-02-02 15:18:28|trunk
+556|77119|ebotcazou|2004-02-02 16:12:36|trunk
+557|77122|charlet|2004-02-02 16:26:37|trunk
+558|77124|ebotcazou|2004-02-02 16:33:03|trunk
+559|77125|paolo|2004-02-02 16:35:09|trunk
+560|77127|mmitchel|2004-02-02 16:53:17|trunk
+561|77128|dje|2004-02-02 18:20:55|trunk
+562|77131|giovannibajo|2004-02-02 18:55:07|trunk
+563|77134|zack|2004-02-02 20:06:23|trunk
+564|77136|echristo|2004-02-02 20:20:58|trunk
+565|77137|kazu|2004-02-02 22:05:41|trunk
+566|77138|echristo|2004-02-02 22:50:10|trunk
+567|77140|paolo|2004-02-02 23:45:34|trunk
+568|77146|amodra|2004-02-03 00:40:26|trunk
+569|77148|kazu|2004-02-03 00:52:33|trunk
+570|77150|bkoz|2004-02-03 01:26:12|trunk
+571|77151|tromey|2004-02-03 02:56:20|trunk
+572|77152|sayle|2004-02-03 03:03:43|trunk
+573|77153|jlquinn|2004-02-03 03:33:24|trunk
+574|77156|jlquinn|2004-02-03 04:01:15|trunk
+575|77158|rth|2004-02-03 04:37:29|trunk
+576|77159|kazu|2004-02-03 05:15:46|trunk
+577|77160|kazu|2004-02-03 05:39:57|trunk
+578|77161|kazu|2004-02-03 06:43:59|trunk
+579|77162|kazu|2004-02-03 07:08:29|trunk
+580|77164|pinskia|2004-02-03 07:27:37|trunk
+581|77167|paolo|2004-02-03 11:21:01|trunk
+582|77168|paolo|2004-02-03 11:22:41|trunk
+583|77169|ebotcazou|2004-02-03 12:36:23|trunk
+584|77170|paolo|2004-02-03 13:38:28|trunk
+585|77171|pbrook|2004-02-03 14:45:44|trunk
+586|77173|membar|2004-02-03 16:07:24|trunk
+587|77175|sje|2004-02-03 16:39:42|trunk
+588|77176|mmitchel|2004-02-03 16:53:27|trunk
+589|77178|fitzsim|2004-02-03 17:10:56|trunk
+590|77180|pkoning|2004-02-03 17:36:02|trunk
+591|77182|paolo|2004-02-03 17:59:05|trunk
+592|77183|mmitchel|2004-02-03 17:59:58|trunk
+593|77185|amylaar|2004-02-03 19:52:23|trunk
+594|77186|mmitchel|2004-02-03 20:00:47|trunk
+595|77187|mmitchel|2004-02-03 20:01:59|trunk
+596|77191|rth|2004-02-03 21:24:39|trunk
+597|77192|sayle|2004-02-03 21:31:00|trunk
+598|77194|kazu|2004-02-03 22:14:48|trunk
+599|77195|rsandifo|2004-02-03 22:38:34|trunk
+600|77198|paolo|2004-02-03 23:34:52|trunk
+601|77199|geoffk|2004-02-03 23:44:40|trunk
+602|77200|steven|2004-02-03 23:45:52|trunk
+603|77201|hubicka|2004-02-03 23:53:48|trunk
+604|77203|tromey|2004-02-04 00:07:19|trunk
+605|77216|kazu|2004-02-04 05:13:43|trunk
+606|77217|kazu|2004-02-04 05:33:13|trunk
+607|77219|kazu|2004-02-04 05:40:42|trunk
+608|77220|kazu|2004-02-04 05:53:20|trunk
+609|77221|kazu|2004-02-04 06:07:39|trunk
+610|77224|kazu|2004-02-04 06:12:54|trunk
+611|77225|bkoz|2004-02-04 06:21:21|trunk
+612|77226|kazu|2004-02-04 06:32:51|trunk
+613|77233|charlet|2004-02-04 11:06:19|trunk
+614|77236|giovannibajo|2004-02-04 11:26:26|trunk
+615|77237|giovannibajo|2004-02-04 11:28:30|trunk
+616|77238|giovannibajo|2004-02-04 11:29:57|trunk
+617|77239|giovannibajo|2004-02-04 11:30:20|trunk
+618|77244|pbrook|2004-02-04 12:22:42|trunk
+619|77247|ghazi|2004-02-04 13:40:25|trunk
+620|77249|ian|2004-02-04 13:43:43|trunk
+621|77253|uweigand|2004-02-04 15:55:33|trunk
+622|77256|bkoz|2004-02-04 17:37:10|trunk
+623|77257|aldyh|2004-02-04 17:38:22|trunk
diff --git a/contrib/reghunt/examples/29906a.log b/contrib/reghunt/examples/29906a.log
new file mode 100644
index 000000000..4a9f28237
--- /dev/null
+++ b/contrib/reghunt/examples/29906a.log
@@ -0,0 +1,129 @@
+Mon Feb 16 18:06:01 PST 2009 LATER_THAN = 1
+Mon Feb 16 18:06:01 PST 2009 EARLIER_THAN = 623
+Mon Feb 16 18:06:01 PST 2009 svn checkout begun for id 623, rev 77257
+Mon Feb 16 18:08:50 PST 2009 svn checkout done
+Mon Feb 16 18:08:51 PST 2009 building cc1plus for id 623
+Mon Feb 16 18:14:43 PST 2009 build completed
+Mon Feb 16 18:14:43 PST 2009 compilation failed for bug 29906a, id 623
+Mon Feb 16 18:14:43 PST 2009 result for high patch 623 is as expected
+Mon Feb 16 18:14:43 PST 2009 svn update begun for id 1, rev 75951
+Mon Feb 16 18:15:05 PST 2009 svn update done
+Mon Feb 16 18:15:06 PST 2009 building cc1plus for id 1
+Mon Feb 16 18:20:58 PST 2009 build completed
+Mon Feb 16 18:20:58 PST 2009 test compiled successfully for bug 29906a, id 1
+Mon Feb 16 18:20:58 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 18:20:58 PST 2009 svn update begun for id 312, rev 76600
+Mon Feb 16 18:21:09 PST 2009 svn update done
+Mon Feb 16 18:21:10 PST 2009 building cc1plus for id 312
+Mon Feb 16 18:27:03 PST 2009 build completed
+Mon Feb 16 18:27:03 PST 2009 test compiled successfully for bug 29906a, id 312
+Mon Feb 16 18:27:03 PST 2009 search patches later than 312
+Mon Feb 16 18:27:03 PST 2009 svn update begun for id 467, rev 76934
+Mon Feb 16 18:27:12 PST 2009 svn update done
+Mon Feb 16 18:27:13 PST 2009 building cc1plus for id 467
+Mon Feb 16 18:33:05 PST 2009 build completed
+Mon Feb 16 18:33:05 PST 2009 compilation failed for bug 29906a, id 467
+Mon Feb 16 18:33:05 PST 2009 search patches earlier than 467
+Mon Feb 16 18:33:06 PST 2009 svn update begun for id 389, rev 76747
+Mon Feb 16 18:33:14 PST 2009 svn update done
+Mon Feb 16 18:33:15 PST 2009 building cc1plus for id 389
+Mon Feb 16 18:39:07 PST 2009 build completed
+Mon Feb 16 18:39:07 PST 2009 compilation failed for bug 29906a, id 389
+Mon Feb 16 18:39:07 PST 2009 search patches earlier than 389
+Mon Feb 16 18:39:07 PST 2009 svn update begun for id 350, rev 76666
+Mon Feb 16 18:39:14 PST 2009 svn update done
+Mon Feb 16 18:39:14 PST 2009 building cc1plus for id 350
+Mon Feb 16 18:45:07 PST 2009 build completed
+Mon Feb 16 18:45:08 PST 2009 test compiled successfully for bug 29906a, id 350
+Mon Feb 16 18:45:08 PST 2009 search patches later than 350
+Mon Feb 16 18:45:08 PST 2009 svn update begun for id 369, rev 76707
+Mon Feb 16 18:45:12 PST 2009 svn update done
+Mon Feb 16 18:45:12 PST 2009 building cc1plus for id 369
+Mon Feb 16 18:51:05 PST 2009 build completed
+Mon Feb 16 18:51:05 PST 2009 test compiled successfully for bug 29906a, id 369
+Mon Feb 16 18:51:05 PST 2009 search patches later than 369
+Mon Feb 16 18:51:05 PST 2009 svn update begun for id 379, rev 76734
+Mon Feb 16 18:51:10 PST 2009 svn update done
+Mon Feb 16 18:51:10 PST 2009 building cc1plus for id 379
+Mon Feb 16 18:57:02 PST 2009 build completed
+Mon Feb 16 18:57:03 PST 2009 test compiled successfully for bug 29906a, id 379
+Mon Feb 16 18:57:03 PST 2009 search patches later than 379
+Mon Feb 16 18:57:03 PST 2009 svn update begun for id 384, rev 76739
+Mon Feb 16 18:57:07 PST 2009 svn update done
+Mon Feb 16 18:57:07 PST 2009 building cc1plus for id 384
+Mon Feb 16 19:03:02 PST 2009 build completed
+Mon Feb 16 19:03:02 PST 2009 test compiled successfully for bug 29906a, id 384
+Mon Feb 16 19:03:02 PST 2009 search patches later than 384
+Mon Feb 16 19:03:02 PST 2009 svn update begun for id 386, rev 76741
+Mon Feb 16 19:03:08 PST 2009 svn update done
+Mon Feb 16 19:03:08 PST 2009 building cc1plus for id 386
+Mon Feb 16 19:09:00 PST 2009 build completed
+Mon Feb 16 19:09:00 PST 2009 test compiled successfully for bug 29906a, id 386
+Mon Feb 16 19:09:00 PST 2009 search patches later than 386
+Mon Feb 16 19:09:00 PST 2009 svn update begun for id 387, rev 76742
+Mon Feb 16 19:09:04 PST 2009 svn update done
+Mon Feb 16 19:09:04 PST 2009 building cc1plus for id 387
+Mon Feb 16 19:14:57 PST 2009 build completed
+Mon Feb 16 19:14:58 PST 2009 test compiled successfully for bug 29906a, id 387
+Mon Feb 16 19:14:58 PST 2009 search patches later than 387
+Mon Feb 16 19:14:58 PST 2009 svn update begun for id 388, rev 76746
+Mon Feb 16 19:15:02 PST 2009 svn update done
+Mon Feb 16 19:15:02 PST 2009 building cc1plus for id 388
+Mon Feb 16 19:20:55 PST 2009 build completed
+Mon Feb 16 19:20:56 PST 2009 compilation failed for bug 29906a, id 388
+Mon Feb 16 19:20:56 PST 2009 search patches earlier than 388
+Test result changes with id 388
+------------------------------------------------------------------------
+r76746 | dpatel | 2004-01-27 20:36:02 +0000 (Tue, 27 Jan 2004) | 47 lines
+
+
+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.
+
+ testsuite:
+
+ * g++.dg/debug/namespace1.C: New test.
+
+ cp:
+
+ * name-lookup.c: Include "debug.h"
+ (do_namespace_alias): Invoke debug_hooks to emit debug info
+ for namespace alias.
+ (do_local_using_decl): Invoke debug_hooks to emit debug info
+ for using decl.
+ (do_class_using_decl): Same.
+ (do_toplevel_using_decl): Same.
+ (do_using_directive): Same.
+ (cp_emit_debug_info_for_using): New function.
+ * Make-lang.in (cp/parser.o): Depend on debug.h
+ (cp/name-lookup.o): Same.
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=76746
+ r76746 | dpatel | 2004-01-27 20:36:02 +0000 (Tue, 27 Jan 2004)
diff --git a/contrib/reghunt/examples/29906b.cc b/contrib/reghunt/examples/29906b.cc
new file mode 100644
index 000000000..ef644eee5
--- /dev/null
+++ b/contrib/reghunt/examples/29906b.cc
@@ -0,0 +1,7 @@
+struct A{
+ typedef int T;
+ virtual ~A();
+};
+struct B:public A{
+ using A::T;
+};
diff --git a/contrib/reghunt/examples/29906b.config b/contrib/reghunt/examples/29906b.config
new file mode 100644
index 000000000..ad6bd0b0e
--- /dev/null
+++ b/contrib/reghunt/examples/29906b.config
@@ -0,0 +1,19 @@
+BUGID=29906b
+FIND=fix
+LANG=c++
+BUILD_KIND=full
+BUG_KIND=ice-on-valid-code
+OPTS="-g"
+REG_CONFOPTS="--disable-bootstrap"
+
+. ./common.config
+
+#LOW_PATCH=112
+#HIGH_PATCH=121
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+msg 0 'NOTE: skipping high patch, already verified'
+SKIP_HIGH=1
+
+#REG_IDLIST="11 21 31 41 51 71 81 91 101 111"
diff --git a/contrib/reghunt/examples/29906b.list b/contrib/reghunt/examples/29906b.list
new file mode 100644
index 000000000..60fd2adcb
--- /dev/null
+++ b/contrib/reghunt/examples/29906b.list
@@ -0,0 +1,556 @@
+1|112078|jvdelisle|2006-03-15 07:03:20|trunk
+2|112079|jvdelisle|2006-03-15 07:08:06|trunk
+3|112080|ebotcazou|2006-03-15 07:49:33|trunk
+4|112081|schwab|2006-03-15 10:14:51|trunk
+5|112082|rakdver|2006-03-15 10:50:46|trunk
+6|112083|kkojima|2006-03-15 11:50:24|trunk
+7|112084|reichelt|2006-03-15 15:27:11|trunk
+8|112085|amylaar|2006-03-15 15:52:34|trunk
+9|112089|kazu|2006-03-15 16:14:55|trunk
+10|112090|danglin|2006-03-15 16:49:20|trunk
+11|112092|tromey|2006-03-15 17:39:16|trunk
+12|112093|tromey|2006-03-15 18:29:44|trunk
+13|112094|tromey|2006-03-15 18:45:02|trunk
+14|112095|daney|2006-03-15 19:10:23|trunk
+15|112098|daney|2006-03-15 19:28:42|trunk
+16|112099|pbrook|2006-03-15 20:22:56|trunk
+17|112102|tromey|2006-03-16 00:08:12|trunk
+18|112108|ghazi|2006-03-16 01:00:01|trunk
+19|112113|danglin|2006-03-16 01:32:19|trunk
+20|112115|tromey|2006-03-16 01:54:51|trunk
+21|112121|geoffk|2006-03-16 02:37:09|trunk
+22|112122|kkojima|2006-03-16 02:44:10|trunk
+23|112125|mkuvyrkov|2006-03-16 05:17:41|trunk
+24|112126|mkuvyrkov|2006-03-16 05:20:39|trunk
+25|112127|mkuvyrkov|2006-03-16 05:23:21|trunk
+26|112128|mkuvyrkov|2006-03-16 05:27:03|trunk
+27|112129|mkuvyrkov|2006-03-16 05:29:44|trunk
+28|112131|krebbel|2006-03-16 08:15:35|trunk
+29|112136|sayle|2006-03-16 16:34:05|trunk
+30|112138|pbrook|2006-03-16 16:54:59|trunk
+31|112142|tromey|2006-03-16 19:08:07|trunk
+32|112147|sayle|2006-03-16 19:47:19|trunk
+33|112149|rsandifo|2006-03-16 20:21:11|trunk
+34|112150|rsandifo|2006-03-16 20:24:42|trunk
+35|112160|jsm28|2006-03-16 23:58:00|trunk
+36|112162|sayle|2006-03-17 00:02:53|trunk
+37|112168|geoffk|2006-03-17 00:35:32|trunk
+38|112169|danglin|2006-03-17 01:12:33|trunk
+39|112170|aoliva|2006-03-17 06:08:49|trunk
+40|112171|steven|2006-03-17 07:11:35|trunk
+41|112173|amylaar|2006-03-17 14:29:08|trunk
+42|112174|pbrook|2006-03-17 14:48:58|trunk
+43|112175|dje|2006-03-17 15:37:33|trunk
+44|112176|dje|2006-03-17 16:45:46|trunk
+45|112177|rguenth|2006-03-17 17:38:51|trunk
+46|112180|sje|2006-03-17 18:42:40|trunk
+47|112198|jvdelisle|2006-03-18 01:56:07|trunk
+48|112199|jvdelisle|2006-03-18 01:59:50|trunk
+49|112201|ghazi|2006-03-18 17:08:54|trunk
+50|112204|jsm28|2006-03-18 21:44:50|trunk
+51|112210|pault|2006-03-19 10:36:09|trunk
+52|112212|pault|2006-03-19 12:56:31|trunk
+53|112215|dje|2006-03-19 20:57:43|trunk
+54|112217|dje|2006-03-19 23:12:17|trunk
+55|112223|amodra|2006-03-20 07:56:35|trunk
+56|112224|rguenth|2006-03-20 08:55:50|trunk
+57|112225|dje|2006-03-20 16:09:52|trunk
+58|112227|pinskia|2006-03-20 21:00:18|trunk
+59|112229|steven|2006-03-20 21:22:55|trunk
+60|112230|tkoenig|2006-03-20 21:56:00|trunk
+61|112231|kkojima|2006-03-20 22:58:32|trunk
+62|112232|rsandifo|2006-03-20 23:22:13|trunk
+63|112239|jason|2006-03-21 03:19:06|trunk
+64|112240|law|2006-03-21 03:44:56|trunk
+65|112241|jason|2006-03-21 04:00:36|trunk
+66|112242|law|2006-03-21 05:07:37|trunk
+67|112243|toon|2006-03-21 06:32:57|trunk
+68|112246|ebotcazou|2006-03-21 11:15:44|trunk
+69|112247|paolo|2006-03-21 12:25:11|trunk
+70|112248|bernds|2006-03-21 13:07:33|trunk
+71|112250|jason|2006-03-21 16:15:25|trunk
+72|112251|jakub|2006-03-21 16:21:24|trunk
+73|112252|matz|2006-03-21 17:27:56|trunk
+74|112253|jakub|2006-03-21 18:35:20|trunk
+75|112254|pinskia|2006-03-21 18:58:50|trunk
+76|112255|ebotcazou|2006-03-21 20:59:11|trunk
+77|112256|law|2006-03-21 21:01:42|trunk
+78|112257|sje|2006-03-21 21:12:00|trunk
+79|112258|ghazi|2006-03-21 21:17:54|trunk
+80|112259|sje|2006-03-21 21:19:10|trunk
+81|112261|rsandifo|2006-03-21 21:49:13|trunk
+82|112264|janis|2006-03-21 23:50:37|trunk
+83|112270|jason|2006-03-22 04:20:52|trunk
+84|112275|jason|2006-03-22 05:08:48|trunk
+85|112278|pault|2006-03-22 05:13:13|trunk
+86|112279|rsandifo|2006-03-22 07:21:00|trunk
+87|112280|rsandifo|2006-03-22 07:23:00|trunk
+88|112281|rsandifo|2006-03-22 07:54:45|trunk
+89|112282|rguenth|2006-03-22 11:01:38|trunk
+90|112283|rth|2006-03-22 12:50:45|trunk
+91|112285|jiez|2006-03-22 14:53:12|trunk
+92|112286|paolo|2006-03-22 15:13:46|trunk
+93|112287|jb|2006-03-22 16:00:23|trunk
+94|112289|law|2006-03-22 18:00:50|trunk
+95|112290|tkoenig|2006-03-22 19:09:11|trunk
+96|112292|reichelt|2006-03-22 19:36:22|trunk
+97|112296|reichelt|2006-03-22 21:42:34|trunk
+98|112298|reichelt|2006-03-22 21:45:13|trunk
+99|112302|ghazi|2006-03-22 23:18:38|trunk
+100|112312|dje|2006-03-23 04:20:38|trunk
+101|112315|rsandifo|2006-03-23 09:29:15|trunk
+102|112316|rakdver|2006-03-23 10:33:38|trunk
+103|112317|rakdver|2006-03-23 10:45:09|trunk
+104|112319|pinskia|2006-03-23 15:09:51|trunk
+105|112322|rth|2006-03-23 15:49:00|trunk
+106|112323|rth|2006-03-23 15:51:10|trunk
+107|112328|mkuvyrkov|2006-03-23 18:23:53|trunk
+108|112331|amylaar|2006-03-23 21:39:32|trunk
+109|112332|amylaar|2006-03-23 22:10:41|trunk
+110|112334|amodra|2006-03-23 22:23:24|trunk
+111|112340|amodra|2006-03-23 23:15:46|trunk
+112|112346|jsm28|2006-03-24 01:59:35|trunk
+113|112348|law|2006-03-24 07:51:32|trunk
+114|112349|ebotcazou|2006-03-24 10:09:01|trunk
+115|112350|bernds|2006-03-24 15:53:23|trunk
+116|112351|jakub|2006-03-24 16:14:40|trunk
+117|112352|denisc|2006-03-24 16:30:19|trunk
+118|112355|andreast|2006-03-24 17:59:29|trunk
+119|112357|krebbel|2006-03-24 19:09:11|trunk
+120|112359|dje|2006-03-24 20:49:29|trunk
+121|112360|carlos|2006-03-24 21:17:41|trunk
+122|112361|geoffk|2006-03-24 21:59:48|trunk
+123|112362|geoffk|2006-03-24 22:03:19|trunk
+124|112363|jimb|2006-03-24 22:39:45|trunk
+125|112365|law|2006-03-24 23:21:27|trunk
+126|112372|geoffk|2006-03-25 00:54:40|trunk
+127|112373|sayle|2006-03-25 01:28:11|trunk
+128|112374|daney|2006-03-25 01:53:48|trunk
+129|112377|sayle|2006-03-25 15:01:42|trunk
+130|112378|hjl|2006-03-25 15:34:00|trunk
+131|112379|uros|2006-03-25 17:32:34|trunk
+132|112380|dberlin|2006-03-25 19:17:26|trunk
+133|112381|tkoenig|2006-03-25 21:15:48|trunk
+134|112382|tkoenig|2006-03-25 21:31:48|trunk
+135|112383|nemet|2006-03-25 21:58:01|trunk
+136|112384|kargl|2006-03-25 22:08:50|trunk
+137|112390|jvdelisle|2006-03-26 02:15:44|trunk
+138|112392|kargl|2006-03-26 05:20:09|trunk
+139|112398|dje|2006-03-26 17:15:43|trunk
+140|112399|spop|2006-03-26 20:48:05|trunk
+141|112400|amodra|2006-03-26 22:48:22|trunk
+142|112407|jvdelisle|2006-03-27 05:59:37|trunk
+143|112408|geoffk|2006-03-27 06:09:48|trunk
+144|112409|geoffk|2006-03-27 06:14:55|trunk
+145|112410|jvdelisle|2006-03-27 06:55:20|trunk
+146|112416|jakub|2006-03-27 12:27:40|trunk
+147|112417|jakub|2006-03-27 12:32:51|trunk
+148|112418|krebbel|2006-03-27 13:15:46|trunk
+149|112421|amylaar|2006-03-27 14:11:14|trunk
+150|112422|amylaar|2006-03-27 15:59:27|trunk
+151|112423|bernds|2006-03-27 16:25:16|trunk
+152|112424|dje|2006-03-27 17:03:56|trunk
+153|112427|mkuvyrkov|2006-03-27 22:38:06|trunk
+154|112428|mkuvyrkov|2006-03-27 22:59:07|trunk
+155|112437|spop|2006-03-28 04:19:26|trunk
+156|112438|sayle|2006-03-28 05:01:27|trunk
+157|112442|pault|2006-03-28 10:13:50|trunk
+158|112447|paolo|2006-03-28 12:54:04|trunk
+159|112451|dberlin|2006-03-28 14:36:56|trunk
+160|112453|law|2006-03-28 15:35:47|trunk
+161|112454|abalkiss|2006-03-28 16:12:52|trunk
+162|112455|sayle|2006-03-28 17:06:19|trunk
+163|112456|mkuvyrkov|2006-03-28 17:33:41|trunk
+164|112459|sayle|2006-03-28 17:55:26|trunk
+165|112463|denisc|2006-03-28 18:56:10|trunk
+166|112464|tromey|2006-03-28 19:02:25|trunk
+167|112465|tromey|2006-03-28 19:05:21|trunk
+168|112466|law|2006-03-28 19:10:11|trunk
+169|112469|sayle|2006-03-28 19:38:28|trunk
+170|112474|kargl|2006-03-28 22:15:52|trunk
+171|112476|kkojima|2006-03-28 22:21:41|trunk
+172|112483|rakdver|2006-03-29 01:34:51|trunk
+173|112484|rakdver|2006-03-29 01:41:27|trunk
+174|112491|krebbel|2006-03-29 11:55:53|trunk
+175|112493|pbrook|2006-03-29 15:21:13|trunk
+176|112494|tromey|2006-03-29 15:22:30|trunk
+177|112499|tromey|2006-03-29 16:31:53|trunk
+178|112500|pbrook|2006-03-29 16:33:54|trunk
+179|112502|spop|2006-03-29 17:20:24|trunk
+180|112503|andreast|2006-03-29 18:47:39|trunk
+181|112504|pbrook|2006-03-29 19:14:57|trunk
+182|112506|tromey|2006-03-29 20:13:23|trunk
+183|112507|spop|2006-03-29 20:25:23|trunk
+184|112508|dje|2006-03-29 21:07:12|trunk
+185|112510|tromey|2006-03-29 21:33:08|trunk
+186|112511|sayle|2006-03-29 21:55:34|trunk
+187|112512|dje|2006-03-29 22:30:23|trunk
+188|112513|sayle|2006-03-29 22:40:17|trunk
+189|112514|bkoz|2006-03-29 22:46:44|trunk
+190|112515|dje|2006-03-29 22:46:47|trunk
+191|112516|dje|2006-03-29 22:58:32|trunk
+192|112517|dje|2006-03-29 23:08:11|trunk
+193|112518|dje|2006-03-29 23:17:23|trunk
+194|112519|dje|2006-03-29 23:23:28|trunk
+195|112522|dje|2006-03-29 23:58:31|trunk
+196|112529|sayle|2006-03-30 01:35:22|trunk
+197|112530|rguenth|2006-03-30 12:11:16|trunk
+198|112534|bonzini|2006-03-30 14:31:13|trunk
+199|112535|jiez|2006-03-30 14:48:05|trunk
+200|112537|mkuvyrkov|2006-03-30 15:33:18|trunk
+201|112538|mkuvyrkov|2006-03-30 15:41:00|trunk
+202|112539|tkoenig|2006-03-30 16:30:26|trunk
+203|112540|tromey|2006-03-30 16:39:17|trunk
+204|112542|tromey|2006-03-30 16:59:27|trunk
+205|112543|sayle|2006-03-30 17:47:48|trunk
+206|112545|carlos|2006-03-30 20:20:10|trunk
+207|112546|fxcoudert|2006-03-30 22:00:21|trunk
+208|112547|sayle|2006-03-30 22:37:55|trunk
+209|112549|geoffk|2006-03-30 23:46:32|trunk
+210|112555|amodra|2006-03-31 00:27:51|trunk
+211|112558|bdavis|2006-03-31 00:47:13|trunk
+212|112561|amodra|2006-03-31 01:25:35|trunk
+213|112563|mmitchel|2006-03-31 02:03:12|trunk
+214|112564|bje|2006-03-31 03:08:41|trunk
+215|112567|sayle|2006-03-31 03:53:47|trunk
+216|112570|jvdelisle|2006-03-31 05:11:03|trunk
+217|112571|jvdelisle|2006-03-31 05:15:42|trunk
+218|112574|aph|2006-03-31 11:43:43|trunk
+219|112576|denisc|2006-03-31 13:32:44|trunk
+220|112579|jsm28|2006-03-31 17:04:41|trunk
+221|112580|jsm28|2006-03-31 17:05:06|trunk
+222|112587|andreast|2006-03-31 20:38:55|trunk
+223|112591|dj|2006-03-31 21:53:04|trunk
+224|112592|mmitchel|2006-03-31 22:16:35|trunk
+225|112593|kkojima|2006-03-31 22:31:05|trunk
+226|112594|kargl|2006-04-01 00:04:46|trunk
+227|112601|jsm28|2006-04-01 00:21:46|trunk
+228|112603|rth|2006-04-01 00:37:13|trunk
+229|112604|bwilson|2006-04-01 01:29:11|trunk
+230|112605|sayle|2006-04-01 07:11:35|trunk
+231|112607|sayle|2006-04-01 19:16:01|trunk
+232|112608|sayle|2006-04-01 19:19:22|trunk
+233|112610|fxcoudert|2006-04-01 21:24:24|trunk
+234|112611|ebotcazou|2006-04-01 21:34:27|trunk
+235|112619|sayle|2006-04-02 02:38:01|trunk
+236|112620|spop|2006-04-02 04:08:02|trunk
+237|112621|spop|2006-04-02 04:27:40|trunk
+238|112623|spop|2006-04-02 14:08:02|trunk
+239|112625|eedelman|2006-04-02 17:00:39|trunk
+240|112626|sayle|2006-04-02 22:23:44|trunk
+241|112633|sayle|2006-04-03 03:07:40|trunk
+242|112634|pault|2006-04-03 04:20:57|trunk
+243|112635|spop|2006-04-03 09:59:38|trunk
+244|112636|aph|2006-04-03 10:15:25|trunk
+245|112637|bonzini|2006-04-03 11:20:07|trunk
+246|112638|bonzini|2006-04-03 11:23:04|trunk
+247|112640|aph|2006-04-03 14:31:56|trunk
+248|112642|law|2006-04-03 17:08:42|trunk
+249|112643|nemet|2006-04-03 18:12:15|trunk
+250|112646|geoffk|2006-04-03 20:56:59|trunk
+251|112647|doko|2006-04-03 22:20:21|trunk
+252|112653|geoffk|2006-04-04 00:28:33|trunk
+253|112654|tromey|2006-04-04 00:30:05|trunk
+254|112656|jvdelisle|2006-04-04 02:50:23|trunk
+255|112657|jvdelisle|2006-04-04 03:04:58|trunk
+256|112658|gerald|2006-04-04 05:41:24|trunk
+257|112664|tromey|2006-04-04 14:06:20|trunk
+258|112665|dberlin|2006-04-04 14:06:53|trunk
+259|112666|tromey|2006-04-04 15:04:35|trunk
+260|112670|sayle|2006-04-04 15:27:08|trunk
+261|112671|tromey|2006-04-04 15:44:59|trunk
+262|112672|carlos|2006-04-04 16:19:59|trunk
+263|112673|spop|2006-04-04 17:08:16|trunk
+264|112676|dje|2006-04-04 17:58:55|trunk
+265|112677|tromey|2006-04-04 20:05:01|trunk
+266|112683|echristo|2006-04-04 23:07:26|trunk
+267|112685|tromey|2006-04-04 23:25:09|trunk
+268|112691|bje|2006-04-05 00:50:58|trunk
+269|112692|geoffk|2006-04-05 00:53:55|trunk
+270|112693|echristo|2006-04-05 02:46:02|trunk
+271|112694|echristo|2006-04-05 02:53:30|trunk
+272|112695|hjl|2006-04-05 04:47:51|trunk
+273|112696|gerald|2006-04-05 05:21:32|trunk
+274|112697|rguenth|2006-04-05 08:16:38|trunk
+275|112699|aph|2006-04-05 09:53:08|trunk
+276|112700|spop|2006-04-05 12:33:06|trunk
+277|112701|hjl|2006-04-05 13:23:35|trunk
+278|112702|ebotcazou|2006-04-05 13:41:01|trunk
+279|112705|amodra|2006-04-05 14:45:12|trunk
+280|112708|rmathew|2006-04-05 15:18:19|trunk
+281|112709|rguenth|2006-04-05 15:41:18|trunk
+282|112718|bernds|2006-04-05 19:37:42|trunk
+283|112719|andreast|2006-04-05 21:26:34|trunk
+284|112720|bernds|2006-04-05 22:03:30|trunk
+285|112722|jason|2006-04-05 22:32:25|trunk
+286|112724|tromey|2006-04-05 22:47:51|trunk
+287|112730|dj|2006-04-06 01:54:29|trunk
+288|112731|sayle|2006-04-06 02:08:27|trunk
+289|112734|sayle|2006-04-06 16:47:40|trunk
+290|112736|andreast|2006-04-06 19:22:45|trunk
+291|112737|mrs|2006-04-06 19:36:30|trunk
+292|112738|hubicka|2006-04-06 20:33:21|trunk
+293|112740|mmitchel|2006-04-06 22:16:11|trunk
+294|112741|carlos|2006-04-06 23:54:50|trunk
+295|112749|rguenth|2006-04-07 08:04:26|trunk
+296|112751|hubicka|2006-04-07 11:48:42|trunk
+297|112752|dje|2006-04-07 14:24:44|trunk
+298|112753|hubicka|2006-04-07 15:24:39|trunk
+299|112754|aph|2006-04-07 15:42:07|trunk
+300|112755|spop|2006-04-07 15:44:59|trunk
+301|112765|dj|2006-04-07 21:50:47|trunk
+302|112766|andreast|2006-04-07 22:33:30|trunk
+303|112768|wilson|2006-04-07 23:04:15|trunk
+304|112769|jvdelisle|2006-04-07 23:05:12|trunk
+305|112776|rmh|2006-04-08 09:03:32|trunk
+306|112779|kazu|2006-04-08 14:15:44|trunk
+307|112780|kazu|2006-04-08 14:31:12|trunk
+308|112782|kazu|2006-04-08 17:01:17|trunk
+309|112784|kazu|2006-04-08 17:07:16|trunk
+310|112786|rmh|2006-04-08 20:11:21|trunk
+311|112787|mrs|2006-04-08 20:38:25|trunk
+312|112788|mrs|2006-04-08 21:06:26|trunk
+313|112789|dberlin|2006-04-08 21:50:04|trunk
+314|112790|mrs|2006-04-08 23:07:53|trunk
+315|112791|mrs|2006-04-08 23:26:12|trunk
+316|112792|mrs|2006-04-08 23:36:00|trunk
+317|112793|mrs|2006-04-09 00:07:28|trunk
+318|112794|mrs|2006-04-09 00:11:53|trunk
+319|112800|mrs|2006-04-09 00:18:01|trunk
+320|112803|rsandifo|2006-04-09 10:06:20|trunk
+321|112805|danglin|2006-04-09 17:19:42|trunk
+322|112807|danglin|2006-04-09 18:32:16|trunk
+323|112815|dberlin|2006-04-10 03:36:09|trunk
+324|112817|sayle|2006-04-10 05:13:59|trunk
+325|112818|paolo|2006-04-10 10:05:51|trunk
+326|112819|jakub|2006-04-10 12:02:55|trunk
+327|112820|jakub|2006-04-10 13:18:19|trunk
+328|112823|ebotcazou|2006-04-10 14:29:47|trunk
+329|112824|ebotcazou|2006-04-10 14:34:02|trunk
+330|112827|aph|2006-04-10 16:01:23|trunk
+331|112829|geoffk|2006-04-10 18:16:07|trunk
+332|112830|kazu|2006-04-10 19:26:18|trunk
+333|112832|sayle|2006-04-10 21:01:19|trunk
+334|112833|doko|2006-04-10 21:34:19|trunk
+335|112843|amodra|2006-04-11 00:33:29|trunk
+336|112845|aldyh|2006-04-11 01:36:50|trunk
+337|112847|dj|2006-04-11 03:08:13|trunk
+338|112849|law|2006-04-11 05:52:45|trunk
+339|112850|jakub|2006-04-11 07:15:00|trunk
+340|112851|jakub|2006-04-11 07:16:14|trunk
+341|112857|sayle|2006-04-11 15:41:41|trunk
+342|112858|bryce|2006-04-11 16:23:00|trunk
+343|112859|ebotcazou|2006-04-11 16:25:46|trunk
+344|112861|rsandifo|2006-04-11 17:43:07|trunk
+345|112863|sayle|2006-04-11 18:26:12|trunk
+346|112864|danglin|2006-04-11 18:29:16|trunk
+347|112867|bryce|2006-04-11 21:56:27|trunk
+348|112869|mmitchel|2006-04-11 22:59:57|trunk
+349|112871|sayle|2006-04-11 23:53:39|trunk
+350|112880|amodra|2006-04-12 01:26:23|trunk
+351|112882|jimb|2006-04-12 06:24:40|trunk
+352|112883|jimb|2006-04-12 06:29:21|trunk
+353|112884|rguenth|2006-04-12 07:51:18|trunk
+354|112887|sayle|2006-04-12 13:46:19|trunk
+355|112889|sayle|2006-04-12 16:26:58|trunk
+356|112891|mmitchel|2006-04-12 16:58:24|trunk
+357|112893|kazu|2006-04-12 17:19:23|trunk
+358|112894|kazu|2006-04-12 17:20:22|trunk
+359|112897|gerald|2006-04-12 19:57:02|trunk
+360|112898|amylaar|2006-04-12 20:09:41|trunk
+361|112900|wilson|2006-04-12 22:10:49|trunk
+362|112903|kazu|2006-04-12 22:55:28|trunk
+363|112904|andreast|2006-04-12 22:56:19|trunk
+364|112912|amodra|2006-04-13 05:10:00|trunk
+365|112914|jvdelisle|2006-04-13 06:24:58|trunk
+366|112915|jvdelisle|2006-04-13 06:30:04|trunk
+367|112923|uweigand|2006-04-13 20:26:59|trunk
+368|112925|tromey|2006-04-13 21:04:04|trunk
+369|112927|sayle|2006-04-13 21:10:31|trunk
+370|112930|sayle|2006-04-13 21:31:00|trunk
+371|112934|dj|2006-04-13 23:14:25|trunk
+372|112935|rth|2006-04-13 23:44:25|trunk
+373|112936|ebotcazou|2006-04-14 00:07:48|trunk
+374|112942|kazu|2006-04-14 02:28:46|trunk
+375|112948|amodra|2006-04-14 03:20:21|trunk
+376|112949|uros|2006-04-14 05:01:18|trunk
+377|112950|ebotcazou|2006-04-14 07:01:38|trunk
+378|112955|kazu|2006-04-14 14:31:32|trunk
+379|112957|paolo|2006-04-14 17:35:06|trunk
+380|112959|jakub|2006-04-14 22:24:59|trunk
+381|112966|sayle|2006-04-15 03:24:23|trunk
+382|112967|jvdelisle|2006-04-15 04:51:39|trunk
+383|112968|sayle|2006-04-15 05:50:42|trunk
+384|112969|kazu|2006-04-15 12:40:14|trunk
+385|112970|danglin|2006-04-15 15:53:33|trunk
+386|112971|kazu|2006-04-15 21:45:06|trunk
+387|112972|kazu|2006-04-15 21:48:54|trunk
+388|112979|kazu|2006-04-16 00:55:20|trunk
+389|112980|sayle|2006-04-16 02:38:44|trunk
+390|112981|pault|2006-04-16 03:45:24|trunk
+391|112982|sayle|2006-04-16 04:01:25|trunk
+392|112983|paolo|2006-04-16 09:06:46|trunk
+393|112986|mmitchel|2006-04-16 18:12:41|trunk
+394|112988|tkoenig|2006-04-16 20:29:24|trunk
+395|112990|sayle|2006-04-16 21:46:59|trunk
+396|112991|sayle|2006-04-16 23:33:51|trunk
+397|112998|nemet|2006-04-17 01:59:41|trunk
+398|112999|jvdelisle|2006-04-17 02:33:51|trunk
+399|113000|jvdelisle|2006-04-17 02:37:15|trunk
+400|113001|sayle|2006-04-17 02:38:50|trunk
+401|113004|kazu|2006-04-17 12:40:57|trunk
+402|113005|kazu|2006-04-17 12:42:37|trunk
+403|113006|kazu|2006-04-17 12:45:25|trunk
+404|113007|rguenth|2006-04-17 13:53:19|trunk
+405|113008|reichelt|2006-04-17 16:32:03|trunk
+406|113009|sayle|2006-04-17 16:49:54|trunk
+407|113010|janis|2006-04-17 19:35:56|trunk
+408|113011|andreast|2006-04-17 21:18:23|trunk
+409|113012|geoffk|2006-04-17 21:27:57|trunk
+410|113013|tromey|2006-04-17 21:41:47|trunk
+411|113025|bonzini|2006-04-18 08:08:47|trunk
+412|113026|bonzini|2006-04-18 08:23:39|trunk
+413|113027|nickc|2006-04-18 10:11:30|trunk
+414|113028|nickc|2006-04-18 10:15:41|trunk
+415|113029|kazu|2006-04-18 12:32:11|trunk
+416|113031|paolo|2006-04-18 12:34:41|trunk
+417|113039|krebbel|2006-04-18 13:56:51|trunk
+418|113042|nickc|2006-04-18 14:48:36|trunk
+419|113047|sje|2006-04-18 16:05:42|trunk
+420|113048|dpatel|2006-04-18 16:06:32|trunk
+421|113053|aldot|2006-04-18 17:58:41|trunk
+422|113054|dj|2006-04-18 18:58:17|trunk
+423|113056|jsm28|2006-04-18 20:50:45|trunk
+424|113057|geoffk|2006-04-18 21:52:49|trunk
+425|113060|amodra|2006-04-18 23:45:47|trunk
+426|113066|dj|2006-04-19 00:56:33|trunk
+427|113071|krebbel|2006-04-19 10:42:19|trunk
+428|113072|krebbel|2006-04-19 11:45:41|trunk
+429|113073|krebbel|2006-04-19 11:56:18|trunk
+430|113075|rakdver|2006-04-19 12:48:35|trunk
+431|113081|mmitchel|2006-04-19 16:58:23|trunk
+432|113082|tromey|2006-04-19 17:01:53|trunk
+433|113084|reichelt|2006-04-19 17:15:54|trunk
+434|113087|reichelt|2006-04-19 17:36:59|trunk
+435|113090|reichelt|2006-04-19 18:07:19|trunk
+436|113094|reichelt|2006-04-19 21:42:09|trunk
+437|113095|reichelt|2006-04-19 21:47:03|trunk
+438|113096|reichelt|2006-04-19 22:03:24|trunk
+439|113100|paolo|2006-04-19 22:58:23|trunk
+440|113101|tromey|2006-04-19 23:05:14|trunk
+441|113107|carlos|2006-04-20 00:21:51|trunk
+442|113109|kkojima|2006-04-20 01:54:20|trunk
+443|113111|amodra|2006-04-20 07:04:00|trunk
+444|113112|jakub|2006-04-20 09:04:26|trunk
+445|113118|tromey|2006-04-20 15:46:40|trunk
+446|113120|law|2006-04-20 16:13:12|trunk
+447|113121|reichelt|2006-04-20 16:19:21|trunk
+448|113122|hjl|2006-04-20 16:23:57|trunk
+449|113123|bryce|2006-04-20 23:47:56|trunk
+450|113130|amodra|2006-04-21 01:52:13|trunk
+451|113133|pault|2006-04-21 05:10:22|trunk
+452|113135|nickc|2006-04-21 08:10:42|trunk
+453|113136|dje|2006-04-21 14:10:22|trunk
+454|113138|pbrook|2006-04-21 17:05:51|trunk
+455|113141|sje|2006-04-21 17:39:15|trunk
+456|113146|jsm28|2006-04-21 19:45:50|trunk
+457|113148|jsm28|2006-04-21 19:49:54|trunk
+458|113152|reichelt|2006-04-21 22:58:28|trunk
+459|113153|reichelt|2006-04-21 23:02:26|trunk
+460|113167|echristo|2006-04-22 01:23:09|trunk
+461|113168|echristo|2006-04-22 01:33:34|trunk
+462|113169|jakub|2006-04-22 07:08:58|trunk
+463|113171|geoffk|2006-04-22 08:50:36|trunk
+464|113173|jsm28|2006-04-22 15:31:09|trunk
+465|113175|kazu|2006-04-22 16:12:34|trunk
+466|113178|kazu|2006-04-22 16:19:56|trunk
+467|113179|fche|2006-04-22 16:22:54|trunk
+468|113180|kazu|2006-04-22 16:45:28|trunk
+469|113181|andreast|2006-04-22 21:17:35|trunk
+470|113182|andreast|2006-04-22 22:17:26|trunk
+471|113190|jvdelisle|2006-04-23 02:04:58|trunk
+472|113192|ebotcazou|2006-04-23 09:06:32|trunk
+473|113193|paolo|2006-04-23 11:44:40|trunk
+474|113194|pault|2006-04-23 11:56:37|trunk
+475|113195|paolo|2006-04-23 14:54:26|trunk
+476|113196|sayle|2006-04-23 17:25:30|trunk
+477|113197|sayle|2006-04-23 17:39:54|trunk
+478|113198|sayle|2006-04-23 17:44:46|trunk
+479|113199|mmitchel|2006-04-23 18:04:33|trunk
+480|113200|ebotcazou|2006-04-23 18:14:13|trunk
+481|113201|doko|2006-04-23 18:15:34|trunk
+482|113206|dje|2006-04-23 23:58:36|trunk
+483|113212|hjl|2006-04-24 03:04:29|trunk
+484|113213|mmitchel|2006-04-24 03:50:31|trunk
+485|113216|rguenth|2006-04-24 07:58:53|trunk
+486|113217|rguenth|2006-04-24 08:01:33|trunk
+487|113218|rguenth|2006-04-24 08:17:42|trunk
+488|113219|rguenth|2006-04-24 08:21:41|trunk
+489|113220|reichelt|2006-04-24 08:38:05|trunk
+490|113221|rguenth|2006-04-24 09:06:51|trunk
+491|113223|aph|2006-04-24 13:40:21|trunk
+492|113224|aph|2006-04-24 15:33:16|trunk
+493|113226|mmitchel|2006-04-24 16:33:11|trunk
+494|113227|bernds|2006-04-24 19:35:38|trunk
+495|113228|jules|2006-04-24 21:24:27|trunk
+496|113229|tromey|2006-04-24 21:28:36|trunk
+497|113240|mmitchel|2006-04-25 03:33:38|trunk
+498|113241|geoffk|2006-04-25 05:56:36|trunk
+499|113242|jakub|2006-04-25 09:42:41|trunk
+500|113245|bernds|2006-04-25 11:49:27|trunk
+501|113246|aph|2006-04-25 11:54:15|trunk
+502|113247|bernds|2006-04-25 11:58:22|trunk
+503|113248|krebbel|2006-04-25 12:11:25|trunk
+504|113250|dje|2006-04-25 15:00:53|trunk
+505|113251|tromey|2006-04-25 15:20:33|trunk
+506|113252|rguenth|2006-04-25 15:38:32|trunk
+507|113254|geoffk|2006-04-25 19:12:50|trunk
+508|113256|rth|2006-04-25 20:58:25|trunk
+509|113257|rsandifo|2006-04-25 21:34:48|trunk
+510|113259|dj|2006-04-25 22:08:53|trunk
+511|113265|sayle|2006-04-26 00:51:14|trunk
+512|113267|geoffk|2006-04-26 06:57:01|trunk
+513|113268|jakub|2006-04-26 08:20:57|trunk
+514|113269|jakub|2006-04-26 08:23:12|trunk
+515|113270|jakub|2006-04-26 08:24:28|trunk
+516|113271|jakub|2006-04-26 08:26:06|trunk
+517|113274|aldyh|2006-04-26 10:29:02|trunk
+518|113275|dje|2006-04-26 14:33:49|trunk
+519|113276|zadeck|2006-04-26 16:17:01|trunk
+520|113278|dje|2006-04-26 17:57:03|trunk
+521|113281|bkoz|2006-04-26 19:13:18|trunk
+522|113283|bkoz|2006-04-26 19:52:31|trunk
+523|113296|hjl|2006-04-27 06:13:40|trunk
+524|113297|mueller|2006-04-27 11:13:45|trunk
+525|113298|rguenth|2006-04-27 13:52:44|trunk
+526|113300|rguenth|2006-04-27 14:25:49|trunk
+527|113318|sayle|2006-04-27 17:26:03|trunk
+528|113319|stuart|2006-04-27 18:57:11|trunk
+529|113320|mmitchel|2006-04-27 19:02:54|trunk
+530|113321|amacleod|2006-04-27 20:22:17|trunk
+531|113323|andreast|2006-04-27 22:20:03|trunk
+532|113325|bkoz|2006-04-27 22:49:28|trunk
+533|113327|echristo|2006-04-27 22:53:23|trunk
+534|113339|mmitchel|2006-04-28 02:40:58|trunk
+535|113340|amodra|2006-04-28 03:36:15|trunk
+536|113341|amodra|2006-04-28 03:41:34|trunk
+537|113345|jsm28|2006-04-28 12:15:36|trunk
+538|113347|doko|2006-04-28 14:05:42|trunk
+539|113348|rguenth|2006-04-28 14:36:14|trunk
+540|113350|jbeulich|2006-04-28 14:44:20|trunk
+541|113355|sayle|2006-04-28 19:59:57|trunk
+542|113356|amacleod|2006-04-28 20:39:18|trunk
+543|113358|echristo|2006-04-28 20:52:01|trunk
+544|113363|jvdelisle|2006-04-28 23:55:30|trunk
+545|113364|jvdelisle|2006-04-29 00:02:10|trunk
+546|113370|bryce|2006-04-29 01:35:50|trunk
+547|113375|hjl|2006-04-29 14:25:42|trunk
+548|113376|fxcoudert|2006-04-29 16:31:26|trunk
+549|113377|paolo|2006-04-29 18:16:47|trunk
+550|113378|reichelt|2006-04-29 20:48:45|trunk
+551|113382|reichelt|2006-04-29 21:39:54|trunk
+552|113388|jvdelisle|2006-04-30 03:19:37|trunk
+553|113389|reichelt|2006-04-30 10:34:05|trunk
+554|113392|zadeck|2006-04-30 13:32:05|trunk
+555|113395|dje|2006-04-30 19:23:13|trunk
+556|113399|mmitchel|2006-04-30 23:21:38|trunk
diff --git a/contrib/reghunt/examples/29906b.log b/contrib/reghunt/examples/29906b.log
new file mode 100644
index 000000000..2285d9c31
--- /dev/null
+++ b/contrib/reghunt/examples/29906b.log
@@ -0,0 +1,81 @@
+Mon Feb 16 19:21:02 PST 2009 NOTE: skipping high patch, already verified
+Mon Feb 16 19:21:02 PST 2009 LATER_THAN = 1
+Mon Feb 16 19:21:02 PST 2009 EARLIER_THAN = 556
+Mon Feb 16 19:21:02 PST 2009 svn checkout begun for id 1, rev 112078
+Mon Feb 16 19:25:04 PST 2009 svn checkout done
+Mon Feb 16 19:25:04 PST 2009 building GCC (c,c++) for id 1
+Mon Feb 16 19:37:17 PST 2009 compilation failed for bug 29906b, id 1
+Mon Feb 16 19:37:17 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 19:37:17 PST 2009 svn update begun for id 278, rev 112702
+Mon Feb 16 19:37:37 PST 2009 svn update done
+Mon Feb 16 19:37:38 PST 2009 building GCC (c,c++) for id 278
+Mon Feb 16 19:49:42 PST 2009 test compiled successfully for bug 29906b, id 278
+Mon Feb 16 19:49:42 PST 2009 search patches earlier than 278
+Mon Feb 16 19:49:42 PST 2009 svn update begun for id 139, rev 112398
+Mon Feb 16 19:49:57 PST 2009 svn update done
+Mon Feb 16 19:49:58 PST 2009 building GCC (c,c++) for id 139
+Mon Feb 16 20:01:55 PST 2009 test compiled successfully for bug 29906b, id 139
+Mon Feb 16 20:01:55 PST 2009 search patches earlier than 139
+Mon Feb 16 20:01:55 PST 2009 svn update begun for id 70, rev 112248
+Mon Feb 16 20:02:06 PST 2009 svn update done
+Mon Feb 16 20:02:07 PST 2009 building GCC (c,c++) for id 70
+Mon Feb 16 20:14:01 PST 2009 compilation failed for bug 29906b, id 70
+Mon Feb 16 20:14:01 PST 2009 search patches later than 70
+Mon Feb 16 20:14:01 PST 2009 svn update begun for id 104, rev 112319
+Mon Feb 16 20:14:12 PST 2009 svn update done
+Mon Feb 16 20:14:12 PST 2009 building GCC (c,c++) for id 104
+Mon Feb 16 20:26:15 PST 2009 compilation failed for bug 29906b, id 104
+Mon Feb 16 20:26:15 PST 2009 search patches later than 104
+Mon Feb 16 20:26:15 PST 2009 svn update begun for id 121, rev 112360
+Mon Feb 16 20:26:25 PST 2009 svn update done
+Mon Feb 16 20:26:26 PST 2009 building GCC (c,c++) for id 121
+Mon Feb 16 20:38:27 PST 2009 test compiled successfully for bug 29906b, id 121
+Mon Feb 16 20:38:27 PST 2009 search patches earlier than 121
+Mon Feb 16 20:38:27 PST 2009 svn update begun for id 112, rev 112346
+Mon Feb 16 20:38:38 PST 2009 svn update done
+Mon Feb 16 20:38:39 PST 2009 building GCC (c,c++) for id 112
+Mon Feb 16 20:50:36 PST 2009 compilation failed for bug 29906b, id 112
+Mon Feb 16 20:50:36 PST 2009 search patches later than 112
+Mon Feb 16 20:50:37 PST 2009 svn update begun for id 116, rev 112351
+Mon Feb 16 20:50:42 PST 2009 svn update done
+Mon Feb 16 20:50:42 PST 2009 building GCC (c,c++) for id 116
+Mon Feb 16 21:02:45 PST 2009 compilation failed for bug 29906b, id 116
+Mon Feb 16 21:02:45 PST 2009 search patches later than 116
+Mon Feb 16 21:02:45 PST 2009 svn update begun for id 118, rev 112355
+Mon Feb 16 21:02:50 PST 2009 svn update done
+Mon Feb 16 21:02:51 PST 2009 building GCC (c,c++) for id 118
+Mon Feb 16 21:14:53 PST 2009 compilation failed for bug 29906b, id 118
+Mon Feb 16 21:14:53 PST 2009 search patches later than 118
+Mon Feb 16 21:14:53 PST 2009 svn update begun for id 119, rev 112357
+Mon Feb 16 21:15:01 PST 2009 svn update done
+Mon Feb 16 21:15:01 PST 2009 building GCC (c,c++) for id 119
+Mon Feb 16 21:26:59 PST 2009 compilation failed for bug 29906b, id 119
+Mon Feb 16 21:26:59 PST 2009 search patches later than 119
+Mon Feb 16 21:26:59 PST 2009 svn update begun for id 120, rev 112359
+Mon Feb 16 21:27:04 PST 2009 svn update done
+Mon Feb 16 21:27:04 PST 2009 building GCC (c,c++) for id 120
+Mon Feb 16 21:39:01 PST 2009 compilation failed for bug 29906b, id 120
+Mon Feb 16 21:39:01 PST 2009 search patches later than 120
+Test result changes with id 121
+------------------------------------------------------------------------
+r112360 | carlos | 2006-03-24 21:17:41 +0000 (Fri, 24 Mar 2006) | 15 lines
+
+gcc/
+
+2006-03-24 Carlos O'Donell <carlos@codesourcery.com>
+
+ * doc/invoke.texi: Document -femit-class-debug-always
+ * common.opt: Add -femit-class-debug-always.
+
+gcc/cp/
+
+2006-03-24 Carlos O'Donell <carlos@codesourcery.com>
+
+ * search.c (maybe_suppress_debug_info): If
+ flag_emit_class_debug_always then don't suppress.
+
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=112360
+ r112360 | carlos | 2006-03-24 21:17:41 +0000 (Fri, 24 Mar 2006)
diff --git a/contrib/reghunt/examples/30643.c b/contrib/reghunt/examples/30643.c
new file mode 100644
index 000000000..be607491e
--- /dev/null
+++ b/contrib/reghunt/examples/30643.c
@@ -0,0 +1,14 @@
+extern void abort (void);
+struct s { int a; int b;};
+void bar (struct s *ps, int *p, int *__restrict__ rp, int *__restrict__ rq)
+{
+ ps->a = 0;
+ ps->b = 1;
+ if (ps->a != 0) abort ();
+ p[0] = 0;
+ p[1] = 1;
+ if (p[0] != 0) abort ();
+ rp[0] = 0;
+ rq[0] = 1;
+ if (rp[0] != 0) abort();
+}
diff --git a/contrib/reghunt/examples/30643.config b/contrib/reghunt/examples/30643.config
new file mode 100644
index 000000000..a7f830d6c
--- /dev/null
+++ b/contrib/reghunt/examples/30643.config
@@ -0,0 +1,19 @@
+BUGID=30643
+FIND=break
+LANG=c
+BUILD_KIND=simple
+BUG_KIND=ice-on-valid-code
+OPTS="-O2"
+REG_TARGET=i686-linux
+
+. ./common.config
+
+REG_TEST=${BUGID}.test
+
+#LOW_PATCH=11
+#HIGH_PATCH=21
+
+#msg 0 'NOTE: skipping low patch, already verified'
+#SKIP_LOW=1
+msg 0 'NOTE: skipping high patch, already verified'
+SKIP_HIGH=1
diff --git a/contrib/reghunt/examples/30643.list b/contrib/reghunt/examples/30643.list
new file mode 100644
index 000000000..73f8ebff8
--- /dev/null
+++ b/contrib/reghunt/examples/30643.list
@@ -0,0 +1,83 @@
+1|115570|pmj|2006-07-18 22:22:07|trunk
+2|115576|mmitchel|2006-07-19 00:22:43|trunk
+3|115578|sayle|2006-07-19 05:13:56|trunk
+4|115579|mmitchel|2006-07-19 05:14:25|trunk
+5|115580|rsandifo|2006-07-19 05:29:36|trunk
+6|115582|nathan|2006-07-19 06:45:34|trunk
+7|115591|jakub|2006-07-19 15:47:36|trunk
+8|115593|jb|2006-07-19 16:51:49|trunk
+9|115594|jb|2006-07-19 16:52:45|trunk
+10|115597|mmitchel|2006-07-19 17:32:38|trunk
+11|115598|daney|2006-07-19 19:52:44|trunk
+12|115599|reichelt|2006-07-19 19:56:29|trunk
+13|115600|mmitchel|2006-07-19 22:49:20|trunk
+14|115608|echristo|2006-07-20 07:35:32|trunk
+15|115609|echristo|2006-07-20 07:40:12|trunk
+16|115610|dannysmith|2006-07-20 07:59:09|trunk
+17|115614|pbrook|2006-07-20 13:57:31|trunk
+18|115619|pbrook|2006-07-20 14:20:26|trunk
+19|115622|jason|2006-07-20 16:02:57|trunk
+20|115624|daney|2006-07-20 17:30:42|trunk
+21|115625|daney|2006-07-20 17:42:11|trunk
+22|115628|kseitz|2006-07-20 19:29:53|trunk
+23|115629|kseitz|2006-07-20 19:30:30|trunk
+24|115631|kseitz|2006-07-20 22:20:09|trunk
+25|115632|bkoz|2006-07-20 23:37:27|trunk
+26|115638|sayle|2006-07-21 05:31:33|trunk
+27|115640|reichelt|2006-07-21 09:41:16|trunk
+28|115643|reichelt|2006-07-21 09:59:57|trunk
+29|115646|kseitz|2006-07-21 18:50:48|trunk
+30|115647|mark|2006-07-21 19:13:22|trunk
+31|115648|mrs|2006-07-21 20:19:08|trunk
+32|115649|mrs|2006-07-21 20:39:19|trunk
+33|115650|daney|2006-07-21 20:49:06|trunk
+34|115651|jason|2006-07-21 21:00:20|trunk
+35|115652|jason|2006-07-21 21:06:19|trunk
+36|115653|sje|2006-07-21 21:07:15|trunk
+37|115654|sje|2006-07-21 21:11:46|trunk
+38|115655|kseitz|2006-07-21 23:45:03|trunk
+39|115656|bkoz|2006-07-21 23:54:41|trunk
+40|115669|membar|2006-07-22 01:42:25|trunk
+41|115670|jvdelisle|2006-07-22 03:14:27|trunk
+42|115671|jvdelisle|2006-07-22 03:18:33|trunk
+43|115672|jvdelisle|2006-07-22 03:21:10|trunk
+44|115677|kargl|2006-07-22 17:55:35|trunk
+45|115678|hubicka|2006-07-22 23:41:18|trunk
+46|115684|drow|2006-07-23 03:50:24|trunk
+47|115685|steven|2006-07-23 17:56:34|trunk
+48|115686|sayle|2006-07-23 20:14:44|trunk
+49|115687|mmitchel|2006-07-23 20:28:26|trunk
+50|115691|sayle|2006-07-23 21:13:07|trunk
+51|115692|membar|2006-07-23 23:59:24|trunk
+52|115693|hubicka|2006-07-24 00:16:16|trunk
+53|115698|jvdelisle|2006-07-24 00:17:52|trunk
+54|115700|jvdelisle|2006-07-24 00:19:45|trunk
+55|115701|membar|2006-07-24 00:22:25|trunk
+56|115702|jvdelisle|2006-07-24 00:26:08|trunk
+57|115703|drow|2006-07-24 02:58:08|trunk
+58|115704|drow|2006-07-24 02:59:36|trunk
+59|115705|uros|2006-07-24 05:43:14|trunk
+60|115712|hubicka|2006-07-24 11:23:21|trunk
+61|115713|hubicka|2006-07-24 11:27:53|trunk
+62|115714|rguenth|2006-07-24 11:42:52|trunk
+63|115715|paolo|2006-07-24 12:30:28|trunk
+64|115718|kargl|2006-07-24 16:54:01|trunk
+65|115721|eedelman|2006-07-24 20:15:59|trunk
+66|115729|reichelt|2006-07-25 00:57:10|trunk
+67|115732|kargl|2006-07-25 05:08:33|trunk
+68|115733|bonzini|2006-07-25 08:30:38|trunk
+69|115734|bonzini|2006-07-25 08:41:02|trunk
+70|115735|drow|2006-07-25 12:31:33|trunk
+71|115738|nickc|2006-07-25 15:33:50|trunk
+72|115739|andreast|2006-07-25 20:01:22|trunk
+73|115740|rakdver|2006-07-25 20:38:37|trunk
+74|115742|sayle|2006-07-25 23:21:56|trunk
+75|115749|jvdelisle|2006-07-26 01:40:29|trunk
+76|115750|jvdelisle|2006-07-26 01:47:13|trunk
+77|115751|jvdelisle|2006-07-26 01:48:41|trunk
+78|115754|fxcoudert|2006-07-26 11:58:48|trunk
+79|115760|rakdver|2006-07-26 16:47:28|trunk
+80|115761|drow|2006-07-26 17:31:54|trunk
+81|115762|drow|2006-07-26 17:38:37|trunk
+82|115763|hubicka|2006-07-26 20:17:32|trunk
+83|115765|hubicka|2006-07-26 22:51:56|trunk
diff --git a/contrib/reghunt/examples/30643.log b/contrib/reghunt/examples/30643.log
new file mode 100644
index 000000000..574a001a9
--- /dev/null
+++ b/contrib/reghunt/examples/30643.log
@@ -0,0 +1,64 @@
+Mon Feb 16 21:39:11 PST 2009 NOTE: skipping high patch, already verified
+Mon Feb 16 21:39:11 PST 2009 LATER_THAN = 1
+Mon Feb 16 21:39:11 PST 2009 EARLIER_THAN = 83
+Mon Feb 16 21:39:11 PST 2009 svn checkout begun for id 1, rev 115570
+Mon Feb 16 21:43:34 PST 2009 svn checkout done
+Mon Feb 16 21:43:34 PST 2009 building cc1 for id 1
+Mon Feb 16 21:47:05 PST 2009 build completed
+Mon Feb 16 21:47:05 PST 2009 no call to abort for bug 30643, id 1
+Mon Feb 16 21:47:05 PST 2009 result for low patch 1 is as expected
+Mon Feb 16 21:47:05 PST 2009 svn update begun for id 42, rev 115671
+Mon Feb 16 21:47:11 PST 2009 svn update done
+Mon Feb 16 21:47:11 PST 2009 building cc1 for id 42
+Mon Feb 16 21:50:37 PST 2009 build completed
+Mon Feb 16 21:50:37 PST 2009 abort call exists for bug 30643, id 42
+Mon Feb 16 21:50:37 PST 2009 search patches earlier than 42
+Mon Feb 16 21:50:37 PST 2009 svn update begun for id 21, rev 115625
+Mon Feb 16 21:50:44 PST 2009 svn update done
+Mon Feb 16 21:50:44 PST 2009 building cc1 for id 21
+Mon Feb 16 21:54:09 PST 2009 build completed
+Mon Feb 16 21:54:09 PST 2009 abort call exists for bug 30643, id 21
+Mon Feb 16 21:54:09 PST 2009 search patches earlier than 21
+Mon Feb 16 21:54:10 PST 2009 svn update begun for id 11, rev 115598
+Mon Feb 16 21:54:15 PST 2009 svn update done
+Mon Feb 16 21:54:15 PST 2009 building cc1 for id 11
+Mon Feb 16 21:57:39 PST 2009 build completed
+Mon Feb 16 21:57:39 PST 2009 no call to abort for bug 30643, id 11
+Mon Feb 16 21:57:39 PST 2009 search patches later than 11
+Mon Feb 16 21:57:39 PST 2009 svn update begun for id 16, rev 115610
+Mon Feb 16 21:57:43 PST 2009 svn update done
+Mon Feb 16 21:57:43 PST 2009 building cc1 for id 16
+Mon Feb 16 22:01:08 PST 2009 build completed
+Mon Feb 16 22:01:09 PST 2009 no call to abort for bug 30643, id 16
+Mon Feb 16 22:01:09 PST 2009 search patches later than 16
+Mon Feb 16 22:01:09 PST 2009 svn update begun for id 18, rev 115619
+Mon Feb 16 22:01:13 PST 2009 svn update done
+Mon Feb 16 22:01:13 PST 2009 building cc1 for id 18
+Mon Feb 16 22:04:38 PST 2009 build completed
+Mon Feb 16 22:04:38 PST 2009 abort call exists for bug 30643, id 18
+Mon Feb 16 22:04:38 PST 2009 search patches earlier than 18
+Mon Feb 16 22:04:38 PST 2009 svn update begun for id 17, rev 115614
+Mon Feb 16 22:04:42 PST 2009 svn update done
+Mon Feb 16 22:04:42 PST 2009 building cc1 for id 17
+Mon Feb 16 22:08:07 PST 2009 build completed
+Mon Feb 16 22:08:07 PST 2009 abort call exists for bug 30643, id 17
+Mon Feb 16 22:08:07 PST 2009 search patches earlier than 17
+Test result changes with id 17
+------------------------------------------------------------------------
+r115614 | pbrook | 2006-07-20 13:57:31 +0000 (Thu, 20 Jul 2006) | 11 lines
+
+2006-07-20 Paul Brook <paul@codesourcery.com>
+
+ PR 27363
+ gcc/
+ * cse.c (cse_insn): Add destination addresses to hash table. Check if
+ they are invalidated by this instruction.
+
+ gcc/testsuite/
+ * gcc.dg/pr27363.c: New test.
+
+
+------------------------------------------------------------------------
+
+ http://gcc.gnu.org/viewcvs?view=rev&rev=115614
+ r115614 | pbrook | 2006-07-20 13:57:31 +0000 (Thu, 20 Jul 2006)
diff --git a/contrib/reghunt/examples/30643.test b/contrib/reghunt/examples/30643.test
new file mode 100755
index 000000000..ba9b0e0ff
--- /dev/null
+++ b/contrib/reghunt/examples/30643.test
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+ID=$1
+
+LOGID=`printf "%04d" ${ID}`
+LOG=${BUGID}.${LOGID}.out
+MSGID="bug ${BUGID}, id ${ID}"
+ASM=${BUGID}.${LOGID}.s
+
+$REG_TEST_COMPILER $REG_OPTS $REG_TESTCASE > ${LOG} 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "`date` compilation failed unexpectedly for ${MSGID}"
+ exit REG_ERROR
+fi
+
+cp ${BUGID}.s $ASM
+
+grep -q abort $ASM
+if [ $? -eq 0 ]; then
+ echo "`date` abort call exists for ${MSGID}"
+ exit $REG_FAIL
+fi
+
+echo "`date` no call to abort for ${MSGID}"
+exit $REG_PASS
diff --git a/contrib/reghunt/examples/README b/contrib/reghunt/examples/README
new file mode 100644
index 000000000..ebf1bcb9b
--- /dev/null
+++ b/contrib/reghunt/examples/README
@@ -0,0 +1,53 @@
+This directory contains files from examples of regression hunts, cut
+down to smaller ranges to save space and time. Try these out before
+using the tools on your own tests. First, update gcc-svn-env and
+common.config for your own environment.
+
+Each of the examples has multiple files:
+
+ *.list files were created using gcc-svn-patchlist
+
+ *.config files were written by hand based on earlier config files;
+ the commented-out pieces are left as templates in case they're needed
+
+ *.c, *.c++ are source files for the test, usually taken directly from
+ the PR
+
+ *.test files are tests specific to a bug when an existing gcc-test-*
+ script can't be used
+
+ *.log files are output from various scripts
+
+Examples, where the identifier is the PR number:
+
+ 28970 wrong-code
+ 29106 special test, 4.1 branch
+ 29578 bogus-warning
+ 29906a ice-on-valid-code, break
+ 29906b ice-on-valid-code, fix
+ 30643 special test, cross compiler
+
+Cut down the range even further by setting LOW_PATCH and HIGH_PATCH
+within the config file to ids where the log file shows the test
+passed or failed.
+
+To run one, do
+
+ reg-hunt 28970.config > 28970.log 2>&1
+
+Check on its progress using
+
+ ./reg-watch 28970.log
+
+To run them all, do
+
+ echo "hunt 28970" > queue
+ echo "hunt 29106" >> queue
+ echo "hunt 29578" >> queue
+ echo "hunt 29906a" >> queue
+ echo "hunt 29906b" >> queue
+ echo "hunt 30643" >> queue
+ ./testall queue
+
+This allows you to add more to the queue if you're setting up lots of
+hunts.
diff --git a/contrib/reghunt/examples/common.config b/contrib/reghunt/examples/common.config
new file mode 100644
index 000000000..7e48e1dc6
--- /dev/null
+++ b/contrib/reghunt/examples/common.config
@@ -0,0 +1,133 @@
+. ../gcc-svn-env
+
+test "x${BUILD}" != "x" || BUILD=$REG_DEFAULT_BUILD
+export REG_BLD=$BUILD
+HOST=$BUILD
+
+test "x${REG_TARGET}" != "x" || REG_TARGET=$HOST
+test "x${REG_CONFOPTS}" != "x" || REG_CONFOPTS=""
+test "${BUILD}" = "${TARGET}" -a -n "${BINUTILS}" \
+ || export PATH=${BINUTILS}:${PATH}
+
+VERBOSITY=1
+DATE_IN_MSG=1
+
+export BUGID
+export REG_CHANGESET_LIST=`pwd`/${BUGID}.list
+
+########################################################################
+# LOW_PATCH and HIGH_PATCH are for reg_search_id.
+########################################################################
+
+LOW_PATCH=1
+HIGH_PATCH=`wc -l $REG_CHANGESET_LIST | awk '{ print $1 }'`
+
+########################################################################
+# REG_NEWMID, REG_FAILLIST, REG_CHECKFAIL, and REG_REPORTFAIL are
+# used by reg-hunt and auxiliary scripts to continue a hunt after a
+# build failure. If REG_NEWMID is not defined then they are all
+# ignored.
+########################################################################
+
+#export REG_NEWMID=${REG_BIN}/reg-newmid
+#export REG_FAILLIST=`pwd`/gcc-fails-${BUILD_KIND}
+export REG_CHECKFAIL=${REG_BIN}/gcc-svn-checkfail
+export REG_RECORDFAIL=${REG_BIN}/gcc-svn-recordfail
+
+########################################################################
+# REG_UPDATE, REG_BUILD, and REG_TEST are used by several scripts.
+# You can use these or provide your own.
+########################################################################
+
+export REG_UPDATE=${REG_BIN}/gcc-svn-update
+
+export REG_BUILD=${REG_BIN}/gcc-build-${BUILD_KIND}
+ # Variables defined below are specific to gcc-build-${BUILD_KIND}
+ REG_CONFOPTS="$REG_CONFOPTS --build=${BUILD}"
+ REG_CONFOPTS="$REG_CONFOPTS --host=${HOST}"
+ REG_CONFOPTS="$REG_CONFOPTS --target=${REG_TARGET}"
+ if [ -n "$GMP" ]; then
+ REG_CONFOPTS="$REG_CONFOPTS --with-gmp=$GMP"
+ REG_CONFOPTS="$REG_CONFOPTS --with-mpfr=$GMP"
+ fi
+ REG_CONFOPTS="$REG_CONFOPTS --disable-libmudflap"
+ REG_CONFOPTS="$REG_CONFOPTS --disable-libssa"
+
+ if [ "${BUILD_KIND}" != "simple" -a -n "${BINUTILS}" ]; then
+ REG_CONFOPTS="$REG_CONFOPTS --with-as=${BINUTILS}/as"
+ REG_CONFOPTS="$REG_CONFOPTS --with-ld=${BINUTILS}/ld"
+ fi
+
+ case $LANG in
+ c)
+ REG_LANGS="c"
+ SUFFIX=c
+ case $BUILD_KIND in
+ simple) REG_COMPILER=cc1;;
+ full) REG_COMPILER=gcc;;
+ bootstrap) REG_COMPILER=gcc;;
+ *) msg 0 "unrecognized BUILD_KIND: $BUILD_KIND"; exit 1;
+ esac
+ ;;
+ c++)
+ REG_LANGS="c,c++"
+ SUFFIX=cc
+ case $BUILD_KIND in
+ simple) REG_COMPILER=cc1plus;;
+ full) REG_COMPILER=g++;;
+ bootstrap) REG_COMPILER=g++;;
+ *) msg 0 "unrecognized BUILD_KIND: $BUILD_KIND"; exit 1;
+ esac
+ ;;
+ f77)
+ REG_LANGS="c,f77"
+ SUFFIX=f
+ case $BUILD_KIND in
+ simple) REG_COMPILER=f771;;
+ full) REG_COMPILER=g77;;
+ bootstrap) REG_COMPILER=g77;;
+ *) msg 0 "unrecognized BUILD_KIND: $BUILD_KIND"; exit 1;
+ esac
+ ;;
+ f95)
+ REG_LANGS="c,f95"
+ SUFFIX=f90
+ case $BUILD_KIND in
+ simple) REG_COMPILER=f951;;
+ full) REG_COMPILER=gfortran;;
+ bootstrap) REG_COMPILER=gfortran;;
+ *) msg 0 "unrecognized BUILD_KIND: $BUILD_KIND"; exit 1;
+ esac
+ ;;
+ *) msg 0 "unrecognized LANG: $LANG"; exit 1;;
+ esac
+ export REG_TARGET
+ export REG_CONFOPTS
+ export REG_GCCSRC=${REG_SRCDIR}/gcc
+ export REG_LANGS
+ export REG_COMPILER
+
+export REG_TEST=${REG_BIN}/gcc-test-${BUG_KIND}
+ # Variables defined below are specific to gcc-${BUG_KIND}
+ case $BUILD_KIND in
+ simple) REG_TEST_COMPILER="${REG_OBJDIR}/gcc/${REG_COMPILER} -quiet";;
+ *) REG_TEST_COMPILER="${REG_PREFIX}/bin/${REG_COMPILER}";
+ case $BUG_KIND in
+ wrong-code) ;;
+ *) REG_TEST_COMPILER="$REG_TEST_COMPILER -c";;
+ esac;
+ ;;
+ esac
+ export REG_TEST_COMPILER
+ export REG_OPTS="${OPTS}"
+ export REG_TESTCASE=${BUGID}.${SUFFIX}
+
+ # Return values of the test scripts depend on whether we're looking
+ # for the patch that introduced a bug or the one that fixed it.
+ case $FIND in
+ break) REG_PASS=1; REG_FAIL=0;;
+ fix) REG_PASS=0; REG_FAIL=1;;
+ *) msg 0 "error: unrecognized FIND: $FIND"; exit 1;;
+ esac
+ REG_ERROR=2
+ export REG_PASS REG_FAIL REG_ERROR
diff --git a/contrib/reghunt/examples/gcc-svn-env b/contrib/reghunt/examples/gcc-svn-env
new file mode 100644
index 000000000..8691eaf7d
--- /dev/null
+++ b/contrib/reghunt/examples/gcc-svn-env
@@ -0,0 +1,75 @@
+# Define environment variables used by regression-hunting scripts.
+
+# Change this if using a local copy of the repository.
+export REG_SVN_REPO=svn://gcc.gnu.org/svn/gcc
+REG_TOP=${HOME}/reghunt
+export REG_BIN=${REG_TOP}/bin
+export PATH=${REG_BIN}:${PATH}
+
+# The build scripts look for these variables if they are defined.
+#export BINUTILS=/opt/gcc-nightly/binutils-2.19/bin
+#export GMP=/opt/gcc-nightly/gmp-mpfr
+export REG_DEFAULT_BUILD=${REG_DEFAULT_BUILD-powerpc-linux}
+
+export REG_SRCDIR=${REG_TOP}/src
+export REG_BUILDDIR=${REG_TOP}/build
+export REG_OBJDIR=${REG_BUILDDIR}/obj
+export REG_PREFIX=${REG_TOP}/install
+export REG_IDS=${REG_BIN}/gcc-svn-ids
+export REG_REPORT=${REG_BIN}/gcc-svn-report
+export REG_CLEANUP=${REG_CLEANUP-$REG_BIN/gcc-cleanup}
+export REG_STOP=${REG_SRCDIR}/STOP
+
+# Used for parallelism in make commands; very system-dependent, this is POSIX.
+export REG_MAKE_J="-j `getconf _NPROCESSORS_ONLN`"
+
+export BRANCHPOINT_4_3="2008-02-18"
+export BRANCHPOINT_4_2="2006-10-20"
+export BRANCHPOINT_4_1="2005-11-18"
+export BRANCHPOINT_4_0="2005-02-25"
+export BRANCHPOINT_3_4="2004-01-16"
+export BRANCHPOINT_3_3="2002-12-13"
+export BRANCHPOINT_3_1="2002-02-25"
+export BRANCHPOINT_3_0="2001-02-12"
+export BRANCHPOINT_2_95="1999-05-18"
+
+export RELEASE_4_3_3="2009-01-24"
+export RELEASE_4_3_2="2008-08-27"
+export RELEASE_4_3_1="2008-06-06"
+export RELEASE_4_3_0="2008-03-05"
+
+export RELEASE_4_2_4="2008-05-19"
+export RELEASE_4_2_3="2008-02-01"
+export RELEASE_4_2_2="2007-10-07"
+export RELEASE_4_2_1="2007-07-19"
+export RELEASE_4_2_0="2007-05-13"
+
+export RELEASE_4_1_2="2007-02-13"
+export RELEASE_4_1_1="2006-05-24"
+export RELEASE_4_1_0="2006-02-28"
+
+export RELEASE_4_0_4="2007-01-31"
+export RELEASE_4_0_3="2006-03-10"
+export RELEASE_4_0_2="2005-09-28"
+export RELEASE_4_0_1="2005-07-07"
+export RELEASE_4_0_0="2005-04-20"
+
+export RELEASE=3_4_6="2006-03-06"
+export RELEASE=3_4_5="2005-11-30"
+export RELEASE_3_4_4="2005-05-18"
+export RELEASE_3_4_3="2004-11-04"
+export RELEASE_3_4_2="2004-09-06"
+export RELEASE_3_4_1="2004-07-01"
+export RELEASE_3_4_0="2004-04-18"
+
+export RELEASE_3_3_6="2005-05-03"
+export RELEASE_3_3_5="2004-09-30"
+export RELEASE_3_3_4="2004-05-31"
+export RELEASE_3_3_3="2004-02-14"
+export RELEASE_3_3_2="2003-10-17"
+export RELEASE_3_3_1="2003-08-08"
+export RELEASE_3_3_0="2003-05-13"
+export RELEASE_3_3="${RELEASE_3_3_0}"
+
+# Merge of the new C++ parser into mainline was revision 60560 on 2002-12-28
+# Merge of the ssa-branch into mainline was revision 81764 on 2004-05-13
diff --git a/contrib/reghunt/examples/reg-watch b/contrib/reghunt/examples/reg-watch
new file mode 100755
index 000000000..218b97c06
--- /dev/null
+++ b/contrib/reghunt/examples/reg-watch
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+awk -f reg-watch.awk "$@"
diff --git a/contrib/reghunt/examples/reg-watch.awk b/contrib/reghunt/examples/reg-watch.awk
new file mode 100755
index 000000000..2334215ae
--- /dev/null
+++ b/contrib/reghunt/examples/reg-watch.awk
@@ -0,0 +1,38 @@
+/result for low patch/ {
+ sub(".*low patch ","")
+ sub(" is as expected","")
+ printf ("<-- %4s\n", $0);
+ next
+ }
+/result for high patch/ {
+ sub(".*high patch ","")
+ sub(" is as expected","")
+ printf (" %4s -->\n", $0);
+ next
+ }
+/patches later/ {
+ sub(".*later than ","")
+ printf ("<-- %4s\n", $0);
+ next
+ }
+/patches earlier/ {
+ sub(".*earlier than ","")
+ printf (" %4s -->\n", $0);
+ next
+ }
+/build failed for/ {
+ sub(".*build failed for ","")
+ printf (" [%4s]\n", $0);
+ next
+ }
+/HIGH_PATCH/ {
+ printf ("* stopped early *\n")
+ next
+ }
+/changes with/ {
+ sub(".*changes with id ","")
+ printf ("+----------+\n")
+ printf ("| %4s |\n", $0)
+ printf ("+----------+\n")
+ next
+ }
diff --git a/contrib/reghunt/examples/testall b/contrib/reghunt/examples/testall
new file mode 100755
index 000000000..61d99e0b6
--- /dev/null
+++ b/contrib/reghunt/examples/testall
@@ -0,0 +1,73 @@
+#! /bin/sh
+
+# Run one or more regression hunts
+#
+# The file specified as the single argument is a queue of regression
+# hunts and/or lists of patches to test. Each entry in the file is
+# "hunt" or "test" followed by a bugid for which there is a config
+# file and other required files (patch list and test source file).
+# Each line of the file is removed as it is processed, and new ones
+# can be added while the script is still running.
+
+#set -ex
+
+if [ $# != 1 ]; then
+ echo "usage: $0 testfile"
+ exit 1
+fi
+
+REGFILE=$1
+TMPFILE=testall.tmp
+
+if [ ! -f $REGFILE ]; then
+ echo "$0: file $REGFILE does not exist"
+ exit 1
+fi
+
+RETURN_FOR_TEST=return
+RETURN_FOR_TEST=true
+
+. ../gcc-svn-env
+
+hunt() {
+ id=$1
+
+ echo regression hunt for $id
+ $RETURN_FOR_TEST
+ $REG_CLEANUP
+ reg-hunt $id.config >> $id.log 2>&1
+ tail -n 1 $id.log
+ #tail -n 1 $id.log | mutt -s "reghunt for $id finished" janis187
+}
+
+testit() {
+ id=$1
+
+ echo testing specific dates for $id
+ $RETURN_FOR_TEST
+ $REG_CLEANUP
+ reg-test $id.config >> $id.log 2>&1
+ #mutt -s "reg-test for $id finished" janis187 < /dev/null
+}
+
+rm -f $REG_STOP
+
+while
+ read WHICH ID < $REGFILE
+do
+ if [ -f $REG_STOP ]; then
+ echo "$REG_STOP detected"
+ rm -f $REG_STOP
+ exit 1
+ fi
+
+ sed 1d < $REGFILE > $TMPFILE
+ mv $TMPFILE $REGFILE
+
+ case $WHICH in
+ hunt) hunt $ID;;
+ test) testit $ID;;
+ *) echo "unknown action $WHICH, skipping $ID";;
+ esac
+ echo
+done
diff --git a/contrib/regression/ChangeLog b/contrib/regression/ChangeLog
new file mode 100644
index 000000000..5bb1b0884
--- /dev/null
+++ b/contrib/regression/ChangeLog
@@ -0,0 +1,158 @@
+2013-04-12 Release Manager
+
+ * GCC 4.6.4 released.
+
+2012-03-01 Release Manager
+
+ * GCC 4.6.3 released.
+
+2011-10-26 Release Manager
+
+ * GCC 4.6.2 released.
+
+2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+
+2011-03-25 Release Manager
+
+ * GCC 4.6.0 released.
+
+2009-09-02 Geoff Keating <geoffk@apple.com>
+
+ * btest-gcc.sh: Continue after bootstrap comparison failure.
+
+2008-11-27 Geoff Keating <geoffk@geoffk.org>
+
+ * mkindex.pl: New.
+
+2007-12-24 Geoff Keating <geoffk@geoffk.org>
+
+ * objs-gcc.sh: Revert previous change.
+
+2007-12-23 Geoff Keating <geoffk@geoffk.org>
+
+ * objs-gcc.sh: Set up the GDB testsuite even if the gdb installed
+ is just called 'gdb'.
+
+2007-12-22 Geoff Keating <geoffk@geoffk.org>
+
+ * btest-gcc.sh (TESTLOGS): Add gfortran, and optionally libgomp.
+
+ * GCC_Regression_Tester.wdgt/widget.html: Mark as HTML 4.01,
+ which it now is, rather than XHTML, which it never was.
+ (<head>): Mark as UTF-8. Add title. Move CSS to top of
+ document, specify type. Mark script as 'defer'.
+ (updateContents): If loaded from HTTP, look for status in same
+ place as widget.
+ (gotContents): Use DOM methods to change text rather than innerHTML.
+ (<body>): Eliminate unnecessary DIV element.
+ * GCC_Regression_Tester.wdgt/Info.plist: Update version, copyright
+ notice.
+
+2006-09-05 Geoffrey Keating <geoffk@apple.com>
+
+ * btest-gcc.sh: .bad_compare has moved to toplevel from gcc/.
+
+2006-01-18 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * btest-gcc.sh: gcc.sum has moved to gcc/testsuite/gcc/gcc.sum.
+ g++.sum has moved to gcc/testsuite/g++/g++.sum.
+ objc.sum has moved to gcc/testsuite/objc/objc.sum.
+
+2005-12-20 Geoffrey Keating <geoffk@apple.com>
+
+ * btest-gcc.sh: Support -j option.
+
+2005-11-28 Geoffrey Keating <geoffk@geoffk.org>
+
+ * GCC Regression Tester.wdgt: Rename to GCC_Regression_Tester.wdgt.
+ * GCC_Regression_Tester.wdgt/Info.plist
+ (CFBundleDisplayName): Update for rename.
+ (CFBundleName): Use shorter name.
+ (CFBundleVersion): Update to 1.0.1.
+ (CFBundleShortVersionString): Update to 1.0.1.
+ (LSHasLocalizedDisplayName): New.
+ (NSHumanReadableCopyright): New.
+ * GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings: New.
+ * GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings: New.
+ * GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings: New.
+
+ * GCC_Regression_Tester.wdgt/widget.html: Use max-age=30
+ to help out intermediate caches.
+
+2005-11-23 Geoffrey Keating <geoffk@geoffk.org>
+
+ * GCC Regression Tester.wdgt/widget.html: New file.
+ * GCC Regression Tester.wdgt/Info.plist: New file.
+ * GCC Regression Tester.wdgt/Icon.png: New file.
+ * GCC Regression Tester.wdgt/Default.png: New file.
+ * README: Describe new files.
+
+2005-06-07 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * btest-gcc.sh: Add support for option
+ --add-passes-despite-regression.
+
+2005-06-06 Hans-Peter Nilsson <hp@axis.com>
+
+ * btest-gcc.sh <Build>: Don't pass --with-newlib when target is
+ "*-linux*".
+
+ * btest-gcc.sh (TESTLOGS): Make libstdc++.sum optional.
+
+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>
+
+ * btest-gcc.sh: Add make check-target-libffi.
+
+2003-07-31 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * btest-gcc.sh: Add make check-target-libjava.
+
+2002-10-22 Geoffrey Keating <geoffk@apple.com>
+
+ * btest-gcc.sh: Add gdb.sum to TESTLOGS only when GDB testsuite is run.
+
+2002-10-11 Geoffrey Keating <geoffk@apple.com>
+
+ * objs-gcc.sh: Don't install GDB testsuite if GDB was not built.
+ * btest-gcc.sh: Don't run GDB testsuite if it doesn't exist.
+
+2002-10-09 Phil Edwards <pme@gcc.gnu.org>
+
+ * btest-gcc.sh, objs-gcc.sh: Update TARGET comments.
+
+2002-10-09 Geoffrey Keating <geoffk@apple.com>
+
+ * objs-gcc.sh: On (non-linux) native hosts, use 'make bootstrap'.
+
+2002-03-09 Geoffrey Keating <geoffk@redhat.com>
+
+ * btest-gcc.sh: For crosses, assume newlib and GNU binutils.
+ * site.exp: Correct mips-elf triplet.
+
+2002-01-31 Geoffrey Keating <geoffk@redhat.com>
+
+ * btest-gcc.sh: New file.
+ * objs-gcc.sh: New file.
+ * site.exp: New file.
+ * ChangeLog: New file.
+ * README: New file.
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/Default.png b/contrib/regression/GCC_Regression_Tester.wdgt/Default.png
new file mode 100644
index 000000000..a6dfd4655
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/Default.png
Binary files differ
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png b/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
new file mode 100644
index 000000000..662b5169d
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
Binary files differ
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist b/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
new file mode 100644
index 000000000..a011e69a3
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>AllowNetworkAccess</key>
+ <true/>
+ <key>CFBundleDisplayName</key>
+ <string>GCC_Regression_Tester</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.geoffk.widget.regress</string>
+ <key>CFBundleName</key>
+ <string>GCC Regr. Tester</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0.2</string>
+ <key>CFBundleVersion</key>
+ <string>1.0.2</string>
+ <key>CloseBoxInsetX</key>
+ <integer>0</integer>
+ <key>CloseBoxInsetY</key>
+ <integer>0</integer>
+ <key>Height</key>
+ <integer>192</integer>
+ <key>LSHasLocalizedDisplayName</key>
+ <true/>
+ <key>MainHTML</key>
+ <string>widget.html</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright © 2005, 2007 Free Software Foundation, Inc.</string>
+ <key>Width</key>
+ <integer>261</integer>
+</dict>
+</plist>
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings b/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings
new file mode 100644
index 000000000..7692ed523
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings
Binary files differ
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings b/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings
new file mode 100644
index 000000000..45628a3ef
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings
Binary files differ
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings b/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
new file mode 100644
index 000000000..f3110f3e8
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
Binary files differ
diff --git a/contrib/regression/GCC_Regression_Tester.wdgt/widget.html b/contrib/regression/GCC_Regression_Tester.wdgt/widget.html
new file mode 100644
index 000000000..ec24fb54a
--- /dev/null
+++ b/contrib/regression/GCC_Regression_Tester.wdgt/widget.html
@@ -0,0 +1,152 @@
+<!-- Get and update the GCC regression tester's web page.
+ Copyright (C) 2005, 2007, 2009 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 3, 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 COPYING3. If not see
+<http://www.gnu.org/licenses/>. -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<head>
+<meta http-equiv="Content-Script-Type" content="text/javascript">
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+<title>Regression Tester Status</title>
+<style type='text/css'>
+body {
+ margin: 0px;
+ padding: 0px;
+}
+pre {
+ font-family: Monaco;
+ font-size: 9px;
+ margin: 0px;
+ padding: 1px 2px 1px 2px;
+ color: black;
+ background-color: white;
+ opacity: 0.8;
+}
+</style>
+<script type='text/javascript' defer>
+// A string representing NUM, with a leading zero if it would be 1 digit long
+function dig2 (num)
+{
+ var result = num.toString();
+ if (result.length == 1)
+ return '0' + result;
+ else
+ return result;
+}
+
+// Get DATE as a string in standard ISO format in UTC
+function getISO (date)
+{
+ return (date.getUTCFullYear().toString() + '-'
+ + dig2 (date.getUTCMonth() + 1) + '-'
+ + dig2 (date.getUTCDate()) + 'T'
+ + dig2 (date.getUTCHours()) + ':'
+ + dig2 (date.getUTCMinutes()) + 'Z');
+}
+
+// STR is a bunch of lines of the form '<key>: <date>' where <date> is in
+// standard ISO UTC format. Return a Date object corresponding to KEY, or null
+// if none is found.
+function fromISO (str, key)
+{
+ var rx = new RegExp (key + ": (\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)Z");
+ var match = rx.exec (str);
+ if (match == null || match.length != 7)
+ return null;
+ var date = new Date(0);
+ date.setUTCFullYear (match[1], match[2] - 1, match[3]);
+ date.setUTCHours (match[4], match[5], match[6], 0);
+ return date;
+}
+
+// Update the data
+function updateContents () {
+ var url = 'http://gcc.gnu.org/regtest/HEAD/status.txt';
+ if (document.URL && document.URL.substring (0,5) == 'http:') {
+ url = document.URL.replace ('widget.html','status.txt');
+ }
+ var xml_request = new XMLHttpRequest();
+
+ xml_request.onload = function(e)
+ {
+ gotContents(e, xml_request);
+ }
+ xml_request.open("GET", url);
+ xml_request.setRequestHeader("Cache-Control", "max-age=30");
+ xml_request.send(null);
+}
+
+function gotContents (event, request) {
+ if (request.status != 200)
+ return;
+
+ if (! request.responseText)
+ return;
+
+ var txt = request.responseText;
+ var today = new Date();
+ var date_r = fromISO (txt, "Date");
+ var completed_r = fromISO (txt, "Test-Completed");
+ var now_test_r = fromISO (txt, "Now-Testing");
+ var eta = "";
+
+ if (date_r != null && completed_r != null && now_test_r != null)
+ {
+ var eta_r = new Date (now_test_r.getTime()
+ + completed_r.getTime() - date_r.getTime());
+ eta = "ETA: " + getISO (eta_r) + '\n';
+ }
+
+ var val = txt + "Now: " + getISO (today) + '\n' + eta;
+ var contEl = document.getElementById ("contents");
+ contEl.removeChild(contEl.firstChild);
+ contEl.appendChild (document.createTextNode (val));
+}
+
+var mainTimer = null;
+
+function myOnShow ()
+{
+ if (! mainTimer) {
+ mainTimer = setInterval (updateContents, 60000);
+ }
+ updateContents();
+}
+
+function myOnHide ()
+{
+ if (mainTimer) {
+ clearInterval (mainTimer);
+ mainTimer = null;
+ }
+}
+
+function myOnLoad ()
+{
+ if ( window.widget ) {
+ widget.onshow = myOnShow;
+ widget.onhide = myOnHide;
+ }
+ myOnShow();
+}
+</script>
+</head>
+
+<body onLoad='myOnLoad();'>
+<pre id="contents">Loading...</pre>
+</body>
+</html>
diff --git a/contrib/regression/README b/contrib/regression/README
new file mode 100644
index 000000000..9e94e5c39
--- /dev/null
+++ b/contrib/regression/README
@@ -0,0 +1,24 @@
+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.
+
+'objs-gcc.sh' takes a combined tree and builds (but does not test) the
+tools required for 'btest-gcc.sh'. It is run periodically to update
+the tools. This script is followed by running 'btest-gcc.sh' using
+the newly-build tools to check that they will not cause regressions.
+
+'site.exp' is what $DEJAGNU points to when the regression tester runs
+these scripts.
+
+'GCC_Regression_Tester.wdgt' is a Dashboard widget that displays the
+current state of the tester using Javascript. You can use it without
+needing Dashboard by pointing your web browser at
+'GCC_Regression_Tester.wdgt/widget.html', if your browser supports
+and permits it.
+
+Note that any changes made here need to be approved by the regression
+tester's maintainer (see MAINTAINERS). The changes will be used on
+the tester's next run, so `experimental' changes are very strongly
+discouraged :-).
diff --git a/contrib/regression/btest-gcc.sh b/contrib/regression/btest-gcc.sh
new file mode 100755
index 000000000..28985760d
--- /dev/null
+++ b/contrib/regression/btest-gcc.sh
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+# Test GCC.
+# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006, 2009
+# 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 3 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# INPUT:
+# btest <options> <target> <source> <prefix> <state> <build>
+
+add_passes_despite_regression=0
+dashj=''
+
+# <options> can be
+# --add-passes-despite-regression:
+# Add new "PASSes" despite there being some regressions.
+# -j<n>:
+# Pass '-j<n>' to make.
+
+case "$1" in
+ --add-passes-despite-regression)
+ add_passes_despite_regression=1; shift;;
+ -j*)
+ dashj=$1; shift;;
+ -*) echo "Invalid option: $1"; exit 2;;
+esac
+
+# TARGET is the target triplet. It should be the same one as used in
+# constructing PREFIX. Or it can be the keyword 'native', indicating
+# a target of whatever platform the script is running on.
+TARGET=$1
+# SOURCE is the directory containing the toplevel configure.
+SOURCE=$2
+
+# PREFIX is the directory for the --prefix option to configure.
+# For cross compilers, it needs to contain header files,
+# libraries, and binutils. PATH should probably include
+# $PREFIX/bin.
+PREFIX=$3
+# This script also needs to include the GDB testsuite in
+# $PREFIX/share/gdb-testsuite.
+GDB_TESTSUITE=$PREFIX/share/gdb-testsuite
+
+# STATE is where the tester maintains its internal state,
+# described below.
+STATE=$4
+
+# BUILD is a temporary directory that this script will
+# delete and recreate, containing the build tree.
+BUILD=$5
+
+# you also probably need to set these variables:
+# PATH: should contain a native gcc, and a cross gdb.
+# DEJAGNU: should point to a site.exp suitable for testing
+# the compiler and debugger.
+
+
+# OUTPUT: in $RESULT, one of the following keywords:
+# error the script failed due to
+# a misconfiguration or resource limitation
+# build the build failed
+# regress-<n> the build succeeded, but there were <n>
+# testsuite regressions, listed in $REGRESS
+# pass build succeeded and there were no regressions
+RESULT=$STATE/RESULT
+# in BUILD_LOG, the output of the build
+BUILD_LOG=$STATE/build_log
+# in FAILED, a list of failing testcases
+FAILED=$STATE/failed
+# in PASSES, the list of testcases we expect to pass
+PASSES=$STATE/passes
+# in REGRESS, a list of testcases we expected to pass but that failed
+REGRESS=$STATE/regress
+
+# Make sure various files exist.
+[ -d $STATE ] || mkdir $STATE
+[ -f $PASSES ] || touch $PASSES
+
+# These lines should stay in this order, because
+# that way if something is badly wrong and $RESULT can't
+# be modified then cron will mail the error message.
+# The reverse order could lead to the testsuite claiming that
+# everything always passes, without running any tests.
+echo error > $RESULT || exit 1
+exec > $BUILD_LOG 2>&1 || exit 1
+
+set -x
+
+# Nuke $BUILD and recreate it.
+rm -rf $BUILD $REGRESS $FAILED
+mkdir $BUILD || exit 1
+cd $BUILD || exit 1
+
+H_BUILD=`$SOURCE/config.guess || exit 1`
+H_HOST=$H_BUILD
+if [ $TARGET = native ] ; then
+ H_TARGET=$H_HOST
+else
+ H_TARGET=$TARGET
+fi
+H_REAL_TARGET=`$SOURCE/config.sub $H_TARGET || exit 1`
+
+# TESTLOGS is the list of dejagnu .sum files that the tester should
+# look at.
+TESTLOGS="gcc/testsuite/gcc/gcc.sum
+gcc/testsuite/g++/g++.sum
+gcc/testsuite/gfortran/gfortran.sum
+gcc/testsuite/objc/objc.sum"
+
+# Build.
+echo build > $RESULT
+if [ $H_HOST = $H_TARGET ] ; then
+ $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET || exit 1
+ if ! make $dashj bootstrap ; then
+ [ -s .bad_compare ] || exit 1
+ cat .bad_compare >> $REGRESS || exit 1
+ touch compare || exit 1 # Prevent the comparison from running again
+ make $dashj all || exit 1
+ fi
+else
+ withopt="--with-gnu-ld --with-gnu-as"
+ case "$H_TARGET" in
+ *-linux*) ;;
+ *) withopt="$withopt --with-newlib";;
+ esac
+ $SOURCE/configure --prefix=$PREFIX --target=$H_TARGET $withopt || exit 1
+ make $dashj || exit 1
+fi
+echo error > $RESULT || exit 1
+
+# Test GCC against its internal testsuite.
+make $dashj -k check
+
+if [ -f $BUILD/$H_TARGET/libstdc++-v3/testsuite/libstdc++.sum ] ; then
+ TESTLOGS="$TESTLOGS $H_TARGET/libstdc++-v3/testsuite/libstdc++.sum"
+fi
+
+if [ -f $BUILD/$H_TARGET/libffi/testsuite/libffi.sum ] ; then
+ TESTLOGS="$TESTLOGS $H_TARGET/libffi/testsuite/libffi.sum"
+fi
+
+if [ -f $BUILD/$H_TARGET/libjava/testsuite/libjava.sum ] ; then
+ TESTLOGS="$TESTLOGS $H_TARGET/libjava/testsuite/libjava.sum"
+fi
+
+if [ -f $BUILD/$H_TARGET/libgomp/testsuite/libgomp.sum ] ; then
+ TESTLOGS="$TESTLOGS $H_TARGET/libgomp/testsuite/libgomp.sum"
+fi
+
+# Test the just-built GCC with the GDB testsuite.
+if [ -d $GDB_TESTSUITE ] ; then
+ mkdir test-gdb || exit 1
+ cd $GDB_TESTSUITE || exit 1
+ for i in gdb.* ; do
+ if [ -d $i ] ; then
+ mkdir $BUILD/test-gdb/$i
+ fi
+ done
+ cd $BUILD/test-gdb || exit 1
+ echo "set host_alias $H_HOST" > site.exp
+ echo "set host_triplet $H_HOST" >> site.exp
+ echo "set target_alias $H_TARGET" >> site.exp
+ echo "set target_triplet $H_REAL_TARGET" >> site.exp
+ echo "set build_alias $H_BUILD" >> site.exp
+ echo "set build_triplet $H_BUILD" >> site.exp
+ echo "set srcdir $GDB_TESTSUITE" >> site.exp
+ runtest --tool gdb
+ TESTLOGS="$TESTLOGS test-gdb/gdb.sum"
+fi
+
+# Sanity-check the testlogs. They should contain at least one PASS.
+cd $BUILD || exit 1
+for LOG in $TESTLOGS ; do
+ if ! grep ^PASS: $LOG > /dev/null ; then
+ echo build > $RESULT
+ exit 1
+ fi
+done
+
+# Work out what failed
+for LOG in $TESTLOGS ; do
+ L=`basename $LOG`
+ awk '/^FAIL: / { print "'$L'",$2; }' $LOG || exit 1
+done | sort | uniq > $FAILED || exit 1
+comm -12 $FAILED $PASSES >> $REGRESS || exit 1
+NUMREGRESS=`wc -l < $REGRESS | tr -d ' '`
+
+if [ $NUMREGRESS -eq 0 ] || [ $add_passes_despite_regression -ne 0 ] ; then
+ # Update the state.
+ for LOG in $TESTLOGS ; do
+ L=`basename $LOG`
+ awk '/^PASS: / { print "'$L'",$2; }' $LOG || exit 1
+ done | sort | uniq | comm -23 - $FAILED > ${PASSES}~ || exit 1
+ [ -s ${PASSES}~ ] || exit 1
+ if [ $NUMREGRESS -ne 0 ] ; then
+ # The way we keep track of new PASSes when in "regress-N" for
+ # --add-passes-despite-regression, is to *add* them to previous
+ # PASSes. Just as without this option, we don't forget *any* PASS
+ # lines, because besides the ones in $REGRESS that we definitely
+ # don't want to lose, their removal or rename may have been a
+ # mistake (as in, the cause of the "regress-N" state). If they
+ # come back, we then know they're regressions.
+ cat ${PASSES}~ ${PASSES} | sort -u > ${PASSES}~~
+ mv ${PASSES}~~ ${PASSES} || exit 1
+ rm ${PASSES}~ || exit 1
+ else
+ # In contrast to the merging for "regress-N", we just overwrite
+ # the known PASSes when in the "pass" state, so we get rid of
+ # stale PASS lines for removed, moved or otherwise changed tests
+ # which may be added back with a different meaning later on.
+ mv ${PASSES}~ ${PASSES} || exit 1
+ fi
+fi
+
+if [ $NUMREGRESS -ne 0 ] ; then
+ echo regress-$NUMREGRESS > $RESULT
+ exit 1
+fi
+
+echo pass > $RESULT
+exit 0
diff --git a/contrib/regression/mkindex.pl b/contrib/regression/mkindex.pl
new file mode 100755
index 000000000..46e11069f
--- /dev/null
+++ b/contrib/regression/mkindex.pl
@@ -0,0 +1,107 @@
+#!/usr/bin/perl
+
+# Copy log files from a GCC build for HTTP access.
+# Copyright (C) 2008, 2009 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# INPUT:
+# mkindex.pl <srcdir> <destdir> <branchname>
+
+# This script copies log files from a GCC build directory, compresses
+# and indexes them for web browser access. It's aimed at having an
+# easy-to-access collection of files for analyzing regressions without
+# needing to run the build yourself. Binary files (.o, executables)
+# are intentionally not included since usually if they are needed it's
+# better to just run a build, and because they take up a lot of space.
+
+# 'srcdir' is the root directory of a GCC build (was $objdir in the build).
+# 'destdir' will be erased and replaced with the log files, and should be an
+# absolute path.
+# 'branchname' is used only to produce the title of the index page,
+# which will be named 'index.html'.
+
+use warnings;
+use strict;
+use File::Path qw(mkpath rmtree);
+use File::Find qw(find);
+
+if ($#ARGV != 2) {
+ print "usage: $0 <srcdir> <destdir> <branchname>\n";
+ exit 1;
+}
+
+my ($srcdir, $destdir, $branchname) = @ARGV;
+die "destdir is not absolute" unless ($destdir =~ m,^/,);
+
+# Erase the destination.
+rmtree $destdir;
+mkdir $destdir or die "${destdir}: $!";
+
+# Copy and compress the files into the destination, and keep a list in @files.
+my @files = ();
+sub my_wanted {
+ # Copy all files ending with .log or .sum.
+ if (/\.(log|sum)$/ && -f) {
+
+ die unless (substr ($File::Find::dir,0,(length $srcdir)) eq $srcdir);
+ my $dir = substr $File::Find::dir,(length $srcdir);
+ $dir = substr $dir,1 unless ($dir eq '');
+ my $name = $_;
+ $name = $dir . '/' . $_ if ($dir ne '');
+
+ mkpath $destdir . '/' . $dir;
+ # Compress the files. Use .gzip instead of .gz for the
+ # extension to avoid (broken) browser workarounds for broken
+ # web servers.
+ system ("gzip -c -q -9 $_ > $destdir/${name}.gzip") == 0 or exit 2;
+
+ # Write the (compressed) size consistently in Kbytes.
+ my $size = -s $destdir .'/' . $name . '.gzip';
+ my $printable_size = (sprintf "%.0fK",$size / 1024);
+
+ push @files,[$name.'.gzip',$name,$printable_size];
+ }
+}
+find ({wanted => \&my_wanted}, $srcdir);
+
+# Sort the list of files for the index.
+@files = sort {$a->[1] cmp $b->[1]} @files;
+
+# Create the index.
+open INDEX,'>',$destdir . '/index.html' or die "${destdir}/index.html: $!";
+# Use strict XHTML 1.0, and set charset to UTF-8.
+print INDEX <<EOF or die "writing index: $!";
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Log files for $branchname</title>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+</head>
+<body>
+<h1>Log files for $branchname</h1>
+<table><tr><th>Name</th><th align='right'>Size</th></tr>
+EOF
+# The index will have two columns, filename (without .gzip) and
+# compressed size.
+foreach my $f (@files) {
+ printf INDEX "<tr><td><a href=\"%s\">%s</a></td><td align=\'right\'>%s</td></tr>\n",
+ $f->[0], $f->[1], $f->[2] or die "writing index: $!";
+}
+
+print INDEX "</table></body></html>\n" or die "writing index: $!";
+close INDEX or die "writing index: $!";
+exit 0;
diff --git a/contrib/regression/objs-gcc.sh b/contrib/regression/objs-gcc.sh
new file mode 100755
index 000000000..60b0497fe
--- /dev/null
+++ b/contrib/regression/objs-gcc.sh
@@ -0,0 +1,128 @@
+#!/bin/sh
+
+# Build tools for testing GCC.
+# Copyright (C) 1999, 2000, 2001, 2002, 2009
+# 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 3 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; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# INPUT:
+# btest <target> <source> <prefix> <state> <build>
+# TARGET is the target triplet. It should be the same one as used in
+# constructing PREFIX. Or it can be the keyword 'native', indicating
+# a target of whatever platform the script is running on.
+TARGET=$1
+# SOURCE is the directory containing the toplevel configure.
+SOURCE=$2
+
+# PREFIX is the directory for the --prefix option to configure.
+PREFIX=$3
+
+# STATE is where the tester maintains its internal state,
+# described below.
+STATE=$4
+
+# BUILD is a temporary directory that this script will
+# delete and recreate, containing the build tree.
+BUILD=$5
+
+# you also probably need to set these variables:
+# DEJAGNU: should point to a site.exp suitable for testing
+# the compiler and debugger.
+
+# OUTPUT: in $RESULT, one of the following keywords:
+# error the script failed due to
+# a misconfiguration or resource limitation
+# build the build failed
+# regress-<n> the build succeeded, but there were <n>
+# testsuite regressions, listed in $REGRESS
+# pass build succeeded and there were no regressions
+RESULT=$STATE/RESULT
+# in BUILD_LOG, the output of the build
+BUILD_LOG=$STATE/build_log
+# in FAILED, a list of failing testcases
+FAILED=$STATE/failed
+# in PASSES, the list of testcases we expect to pass
+PASSES=$STATE/passes
+# in REGRESS, a list of testcases we expected to pass but that failed
+REGRESS=$STATE/regress
+
+# Make sure various files exist.
+[ -d $STATE ] || mkdir $STATE
+[ -f $PASSES ] || touch $PASSES
+
+# These lines should stay in this order, because
+# that way if something is badly wrong and $RESULT can't
+# be modified then cron will mail the error message.
+# The reverse order could lead to the testsuite claiming that
+# everything always passes, without running any tests.
+echo error > $RESULT || exit 1
+exec > $BUILD_LOG 2>&1 || exit 1
+
+set -x
+
+# TESTLOGS is the list of dejagnu .sum files that the tester should
+# look at.
+TESTLOGS="test/gcc/gcc.sum
+test/g++/g++.sum"
+
+# Nuke $BUILD and recreate it.
+rm -rf $BUILD $REGRESS $FAILED
+mkdir $BUILD $BUILD/build $BUILD/objs || exit 1
+cd $BUILD || exit 1
+
+# This script used to use config.guess, but that is not how releng
+# determines hostnames.
+H_BUILD=`$SOURCE/config.guess || exit 1`
+H_HOST=$H_BUILD
+if [ $TARGET = native ] ; then
+ H_TARGET=$H_HOST
+else
+ H_TARGET=$TARGET
+fi
+H_REAL_TARGET=`$SOURCE/config.sub $H_TARGET || exit 1`
+H_REAL_BUILD=`$SOURCE/config.sub $H_BUILD || exit 1`
+H_REAL_HOST=`$SOURCE/config.sub $H_HOST || exit 1`
+
+# Build.
+echo build > $RESULT
+
+cd $BUILD/build || exit 1
+TMP_PREFIX=$BUILD/install
+$SOURCE/configure --prefix=$PREFIX --target=$H_TARGET || exit 1
+if [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-gnu ]
+ then
+ make all-gdb all-dejagnu all-ld || exit 1
+ make install-gdb install-dejagnu install-ld || exit 1
+elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+ make bootstrap || exit 1
+ make install || exit 1
+else
+ make || exit 1
+ make install || exit 1
+fi
+
+if [ -x $PREFIX/bin/$TARGET-gdb ] ; then
+ mkdir -p $PREFIX/share/gdb-testsuite || exit 1
+ cd $SOURCE/gdb/testsuite || exit 1
+ find . -print | cpio -pdmu $PREFIX/share/gdb-testsuite || exit 1
+ # selftest.exp requires keeping old sources around, which is impractical
+ rm $PREFIX/share/gdb-testsuite/gdb.base/selftest.exp
+ # these tests seem to be broken and randomly failing
+ rm -r $PREFIX/share/gdb-testsuite/gdb.mi
+fi
+
+echo pass > $RESULT
+exit 0
diff --git a/contrib/regression/site.exp b/contrib/regression/site.exp
new file mode 100644
index 000000000..0892afa3a
--- /dev/null
+++ b/contrib/regression/site.exp
@@ -0,0 +1,18 @@
+global target_list
+
+case "$target_triplet" in {
+ { "powerpc*-*eabi*" } {
+# if { [info exists tool] && $tool == "gcc" } {
+# set target_list { "powerpc-sim{,-fpic}" }
+# } else {
+ set target_list { "powerpc-sim" }
+# }
+ }
+ { "mips*-*-elf" } {
+ set target_list { "mips-sim" }
+ }
+
+ default {
+ set target_list { "unix" }
+ }
+}
diff --git a/contrib/test_installed b/contrib/test_installed
new file mode 100755
index 000000000..e518cbcf7
--- /dev/null
+++ b/contrib/test_installed
@@ -0,0 +1,121 @@
+#! /bin/sh
+
+# (C) 1998, 2000, 2002, 2003, 2007 Free Software Foundation
+# Originally by Alexandre Oliva <oliva@dcc.unicamp.br>
+
+# 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
+
+# This scripts assumes it lives in the contrib directory of the GCC
+# source tree, so it will find the testsuite tree from its location.
+# If you move it elsewhere, or want to use another testsuite tree, you
+# can override the defaults with --srcdir=/some/dir/GCC or
+# --testsuite=/some/dir/GCC/gcc/testsuite. If you specify
+# --testsuite, --srcdir will be ignored; otherwise, `/gcc/testsuite'
+# will be appended to the srcdir.
+
+# You may specify where the binaries to be tested should be picked up
+# from. If you specify --prefix=/some/dir, gcc, g++ and gfortran will be
+# looked for at /some/dir/bin. Each one may be overridden by
+# specifying --with-gcc=/pathname/to/gcc, --with-g++=/pathname/to/g++
+# and --with-gfortran=/pathname/to/gfortran. If you specify --without-gcc,
+# --without-g++ or --without-gfortran, the test for the specified program
+# will be skipped. By default, gcc, g++ and gfortran will be searched in
+# the PATH.
+
+# An additional argument may specify --tmpdir=/some/dir; by default,
+# temporaries will be stored in the current directory, where the log
+# files will be stored.
+
+# The script will interpret arguments until it finds one it does not
+# understand. The remaining ones will be passed to `runtest'. A
+# double-dash can be used to explicitly separate the arguments to
+# `test_installed' from the ones to `runtest'.
+
+# This script should be run in an empty directory; it will refuse to
+# run if it finds a file named site.exp in the current directory.
+
+
+if test -f site.exp; then
+ echo site.exp already exists >&2
+ exit 1
+fi
+
+while true; do
+ case "$1" in
+ --with-testsuite=*) testsuite=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --srcdir=*) srcdir=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+
+ --prefix=*) prefix=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --with-gcc=*) GCC_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --with-g++=*) GXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --with-gfortran=*) GFORTRAN_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+ --without-gcc) GCC_UNDER_TEST=no; shift;;
+ --without-g++) GXX_UNDER_TEST=no; shift;;
+ --without-gfortran) GFORTRAN_UNDER_TEST=no; shift;;
+ --without-objc) OBJC_UNDER_TEST=no; shift;;
+
+ --tmpdir=*) tmpdir=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+
+ --help) cat <<\EOF
+Runs the testsuite for an installed version of gcc/g++/gfortran/objc
+Copyright (C) 1998 Free Software Foundation
+by Alexandre Oliva <oliva@dcc.unicamp.br>
+
+Supported arguments:
+
+--help prints this page
+
+--with-testsuite=/some/dir/gcc/testsuite specify the testsuite directory
+--srcdir=/some/dir same as --with-testsuite=/some/dir/gcc/testsuite
+ [deduced from shell-script pathname]
+
+--prefix=/some/dir use gcc, g++ and gfortran from /some/dir/bin [PATH]
+--with-gcc=/some/dir/bin/gcc use specified gcc program [gcc]
+--with-g++=/some/dir/bin/g++ use specified g++ program [g++]
+--with-gfortran=/some/dir/bin/gfortran use specified gfortran program [gfortran]
+--without-gcc do not run gcc testsuite
+--without-g++ do not run g++ testsuite
+--without-gfortran do not run gfortran testsuite
+--without-objc do not run objc testsuite
+
+--tmpdir=/some/dir create temporaries and leave failed programs
+ at specified directory [.]
+
+-- end of argument list; following arguments are passed to runtest
+EOF
+ exit
+ ;;
+
+ --) shift; break;;
+ *) break;;
+ esac
+done
+
+if test x"${testsuite+set}" != x"set" && test x"${srcdir+set}" != x"set"; then
+ file=$0
+ while [ -h $file ]; do
+ file=`ls -l $file | sed s/'.* -> '//`
+ done
+ srcdir=`CDPATH=. && cd \`echo "$file" | sed 's,/*[^/]*$,,;s,^$,.,'\`/.. >/dev/null && ${PWDCMD-pwd}`
+fi
+
+cat >site.exp <<EOF
+set rootme "."
+set tmpdir "${tmpdir-`${PWDCMD-pwd}`}"
+set srcdir "${testsuite-${srcdir}/gcc/testsuite}"
+set CFLAGS ""
+set CXXFLAGS ""
+set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
+set GXX_UNDER_TEST "${GXX_UNDER_TEST-${prefix}${prefix+/bin/}g++}"
+set GFORTRAN_UNDER_TEST "${GFORTRAN_UNDER_TEST-${prefix}${prefix+/bin/}gfortran}"
+set OBJC_UNDER_TEST "${OBJC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
+EOF
+
+test x"${GCC_UNDER_TEST}" = x"no" || runtest --tool gcc ${1+"$@"}
+test x"${GXX_UNDER_TEST}" = x"no" || runtest --tool g++ ${1+"$@"}
+test x"${GFORTRAN_UNDER_TEST}" = x"no" || runtest --tool gfortran ${1+"$@"}
+test x"${OBJC_UNDER_TEST}" = x"no" || runtest --tool objc ${1+"$@"}
+
+exit 0
diff --git a/contrib/test_recheck b/contrib/test_recheck
new file mode 100755
index 000000000..193cd3df2
--- /dev/null
+++ b/contrib/test_recheck
@@ -0,0 +1,98 @@
+#! /bin/sh
+
+# (C) 2010 Free Software Foundation
+# Written by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
+
+# 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
+
+PROGNAME=test_recheck
+
+usage ()
+{
+ cat <<EOF
+Usage: $PROGNAME [-h] [-n] DIR|FILE.sum...
+
+Rerun unsuccessful tests for testsuites below DIR or for FILE.sum.
+
+ -h display this help and exit
+ -n dry run, only show what would be run
+EOF
+ exit $?
+}
+
+error ()
+{
+ echo "$@" >&2
+ exit 1
+}
+
+dry=
+for arg
+do
+ case $arg in
+ -h | \?) usage ;;
+ -n) dry=:; shift ;;
+ -*) error "unknown argument $arg" ;;
+ *) break ;;
+ esac
+done
+test $# -gt 0 || usage
+
+# Find a good awk.
+if test -z "$AWK" ; then
+ for AWK in gawk nawk awk
+ do
+ if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then
+ :
+ else
+ break
+ fi
+ done
+fi
+
+: ${MAKE=make}
+: ${filesuffix=}
+cwd=`pwd`
+files=`find "$@" -name \*.sum$filesuffix -print | grep testsuite | sort`
+st=0
+
+for file in $files; do
+ dir=`echo $file | sed 's,/[^/]*$,,'`
+ base=`echo $file | sed 's,.*/,,; s,\.sum$,,'`
+ flags=`$AWK '
+/^Running .*\.exp \.\.\./ {
+ if (expfile != "" && tests != "")
+ printf (" %s=\"%s\"", expfile, tests)
+ expfile = $2
+ sub (/^[^ ]*\//, "", expfile)
+ sep = ""
+ tests = ""
+}
+/^(FAIL|XPASS|UNRESOLVED|WARNING|ERROR): / {
+ if (test != $2 "" && $2 != "" ) {
+ test = $2
+ tests = tests sep test
+ sep = " "
+ }
+}
+END {
+ if (expfile != "" && tests != "")
+ printf (" %s=\"%s\"", expfile, tests)
+}' $file`
+ if test -n "$flags"; then
+ cd $dir
+ amflags=
+ if grep '^AM_RUNTESTFLAGS =' Makefile >/dev/null 2>&1; then
+ amflags=`echo 'print-runtestflags: ; @echo $(AM_RUNTESTFLAGS)' \
+ | ${MAKE} -s -f Makefile -f - print-runtestflags`
+ fi
+ echo "(cd $dir && runtest $amflags --tool $base $flags)"
+ if test -z "$dry"; then
+ eval runtest --tool $base $flags || st=$?
+ fi
+ cd "$cwd"
+ fi
+done
+exit $st
diff --git a/contrib/test_summary b/contrib/test_summary
new file mode 100755
index 000000000..5fc49f52b
--- /dev/null
+++ b/contrib/test_summary
@@ -0,0 +1,156 @@
+#! /bin/sh
+
+# (C) 1998, 1999, 2000, 2002, 2003, 2004, 2007, 2009, 2010
+# Free Software Foundation
+# Originally by Alexandre Oliva <oliva@dcc.unicamp.br>
+
+# 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
+
+# This script processes *.{sum,log} files, producing a shell-script
+# that sends e-mail to the appropriate lists and renames files to
+# *.sent. It currently handles only gcc, but it should be quite easy
+# to modify it to handle other packages and its mailing lists.
+
+# The scripts assumes it is run in the root directory of the build
+# tree, and it will include all .sum files it finds in the mail
+# report.
+
+# configure flags are extracted from ./config.status
+
+# if the BOOT_CFLAGS environment variable is set, it will be included
+# in the mail report too.
+
+# The usage pattern of this script is as follows:
+
+# test_summary | more # so as to observe what should be done
+
+# test_summary | sh # so as to actually send e-mail and move log files
+
+# It accepts a few command line arguments. For example:
+if test x"$1" = "x-h"; then
+ cat <<_EOF
+ -o: re-reads logs that have been mailed already (.sum.sent)
+ -t: prevents logs from being renamed
+ -p: prepend specified file (or list of files: -p "a b") to the report
+ -i: append specified file (or list of files: -i "a b") to the report
+ -m: specify the e-mail address to send notes to. An appropriate default
+ should be selected from the log files.
+ -f: force reports to be mailed; if omitted, only reports that differ
+ from the sent.* version are sent.
+_EOF
+ exit 0
+fi
+
+# Find a good awk.
+if test -z "$AWK" ; then
+ for AWK in gawk nawk awk ; do
+ if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then
+ :
+ else
+ break
+ fi
+ done
+fi
+
+: ${filesuffix=}; export filesuffix
+: ${move=true}; export move
+: ${forcemail=false}; export forcemail
+while true; do
+ case "$1" in
+ -o) filesuffix=.sent; move=false; : ${mailto=nobody}; shift;;
+ -t) move=false; shift;;
+ -p) prepend_logs=${prepend_logs+"$prepend_logs "}"$2"; shift 2;;
+ -i) append_logs=${append_logs+"$append_logs "}"$2"; shift 2;;
+ -m) mailto=$2; forcemail=true; shift 2;;
+ -f) unset mailto; forcemail=true; shift;;
+ *) break;;
+ esac
+done
+: ${mailto="\" address \""}; export mailto
+files=`find . -name \*.sum$filesuffix -print | sort`
+anyfile=false anychange=$forcemail &&
+for file in $files; do
+ [ -f $file ] &&
+ anyfile=true &&
+ { $anychange ||
+ anychange=`diff $file.sent $file 2>/dev/null |
+ if test ! -f $file.sent ||
+ egrep '^[<>] (XPASS|FAIL)' >/dev/null; then
+ echo true
+ else
+ echo false
+ fi
+ `
+ }
+ true
+done &&
+$anyfile &&
+if $forcemail || $anychange; then :; else mailto=nobody; fi &&
+# We use cat instead of listing the files as arguments to AWK because
+# GNU awk 3.0.0 would break if any of the filenames contained `=' and
+# was preceded by an invalid ``variable'' name.
+( echo @TOPLEVEL_CONFIGURE_ARGUMENTS@ | ./config.status --file=-; cat $files ) |
+$AWK '
+BEGIN {
+ lang=""; configflags = "";
+ address="gcc-testresults@gcc.gnu.org";
+ version="gcc";
+ print "cat <<'"'"'EOF'"'"' |";
+'${prepend_logs+" system(\"cat $prepend_logs\"); "}'
+}
+NR == 1 {
+ configflags = $0 " ";
+ srcdir = configflags;
+ sub(/\/configure .*/, "", srcdir);
+ if ( system("test -f " srcdir "/LAST_UPDATED") == 0 ) {
+ printf "LAST_UPDATED: ";
+ system("tail -1 " srcdir "/LAST_UPDATED");
+ print "";
+ }
+
+ sub(/^[^ ]*\/configure */, " ", configflags);
+ sub(/,;t t $/, " ", configflags);
+ sub(/ --with-gcc-version-trigger=[^ ]* /, " ", configflags);
+ sub(/ --norecursion /, " ", configflags);
+ sub(/ $/, "", configflags);
+ sub(/^ *$/, " none", configflags);
+ configflags = "configure flags:" configflags;
+}
+/^Running target / { print ""; print; }
+/^Target / { if (host != "") next; else host = $3; }
+/^Host / && host ~ /^unix\{.*\}$/ { host = $3 " " substr(host, 5); }
+/^Native / { if (host != "") next; else host = $4; }
+/^[ ]*=== [^ ]+ tests ===/ {
+ if (lang == "") lang = " "$2" "; else lang = " ";
+}
+$2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; }
+/\===.*Summary/ { print ""; print; blanks=1; }
+/tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; }
+/^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { sub ("\r", ""); print; }
+/^using:/ { print ""; print; print ""; }
+# dumpall != 0 && /^X?(PASS|FAIL|UNTESTED)|^testcase/ { dumpall=0; }
+# dumpall != 0 { print; }
+# /^FAIL/ { dumpall=1; }
+/^$/ && blanks>0 { print; --blanks; }
+END { if (lang != "") {
+ print "";
+ print "Compiler version: " prefix version lang;
+ print "Platform: " host;
+ print configflags;
+ '${BOOT_CFLAGS+'print "BOOT_CFLAGS='"${BOOT_CFLAGS}"'";'}'
+ if (boot_cflags != 0) print boot_cflags;
+'${append_logs+" system(\"cat $append_logs\"); "}'
+ print "EOF";
+ print "Mail -s \"Results for " prefix version lang "testsuite on " host "\" '"${mailto}"' &&";
+}}
+{ next; }
+' | sed "s/\([\`\$\\\\]\)/\\\\\\1/g" &&
+if $move; then
+ for file in $files `ls -1 $files | sed s/sum$/log/`; do
+ [ -f $file ] && echo "mv `${PWDCMD-pwd}`/$file `${PWDCMD-pwd}`/$file.sent &&"
+ done
+fi &&
+echo true
+exit 0
diff --git a/contrib/texi2pod.pl b/contrib/texi2pod.pl
new file mode 100755
index 000000000..5a4bbacdf
--- /dev/null
+++ b/contrib/texi2pod.pl
@@ -0,0 +1,500 @@
+#! /usr/bin/perl -w
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2010 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 3, 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, 51 Franklin Street, Fifth Floor,
+# Boston MA 02110-1301, USA.
+
+# This does trivial (and I mean _trivial_) conversion of Texinfo
+# markup to Perl POD format. It's intended to be used to extract
+# something suitable for a manpage from a Texinfo document.
+
+$output = 0;
+$skipping = 0;
+%sects = ();
+$section = "";
+@icstack = ();
+@endwstack = ();
+@skstack = ();
+@instack = ();
+$shift = "";
+%defs = ();
+$fnno = 1;
+$inf = "";
+$ibase = "";
+@ipath = ();
+
+while ($_ = shift) {
+ if (/^-D(.*)$/) {
+ if ($1 ne "") {
+ $flag = $1;
+ } else {
+ $flag = shift;
+ }
+ $value = "";
+ ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
+ die "no flag specified for -D\n"
+ unless $flag ne "";
+ die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
+ unless $flag =~ /^[a-zA-Z0-9_-]+$/;
+ $defs{$flag} = $value;
+ } elsif (/^-I(.*)$/) {
+ if ($1 ne "") {
+ $flag = $1;
+ } else {
+ $flag = shift;
+ }
+ push (@ipath, $flag);
+ } elsif (/^-/) {
+ usage();
+ } else {
+ $in = $_, next unless defined $in;
+ $out = $_, next unless defined $out;
+ usage();
+ }
+}
+
+if (defined $in) {
+ $inf = gensym();
+ open($inf, "<$in") or die "opening \"$in\": $!\n";
+ $ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
+} else {
+ $inf = \*STDIN;
+}
+
+if (defined $out) {
+ open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
+}
+
+while(defined $inf) {
+while(<$inf>) {
+ # Certain commands are discarded without further processing.
+ /^\@(?:
+ [a-z]+index # @*index: useful only in complete manual
+ |need # @need: useful only in printed manual
+ |(?:end\s+)?group # @group .. @end group: ditto
+ |page # @page: ditto
+ |node # @node: useful only in .info file
+ |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents
+ )\b/x and next;
+
+ chomp;
+
+ # Look for filename and title markers.
+ /^\@setfilename\s+([^.]+)/ and $fn = $1, next;
+ /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
+
+ # Identify a man title but keep only the one we are interested in.
+ /^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
+ if (exists $defs{$1}) {
+ $fn = $1;
+ $tl = postprocess($2);
+ }
+ next;
+ };
+
+ # Look for blocks surrounded by @c man begin SECTION ... @c man end.
+ # This really oughta be @ifman ... @end ifman and the like, but such
+ # would require rev'ing all other Texinfo translators.
+ /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
+ $output = 1 if exists $defs{$2};
+ $sect = $1;
+ next;
+ };
+ /^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
+ /^\@c\s+man\s+end/ and do {
+ $sects{$sect} = "" unless exists $sects{$sect};
+ $sects{$sect} .= postprocess($section);
+ $section = "";
+ $output = 0;
+ next;
+ };
+
+ # handle variables
+ /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
+ $defs{$1} = $2;
+ next;
+ };
+ /^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
+ delete $defs{$1};
+ next;
+ };
+
+ next unless $output;
+
+ # Discard comments. (Can't do it above, because then we'd never see
+ # @c man lines.)
+ /^\@c\b/ and next;
+
+ # End-block handler goes up here because it needs to operate even
+ # if we are skipping.
+ /^\@end\s+([a-z]+)/ and do {
+ # Ignore @end foo, where foo is not an operation which may
+ # cause us to skip, if we are presently skipping.
+ my $ended = $1;
+ next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|copying)$/;
+
+ die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
+ die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
+
+ $endw = pop @endwstack;
+
+ if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) {
+ $skipping = pop @skstack;
+ next;
+ } elsif ($ended =~ /^(?:example|smallexample|display)$/) {
+ $shift = "";
+ $_ = ""; # need a paragraph break
+ } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
+ $_ = "\n=back\n";
+ $ic = pop @icstack;
+ } elsif ($ended eq "multitable") {
+ $_ = "\n=back\n";
+ } else {
+ die "unknown command \@end $ended at line $.\n";
+ }
+ };
+
+ # We must handle commands which can cause skipping even while we
+ # are skipping, otherwise we will not process nested conditionals
+ # correctly.
+ /^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
+ push @endwstack, $endw;
+ push @skstack, $skipping;
+ $endw = "ifset";
+ $skipping = 1 unless exists $defs{$1};
+ next;
+ };
+
+ /^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
+ push @endwstack, $endw;
+ push @skstack, $skipping;
+ $endw = "ifclear";
+ $skipping = 1 if exists $defs{$1};
+ next;
+ };
+
+ /^\@(ignore|menu|iftex|copying)\b/ and do {
+ push @endwstack, $endw;
+ push @skstack, $skipping;
+ $endw = $1;
+ $skipping = 1;
+ next;
+ };
+
+ next if $skipping;
+
+ # Character entities. First the ones that can be replaced by raw text
+ # or discarded outright:
+ s/\@copyright\{\}/(c)/g;
+ s/\@dots\{\}/.../g;
+ s/\@enddots\{\}/..../g;
+ s/\@([.!? ])/$1/g;
+ s/\@[:-]//g;
+ s/\@bullet(?:\{\})?/*/g;
+ s/\@TeX\{\}/TeX/g;
+ s/\@pounds\{\}/\#/g;
+ s/\@minus(?:\{\})?/-/g;
+ s/\\,/,/g;
+
+ # Now the ones that have to be replaced by special escapes
+ # (which will be turned back into text by unmunge())
+ # Replace @@ before @{ and @} in order to parse @samp{@@} correctly.
+ s/&/&amp;/g;
+ s/\@\@/&at;/g;
+ s/\@\{/&lbrace;/g;
+ s/\@\}/&rbrace;/g;
+ s/\@`\{(.)\}/&$1grave;/g;
+
+ # Inside a verbatim block, handle @var, @samp and @url specially.
+ if ($shift ne "") {
+ s/\@var\{([^\}]*)\}/<$1>/g;
+ s/\@samp\{([^\}]*)\}/"$1"/g;
+ s/\@url\{([^\}]*)\}/<$1>/g;
+ }
+
+ # POD doesn't interpret E<> inside a verbatim block.
+ if ($shift eq "") {
+ s/</&lt;/g;
+ s/>/&gt;/g;
+ } else {
+ s/</&LT;/g;
+ s/>/&GT;/g;
+ }
+
+ # Single line command handlers.
+
+ /^\@include\s+(.+)$/ and do {
+ push @instack, $inf;
+ $inf = gensym();
+ $file = postprocess($1);
+
+ # Try cwd and $ibase, then explicit -I paths.
+ $done = 0;
+ foreach $path ("", $ibase, @ipath) {
+ $mypath = $file;
+ $mypath = $path . "/" . $mypath if ($path ne "");
+ open($inf, "<" . $mypath) and ($done = 1, last);
+ }
+ die "cannot find $file" if !$done;
+ next;
+ };
+
+ /^\@(?:section|unnumbered|unnumberedsec|center|heading)\s+(.+)$/
+ and $_ = "\n=head2 $1\n";
+ /^\@subsection\s+(.+)$/
+ and $_ = "\n=head3 $1\n";
+ /^\@subsubsection\s+(.+)$/
+ and $_ = "\n=head4 $1\n";
+
+ # Block command handlers:
+ /^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do {
+ push @endwstack, $endw;
+ push @icstack, $ic;
+ if (defined $1) {
+ $ic = $1;
+ } else {
+ $ic = '*';
+ }
+ $_ = "\n=over 4\n";
+ $endw = "itemize";
+ };
+
+ /^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
+ push @endwstack, $endw;
+ push @icstack, $ic;
+ if (defined $1) {
+ $ic = $1 . ".";
+ } else {
+ $ic = "1.";
+ }
+ $_ = "\n=over 4\n";
+ $endw = "enumerate";
+ };
+
+ /^\@multitable\s.*/ and do {
+ push @endwstack, $endw;
+ $endw = "multitable";
+ $_ = "\n=over 4\n";
+ };
+
+ /^\@([fv]?table)\s+(\@[a-z]+)/ and do {
+ push @endwstack, $endw;
+ push @icstack, $ic;
+ $endw = $1;
+ $ic = $2;
+ $ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/;
+ $ic =~ s/\@(?:code|kbd)/C/;
+ $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
+ $ic =~ s/\@(?:file)/F/;
+ $ic =~ s/\@(?:asis)//;
+ $_ = "\n=over 4\n";
+ };
+
+ /^\@((?:small)?example|display)/ and do {
+ push @endwstack, $endw;
+ $endw = $1;
+ $shift = "\t";
+ $_ = ""; # need a paragraph break
+ };
+
+ /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
+ @columns = ();
+ for $column (split (/\s*\@tab\s*/, $1)) {
+ # @strong{...} is used a @headitem work-alike
+ $column =~ s/^\@strong{(.*)}$/$1/;
+ push @columns, $column;
+ }
+ $_ = "\n=item ".join (" : ", @columns)."\n";
+ };
+
+ /^\@itemx?\s*(.+)?$/ and do {
+ if (defined $1) {
+ if ($ic) {
+ if ($endw eq "enumerate") {
+ $_ = "\n=item $ic $1\n";
+ $ic =~ s/(\d+)/$1 + 1/eg;
+ } else {
+ # Entity escapes prevent munging by the <>
+ # processing below.
+ $_ = "\n=item $ic\&LT;$1\&GT;\n";
+ }
+ } else {
+ $_ = "\n=item $1\n";
+ }
+ } else {
+ $_ = "\n=item $ic\n";
+ $ic =~ y/A-Ya-y/B-Zb-z/;
+ $ic =~ s/(\d+)/$1 + 1/eg;
+ }
+ };
+
+ $section .= $shift.$_."\n";
+}
+# End of current file.
+close($inf);
+$inf = pop @instack;
+}
+
+die "No filename or title\n" unless defined $fn && defined $tl;
+
+$sects{NAME} = "$fn \- $tl\n";
+$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
+
+for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES
+ BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
+ if(exists $sects{$sect}) {
+ $head = $sect;
+ $head =~ s/SEEALSO/SEE ALSO/;
+ print "=head1 $head\n\n";
+ print scalar unmunge ($sects{$sect});
+ print "\n";
+ }
+}
+
+sub usage
+{
+ die "usage: $0 [-D toggle...] [infile [outfile]]\n";
+}
+
+sub postprocess
+{
+ local $_ = $_[0];
+
+ # @value{foo} is replaced by whatever 'foo' is defined as.
+ while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
+ if (! exists $defs{$2}) {
+ print STDERR "Option $2 not defined\n";
+ s/\Q$1\E//;
+ } else {
+ $value = $defs{$2};
+ s/\Q$1\E/$value/;
+ }
+ }
+
+ # Formatting commands.
+ # Temporary escape for @r.
+ s/\@r\{([^\}]*)\}/R<$1>/g;
+ s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
+ s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
+ s/\@(?:samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
+ s/\@sc\{([^\}]*)\}/\U$1/g;
+ s/\@acronym\{([^\}]*)\}/\U$1/g;
+ s/\@file\{([^\}]*)\}/F<$1>/g;
+ s/\@w\{([^\}]*)\}/S<$1>/g;
+ s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
+ s/\@\///g;
+
+ # keep references of the form @ref{...}, print them bold
+ s/\@(?:ref)\{([^\}]*)\}/B<$1>/g;
+
+ # Change double single quotes to double quotes.
+ s/''/"/g;
+ s/``/"/g;
+
+ # Cross references are thrown away, as are @noindent and @refill.
+ # (@noindent is impossible in .pod, and @refill is unnecessary.)
+ # @* is also impossible in .pod; we discard it and any newline that
+ # follows it. Similarly, our macro @gol must be discarded.
+
+ s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
+ s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
+ s/;\s+\@pxref\{(?:[^\}]*)\}//g;
+ s/\@noindent\s*//g;
+ s/\@refill//g;
+ s/\@gol//g;
+ s/\@\*\s*\n?//g;
+
+ # Anchors are thrown away
+ s/\@anchor\{(?:[^\}]*)\}//g;
+
+ # @uref can take one, two, or three arguments, with different
+ # semantics each time. @url and @email are just like @uref with
+ # one argument, for our purposes.
+ s/\@(?:uref|url|email)\{([^\},]*)\}/&lt;B<$1>&gt;/g;
+ s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
+ s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
+
+ # Handle gccoptlist here, so it can contain the above formatting
+ # commands.
+ s/\@gccoptlist\{([^\}]*)\}/B<$1>/g;
+
+ # Un-escape <> at this point.
+ s/&LT;/</g;
+ s/&GT;/>/g;
+
+ # Now un-nest all B<>, I<>, R<>. Theoretically we could have
+ # indefinitely deep nesting; in practice, one level suffices.
+ 1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g;
+
+ # Replace R<...> with bare ...; eliminate empty markup, B<>;
+ # shift white space at the ends of [BI]<...> expressions outside
+ # the expression.
+ s/R<([^<>]*)>/$1/g;
+ s/[BI]<>//g;
+ s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
+ s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
+
+ # Extract footnotes. This has to be done after all other
+ # processing because otherwise the regexp will choke on formatting
+ # inside @footnote.
+ while (/\@footnote/g) {
+ s/\@footnote\{([^\}]+)\}/[$fnno]/;
+ add_footnote($1, $fnno);
+ $fnno++;
+ }
+
+ return $_;
+}
+
+sub unmunge
+{
+ # Replace escaped symbols with their equivalents.
+ local $_ = $_[0];
+
+ s/&(.)grave;/E<$1grave>/g;
+ s/&lt;/E<lt>/g;
+ s/&gt;/E<gt>/g;
+ s/&lbrace;/\{/g;
+ s/&rbrace;/\}/g;
+ s/&at;/\@/g;
+ s/&amp;/&/g;
+ return $_;
+}
+
+sub add_footnote
+{
+ unless (exists $sects{FOOTNOTES}) {
+ $sects{FOOTNOTES} = "\n=over 4\n\n";
+ }
+
+ $sects{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++;
+ $sects{FOOTNOTES} .= $_[0];
+ $sects{FOOTNOTES} .= "\n\n";
+}
+
+# stolen from Symbol.pm
+{
+ my $genseq = 0;
+ sub gensym
+ {
+ my $name = "GEN" . $genseq++;
+ my $ref = \*{$name};
+ delete $::{$name};
+ return $ref;
+ }
+}
diff --git a/contrib/uninclude b/contrib/uninclude
new file mode 100755
index 000000000..8ba28e5cf
--- /dev/null
+++ b/contrib/uninclude
@@ -0,0 +1,52 @@
+#! /bin/sh
+
+# (C) 1998, 2007 Free Software Foundation
+# Originally by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+# This gawk/shell script 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 3, or (at your option)
+# any later version.
+
+# Given a preprocessed C/C++ code snippet, this script will replace any
+# standard header files with an actual #include <...> directive.
+
+# Example:
+# # 1 "test.c"
+# # 1 "/usr/include/stdio.h" 1 3
+# <snip>
+# # 1 "test.c" 2
+#
+# main() { printf("Hello world!\n"); }
+
+# is replaced with
+# # 1 "test.c"
+# #include <stdio.h>
+# main() { printf("Hello world!\n"); }
+
+
+# Header files whose pathnames contain any of the following patterns
+# are considered as standard headers: usr/include, g++-include,
+# include/g++, include/c++/<version>, gcc-lib/<anything>/include.
+
+gawk ${EXCLUDEPATT+-vexclude="$EXCLUDEPATT"} \
+ ${INCLUDEPATT+-vinclude="$INCLUDEPATT"} '
+BEGIN {
+ skipping = 0;
+ cppline = "^# [0-9]+ \"[^\"]*/(usr/include|g\\+\\+-include|include/g\\+\\+|include/c\\+\\+/[^/]+|gcc-lib/[^\"]+/include|gcc/include)/([^\"]+)\"( [1-4])*$"
+}
+!skipping && $0 ~ cppline &&
+(exclude == "" || $3 !~ exclude) && (include == "" || $3 ~ include) {
+ skipping = 1;
+ printf "%s\n", "#include <" gensub(cppline, "\\2", "", $0) ">"
+ next;
+}
+skipping && /^# [0-9]+ / && $3 == lastincluded {
+ skipping = 0;
+ next;
+}
+!skipping && /^# [0-9]+ / {
+ lastincluded = $3;
+}
+!skipping { print }
+' ${1+"$@"}
diff --git a/contrib/warn_summary b/contrib/warn_summary
new file mode 100755
index 000000000..38e2c01ef
--- /dev/null
+++ b/contrib/warn_summary
@@ -0,0 +1,214 @@
+#!/bin/sh
+#
+# 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
+# Filter out long lines from the bootstrap output before any other
+# action. This is useful for systems with broken awks/greps which choke
+# on long lines. It is not done by default as it sometimes slows things
+# down.
+#
+# -s number
+# Take warnings from stage "Number". Stage 0 means show warnings from
+# before and after the gcc bootstrap directory. E.g. libraries, etc.
+# This presupposes using "gcc -W*" for the stage1 compiler.
+#
+# -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
+# Pass through the bootstrap output after filtering stage and subdir
+# (useful for manual inspection.) This is all lines, not just warnings.
+# -wpass
+# Pass through only warnings from the bootstrap output after filtering
+# stage and subdir.
+#
+# By Kaveh Ghazi (ghazi@caip.rutgers.edu) 12/13/97.
+
+
+# Some awks choke on long lines, sed seems to do a better job.
+# Truncate lines > 255 characters. RE '.\{255,\}' doesn't seem to work. :-(
+# Only do this if -llf was specified, because it can really slow things down.
+longLineFilter()
+{
+ if test -z "$llf" ; then
+ cat
+ else
+ sed 's/^\(...............................................................................................................................................................................................................................................................\).*/\1/'
+ fi
+}
+
+# This function does one of three things. It either passes through
+# all warning data, or passes through gcc toplevel warnings, or passes
+# through a particular subdirectory set of warnings.
+subdirectoryFilter()
+{
+ longLineFilter | (
+ if test -z "$filter" ; then
+ # Pass through all lines.
+ cat
+ 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/"
+ fi
+ fi )
+}
+
+# This function displays all lines from stageN of the bootstrap. If
+# stage==0, then show lines prior to stage1 and lines from after the last
+# stage. I.e. utilities, libraries, etc.
+stageNfilter()
+{
+ if test "$stageN" -lt 1 ; then
+ # stage "0" means check everything *but* gcc.
+ $AWK "BEGIN{t=1} ; /^Bootstrapping the compiler/{t=0} ; /^Building runtime libraries/{t=1} ; {if(t==1)print}"
+ else
+ if test "$stageN" -eq 1 ; then
+ $AWK "/^Bootstrapping the compiler|^Building the C and C\+\+ compiler/{t=1} ; /stage$stageN/{t=0} ; {if(t==1)print}"
+ else
+ stageNminus1=`expr $stageN - 1`
+ $AWK "/stage${stageNminus1}\//{t=1} ; /stage$stageN/{t=0} ; {if(t==1)print}"
+ fi
+ fi
+}
+
+# This function displays lines containing warnings.
+warningFilter()
+{
+ grep ' warning: '
+}
+
+# This function replaces `xxx' with `???', where xxx is usually some
+# variable or function name. This allows similar warnings to be
+# counted together when summarizing. However it avoids replacing
+# certain C keywords which are known appear in various messages.
+
+keywordFilter() {
+ sed 's/.*warning: //;
+ s/`\(int\)'"'"'/"\1"/g;
+ s/`\(long\)'"'"'/"\1"/g;
+ s/`\(char\)'"'"'/"\1"/g;
+ s/`\(inline\)'"'"'/"\1"/g;
+ s/`\(else\)'"'"'/"\1"/g;
+ s/`\(return\)'"'"'/"\1"/g;
+ s/`\(static\)'"'"'/"\1"/g;
+ s/`\(extern\)'"'"'/"\1"/g;
+ 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'
+}
+
+# This function strips out relative pathnames for source files printed
+# by the warningFilter function. This is done so that as the snapshot
+# directory name changes every week, the output of this program can be
+# compared to previous runs without spurious diffs caused by source
+# directory name changes.
+
+srcdirFilter()
+{
+ sed '
+s%^[^ ]*/\(gcc/\)%\1%;
+s%^[^ ]*/\(include/\)%\1%;
+s%^[^ ]*/\(texinfo/\)%\1%;
+s%^[^ ]*/\(fastjar/\)%\1%;
+s%^[^ ]*/\(zlib/\)%\1%;
+s%^[^ ]*/\(fixincludes/\)%\1%;
+s%^[^ ]*/\(sim/\)%\1%;
+s%^[^ ]*/\(newlib/\)%\1%;
+s%^[^ ]*/\(mpfr/\)%\1%;
+s%^[^ ]*/\(lib[a-z23+-]*/\)%\1%;'
+}
+
+# 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.$$
+
+# Remove $tmpfile on exit and various signals.
+trap "rm -f $tmpfile" 0
+trap "rm -f $tmpfile ; exit 1" 1 2 3 5 9 13 15
+
+# Find a good awk.
+if test -z "$AWK" ; then
+ for AWK in gawk nawk awk ; do
+ if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then
+ :
+ else
+ break
+ fi
+ done
+fi
+
+# Parse command line arguments.
+while test -n "$1" ; do
+ case "$1" in
+ -llf) llf=1 ; shift ;;
+ -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 ;;
+ *) break ;;
+ esac
+done
+
+# Check for a valid value of $stageN.
+case "$stageN" in
+ [0-9]) ;;
+ *) echo "Stage <$stageN> must be in the range [0..9]." 1>&2 ; exit 1 ;;
+esac
+
+for file in "$@" ; do
+
+ stageNfilter < $file | subdirectoryFilter > $tmpfile
+
+ # (Just) show me the warnings.
+ if test "$pass" != '' ; then
+ if test "$pass" = w ; then
+ warningFilter < $tmpfile
+ else
+ cat $tmpfile
+ fi
+ continue
+ fi
+
+ if test -z "$filter" ; then
+ echo "Counting all warnings,"
+ else
+ if test "$filter" = nosub ; then
+ echo "Counting non-subdirectory warnings,"
+ else
+ echo "Counting warnings in the gcc/$filter subdirectory,"
+ fi
+ fi
+ count=`warningFilter < $tmpfile | wc -l`
+ echo there are $count warnings in stage$stageN of this bootstrap.
+
+ echo
+ echo Number of warnings per file:
+ warningFilter < $tmpfile | srcdirFilter | $AWK -F: '{print$1}' | sort | \
+ uniq -c | sort -nr
+
+ echo
+ echo Number of warning types:
+ warningFilter < $tmpfile | keywordFilter | sort | uniq -c | sort -nr
+
+done