aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/contrib')
-rw-r--r--gcc-4.9/contrib/ChangeLog2040
-rw-r--r--gcc-4.9/contrib/ChangeLog.tree-ssa46
-rwxr-xr-xgcc-4.9/contrib/analyze_brprob146
-rwxr-xr-xgcc-4.9/contrib/check_GNU_style.sh124
-rw-r--r--gcc-4.9/contrib/check_makefile_deps.sh94
-rwxr-xr-xgcc-4.9/contrib/check_warning_flags.sh180
-rw-r--r--gcc-4.9/contrib/compare-all-tests99
-rwxr-xr-xgcc-4.9/contrib/compare-debug194
-rwxr-xr-xgcc-4.9/contrib/compareSumTests3250
-rwxr-xr-xgcc-4.9/contrib/compare_tests198
-rwxr-xr-xgcc-4.9/contrib/compare_two_ftime_report_sets605
-rw-r--r--gcc-4.9/contrib/config-list.mk103
-rwxr-xr-xgcc-4.9/contrib/dg-cmp-results.sh211
-rwxr-xr-xgcc-4.9/contrib/dg-extract-results.sh431
-rw-r--r--gcc-4.9/contrib/dglib.pm424
-rwxr-xr-xgcc-4.9/contrib/download_ecj25
-rwxr-xr-xgcc-4.9/contrib/download_prerequisites56
-rwxr-xr-xgcc-4.9/contrib/filter_gcc_for_doxygen12
-rwxr-xr-xgcc-4.9/contrib/filter_knr2ansi.pl45
-rwxr-xr-xgcc-4.9/contrib/filter_params.pl14
-rw-r--r--gcc-4.9/contrib/gcc.doxy1267
-rwxr-xr-xgcc-4.9/contrib/gcc_build325
-rwxr-xr-xgcc-4.9/contrib/gcc_update408
-rwxr-xr-xgcc-4.9/contrib/gennews68
-rw-r--r--gcc-4.9/contrib/gthr_supp_vxw_5x.c92
-rwxr-xr-xgcc-4.9/contrib/index-prop26
-rw-r--r--gcc-4.9/contrib/make-obstacks-texi.pl46
-rw-r--r--gcc-4.9/contrib/make_sunver.pl333
-rwxr-xr-xgcc-4.9/contrib/mklog270
-rw-r--r--gcc-4.9/contrib/paranoia.cc2713
-rwxr-xr-xgcc-4.9/contrib/patch_tester.sh518
-rwxr-xr-xgcc-4.9/contrib/prepare_patch.sh96
-rw-r--r--gcc-4.9/contrib/reghunt/ChangeLog96
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-build-full52
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-build-simple79
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-cleanup20
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-checkfail9
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-ids88
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-patchlist85
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-recordfail8
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-report26
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-update117
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-svn-update-fix113
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-accepts-invalid48
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-bogus-warning42
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-compiler-hangs63
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-invalid-code54
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-valid-code48
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-missing-warning42
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-rejects-valid48
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-segfault-on-valid-code49
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/gcc-test-wrong-code42
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/reg-hunt363
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/reg-newmid86
-rwxr-xr-xgcc-4.9/contrib/reghunt/bin/reg-test152
-rw-r--r--gcc-4.9/contrib/reghunt/date_based/README16
-rwxr-xr-xgcc-4.9/contrib/reghunt/date_based/reg_periodic171
-rwxr-xr-xgcc-4.9/contrib/reghunt/date_based/reg_search300
-rwxr-xr-xgcc-4.9/contrib/reghunt/date_based/reg_test_template41
-rw-r--r--gcc-4.9/contrib/reghunt/examples/28970.c28
-rw-r--r--gcc-4.9/contrib/reghunt/examples/28970.config19
-rw-r--r--gcc-4.9/contrib/reghunt/examples/28970.list324
-rw-r--r--gcc-4.9/contrib/reghunt/examples/28970.log80
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29106.cc9
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29106.config18
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29106.list568
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29106.log111
-rwxr-xr-xgcc-4.9/contrib/reghunt/examples/29106.test29
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29478.c12
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29478.config16
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29478.list340
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29478.log78
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906a.cc7
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906a.config16
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906a.list623
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906a.log129
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906b.cc7
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906b.config19
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906b.list556
-rw-r--r--gcc-4.9/contrib/reghunt/examples/29906b.log81
-rw-r--r--gcc-4.9/contrib/reghunt/examples/30643.c14
-rw-r--r--gcc-4.9/contrib/reghunt/examples/30643.config19
-rw-r--r--gcc-4.9/contrib/reghunt/examples/30643.list83
-rw-r--r--gcc-4.9/contrib/reghunt/examples/30643.log64
-rwxr-xr-xgcc-4.9/contrib/reghunt/examples/30643.test26
-rw-r--r--gcc-4.9/contrib/reghunt/examples/README53
-rw-r--r--gcc-4.9/contrib/reghunt/examples/common.config133
-rw-r--r--gcc-4.9/contrib/reghunt/examples/gcc-svn-env75
-rwxr-xr-xgcc-4.9/contrib/reghunt/examples/reg-watch3
-rwxr-xr-xgcc-4.9/contrib/reghunt/examples/reg-watch.awk38
-rwxr-xr-xgcc-4.9/contrib/reghunt/examples/testall73
-rw-r--r--gcc-4.9/contrib/regression/ChangeLog144
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Default.pngbin0 -> 81 bytes
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Icon.pngbin0 -> 2122 bytes
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist32
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.stringsbin0 -> 126 bytes
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.stringsbin0 -> 96 bytes
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.stringsbin0 -> 74 bytes
-rw-r--r--gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/widget.html152
-rw-r--r--gcc-4.9/contrib/regression/README24
-rwxr-xr-xgcc-4.9/contrib/regression/btest-gcc.sh241
-rwxr-xr-xgcc-4.9/contrib/regression/mkindex.pl107
-rwxr-xr-xgcc-4.9/contrib/regression/objs-gcc.sh128
-rw-r--r--gcc-4.9/contrib/regression/site.exp18
-rwxr-xr-xgcc-4.9/contrib/repro_fail96
-rwxr-xr-xgcc-4.9/contrib/test_installed121
-rwxr-xr-xgcc-4.9/contrib/test_recheck98
-rwxr-xr-xgcc-4.9/contrib/test_summary156
-rwxr-xr-xgcc-4.9/contrib/testsuite-management/validate_failures.py541
-rw-r--r--gcc-4.9/contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail109
-rwxr-xr-xgcc-4.9/contrib/texi2pod.pl500
-rwxr-xr-xgcc-4.9/contrib/uninclude52
-rw-r--r--gcc-4.9/contrib/update-copyright.py765
-rwxr-xr-xgcc-4.9/contrib/warn_summary214
114 files changed, 20866 insertions, 0 deletions
diff --git a/gcc-4.9/contrib/ChangeLog b/gcc-4.9/contrib/ChangeLog
new file mode 100644
index 000000000..93906ca0c
--- /dev/null
+++ b/gcc-4.9/contrib/ChangeLog
@@ -0,0 +1,2040 @@
+2014-02-24 Walter Lee <walt@tilera.com>
+
+ * config-list.mk (LIST): Add tilegxbe-linux-gnu.
+
+2014-02-13 Richard Biener <rguenther@suse.de>
+
+ * download_prerequisites: Update ISL and CLOOG versions.
+
+2014-01-31 Brooks Moses <bmoses@google.com>
+
+ * gcc_update (files_and_dependencies): Add aarch64-tune.md.
+
+2014-01-29 Yury Gribov <y.gribov@samsung.com>
+
+ * mklog: Improve support of context diffs.
+
+2014-01-21 Tatiana Udalova <t.udalova@samsung.com>
+
+ * mklog: Avoid adding falsely changed functions to ChangeLog.
+
+2013-12-31 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * config-list.mk: Add nios2-elf, nios2-linux-gnu. Corrected
+ ordering of some configs.
+
+2013-12-23 Yury Gribov <y.gribov@samsung.com>
+
+ * mklog: Automatically insert comments in trivial cases.
+
+2013-12-19 Yury Gribov <y.gribov@samsung.com>
+
+ * mklog: Split generated message in parts.
+
+2013-10-31 Chung-Ju Wu <jasonwucj@gmail.com>
+
+ * config-list.mk (nds32le-elf, nds32be-elf): Add nds32 target.
+
+2013-10-29 Tobias Burnus <burnus@net-b.de>
+
+ * gcc_update (files_and_dependencies): Add rules for
+ libcilkrts.
+
+2013-10-11 Thomas Schwinge <thomas@codesourcery.com>
+
+ * gcc_update (files_and_dependencies): Fix rule for
+ libgomp/testsuite/Makefile.in.
+
+2013-10-01 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * config-list.mk: Add arc configurations.
+
+2013-09-27 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2013-09-12 DJ Delorie <dj@redhat.com>
+
+ * config-list.mk: Add msp430-elf.
+
+2013-08-31 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2013-08-29 Mike Stump <mikestump@comcast.net>
+
+ * gcc_update (configure): Update to handle svn 1.8.1.
+
+2013-08-03 Caroline Tice <cmtice@google.com>
+
+ * gcc_update: Add libvtv files.
+
+2013-06-06 Brooks Moses <bmoses@google.com>
+
+ * testsuite-management/validate_failures.py: Fix handling of
+ summary lines with "|" characters or empty description fields.
+
+2013-05-24 Chung-Ju Wu <jasonwucj@gmail.com>
+
+ * download_prerequisites: Download isl and cloog conditionally.
+
+2013-05-21 David Malcolm <dmalcolm@redhat.com>
+
+ * repro_fail: Filter out "-ignore SIGHUP" from the spawn lines.
+
+2013-05-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (LIST): Add -enable-obsolete for
+ sparc-sun-solaris2.9, i686-solaris2.9.
+
+2013-05-13 Mike Stump <mikestump@comcast.net>
+
+ * compare_tests: Limit lines to 2000 characters as comm on Mac OS
+ X 10.8.3 doesn't like long lines (those 2055 characters or more).
+
+2013-04-22 Sofiane Naci <sofiane.naci@arm.com>
+
+ * config-list.mk (LIST): Add aarch64-elf and aarch64-linux-gnu.
+
+2013-04-18 Diego Novillo <dnovillo@google.com>
+
+ * validate_failures.py: Fix typo.
+
+2013-04-18 Diego Novillo <dnovillo@google.com>
+
+ * validate_failures.py: Loosen check for build directory.
+ State what failed if we couldn't find the source tree or
+ the target triplet.
+
+2013-03-22 Jakub Jelinek <jakub@redhat.com>
+
+ * gennews (files): Add files for GCC 4.8.
+
+2013-03-06 Tobias Burnus <burnus@net-b.de>
+
+ * make-obstacks-texi.pl: New.
+
+2013-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * make_sunver.pl: Enforce C locale.
+
+2013-02-06 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * update-copyright.py: Add libdecnumber to the default list.
+ Remove libquadmath and libssp.
+
+2013-02-06 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Fix typo.
+
+2013-02-06 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Update
+ Copyright years.
+ Request contributions not to use Python features newer
+ than 2.4.
+ (GetBuildData): If this is not a build directory,
+ emit an error only if --results or --manifest are missing.
+
+2013-02-06 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ * testsuite-management/validate_failures.py
+ (IsInterestingResult): Fix performance regression
+
+2013-02-04 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * update-copyright.py: New file.
+
+2013-01-15 David Blaikie <dblaikie@gmail.com>
+
+ * dg-extract-results.sh: Handle KPASSes.
+
+ * dg-extract-results.sh: Constrain the start-of-log pattern.
+
+ * dg-extract-results.sh: Fix order of summary counts.
+
+2012-12-01 Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ * testsuite-management/validate_failures.py
+ (IsInterestingResult): Only strip line a second time if we did split.
+ Rephrase return statement while at it.
+ (CollectSumFiles): Also ignore .git directory.
+
+2012-12-03 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Fix stale
+ use of 'options'.
+
+2012-11-30 Doug Evans <dje@google.com>
+
+ * testsuite-management/validate_failures.py: Add support for @include,
+ @remove directives in manifest files.
+
+ * testsuite-management/validate_failures.py: Add function
+ GetManifestPath. New global _MANIFEST_SUBDIR.
+
+2012-11-29 Doug Evans <dje@google.com>
+
+ * testsuite-management/validate_failures.py: Remove pass/fail
+ indicator from result of GetBuildData.
+
+ * testsuite-management/validate_failures.py: Store options in global
+ variable _OPTIONS.
+
+ * testsuite-management/validate_failures.py: Rename variable
+ manifest_name to manifest_path everywhere.
+
+ * testsuite-management/validate_failures.py (CompareBuilds): Pass
+ options.results to GetSumFiles for clean build.
+
+2012-11-28 Doug Evans <dje@google.com>
+
+ * testsuite-management/validate_failures.py: Use <target_alias> instead
+ of <target>. Minor whitespace changes.
+
+ * testsuite-management/validate_failures.py: Record ordinal with
+ TestResult.
+
+2012-11-19 Mike Stump <mikestump@comcast.net>
+
+ * compare_tests: Add export LC_ALL=C to make sort happier.
+
+2012-11-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc_update: Update libsanitizer generated files.
+
+2012-11-12 Tobias Burnus <burnus@net-b.de>
+
+ * gcc_update: Add libquadmath generated files.
+
+2012-11-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc_update: Add libsanitizer generated files.
+
+2012-11-05 Lawrence Crowl <crowl@google.com>
+
+ * compare_two_ftime_report_sets: New.
+
+2012-11-02 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Add option
+ --clean_build to compare test results against another
+ build.
+
+2012-10-31 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Fix parsing
+ of summary lines.
+
+2012-10-29 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2012-10-06 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2012-10-02 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * check_GNU_style.sh: Remove temporay file upon exit.
+
+2012-09-26 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * contrib-list.mk (LIST): Remove arm-freebsd6, arm-linux,
+ arm-ecos-elf, arm-rtems, arm-elf and arm-wince-pe.
+ Use --enable-obsolete for picochip-elf.
+
+2012-09-10 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2012-09-04 Eric Botcazou <ebotcazou@adacore.com>
+
+ * make_sunver.pl: Add missing newline at the end of extern "C++" block.
+
+2012-08-24 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: Update.
+
+2012-08-14 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/x86_64-unknown-linux-gnu.xfail: New.
+
+2012-08-13 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py (ExpirationDate): Tidy
+ comment.
+
+2012-08-13 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py (ParseSummary): Fix
+ comment.
+
+2012-08-13 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Import datetime.
+ (TestResult.ExpirationDate): New.
+ (TestResult.HasExpired): New.
+ (ParseSummary): Call it. If it returns True, warn that the
+ expected failure has expired and do not add it to the set of
+ expected results.
+ (GetResults): Clarify documentation.
+
+2012-07-26 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Do not use
+ 'with ... as ...' constructs.
+
+2012-07-19 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py (CollectSumFiles):
+ Rename from GetSumFiles.
+ (GetSumFiles): Factor out of CheckExpectedResults.
+ (CheckExpectedResults): Call it.
+ (ProduceManifest): Call it.
+
+2012-07-18 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py: Fix
+ /usr/bin/python invocation.
+
+2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
+
+ * check_makefile_deps.sh: Look for c-common.o in c-family/.
+ Add a few more crt* files to the list of files to skip.
+
+2012-05-31 Marek Polacek <polacek@redhat.com>
+
+ * mklog: Prevent printing three spaces after the date.
+
+2012-06-04 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py (GetResults):
+ Change argument to accept list of summary files to analyze.
+ Update callers.
+ (CheckExpectedResults): Handle options.manifest, options.results
+ and options.ignore_missing_failures.
+ (Main): Add options --manifest, --results and --ignore_missing_failures.
+
+2012-05-31 Diego Novillo <dnovillo@google.com>
+ Cary Coutant <ccoutant@google.com>
+
+ * mklog: New.
+
+2012-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR bootstrap/53472
+ * contrib/compare-debug (remove_comment): New function.
+ Remove any .comment sections if the first cmp failed.
+
+2012-05-09 David Edelsohn <dje.gcc@gmail.com>
+
+ * gcc_update: Use $GCC_SVN to retrieve branch and revision.
+
+2012-05-01 Richard Henderson <rth@redhat.com>
+
+ * gcc_update: Add libatomic generated files.
+
+2012-04-23 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ * compare_tests: Append '/' to make 'find' traverse
+ symlinked directories.
+
+2012-04-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * testsuite-management/validate_failures.py (GetBuildData): Use
+ target_alias.
+
+2012-04-06 Doug Evans <dje@google.com>
+
+ * dg-extract-results.sh: Handle KFAILs.
+
+2012-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (LIST): Remove mips-sgi-irix6.5.
+
+2012-03-13 Joseph Myers <joseph@codesourcery.com>
+
+ * gennews (files): Add files for GCC 4.7.
+
+2012-03-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (LIST): Remove mips-openbsd.
+
+2012-03-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (LIST): Remove alpha-dec-osf5.1.
+
+2012-03-02 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management/validate_failures.py (class TestResult): Fix
+ match pattern for the summary line. If there is a parsing failure,
+ show the line we failed to parse.
+
+2012-02-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR libstdc++/52188
+ * make_sunver.pl: Remove #ifdef handling.
+
+2012-02-17 Doug Kwan <dougkwan@google.com>
+
+ * contrib/testsuite-management/validate_failures.py
+ (GetMakefileValue): Check for cross compilers.
+
+2012-02-15 Quentin Neill <quentin.neill@amd.com>
+
+ * compare_tests: Fix trailing paths in dir arguments.
+ Handle sum1/sum2 temp files with others.
+
+2012-02-14 Walter Lee <walt@tilera.com>
+
+ * config-list.mk (LIST): Add tilegx-linux-gnu and
+ tilepro-linux-gnu.
+ * gcc_update (gcc/config/tilegx/mul-tables.c): New dependencies.
+ (gcc/config/tilepro/mul-tables.c): New dependencies.
+
+2012-02-11 Mike Stump <mikestump@comcast.net>
+
+ * compare_tests (exit_status): Fix.
+
+2012-02-10 Diego Novillo <dnovillo@google.com>
+
+ * repro_fail: Add --debug and --debug-tui flags.
+
+2012-02-02 Sumanth G <sumanth.gundapaneni@kpitcummins.com>
+ Jayant R Sonar <jayant.sonar@kpitcummins.com>
+
+ * config-list.mk (LIST): Add cr16-elf.
+
+2012-01-02 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/51345
+ * gcc_update (files_and_dependencies): Add
+ gcc/config/avr/t-multilib, gcc/config/avr/multilib.h.
+
+2011-11-29 DJ Delorie <dj@redhat.com>
+
+ * config-list.mk (LIST): Add rl78-elf.
+
+2011-11-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * make_sunver.pl: Convert '?' in glob patterns to '.'.
+
+2011-11-07 Richard Henderson <rth@redhat.com>
+
+ Merged from transactional-memory.
+
+ * gcc_update: Add libitm to touch data.
+
+2011-11-07 Quentin Neill <quentin.neill@amd.com>
+
+ * compare_tests: Add ability to compare all .sum
+ files from two build directories.
+
+2011-11-05 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * contrib-list.mk: Add Epiphany configurations.
+
+2011-09-13 Diego Novillo <dnovillo@google.com>
+
+ * testsuite-management: New.
+ * testsuite-management/validate_failures.py: New.
+
+2011-08-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc_update: Determine svn branch from hg convert_revision.
+
+2011-07-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (i586-netware): Remove.
+ (.PHONY): Remove make-script-dir dependency.
+ (make-script-dir): Remove.
+ ($(LIST)): Remove make-script-dir dependency.
+
+2011-07-15 Bernd Schmidt <bernds@codesourcery.com>
+
+ * gcc_update: Add C6X generated files.
+ * contrib/config-list.mk: Add c6x-elf and c6x-uclinux.
+
+2011-07-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config-list.mk (LIST): Append OPT-enable-obsolete to
+ alpha-dec-osf5.1, mips-sgi-irix6.5.
+
+2011-06-24 Diego Novillo <dnovillo@google.com>
+
+ * repro_fail: New.
+
+2011-06-21 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/avr/avr-tables.opt): New dependencies.
+
+2011-05-19 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/arm/arm-tables.opt): Also depend on
+ gcc/config/arm/arm-fpus.def.
+
+2011-05-10 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/rs6000/rs6000-tables.opt): New
+ dependencies.
+
+2011-05-09 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/mips/mips-tables.opt): New dependencies.
+
+2010-05-05 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ * config-list.mk: New file.
+
+2011-05-02 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/m68k/m68k-tables.opt): New dependencies.
+
+2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * paranoia.cc (ENUM_BITFIELD): Remove.
+
+2011-04-08 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc_update (gcc/config/arm/arm-tables.opt): New dependencies.
+
+2011-03-22 Joseph Myers <joseph@codesourcery.com>
+
+ * compare-all-tests (all_targets): Remove crx and m68hc11.
+
+2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR bootstrap/48135
+ * make_sunver.pl: Don't use File::Glob.
+
+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/gcc-4.9/contrib/ChangeLog.tree-ssa b/gcc-4.9/contrib/ChangeLog.tree-ssa
new file mode 100644
index 000000000..2c1165f79
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/analyze_brprob b/gcc-4.9/contrib/analyze_brprob
new file mode 100755
index 000000000..093c1dea7
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/check_GNU_style.sh b/gcc-4.9/contrib/check_GNU_style.sh
new file mode 100755
index 000000000..ef8fdda6d
--- /dev/null
+++ b/gcc-4.9/contrib/check_GNU_style.sh
@@ -0,0 +1,124 @@
+#!/bin/sh
+
+# Checks some of the GNU style formatting rules in a set of patches.
+# Copyright (C) 2010, 2012 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
+
+# Remove $tmp on exit and various signals.
+trap "rm -f $tmp" 0
+trap "rm -f $tmp ; exit 1" 1 2 3 5 9 13 15
+
+# 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/gcc-4.9/contrib/check_makefile_deps.sh b/gcc-4.9/contrib/check_makefile_deps.sh
new file mode 100644
index 000000000..fd739a114
--- /dev/null
+++ b/gcc-4.9/contrib/check_makefile_deps.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+#
+# Check for accurate dependencies in gcc/Makefile.in.
+#
+# Copyright (C) 2008, 2012 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 ecrti.o ecrtn.o ncrti.o ncrtn.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-family/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/gcc-4.9/contrib/check_warning_flags.sh b/gcc-4.9/contrib/check_warning_flags.sh
new file mode 100755
index 000000000..d9c5735ab
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/compare-all-tests b/gcc-4.9/contrib/compare-all-tests
new file mode 100644
index 000000000..cf3d88b34
--- /dev/null
+++ b/gcc-4.9/contrib/compare-all-tests
@@ -0,0 +1,99 @@
+#! /bin/bash
+
+# Compare the assembly language output for all the gcc tests.
+# Copyright (C) 2009, 2011 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 fr30 frv h8300 ia64 iq2000 m32c m32r 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/gcc-4.9/contrib/compare-debug b/gcc-4.9/contrib/compare-debug
new file mode 100755
index 000000000..22870cf8e
--- /dev/null
+++ b/gcc-4.9/contrib/compare-debug
@@ -0,0 +1,194 @@
+#! /bin/sh
+
+# Compare stripped copies of two given object files.
+
+# Copyright (C) 2007, 2008, 2009, 2010, 2012 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
+
+remove_comment ()
+{
+ file=$1
+ opts=
+ for s in `objdump --section-headers "$file" | awk '{ print $2 }'`; do
+ case "$s" in
+ .comment*)
+ opts="$opts --remove-section $s"
+ ;;
+ esac
+ done
+ [ -n "$opts" ] && objcopy $opts $file
+}
+
+if cmp "$1.$suf1" "$2.$suf2"; then
+ status=0
+else
+ status=1
+
+ # Remove any .comment sections.
+ if (objcopy -v) 2>&1 | grep ' --remove-section' > /dev/null \
+ && (objdump --help) 2>&1 | grep ' --\[*section-\]*headers' > /dev/null; then
+ remove_comment "$1.$suf1"
+ remove_comment "$2.$suf2"
+ if cmp "$1.$suf1" "$2.$suf2"; then
+ status=0
+ fi
+ fi
+
+ # 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/gcc-4.9/contrib/compareSumTests3 b/gcc-4.9/contrib/compareSumTests3
new file mode 100755
index 000000000..64f35d74e
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/compare_tests b/gcc-4.9/contrib/compare_tests
new file mode 100755
index 000000000..8ecf8245b
--- /dev/null
+++ b/gcc-4.9/contrib/compare_tests
@@ -0,0 +1,198 @@
+#!/bin/sh
+# This script automatically test the given tool with the tool's test cases,
+# reporting anything of interest.
+
+# Written by Mike Stump <mrs@cygnus.com>
+# Subdir comparison added by Quentin Neill <quentin.neill@amd.com>
+
+usage()
+{
+ if [ -n "$1" ] ; then
+ echo "$0: Error: $1" >&2
+ echo >&2
+ fi
+ cat >&2 <<EOUSAGE
+Usage: $0 [-strict] PREVIOUS CURRENT
+
+Compare the PREVIOUS and CURRENT test case .sum files, reporting anything of interest.
+
+ If PREVIOUS and CURRENT are directories, find and compare any *.sum files.
+
+ Unless -strict is given, these discrepancies are not counted as errors:
+ missing/extra .sum files when comparing directories
+ tests that failed in PREVIOUS but pass in CURRENT
+ tests that were not in PREVIOUS but appear in CURRENT
+ tests in PREVIOUS that are missing in CURRENT
+
+ Exit with the following values:
+ 0 if there is nothing of interest
+ 1 if there are errors when comparing single test case files
+ N for the number of errors found when comparing directories
+EOUSAGE
+ exit 2
+}
+
+export LC_ALL=C
+
+tool=gxx
+
+tmp1=/tmp/$tool-testing.$$a
+tmp2=/tmp/$tool-testing.$$b
+now_s=/tmp/$tool-testing.$$d
+before_s=/tmp/$tool-testing.$$e
+lst1=/tmp/$tool-lst1.$$
+lst2=/tmp/$tool-lst2.$$
+lst3=/tmp/$tool-lst3.$$
+lst4=/tmp/$tool-lst4.$$
+lst5=/tmp/$tool-lst5.$$
+sum1=/tmp/$tool-sum1.$$
+sum2=/tmp/$tool-sum2.$$
+tmps="$tmp1 $tmp2 $now_s $before_s $lst1 $lst2 $lst3 $lst4 $lst5 $sum1 $sum2"
+
+[ "$1" = "-strict" ] && strict=$1 && shift
+[ "$1" = "-?" ] && usage
+[ "$2" = "" ] && usage "Must specify both PREVIOUS and CURRENT"
+
+trap "rm -f $tmps" 0 1 2 3 5 9 13 15
+exit_status=0
+
+if [ -d "$1" -a -d "$2" ] ; then
+ find "$1/" -name '*.sum' >$lst1
+ find "$2/" -name '*.sum' >$lst2
+ echo "# Comparing directories"
+ echo "## Dir1=$1: `cat $lst1 | wc -l` sum files"
+ echo "## Dir2=$2: `cat $lst2 | wc -l` sum files"
+ echo
+ # remove leading directory components to compare
+ sed -e "s|^$1[/]*||" $lst1 | sort >$lst3
+ sed -e "s|^$2[/]*||" $lst2 | sort >$lst4
+ comm -23 $lst3 $lst4 >$lst5
+ if [ -s $lst5 ] ; then
+ echo "# Extra sum files in Dir1=$1"
+ sed -e "s|^|< $1/|" $lst5
+ echo
+ [ -n "$strict" ] && exit_status=`expr $exit_status + 1`
+ fi
+ comm -13 $lst3 $lst4 >$lst5
+ if [ -s $lst5 ] ; then
+ echo "# Extra sum files in Dir2=$2"
+ sed -e "s|^|> $2/|" $lst5
+ echo
+ [ -n "$strict" ] && exit_status=`expr $exit_status + 1`
+ fi
+ comm -12 $lst3 $lst4 | sort -u >$lst5
+ if [ ! -s $lst5 ] ; then
+ echo "# No common sum files"
+ exit_status=`expr $exit_status + 1`
+ exit $exit_status
+ fi
+ cmnsums=`cat $lst5 | wc -l`
+ echo "# Comparing $cmnsums common sum files"
+ ( for fname in `cat $lst5`; do cat $1/$fname; done ) >$sum1
+ ( for fname in `cat $lst5`; do cat $2/$fname; done ) >$sum2
+ echo "## ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2"
+ ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ exit_status=`expr $exit_status + 1`
+ echo "## Differences found: $fname"
+ fi
+ if [ $exit_status -ne 0 ]; then
+ echo "# $exit_status differences in $cmnsums common sum files found"
+ else
+ echo "# No differences found in $cmnsums common sum files"
+ fi
+ exit $exit_status
+elif [ -d "$1" -o -d "$2" ] ; then
+ usage "Must specify either two directories or two files"
+fi
+
+sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp1
+sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp2
+
+before=$tmp1
+now=$tmp2
+
+
+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
+ [ -n "$strict" ] && echo "Strict test fails" && exit_status=1
+ 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
+ [ -n "$strict" ] && echo "Strict test fails" && exit_status=1
+ 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
+ [ -n "$strict" ] && echo "Strict test fails" && exit_status=1
+ 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
+ [ -n "$strict" ] && echo "Strict test fails" && exit_status=1
+ echo
+fi
+
+exit $exit_status
diff --git a/gcc-4.9/contrib/compare_two_ftime_report_sets b/gcc-4.9/contrib/compare_two_ftime_report_sets
new file mode 100755
index 000000000..384dfde1d
--- /dev/null
+++ b/gcc-4.9/contrib/compare_two_ftime_report_sets
@@ -0,0 +1,605 @@
+#!/usr/bin/python
+
+# Script to statistically compare two sets of log files with -ftime-report
+# output embedded within them.
+
+# Contributed by Lawrence Crowl <crowl@google.com>
+#
+# Copyright (C) 2012 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.
+
+
+""" Compare two sets of compile-time performance numbers.
+
+The intent of this script is to compare compile-time performance of two
+different versions of the compiler. Each version of the compiler must be
+run at least three times with the -ftime-report option. Each log file
+represents a data point, or trial. The set of trials for each compiler
+version constitutes a sample. The ouput of the script is a description
+of the statistically significant difference between the two version of
+the compiler.
+
+The parameters to the script are:
+
+ Two file patterns that each match a set of log files. You will probably
+ need to quote the patterns before passing them to the script.
+
+ Each pattern corresponds to a version of the compiler.
+
+ A regular expression that finds interesting lines in the log files.
+ If you want to match the beginning of the line, you will need to add
+ the ^ operator. The filtering uses Python regular expression syntax.
+
+ The default is "TOTAL".
+
+ All of the interesting lines in a single log file are summed to produce
+ a single trial (data point).
+
+ A desired statistical confidence within the range 60% to 99.9%. Due to
+ the implementation, this confidence will be rounded down to one of 60%,
+ 70%, 80%, 90%, 95%, 98%, 99%, 99.5%, 99.8%, and 99.9%.
+
+ The default is 95.
+
+ If the computed confidence is lower than desired, the script will
+ estimate the number of trials needed to meet the desired confidence.
+ This estimate is not very good, as the variance tends to change as
+ you increase the number of trials.
+
+The most common use of the script is total compile-time comparison between
+logfiles stored in different directories.
+
+compare_two_ftime_report_sets "Log1/*perf" "Log2/*perf"
+
+One can also look at parsing time, but expecting a lower confidence.
+
+compare_two_ftime_report_sets "Log1/*perf" "Log2/*perf" "^phase parsing" 75
+
+"""
+
+
+import os
+import sys
+import fnmatch
+import glob
+import re
+import math
+
+
+####################################################################### Utility
+
+
+def divide(dividend, divisor):
+ """ Return the quotient, avoiding division by zero.
+ """
+ if divisor == 0:
+ return sys.float_info.max
+ else:
+ return dividend / divisor
+
+
+################################################################# File and Line
+
+
+# Should you repurpose this script, this code might help.
+#
+#def find_files(topdir, filepat):
+# """ Find a set of file names, under a given directory,
+# matching a Unix shell file pattern.
+# Returns an iterator over the file names.
+# """
+# for path, dirlist, filelist in os.walk(topdir):
+# for name in fnmatch.filter(filelist, filepat):
+# yield os.path.join(path, name)
+
+
+def match_files(fileglob):
+ """ Find a set of file names matching a Unix shell glob pattern.
+ Returns an iterator over the file names.
+ """
+ return glob.iglob(os.path.expanduser(fileglob))
+
+
+def lines_in_file(filename):
+ """ Return an iterator over lines in the named file. """
+ filedesc = open(filename, "r")
+ for line in filedesc:
+ yield line
+ filedesc.close()
+
+
+def lines_containing_pattern(pattern, lines):
+ """ Find lines by a Python regular-expression.
+ Returns an iterator over lines containing the expression.
+ """
+ parser = re.compile(pattern)
+ for line in lines:
+ if parser.search(line):
+ yield line
+
+
+############################################################# Number Formatting
+
+
+def strip_redundant_digits(numrep):
+ if numrep.find(".") == -1:
+ return numrep
+ return numrep.rstrip("0").rstrip(".")
+
+
+def text_number(number):
+ return strip_redundant_digits("%g" % number)
+
+
+def round_significant(digits, number):
+ if number == 0:
+ return 0
+ magnitude = abs(number)
+ significance = math.floor(math.log10(magnitude))
+ least_position = int(significance - digits + 1)
+ return round(number, -least_position)
+
+
+def text_significant(digits, number):
+ return text_number(round_significant(digits, number))
+
+
+def text_percent(number):
+ return text_significant(3, number*100) + "%"
+
+
+################################################################ T-Distribution
+
+
+# This section of code provides functions for using Student's t-distribution.
+
+
+# The functions are implemented using table lookup
+# to facilitate implementation of inverse functions.
+
+
+# The table is comprised of row 0 listing the alpha values,
+# column 0 listing the degree-of-freedom values,
+# and the other entries listing the corresponding t-distribution values.
+
+t_dist_table = [
+[ 0, 0.200, 0.150, 0.100, 0.050, 0.025, 0.010, 0.005, .0025, 0.001, .0005],
+[ 1, 1.376, 1.963, 3.078, 6.314, 12.71, 31.82, 63.66, 127.3, 318.3, 636.6],
+[ 2, 1.061, 1.386, 1.886, 2.920, 4.303, 6.965, 9.925, 14.09, 22.33, 31.60],
+[ 3, 0.978, 1.250, 1.638, 2.353, 3.182, 4.541, 5.841, 7.453, 10.21, 12.92],
+[ 4, 0.941, 1.190, 1.533, 2.132, 2.776, 3.747, 4.604, 5.598, 7.173, 8.610],
+[ 5, 0.920, 1.156, 1.476, 2.015, 2.571, 3.365, 4.032, 4.773, 5.894, 6.869],
+[ 6, 0.906, 1.134, 1.440, 1.943, 2.447, 3.143, 3.707, 4.317, 5.208, 5.959],
+[ 7, 0.896, 1.119, 1.415, 1.895, 2.365, 2.998, 3.499, 4.029, 4.785, 5.408],
+[ 8, 0.889, 1.108, 1.397, 1.860, 2.306, 2.896, 3.355, 3.833, 4.501, 5.041],
+[ 9, 0.883, 1.100, 1.383, 1.833, 2.262, 2.821, 3.250, 3.690, 4.297, 4.781],
+[ 10, 0.879, 1.093, 1.372, 1.812, 2.228, 2.764, 3.169, 3.581, 4.144, 4.587],
+[ 11, 0.876, 1.088, 1.363, 1.796, 2.201, 2.718, 3.106, 3.497, 4.025, 4.437],
+[ 12, 0.873, 1.083, 1.356, 1.782, 2.179, 2.681, 3.055, 3.428, 3.930, 4.318],
+[ 13, 0.870, 1.079, 1.350, 1.771, 2.160, 2.650, 3.012, 3.372, 3.852, 4.221],
+[ 14, 0.868, 1.076, 1.345, 1.761, 2.145, 2.624, 2.977, 3.326, 3.787, 4.140],
+[ 15, 0.866, 1.074, 1.341, 1.753, 2.131, 2.602, 2.947, 3.286, 3.733, 4.073],
+[ 16, 0.865, 1.071, 1.337, 1.746, 2.120, 2.583, 2.921, 3.252, 3.686, 4.015],
+[ 17, 0.863, 1.069, 1.333, 1.740, 2.110, 2.567, 2.898, 3.222, 3.646, 3.965],
+[ 18, 0.862, 1.067, 1.330, 1.734, 2.101, 2.552, 2.878, 3.197, 3.610, 3.922],
+[ 19, 0.861, 1.066, 1.328, 1.729, 2.093, 2.539, 2.861, 3.174, 3.579, 3.883],
+[ 20, 0.860, 1.064, 1.325, 1.725, 2.086, 2.528, 2.845, 3.153, 3.552, 3.850],
+[ 21, 0.859, 1.063, 1.323, 1.721, 2.080, 2.518, 2.831, 3.135, 3.527, 3.819],
+[ 22, 0.858, 1.061, 1.321, 1.717, 2.074, 2.508, 2.819, 3.119, 3.505, 3.792],
+[ 23, 0.858, 1.060, 1.319, 1.714, 2.069, 2.500, 2.807, 3.104, 3.485, 3.768],
+[ 24, 0.857, 1.059, 1.318, 1.711, 2.064, 2.492, 2.797, 3.091, 3.467, 3.745],
+[ 25, 0.856, 1.058, 1.316, 1.708, 2.060, 2.485, 2.787, 3.078, 3.450, 3.725],
+[ 26, 0.856, 1.058, 1.315, 1.706, 2.056, 2.479, 2.779, 3.067, 3.435, 3.707],
+[ 27, 0.855, 1.057, 1.314, 1.703, 2.052, 2.473, 2.771, 3.057, 3.421, 3.689],
+[ 28, 0.855, 1.056, 1.313, 1.701, 2.048, 2.467, 2.763, 3.047, 3.408, 3.674],
+[ 29, 0.854, 1.055, 1.311, 1.699, 2.045, 2.462, 2.756, 3.038, 3.396, 3.660],
+[ 30, 0.854, 1.055, 1.310, 1.697, 2.042, 2.457, 2.750, 3.030, 3.385, 3.646],
+[ 31, 0.853, 1.054, 1.309, 1.696, 2.040, 2.453, 2.744, 3.022, 3.375, 3.633],
+[ 32, 0.853, 1.054, 1.309, 1.694, 2.037, 2.449, 2.738, 3.015, 3.365, 3.622],
+[ 33, 0.853, 1.053, 1.308, 1.692, 2.035, 2.445, 2.733, 3.008, 3.356, 3.611],
+[ 34, 0.852, 1.052, 1.307, 1.691, 2.032, 2.441, 2.728, 3.002, 3.348, 3.601],
+[ 35, 0.852, 1.052, 1.306, 1.690, 2.030, 2.438, 2.724, 2.996, 3.340, 3.591],
+[ 36, 0.852, 1.052, 1.306, 1.688, 2.028, 2.434, 2.719, 2.990, 3.333, 3.582],
+[ 37, 0.851, 1.051, 1.305, 1.687, 2.026, 2.431, 2.715, 2.985, 3.326, 3.574],
+[ 38, 0.851, 1.051, 1.304, 1.686, 2.024, 2.429, 2.712, 2.980, 3.319, 3.566],
+[ 39, 0.851, 1.050, 1.304, 1.685, 2.023, 2.426, 2.708, 2.976, 3.313, 3.558],
+[ 40, 0.851, 1.050, 1.303, 1.684, 2.021, 2.423, 2.704, 2.971, 3.307, 3.551],
+[ 50, 0.849, 1.047, 1.299, 1.676, 2.009, 2.403, 2.678, 2.937, 3.261, 3.496],
+[ 60, 0.848, 1.045, 1.296, 1.671, 2.000, 2.390, 2.660, 2.915, 3.232, 3.460],
+[ 80, 0.846, 1.043, 1.292, 1.664, 1.990, 2.374, 2.639, 2.887, 3.195, 3.416],
+[100, 0.845, 1.042, 1.290, 1.660, 1.984, 2.364, 2.626, 2.871, 3.174, 3.390],
+[150, 0.844, 1.040, 1.287, 1.655, 1.976, 2.351, 2.609, 2.849, 3.145, 3.357] ]
+
+
+# The functions use the following parameter name conventions:
+# alpha - the alpha parameter
+# degree - the degree-of-freedom parameter
+# value - the t-distribution value for some alpha and degree
+# deviations - a confidence interval radius,
+# expressed as a multiple of the standard deviation of the sample
+# ax - the alpha parameter index
+# dx - the degree-of-freedom parameter index
+
+# The interface to this section of code is the last three functions,
+# find_t_dist_value, find_t_dist_alpha, and find_t_dist_degree.
+
+
+def t_dist_alpha_at_index(ax):
+ if ax == 0:
+ return .25 # effectively no confidence
+ else:
+ return t_dist_table[0][ax]
+
+
+def t_dist_degree_at_index(dx):
+ return t_dist_table[dx][0]
+
+
+def t_dist_value_at_index(ax, dx):
+ return t_dist_table[dx][ax]
+
+
+def t_dist_index_of_degree(degree):
+ limit = len(t_dist_table) - 1
+ dx = 0
+ while dx < limit and t_dist_degree_at_index(dx+1) <= degree:
+ dx += 1
+ return dx
+
+
+def t_dist_index_of_alpha(alpha):
+ limit = len(t_dist_table[0]) - 1
+ ax = 0
+ while ax < limit and t_dist_alpha_at_index(ax+1) >= alpha:
+ ax += 1
+ return ax
+
+
+def t_dist_index_of_value(dx, value):
+ limit = len(t_dist_table[dx]) - 1
+ ax = 0
+ while ax < limit and t_dist_value_at_index(ax+1, dx) < value:
+ ax += 1
+ return ax
+
+
+def t_dist_value_within_deviations(dx, ax, deviations):
+ degree = t_dist_degree_at_index(dx)
+ count = degree + 1
+ root = math.sqrt(count)
+ value = t_dist_value_at_index(ax, dx)
+ nominal = value / root
+ comparison = nominal <= deviations
+ return comparison
+
+
+def t_dist_index_of_degree_for_deviations(ax, deviations):
+ limit = len(t_dist_table) - 1
+ dx = 1
+ while dx < limit and not t_dist_value_within_deviations(dx, ax, deviations):
+ dx += 1
+ return dx
+
+
+def find_t_dist_value(alpha, degree):
+ """ Return the t-distribution value.
+ The parameters are alpha and degree of freedom.
+ """
+ dx = t_dist_index_of_degree(degree)
+ ax = t_dist_index_of_alpha(alpha)
+ return t_dist_value_at_index(ax, dx)
+
+
+def find_t_dist_alpha(value, degree):
+ """ Return the alpha.
+ The parameters are the t-distribution value for a given degree of freedom.
+ """
+ dx = t_dist_index_of_degree(degree)
+ ax = t_dist_index_of_value(dx, value)
+ return t_dist_alpha_at_index(ax)
+
+
+def find_t_dist_degree(alpha, deviations):
+ """ Return the degree-of-freedom.
+ The parameters are the desired alpha and the number of standard deviations
+ away from the mean that the degree should handle.
+ """
+ ax = t_dist_index_of_alpha(alpha)
+ dx = t_dist_index_of_degree_for_deviations(ax, deviations)
+ return t_dist_degree_at_index(dx)
+
+
+############################################################## Core Statistical
+
+
+# This section provides the core statistical classes and functions.
+
+
+class Accumulator:
+
+ """ An accumulator for statistical information using arithmetic mean. """
+
+ def __init__(self):
+ self.count = 0
+ self.mean = 0
+ self.sumsqdiff = 0
+
+ def insert(self, value):
+ self.count += 1
+ diff = value - self.mean
+ self.mean += diff / self.count
+ self.sumsqdiff += (self.count - 1) * diff * diff / self.count
+
+
+def fill_accumulator_from_values(values):
+ accumulator = Accumulator()
+ for value in values:
+ accumulator.insert(value)
+ return accumulator
+
+
+def alpha_from_confidence(confidence):
+ scrubbed = min(99.99, max(confidence, 60))
+ return (100.0 - scrubbed) / 200.0
+
+
+def confidence_from_alpha(alpha):
+ return 100 - 200 * alpha
+
+
+class Sample:
+
+ """ A description of a sample using an arithmetic mean. """
+
+ def __init__(self, accumulator, alpha):
+ if accumulator.count < 3:
+ sys.exit("Samples must contain three trials.")
+ self.count = accumulator.count
+ self.mean = accumulator.mean
+ variance = accumulator.sumsqdiff / (self.count - 1)
+ self.deviation = math.sqrt(variance)
+ self.error = self.deviation / math.sqrt(self.count)
+ self.alpha = alpha
+ self.radius = find_t_dist_value(alpha, self.count - 1) * self.error
+
+ def alpha_for_radius(self, radius):
+ return find_t_dist_alpha(divide(radius, self.error), self.count)
+
+ def degree_for_radius(self, radius):
+ return find_t_dist_degree(self.alpha, divide(radius, self.deviation))
+
+ def __str__(self):
+ text = "trial count is " + text_number(self.count)
+ text += ", mean is " + text_number(self.mean)
+ text += " (" + text_number(confidence_from_alpha(self.alpha)) +"%"
+ text += " confidence in " + text_number(self.mean - self.radius)
+ text += " to " + text_number(self.mean + self.radius) + ")"
+ text += ",\nstd.deviation is " + text_number(self.deviation)
+ text += ", std.error is " + text_number(self.error)
+ return text
+
+
+def sample_from_values(values, alpha):
+ accumulator = fill_accumulator_from_values(values)
+ return Sample(accumulator, alpha)
+
+
+class Comparison:
+
+ """ A comparison of two samples using arithmetic means. """
+
+ def __init__(self, first, second, alpha):
+ if first.mean > second.mean:
+ self.upper = first
+ self.lower = second
+ self.larger = "first"
+ else:
+ self.upper = second
+ self.lower = first
+ self.larger = "second"
+ self.a_wanted = alpha
+ radius = self.upper.mean - self.lower.mean
+ rising = self.lower.alpha_for_radius(radius)
+ falling = self.upper.alpha_for_radius(radius)
+ self.a_actual = max(rising, falling)
+ rising = self.lower.degree_for_radius(radius)
+ falling = self.upper.degree_for_radius(radius)
+ self.count = max(rising, falling) + 1
+
+ def __str__(self):
+ message = "The " + self.larger + " sample appears to be "
+ change = divide(self.upper.mean, self.lower.mean) - 1
+ message += text_percent(change) + " larger,\n"
+ confidence = confidence_from_alpha(self.a_actual)
+ if confidence >= 60:
+ message += "with " + text_number(confidence) + "% confidence"
+ message += " of being larger."
+ else:
+ message += "but with no confidence of actually being larger."
+ if self.a_actual > self.a_wanted:
+ confidence = confidence_from_alpha(self.a_wanted)
+ message += "\nTo reach " + text_number(confidence) + "% confidence,"
+ if self.count < 100:
+ message += " you need roughly " + text_number(self.count) + " trials,\n"
+ message += "assuming the standard deviation is stable, which is iffy."
+ else:
+ message += "\nyou need to reduce the larger deviation"
+ message += " or increase the number of trials."
+ return message
+
+
+############################################################ Single Value Files
+
+
+# This section provides functions to compare two raw data files,
+# each containing a whole sample consisting of single number per line.
+
+
+# Should you repurpose this script, this code might help.
+#
+#def values_from_data_file(filename):
+# for line in lines_in_file(filename):
+# yield float(line)
+
+
+# Should you repurpose this script, this code might help.
+#
+#def sample_from_data_file(filename, alpha):
+# confidence = confidence_from_alpha(alpha)
+# text = "\nArithmetic sample for data file\n\"" + filename + "\""
+# text += " with desired confidence " + text_number(confidence) + " is "
+# print text
+# values = values_from_data_file(filename)
+# sample = sample_from_values(values, alpha)
+# print sample
+# return sample
+
+
+# Should you repurpose this script, this code might help.
+#
+#def compare_two_data_files(filename1, filename2, confidence):
+# alpha = alpha_from_confidence(confidence)
+# sample1 = sample_from_data_file(filename1, alpha)
+# sample2 = sample_from_data_file(filename2, alpha)
+# print
+# print Comparison(sample1, sample2, alpha)
+
+
+# Should you repurpose this script, this code might help.
+#
+#def command_two_data_files():
+# argc = len(sys.argv)
+# if argc < 2 or 4 < argc:
+# message = "usage: " + sys.argv[0]
+# message += " file-name file-name [confidence]"
+# print message
+# else:
+# filename1 = sys.argv[1]
+# filename2 = sys.argv[2]
+# if len(sys.argv) >= 4:
+# confidence = int(sys.argv[3])
+# else:
+# confidence = 95
+# compare_two_data_files(filename1, filename2, confidence)
+
+
+############################################### -ftime-report TimeVar Log Files
+
+
+# This section provides functions to compare two sets of -ftime-report log
+# files. Each set is a sample, where each data point is derived from the
+# sum of values in a single log file.
+
+
+label = r"^ *([^:]*[^: ]) *:"
+number = r" *([0-9.]*) *"
+percent = r"\( *[0-9]*\%\)"
+numpct = number + percent
+total_format = label + number + number + number + number + " kB\n"
+total_parser = re.compile(total_format)
+tmvar_format = label + numpct + " usr" + numpct + " sys"
+tmvar_format += numpct + " wall" + number + " kB " + percent + " ggc\n"
+tmvar_parser = re.compile(tmvar_format)
+replace = r"\2\t\3\t\4\t\5\t\1"
+
+
+def split_time_report(lines, pattern):
+ if pattern == "TOTAL":
+ parser = total_parser
+ else:
+ parser = tmvar_parser
+ for line in lines:
+ modified = parser.sub(replace, line)
+ if modified != line:
+ yield re.split("\t", modified)
+
+
+def extract_cpu_time(tvtuples):
+ for tuple in tvtuples:
+ yield float(tuple[0]) + float(tuple[1])
+
+
+def sum_values(values):
+ sum = 0
+ for value in values:
+ sum += value
+ return sum
+
+
+def extract_time_for_timevar_log(filename, pattern):
+ lines = lines_in_file(filename)
+ tmvars = lines_containing_pattern(pattern, lines)
+ tuples = split_time_report(tmvars, pattern)
+ times = extract_cpu_time(tuples)
+ return sum_values(times)
+
+
+def extract_times_for_timevar_logs(filelist, pattern):
+ for filename in filelist:
+ yield extract_time_for_timevar_log(filename, pattern)
+
+
+def sample_from_timevar_logs(fileglob, pattern, alpha):
+ confidence = confidence_from_alpha(alpha)
+ text = "\nArithmetic sample for timevar log files\n\"" + fileglob + "\""
+ text += "\nand selecting lines containing \"" + pattern + "\""
+ text += " with desired confidence " + text_number(confidence) + " is "
+ print text
+ filelist = match_files(fileglob)
+ values = extract_times_for_timevar_logs(filelist, pattern)
+ sample = sample_from_values(values, alpha)
+ print sample
+ return sample
+
+
+def compare_two_timevar_logs(fileglob1, fileglob2, pattern, confidence):
+ alpha = alpha_from_confidence(confidence)
+ sample1 = sample_from_timevar_logs(fileglob1, pattern, alpha)
+ sample2 = sample_from_timevar_logs(fileglob2, pattern, alpha)
+ print
+ print Comparison(sample1, sample2, alpha)
+
+
+def command_two_timevar_logs():
+ argc = len(sys.argv)
+ if argc < 3 or 5 < argc:
+ message = "usage: " + sys.argv[0]
+ message += " file-pattern file-pattern [line-pattern [confidence]]"
+ print message
+ else:
+ filepat1 = sys.argv[1]
+ filepat2 = sys.argv[2]
+ if len(sys.argv) >= 5:
+ confidence = int(sys.argv[4])
+ else:
+ confidence = 95
+ if len(sys.argv) >= 4:
+ linepat = sys.argv[3]
+ else:
+ linepat = "TOTAL"
+ compare_two_timevar_logs(filepat1, filepat2, linepat, confidence)
+
+
+########################################################################## Main
+
+
+# This section is the main code, implementing the command.
+
+
+command_two_timevar_logs()
diff --git a/gcc-4.9/contrib/config-list.mk b/gcc-4.9/contrib/config-list.mk
new file mode 100644
index 000000000..43454871d
--- /dev/null
+++ b/gcc-4.9/contrib/config-list.mk
@@ -0,0 +1,103 @@
+# Run tests covering all config.gcc cases.
+host_options='--with-mpc=/opt/cfarm/mpc' # gcc10
+TEST=all-gcc
+# Make sure you have a recent enough gcc (with ada support) in your path so
+# that --enable-werror-always will work.
+# To use, create a sibling directory to the gcc sources and cd into this.
+# Use -j / -l make arguments and nice to assure a smooth resource-efficient
+# load on the build machine, e.g. for 24 cores:
+# svn co svn://gcc.gnu.org/svn/gcc/branches/foo-branch gcc
+# mkdir multi-mk; cd multi-mk
+# nohup nice make -j25 -l36 -f ../gcc/contrib/config-list.mk > make.out 2>&1 &
+#
+# v850e1-elf is rejected by config.sub
+LIST = aarch64-elf aarch64-linux-gnu \
+ alpha-linux-gnu alpha-freebsd6 alpha-netbsd alpha-openbsd \
+ alpha64-dec-vms alpha-dec-vms am33_2.0-linux \
+ arc-elf32OPT-with-cpu=arc600 arc-elf32OPT-with-cpu=arc700 \
+ arc-linux-uclibcOPT-with-cpu=arc700 arceb-linux-uclibcOPT-with-cpu=arc700 \
+ arm-wrs-vxworks arm-netbsdelf \
+ arm-linux-androideabi arm-uclinux_eabi arm-eabi \
+ arm-symbianelf avr-rtems avr-elf \
+ bfin-elf bfin-uclinux bfin-linux-uclibc bfin-rtems bfin-openbsd \
+ c6x-elf c6x-uclinux cr16-elf cris-elf cris-linux crisv32-elf crisv32-linux \
+ epiphany-elf epiphany-elfOPT-with-stack-offset=16 fido-elf \
+ fr30-elf frv-elf frv-linux h8300-elf h8300-rtems hppa-linux-gnu \
+ hppa-linux-gnuOPT-enable-sjlj-exceptions=yes hppa64-linux-gnu \
+ hppa2.0-hpux10.1 hppa64-hpux11.3 \
+ hppa64-hpux11.0OPT-enable-sjlj-exceptions=yes hppa2.0-hpux11.9 \
+ i686-pc-linux-gnu i686-apple-darwin i686-apple-darwin9 i686-apple-darwin10 \
+ i486-freebsd4 i686-freebsd6 i686-kfreebsd-gnu \
+ i686-netbsdelf9 i686-knetbsd-gnu i686-openbsd i686-openbsd3.0 \
+ i686-elf i686-kopensolaris-gnu i686-symbolics-gnu i686-pc-msdosdjgpp \
+ i686-lynxos i686-nto-qnx \
+ i686-rtems i686-solaris2.10 i686-wrs-vxworks \
+ i686-wrs-vxworksae \
+ i686-cygwinOPT-enable-threads=yes i686-mingw32crt ia64-elf \
+ ia64-freebsd6 ia64-linux ia64-hpux ia64-hp-vms iq2000-elf lm32-elf \
+ lm32-rtems lm32-uclinux m32c-rtems m32c-elf m32r-elf m32rle-elf m32r-rtems \
+ m32r-linux m32rle-linux m68k-elf m68k-netbsdelf \
+ m68k-openbsd m68k-uclinux m68k-linux m68k-rtems \
+ mcore-elf mep-elf microblaze-linux microblaze-elf \
+ mips-netbsd \
+ mips64el-st-linux-gnu mips64octeon-linux mipsisa64r2-linux \
+ mipsisa32r2-linux-gnu mipsisa64r2-sde-elf mipsisa32-elfoabi \
+ mipsisa64-elfoabi mipsisa64r2el-elf mipsisa64sr71k-elf mipsisa64sb1-elf \
+ mipsel-elf mips64-elf mips64vr-elf mips64orion-elf mips-rtems \
+ mips-wrs-vxworks mipstx39-elf mmix-knuth-mmixware mn10300-elf moxie-elf \
+ moxie-uclinux moxie-rtems \
+ msp430-elf \
+ nds32le-elf nds32be-elf \
+ nios2-elf nios2-linux-gnu \
+ pdp11-aout picochip-elfOPT-enable-obsolete \
+ powerpc-darwin8 \
+ powerpc-darwin7 powerpc64-darwin powerpc-freebsd6 powerpc-netbsd \
+ powerpc-eabispe powerpc-eabisimaltivec powerpc-eabisim ppc-elf \
+ powerpc-eabialtivec powerpc-xilinx-eabi powerpc-eabi \
+ powerpc-rtems4.11OPT-enable-threads=yes powerpc-linux_spe \
+ powerpc-linux_paired powerpc64-linux_altivec \
+ powerpc-wrs-vxworks powerpc-wrs-vxworksae powerpc-lynxos powerpcle-elf \
+ powerpcle-eabisim powerpcle-eabi rs6000-ibm-aix4.3 rs6000-ibm-aix5.1.0 \
+ rs6000-ibm-aix5.2.0 rs6000-ibm-aix5.3.0 rs6000-ibm-aix6.0 \
+ rl78-elf rx-elf s390-linux-gnu s390x-linux-gnu s390x-ibm-tpf sh-elf \
+ shle-linux sh-netbsdelf sh-superh-elf sh5el-netbsd sh64-netbsd sh64-linux \
+ sh64-elfOPT-with-newlib sh-rtems sh-wrs-vxworks sparc-elf \
+ sparc-leon-elf sparc-rtems sparc-linux-gnu \
+ sparc-leon3-linux-gnuOPT-enable-target=all sparc-netbsdelf \
+ sparc64-sun-solaris2.10OPT-with-gnu-ldOPT-with-gnu-asOPT-enable-threads=posix \
+ sparc-wrs-vxworks sparc64-elf sparc64-rtems sparc64-linux sparc64-freebsd6 \
+ sparc64-netbsd sparc64-openbsd spu-elf \
+ tilegx-linux-gnu tilegxbe-linux-gnu tilepro-linux-gnu \
+ v850e-elf v850-elf vax-linux-gnu \
+ vax-netbsdelf vax-openbsd x86_64-apple-darwin \
+ x86_64-pc-linux-gnuOPT-with-fpmath=avx \
+ x86_64-elfOPT-with-fpmath=sse x86_64-freebsd6 x86_64-netbsd \
+ x86_64-knetbsd-gnu x86_64-w64-mingw32 \
+ x86_64-mingw32OPT-enable-sjlj-exceptions=yes xstormy16-elf xtensa-elf \
+ xtensa-linux \
+ sparc-sun-solaris2.9OPT-enable-obsolete i686-solaris2.9OPT-enable-obsolete \
+ i686-interix3OPT-enable-obsolete score-elfOPT-enable-obsolete
+
+LOGFILES = $(patsubst %,log/%-make.out,$(LIST))
+all: $(LOGFILES)
+config: $(LIST)
+
+.PHONY: make-log-dir all config
+
+empty=
+
+#Check for the presence of the MAINTAINERS file to make sure we are in a
+#suitable current working directory.
+make-log-dir: ../gcc/MAINTAINERS
+ mkdir log
+
+$(LIST): make-log-dir
+ -mkdir $@
+ (cd $@ && \
+ ../../gcc/configure \
+ --target=$(subst SCRIPTS,`pwd`/../scripts/,$(subst OPT,$(empty) -,$@)) \
+ --enable-werror-always ${host_options} --enable-languages=all,ada,go) \
+ > log/$@-config.out 2>&1
+
+$(LOGFILES) : log/%-make.out : %
+ -$(MAKE) -C $< $(TEST) > $@ 2>&1 && rm -rf $<
diff --git a/gcc-4.9/contrib/dg-cmp-results.sh b/gcc-4.9/contrib/dg-cmp-results.sh
new file mode 100755
index 000000000..d29176954
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/dg-extract-results.sh b/gcc-4.9/contrib/dg-extract-results.sh
new file mode 100755
index 000000000..702928138
--- /dev/null
+++ b/gcc-4.9/contrib/dg-extract-results.sh
@@ -0,0 +1,431 @@
+#! /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, 2012 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 .*\\.exp \\.\\.\\./ {
+ 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; kpasscnt=0; kfailcnt=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 unknown successes/ { if (insummary == 1) kpasscnt += \$5; next; }
+/^# of known failures/ { if (insummary == 1) kfailcnt += \$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 (kpasscnt != 0) printf ("# of unknown successes\t\t%d\n", kpasscnt)
+ if (kfailcnt != 0) printf ("# of known failures\t\t%d\n", kfailcnt)
+ 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; kfailcnt=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 unknown successes/ { kpasscnt += \$5 }
+/^# of known failures/ { kfailcnt += \$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 (kpasscnt != 0) printf ("# of unknown successes\t\t%d\n", kpasscnt)
+ if (kfailcnt != 0) printf ("# of known failures\t\t%d\n", kfailcnt)
+ 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/gcc-4.9/contrib/dglib.pm b/gcc-4.9/contrib/dglib.pm
new file mode 100644
index 000000000..c86d4f014
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/download_ecj b/gcc-4.9/contrib/download_ecj
new file mode 100755
index 000000000..5043f9407
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/download_prerequisites b/gcc-4.9/contrib/download_prerequisites
new file mode 100755
index 000000000..cc27143ea
--- /dev/null
+++ b/gcc-4.9/contrib/download_prerequisites
@@ -0,0 +1,56 @@
+#! /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/.
+
+# If you want to build GCC with the Graphite loop optimizations,
+# set GRAPHITE_LOOP_OPT=yes to download optional prerequisties
+# ISL Library and CLooG.
+GRAPHITE_LOOP_OPT=yes
+
+# Necessary to build GCC.
+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
+
+# Necessary to build GCC with the Graphite loop optimizations.
+if [ "$GRAPHITE_LOOP_OPT" = "yes" ] ; then
+ ISL=isl-0.12.2
+ CLOOG=cloog-0.18.1
+
+ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$ISL.tar.bz2 || exit 1
+ tar xjf $ISL.tar.bz2 || exit 1
+ ln -sf $ISL isl || exit 1
+
+ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$CLOOG.tar.gz || exit 1
+ tar xzf $CLOOG.tar.gz || exit 1
+ ln -sf $CLOOG cloog || exit 1
+fi
diff --git a/gcc-4.9/contrib/filter_gcc_for_doxygen b/gcc-4.9/contrib/filter_gcc_for_doxygen
new file mode 100755
index 000000000..3787eebbf
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/filter_knr2ansi.pl b/gcc-4.9/contrib/filter_knr2ansi.pl
new file mode 100755
index 000000000..6b43e4077
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/filter_params.pl b/gcc-4.9/contrib/filter_params.pl
new file mode 100755
index 000000000..22dae6cc5
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/gcc.doxy b/gcc-4.9/contrib/gcc.doxy
new file mode 100644
index 000000000..7a284e754
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/gcc_build b/gcc-4.9/contrib/gcc_build
new file mode 100755
index 000000000..6713066d7
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/gcc_update b/gcc-4.9/contrib/gcc_update
new file mode 100755
index 000000000..46ef788e0
--- /dev/null
+++ b/gcc-4.9/contrib/gcc_update
@@ -0,0 +1,408 @@
+#! /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,
+# 2011 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/aarch64/aarch64-tune.md: gcc/config/aarch64/aarch64-cores.def gcc/config/aarch64/gentune.sh
+gcc/config/arm/arm-tune.md: gcc/config/arm/arm-cores.def gcc/config/arm/gentune.sh
+gcc/config/arm/arm-tables.opt: gcc/config/arm/arm-arches.def gcc/config/arm/arm-cores.def gcc/config/arm/arm-fpus.def gcc/config/arm/genopt.sh
+gcc/config/avr/avr-tables.opt: gcc/config/avr/avr-mcus.def gcc/config/avr/genopt.sh
+gcc/config/avr/t-multilib: gcc/config/avr/avr-mcus.def gcc/config/avr/genmultilib.awk
+gcc/config/c6x/c6x-tables.opt: gcc/config/c6x/c6x-isas.def gcc/config/c6x/genopt.sh
+gcc/config/c6x/c6x-sched.md: gcc/config/c6x/c6x-sched.md.in gcc/config/c6x/gensched.sh
+gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult.sh
+gcc/config/m68k/m68k-tables.opt: gcc/config/m68k/m68k-devices.def gcc/config/m68k/m68k-isas.def gcc/config/m68k/m68k-microarchs.def gcc/config/m68k/genopt.sh
+gcc/config/mips/mips-tables.opt: gcc/config/mips/mips-cpus.def gcc/config/mips/genopt.sh
+gcc/config/rs6000/rs6000-tables.opt: gcc/config/rs6000/rs6000-cpus.def gcc/config/rs6000/genopt.sh
+gcc/config/tilegx/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
+gcc/config/tilepro/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
+# 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
+libquadmath/configure: libquadmath/configure.ac libquadmath/aclocal.m4
+libquadmath/aclocal.m4: libquadmath/configure.ac libquadmath/acinclude.m4
+libquadmath/Makefile.in: libquadmath/Makefile.am libquadmath/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/testsuite/Makefile.am libgomp/aclocal.m4
+libgomp/configure: libgomp/configure.ac libgomp/aclocal.m4
+libgomp/config.h.in: libgomp/configure.ac libgomp/aclocal.m4
+libitm/aclocal.m4: libitm/configure.ac libitm/acinclude.m4
+libitm/Makefile.in: libitm/Makefile.am libitm/aclocal.m4
+libitm/testsuite/Makefile.in: libitm/testsuite/Makefile.am libitm/aclocal.m4
+libitm/configure: libitm/configure.ac libitm/aclocal.m4
+libitm/config.h.in: libitm/configure.ac libitm/aclocal.m4
+libatomic/aclocal.m4: libatomic/configure.ac libatomic/acinclude.m4
+libatomic/Makefile.in: libatomic/Makefile.am libatomic/aclocal.m4
+libatomic/testsuite/Makefile.in: libatomic/testsuite/Makefile.am libatomic/aclocal.m4
+libatomic/configure: libatomic/configure.ac libatomic/aclocal.m4
+libatomic/auto-config.h.in: libatomic/configure.ac libatomic/aclocal.m4
+libsanitizer/aclocal.m4: libsanitizer/configure.ac libsanitizer/acinclude.m4
+libsanitizer/Makefile.in: libsanitizer/Makefile.am libsanitizer/aclocal.m4
+libsanitizer/configure: libsanitizer/configure.ac libsanitizer/aclocal.m4
+libsanitizer/asan/Makefile.in: libsanitizer/asan/Makefile.am libsanitizer/aclocal.m4
+libsanitizer/interception/Makefile.in: libsanitizer/interception/Makefile.am libsanitizer/aclocal.m4
+libsanitizer/sanitizer_common/Makefile.in: libsanitizer/sanitizer_common/Makefile.am libsanitizer/aclocal.m4
+libvtv/aclocal.m4: libvtv/configure.ac libvtv/acinclude.m4
+libvtv/Makefile.in: libvtv/Makefile.am libvtv/aclocal.m4
+libvtv/configure: libvtv/configure.ac libvtv/aclocal.m4
+libcilkrts/aclocal.m4: libcilkrts/configure.ac
+libcilkrts/Makefile.in: libcilkrts/Makefile.am
+libcilkrts/configure: libcilkrts/configure.ac
+# 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}'`
+ convert_revision=`$GCC_HG log --debug -r$parents | \
+ sed -ne "/^extra:.*convert_revision=svn:/ {
+ s%^[^/]*/%%
+ p
+ }"`
+ revision=`echo $convert_revision | sed -e 's/.*@//'`
+ branch=`echo $convert_revision | sed -e 's%branches/%%' -e 's/@.*//'`
+ ;;
+
+ 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=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
+ branch=`$GCC_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/gcc-4.9/contrib/gennews b/gcc-4.9/contrib/gennews
new file mode 100755
index 000000000..962bef2f3
--- /dev/null
+++ b/gcc-4.9/contrib/gennews
@@ -0,0 +1,68 @@
+#! /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,
+# 2012 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.8/index.html gcc-4.8/changes.html
+ gcc-4.7/index.html gcc-4.7/changes.html
+ 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/gcc-4.9/contrib/gthr_supp_vxw_5x.c b/gcc-4.9/contrib/gthr_supp_vxw_5x.c
new file mode 100644
index 000000000..6ce288f3e
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/index-prop b/gcc-4.9/contrib/index-prop
new file mode 100755
index 000000000..1ea648989
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/make-obstacks-texi.pl b/gcc-4.9/contrib/make-obstacks-texi.pl
new file mode 100644
index 000000000..63a0bac0b
--- /dev/null
+++ b/gcc-4.9/contrib/make-obstacks-texi.pl
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+# (C) 2013 Free Software Foundation
+# Contributed by Tobias Burnus
+#
+# 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
+
+use strict;
+use File::Basename;
+
+
+if ($#ARGV != 0 or $ARGV[0] eq "") {
+ my $name = basename($0);
+
+ print "\nUSAGE: `$name` memory.texi\n\n";
+ print "Reads GLIBC's manual/memory.texi and extracts the obstacks section\n"
+ ."Redirect the output to update GCC's libiberty/obstacks.texi\n\n";
+ exit 1;
+}
+
+open (IN, "<$ARGV[0]") || die "Cannot open '$ARGV[0]': $!";
+my $data = join ("", <IN>);
+close (IN);
+
+$data =~ s/.*\@node Obstacks\n/\@node Obstacks\n/s;
+$data =~ s/\n\@node [^\n]+\n\@subsection.*/\n/s;
+
+# Add refs to GLIBC
+$data =~ s/(\@p?xref{[^}]*)}/$1, , , libc, The GNU C Library Reference Manual}/gs;
+
+
+# And undo the refs which are in this file
+my @nodes = grep /^\@node /, (split /\n/, $data);
+
+foreach my $node (@nodes) {
+ $node =~ s/\@node //;
+ $node =~ s/,.*//;
+ $node =~ s/ / *\n?/g;
+ chomp ($node);
+
+ $data =~ s/(\@p?xref{$node), , , libc, The GNU C Library Reference Manual}/$1}/gsi;
+}
+
+print $data;
diff --git a/gcc-4.9/contrib/make_sunver.pl b/gcc-4.9/contrib/make_sunver.pl
new file mode 100644
index 000000000..8a90b1fea
--- /dev/null
+++ b/gcc-4.9/contrib/make_sunver.pl
@@ -0,0 +1,333 @@
+#!/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 FileHandle;
+use IPC::Open2;
+
+# Enforce C locale.
+$ENV{'LC_ALL'} = "C";
+$ENV{'LANG'} = "C";
+
+# 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;
+
+# 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>) {
+ # Lines of the form '};'
+ if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) {
+ $glob = 'glob';
+ if ($in_extern) {
+ $in_extern--;
+ print "$1##$2\n";
+ } 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;
+ }
+
+ # 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 '.*', '?' with '.'.
+ # Keep $ptn so we can still print the original form.
+ ($pattern = $ptn) =~ s/\*/\.\*/g;
+ $pattern =~ 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/gcc-4.9/contrib/mklog b/gcc-4.9/contrib/mklog
new file mode 100755
index 000000000..fb489b03a
--- /dev/null
+++ b/gcc-4.9/contrib/mklog
@@ -0,0 +1,270 @@
+#!/usr/bin/perl
+# Copyright (C) 2012-2014 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 parses a .diff file generated with 'diff -up' or 'diff -cp'
+# and adds a skeleton ChangeLog file to the file. It does not try to be
+# very smart when parsing function names, but it produces a reasonable
+# approximation.
+#
+# Author: Diego Novillo <dnovillo@google.com> and
+# Cary Coutant <ccoutant@google.com>
+
+# Change these settings to reflect your profile.
+$username = $ENV{'USER'};
+$name = `finger $username | grep -o 'Name: .*'`;
+@n = split(/: /, $name);
+$name = @n[1]; chop($name);
+$addr = $username . "\@my.domain.org";
+$date = `date +%Y-%m-%d`; chop ($date);
+
+$gcc_root = $0;
+$gcc_root =~ s/[^\\\/]+$/../;
+chdir $gcc_root;
+
+
+#-----------------------------------------------------------------------------
+# Program starts here. You should not need to edit anything below this
+# line.
+#-----------------------------------------------------------------------------
+if ($#ARGV != 0) {
+ $prog = `basename $0`; chop ($prog);
+ print "usage: $prog file.diff\n\n";
+ print "Adds a ChangeLog template to the start of file.diff\n";
+ print "It assumes that file.diff has been created with -up or -cp.\n";
+ exit 1;
+}
+
+$diff = $ARGV[0];
+$dir = `dirname $diff`; chop ($dir);
+$basename = `basename $diff`; chop ($basename);
+$hdrline = "$date $name <$addr>";
+
+sub get_clname ($) {
+ return ('ChangeLog', $_[0]) if ($_[0] !~ /[\/\\]/);
+
+ my $dirname = $_[0];
+ while ($dirname) {
+ my $clname = "$dirname/ChangeLog";
+ if (-f $clname) {
+ my $relname = substr ($_[0], length ($dirname) + 1);
+ return ($clname, $relname);
+ } else {
+ $dirname =~ s/[\/\\]?[^\/\\]*$//;
+ }
+ }
+
+ return ('Unknown ChangeLog', $_[0]);
+}
+
+sub remove_suffixes ($) {
+ my $filename = $_[0];
+ $filename =~ s/^[ab]\///;
+ $filename =~ s/\.jj$//;
+ return $filename;
+}
+
+# Check if line is a top-level declaration.
+# TODO: ignore preprocessor directives except maybe #define ?
+sub is_top_level {
+ my ($function, $is_context_diff) = (@_);
+ if ($is_context_diff) {
+ $function =~ s/^..//;
+ } else {
+ $function =~ s/^.//;
+ }
+ return $function && $function !~ /^[\s{}]/;
+}
+
+# For every file in the .diff print all the function names in ChangeLog
+# format.
+%cl_entries = ();
+$change_msg = undef;
+$look_for_funs = 0;
+$clname = get_clname('');
+open (DFILE, $diff) or die "Could not open file $diff for reading";
+chomp (my @diff_lines = <DFILE>);
+close (DFILE);
+$line_idx = 0;
+foreach (@diff_lines) {
+ # Stop processing functions if we found a new file.
+ # Remember both left and right names because one may be /dev/null.
+ # Don't be fooled by line markers in case of context diff.
+ if (!/\*\*\*$/ && /^[+*][+*][+*] +(\S+)/) {
+ $left = remove_suffixes ($1);
+ $look_for_funs = 0;
+ }
+ if (!/---$/ && /^--- +(\S+)?/) {
+ $right = remove_suffixes ($1);
+ $look_for_funs = 0;
+ }
+
+ # Check if the body of diff started.
+ # We should now have both left and right name,
+ # so we can decide filename.
+
+ if ($left && (/^\*{15}/ || /^@@ /)) {
+ # If we have not seen any function names in the previous file (ie,
+ # $change_msg is empty), we just write out a ':' before starting the next
+ # file.
+ if ($clname) {
+ $cl_entries{$clname} .= $change_msg ? "$change_msg" : ":\n";
+ }
+
+ if ($left eq $right) {
+ $filename = $left;
+ } elsif($left eq '/dev/null') {
+ $filename = $right;
+ } elsif($right eq '/dev/null') {
+ $filename = $left;
+ } else {
+ print STDERR "Error: failed to parse diff for $left and $right\n";
+ exit 1;
+ }
+ $left = $right = undef;
+ ($clname, $relname) = get_clname ($filename);
+ $cl_entries{$clname} .= "\t* $relname";
+ $change_msg = '';
+ $look_for_funs = $filename =~ '\.(c|cpp|C|cc|h|inc|def)$';
+ }
+
+ # Context diffs have extra whitespace after first char;
+ # remove it to make matching easier.
+ if ($is_context_diff) {
+ s/^([-+! ]) /\1/;
+ }
+
+ # Remember the last line in a diff block that might start
+ # a new function.
+ if (/^[-+! ]([a-zA-Z0-9_].*)/) {
+ $save_fn = $1;
+ }
+
+ # Check if file is newly added.
+ # Two patterns: for context and unified diff.
+ if (/^\*\*\* 0 \*\*\*\*/
+ || /^@@ -0,0 \+1.* @@/) {
+ $change_msg = $filename =~ /testsuite.*(?<!\.exp)$/ ? ": New test.\n" : ": New file.\n";
+ $look_for_funs = 0;
+ }
+
+ # Check if file was removed.
+ # Two patterns: for context and unified diff.
+ if (/^--- 0 ----/
+ || /^@@ -1.* \+0,0 @@/) {
+ $change_msg = ": Remove.\n";
+ $look_for_funs = 0;
+ }
+
+ # Mark if we met doubtfully changed function.
+ $doubtfunc = 0;
+ if ($diff_lines[$line_idx] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/) {
+ $doubtfunc = 1;
+ $is_context_diff = 0;
+ }
+ elsif ($diff_lines[$line_idx] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/) {
+ $doubtfunc = 1;
+ $is_context_diff = 1;
+ }
+
+ # If we find a new function, print it in brackets. Special case if
+ # this is the first function in a file.
+ #
+ # Note that we don't try too hard to find good matches. This should
+ # return a superset of the actual set of functions in the .diff file.
+ #
+ # The first pattern works with context diff files (diff -c). The
+ # second pattern works with unified diff files (diff -u).
+ #
+ # The third pattern looks for the starts of functions or classes
+ # within a diff block both for context and unified diff files.
+
+ if ($look_for_funs
+ && (/^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/
+ || /^@@ .* @@ ([a-zA-Z0-9_].*)/
+ || /^[-+! ](\{)/))
+ {
+ $_ = $1;
+ my $fn;
+ if (/^\{/) {
+ # Beginning of a new function.
+ $_ = $save_fn;
+ } else {
+ $save_fn = "";
+ }
+ if (/;$/) {
+ # No usable function name found.
+ } elsif (/^((class|struct|union|enum) [a-zA-Z0-9_]+)/) {
+ # Discard stuff after the class/struct/etc. tag.
+ $fn = $1;
+ } elsif (/([a-zA-Z0-9_][^(]*)\(/) {
+ # Discard template and function parameters.
+ $fn = $1;
+ 1 while ($fn =~ s/<[^<>]*>//);
+ $fn =~ s/[ \t]*$//;
+ }
+ # Check is function really modified
+ $no_real_change = 0;
+ if ($doubtfunc) {
+ $idx = $line_idx;
+ # Skip line info in context diffs.
+ while ($is_context_diff && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) {
+ ++$idx;
+ }
+ # Check all lines till the first change
+ # for the presence of really changed function
+ do {
+ ++$idx;
+ $no_real_change = is_top_level ($diff_lines[$idx], $is_context_diff);
+ } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/))
+ }
+ if ($fn && !$seen_names{$fn} && !$no_real_change) {
+ # If this is the first function in the file, we display it next
+ # to the filename, so we need an extra space before the opening
+ # brace.
+ if (!$change_msg) {
+ $change_msg .= " ";
+ } else {
+ $change_msg .= "\t";
+ }
+
+ $change_msg .= "($fn):\n";
+ $seen_names{$fn} = 1;
+ }
+ }
+ $line_idx++;
+}
+
+# If we have not seen any function names (ie, $change_msg is empty), we just
+# write out a ':'. This happens when there is only one file with no
+# functions.
+$cl_entries{$clname} .= $change_msg ? "$change_msg\n" : ":\n";
+
+$temp = `mktemp /tmp/$basename.XXXXXX` || exit 1; chop ($temp);
+open (CLFILE, ">$temp") or die "Could not open file $temp for writing";
+
+foreach my $clname (keys %cl_entries) {
+ print CLFILE "$clname:\n\n$hdrline\n\n$cl_entries{$clname}\n";
+}
+
+# Concatenate the ChangeLog template and the original .diff file.
+system ("cat $diff >>$temp && mv $temp $diff") == 0
+ or die "Could not add the ChangeLog entry to $diff";
+
+exit 0;
diff --git a/gcc-4.9/contrib/paranoia.cc b/gcc-4.9/contrib/paranoia.cc
new file mode 100644
index 000000000..8e8500e23
--- /dev/null
+++ b/gcc-4.9/contrib/paranoia.cc
@@ -0,0 +1,2713 @@
+/* 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 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/gcc-4.9/contrib/patch_tester.sh b/gcc-4.9/contrib/patch_tester.sh
new file mode 100755
index 000000000..74b8e9e8c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/prepare_patch.sh b/gcc-4.9/contrib/prepare_patch.sh
new file mode 100755
index 000000000..8385f315c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/ChangeLog b/gcc-4.9/contrib/reghunt/ChangeLog
new file mode 100644
index 000000000..af27b8f97
--- /dev/null
+++ b/gcc-4.9/contrib/reghunt/ChangeLog
@@ -0,0 +1,96 @@
+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/gcc-4.9/contrib/reghunt/bin/gcc-build-full b/gcc-4.9/contrib/reghunt/bin/gcc-build-full
new file mode 100755
index 000000000..21e6d684f
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-build-simple b/gcc-4.9/contrib/reghunt/bin/gcc-build-simple
new file mode 100755
index 000000000..f2d8ea39c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-cleanup b/gcc-4.9/contrib/reghunt/bin/gcc-cleanup
new file mode 100755
index 000000000..3ec1b8f05
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-checkfail b/gcc-4.9/contrib/reghunt/bin/gcc-svn-checkfail
new file mode 100755
index 000000000..3877a062b
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-ids b/gcc-4.9/contrib/reghunt/bin/gcc-svn-ids
new file mode 100755
index 000000000..2953e56da
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-patchlist b/gcc-4.9/contrib/reghunt/bin/gcc-svn-patchlist
new file mode 100755
index 000000000..02b2046a8
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-recordfail b/gcc-4.9/contrib/reghunt/bin/gcc-svn-recordfail
new file mode 100755
index 000000000..cf5cde754
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-report b/gcc-4.9/contrib/reghunt/bin/gcc-svn-report
new file mode 100755
index 000000000..a0de534b3
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-update b/gcc-4.9/contrib/reghunt/bin/gcc-svn-update
new file mode 100755
index 000000000..0f6aac866
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-svn-update-fix b/gcc-4.9/contrib/reghunt/bin/gcc-svn-update-fix
new file mode 100755
index 000000000..977505502
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-accepts-invalid b/gcc-4.9/contrib/reghunt/bin/gcc-test-accepts-invalid
new file mode 100755
index 000000000..564c0bbd7
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-bogus-warning b/gcc-4.9/contrib/reghunt/bin/gcc-test-bogus-warning
new file mode 100755
index 000000000..1bd0095ba
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-compiler-hangs b/gcc-4.9/contrib/reghunt/bin/gcc-test-compiler-hangs
new file mode 100755
index 000000000..043bc2699
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-invalid-code b/gcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-invalid-code
new file mode 100755
index 000000000..6e449a84a
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-valid-code b/gcc-4.9/contrib/reghunt/bin/gcc-test-ice-on-valid-code
new file mode 100755
index 000000000..ecc5fe04a
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-missing-warning b/gcc-4.9/contrib/reghunt/bin/gcc-test-missing-warning
new file mode 100755
index 000000000..0fc9b2dc8
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-rejects-valid b/gcc-4.9/contrib/reghunt/bin/gcc-test-rejects-valid
new file mode 100755
index 000000000..5672a0dfe
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-segfault-on-valid-code b/gcc-4.9/contrib/reghunt/bin/gcc-test-segfault-on-valid-code
new file mode 100755
index 000000000..0a1b1b722
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/gcc-test-wrong-code b/gcc-4.9/contrib/reghunt/bin/gcc-test-wrong-code
new file mode 100755
index 000000000..2c0398bea
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/reg-hunt b/gcc-4.9/contrib/reghunt/bin/reg-hunt
new file mode 100755
index 000000000..aa0ea61ee
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/reg-newmid b/gcc-4.9/contrib/reghunt/bin/reg-newmid
new file mode 100755
index 000000000..2a6b57362
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/bin/reg-test b/gcc-4.9/contrib/reghunt/bin/reg-test
new file mode 100755
index 000000000..622a65461
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/date_based/README b/gcc-4.9/contrib/reghunt/date_based/README
new file mode 100644
index 000000000..c674ffc6c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/date_based/reg_periodic b/gcc-4.9/contrib/reghunt/date_based/reg_periodic
new file mode 100755
index 000000000..a77567d4d
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/date_based/reg_search b/gcc-4.9/contrib/reghunt/date_based/reg_search
new file mode 100755
index 000000000..46602054d
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/date_based/reg_test_template b/gcc-4.9/contrib/reghunt/date_based/reg_test_template
new file mode 100755
index 000000000..ab5bbc106
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/28970.c b/gcc-4.9/contrib/reghunt/examples/28970.c
new file mode 100644
index 000000000..4b6839b16
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/28970.config b/gcc-4.9/contrib/reghunt/examples/28970.config
new file mode 100644
index 000000000..f64b0e687
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/28970.list b/gcc-4.9/contrib/reghunt/examples/28970.list
new file mode 100644
index 000000000..87b68f4d4
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/28970.log b/gcc-4.9/contrib/reghunt/examples/28970.log
new file mode 100644
index 000000000..f93989e7f
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29106.cc b/gcc-4.9/contrib/reghunt/examples/29106.cc
new file mode 100644
index 000000000..ba028ba13
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29106.config b/gcc-4.9/contrib/reghunt/examples/29106.config
new file mode 100644
index 000000000..a8723d41c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29106.list b/gcc-4.9/contrib/reghunt/examples/29106.list
new file mode 100644
index 000000000..15dcb3009
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29106.log b/gcc-4.9/contrib/reghunt/examples/29106.log
new file mode 100644
index 000000000..fd4b6d863
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29106.test b/gcc-4.9/contrib/reghunt/examples/29106.test
new file mode 100755
index 000000000..28f89a8e5
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29478.c b/gcc-4.9/contrib/reghunt/examples/29478.c
new file mode 100644
index 000000000..0490f4d9d
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29478.config b/gcc-4.9/contrib/reghunt/examples/29478.config
new file mode 100644
index 000000000..1398f6012
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29478.list b/gcc-4.9/contrib/reghunt/examples/29478.list
new file mode 100644
index 000000000..a578a84c6
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29478.log b/gcc-4.9/contrib/reghunt/examples/29478.log
new file mode 100644
index 000000000..1ce0be1f3
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906a.cc b/gcc-4.9/contrib/reghunt/examples/29906a.cc
new file mode 100644
index 000000000..ef644eee5
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906a.config b/gcc-4.9/contrib/reghunt/examples/29906a.config
new file mode 100644
index 000000000..e643f96b6
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906a.list b/gcc-4.9/contrib/reghunt/examples/29906a.list
new file mode 100644
index 000000000..46b6e7d2c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906a.log b/gcc-4.9/contrib/reghunt/examples/29906a.log
new file mode 100644
index 000000000..4a9f28237
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906b.cc b/gcc-4.9/contrib/reghunt/examples/29906b.cc
new file mode 100644
index 000000000..ef644eee5
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906b.config b/gcc-4.9/contrib/reghunt/examples/29906b.config
new file mode 100644
index 000000000..ad6bd0b0e
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906b.list b/gcc-4.9/contrib/reghunt/examples/29906b.list
new file mode 100644
index 000000000..60fd2adcb
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/29906b.log b/gcc-4.9/contrib/reghunt/examples/29906b.log
new file mode 100644
index 000000000..2285d9c31
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/30643.c b/gcc-4.9/contrib/reghunt/examples/30643.c
new file mode 100644
index 000000000..be607491e
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/30643.config b/gcc-4.9/contrib/reghunt/examples/30643.config
new file mode 100644
index 000000000..a7f830d6c
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/30643.list b/gcc-4.9/contrib/reghunt/examples/30643.list
new file mode 100644
index 000000000..73f8ebff8
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/30643.log b/gcc-4.9/contrib/reghunt/examples/30643.log
new file mode 100644
index 000000000..574a001a9
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/30643.test b/gcc-4.9/contrib/reghunt/examples/30643.test
new file mode 100755
index 000000000..ba9b0e0ff
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/README b/gcc-4.9/contrib/reghunt/examples/README
new file mode 100644
index 000000000..ebf1bcb9b
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/common.config b/gcc-4.9/contrib/reghunt/examples/common.config
new file mode 100644
index 000000000..7e48e1dc6
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/gcc-svn-env b/gcc-4.9/contrib/reghunt/examples/gcc-svn-env
new file mode 100644
index 000000000..8691eaf7d
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/reg-watch b/gcc-4.9/contrib/reghunt/examples/reg-watch
new file mode 100755
index 000000000..218b97c06
--- /dev/null
+++ b/gcc-4.9/contrib/reghunt/examples/reg-watch
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+awk -f reg-watch.awk "$@"
diff --git a/gcc-4.9/contrib/reghunt/examples/reg-watch.awk b/gcc-4.9/contrib/reghunt/examples/reg-watch.awk
new file mode 100755
index 000000000..2334215ae
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/reghunt/examples/testall b/gcc-4.9/contrib/reghunt/examples/testall
new file mode 100755
index 000000000..61d99e0b6
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/ChangeLog b/gcc-4.9/contrib/regression/ChangeLog
new file mode 100644
index 000000000..a4194276a
--- /dev/null
+++ b/gcc-4.9/contrib/regression/ChangeLog
@@ -0,0 +1,144 @@
+2012-08-26 Hans-Peter Nilsson <hp@axis.com>
+
+ * btest-gcc.sh (TESTLOGS): Make gfortran.sum optional.
+
+ * btest-gcc.sh (TESTLOGS): Add libmudflap.sum, if it exists.
+
+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/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Default.png b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Default.png
new file mode 100644
index 000000000..a6dfd4655
--- /dev/null
+++ b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Default.png
Binary files differ
diff --git a/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
new file mode 100644
index 000000000..662b5169d
--- /dev/null
+++ b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Icon.png
Binary files differ
diff --git a/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/Info.plist
new file mode 100644
index 000000000..a011e69a3
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings
new file mode 100644
index 000000000..7692ed523
--- /dev/null
+++ b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/de.lproj/InfoPlist.strings
Binary files differ
diff --git a/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings
new file mode 100644
index 000000000..45628a3ef
--- /dev/null
+++ b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/en.lproj/InfoPlist.strings
Binary files differ
diff --git a/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
new file mode 100644
index 000000000..f3110f3e8
--- /dev/null
+++ b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/ja.lproj/InfoPlist.strings
Binary files differ
diff --git a/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/widget.html b/gcc-4.9/contrib/regression/GCC_Regression_Tester.wdgt/widget.html
new file mode 100644
index 000000000..ec24fb54a
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/README b/gcc-4.9/contrib/regression/README
new file mode 100644
index 000000000..9e94e5c39
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/btest-gcc.sh b/gcc-4.9/contrib/regression/btest-gcc.sh
new file mode 100755
index 000000000..d4966dc6c
--- /dev/null
+++ b/gcc-4.9/contrib/regression/btest-gcc.sh
@@ -0,0 +1,241 @@
+#!/bin/sh
+
+# Test GCC.
+# Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006, 2009, 2012
+# 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/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 gcc/testsuite/gfortran/gfortran.sum ] ; then
+ TESTLOGS="$TESTLOGS gcc/testsuite/gfortran/gfortran.sum"
+fi
+
+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
+
+if [ -f $BUILD/$H_TARGET/libmudflap/testsuite/libmudflap.sum ] ; then
+ TESTLOGS="$TESTLOGS $H_TARGET/libmudflap/testsuite/libmudflap.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/gcc-4.9/contrib/regression/mkindex.pl b/gcc-4.9/contrib/regression/mkindex.pl
new file mode 100755
index 000000000..46e11069f
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/objs-gcc.sh b/gcc-4.9/contrib/regression/objs-gcc.sh
new file mode 100755
index 000000000..60b0497fe
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/regression/site.exp b/gcc-4.9/contrib/regression/site.exp
new file mode 100644
index 000000000..0892afa3a
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/repro_fail b/gcc-4.9/contrib/repro_fail
new file mode 100755
index 000000000..9ea79f2bc
--- /dev/null
+++ b/gcc-4.9/contrib/repro_fail
@@ -0,0 +1,96 @@
+#!/bin/bash -eu
+#
+# Script to reproduce a test failure from a dejagnu .log file.
+#
+# Contributed by Diego Novillo <dnovillo@google.com>
+#
+# Copyright (C) 2011, 2012, 2013 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 will search a line starting with 'spawn' that includes the
+# pattern you are looking for (typically a source file name).
+#
+# Once it finds that pattern, it re-executes the whole command
+# in the spawn line. If the pattern matches more than one spawn
+# command, it asks which one you want.
+
+if [ $# -lt 2 ] ; then
+ echo "usage: $0 [--debug|--debug-tui] pattern file.log [additional-args]"
+ echo
+ echo "Finds the 'spawn' line matching PATTERN in FILE.LOG and executes"
+ echo "the command with any arguments in ADDITIONAL-ARGS."
+ echo
+ echo "If --debug is used, the compiler is invoked with -wrapper gdb,--args"
+ echo "If --debug-tui is used, the compiler is invoked with -wrapper "\
+ "gdb,--tui,--args"
+ exit 1
+fi
+
+if [ "$1" == "--debug" ] ; then
+ debug_args="-wrapper gdb,--args"
+ shift
+elif [ "$1" == "--debug-tui" ] ; then
+ debug_args="-wrapper gdb,--tui,--args"
+ shift
+else
+ debug_args=""
+fi
+pattern="$1"
+logf="$2"
+shift 2
+
+# Find the commands in LOGF that reference PATTERN.
+lines=$(grep -E "^spawn .*$pattern" $logf \
+ | sed -e 's/^spawn -ignore SIGHUP //' \
+ | sed -e 's/^spawn //')
+if [ -z "$lines" ] ; then
+ echo "Could not find a spawn command for pattern $pattern"
+ exit 1
+fi
+
+# Collect all the command lines into the COMMANDS array.
+old_IFS="$IFS"
+IFS=" "
+num_lines=0
+for line in $lines ; do
+ num_lines=$[$num_lines + 1]
+ echo "[$num_lines] $line"
+ commands[$num_lines]=$line
+done
+
+# If we found more than one line for PATTERN, ask which one we should run.
+cmds_to_run='0'
+if [ $num_lines -gt 1 ] ; then
+ echo
+ echo
+ echo -n "Enter the list of commands to run or '0' to run them all: "
+ read cmds_to_run
+fi
+if [ "$cmds_to_run" = "0" ] ; then
+ cmds_to_run=$(seq 1 $num_lines)
+fi
+IFS="$old_IFS"
+
+# Finally, execute all the commands we were told to execute.
+for cmd_num in $cmds_to_run ; do
+ cmd=${commands[$cmd_num]}
+ set -x +e
+ $cmd $debug_args "$@"
+ set +x -e
+done
diff --git a/gcc-4.9/contrib/test_installed b/gcc-4.9/contrib/test_installed
new file mode 100755
index 000000000..e518cbcf7
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/test_recheck b/gcc-4.9/contrib/test_recheck
new file mode 100755
index 000000000..193cd3df2
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/test_summary b/gcc-4.9/contrib/test_summary
new file mode 100755
index 000000000..5fc49f52b
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/testsuite-management/validate_failures.py b/gcc-4.9/contrib/testsuite-management/validate_failures.py
new file mode 100755
index 000000000..277905046
--- /dev/null
+++ b/gcc-4.9/contrib/testsuite-management/validate_failures.py
@@ -0,0 +1,541 @@
+#!/usr/bin/python
+
+# Script to compare testsuite failures against a list of known-to-fail
+# tests.
+#
+# NOTE: This script is used in installations that are running Python 2.4.
+# Please stick to syntax features available in 2.4 and earlier
+# versions.
+
+# Contributed by Diego Novillo <dnovillo@google.com>
+#
+# Copyright (C) 2011-2013 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 provides a coarser XFAILing mechanism that requires no
+detailed DejaGNU markings. This is useful in a variety of scenarios:
+
+- Development branches with many known failures waiting to be fixed.
+- Release branches with known failures that are not considered
+ important for the particular release criteria used in that branch.
+
+The script must be executed from the toplevel build directory. When
+executed it will:
+
+1- Determine the target built: TARGET
+2- Determine the source directory: SRCDIR
+3- Look for a failure manifest file in
+ <SRCDIR>/<MANIFEST_SUBDIR>/<MANIFEST_NAME>.xfail
+4- Collect all the <tool>.sum files from the build tree.
+5- Produce a report stating:
+ a- Failures expected in the manifest but not present in the build.
+ b- Failures in the build not expected in the manifest.
+6- If all the build failures are expected in the manifest, it exits
+ with exit code 0. Otherwise, it exits with error code 1.
+
+Manifest files contain expected DejaGNU results that are otherwise
+treated as failures.
+They may also contain additional text:
+
+# This is a comment. - self explanatory
+@include file - the file is a path relative to the includer
+@remove result text - result text is removed from the expected set
+"""
+
+import datetime
+import optparse
+import os
+import re
+import sys
+
+# Handled test results.
+_VALID_TEST_RESULTS = [ 'FAIL', 'UNRESOLVED', 'XPASS', 'ERROR' ]
+_VALID_TEST_RESULTS_REX = re.compile("%s" % "|".join(_VALID_TEST_RESULTS))
+
+# Subdirectory of srcdir in which to find the manifest file.
+_MANIFEST_SUBDIR = 'contrib/testsuite-management'
+
+# Pattern for naming manifest files.
+# The first argument should be the toplevel GCC(/GNU tool) source directory.
+# The second argument is the manifest subdir.
+# The third argument is the manifest target, which defaults to the target
+# triplet used during the build.
+_MANIFEST_PATH_PATTERN = '%s/%s/%s.xfail'
+
+# The options passed to the program.
+_OPTIONS = None
+
+def Error(msg):
+ print >>sys.stderr, 'error: %s' % msg
+ sys.exit(1)
+
+
+class TestResult(object):
+ """Describes a single DejaGNU test result as emitted in .sum files.
+
+ We are only interested in representing unsuccessful tests. So, only
+ a subset of all the tests are loaded.
+
+ The summary line used to build the test result should have this format:
+
+ attrlist | XPASS: gcc.dg/unroll_1.c (test for excess errors)
+ ^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
+ optional state name description
+ attributes
+
+ Attributes:
+ attrlist: A comma separated list of attributes.
+ Valid values:
+ flaky Indicates that this test may not always fail. These
+ tests are reported, but their presence does not affect
+ the results.
+
+ expire=YYYYMMDD After this date, this test will produce an error
+ whether it is in the manifest or not.
+
+ state: One of UNRESOLVED, XPASS or FAIL.
+ name: File name for the test.
+ description: String describing the test (flags used, dejagnu message, etc)
+ ordinal: Monotonically increasing integer.
+ It is used to keep results for one .exp file sorted
+ by the order the tests were run.
+ """
+
+ def __init__(self, summary_line, ordinal=-1):
+ try:
+ (self.attrs, summary_line) = SplitAttributesFromSummaryLine(summary_line)
+ try:
+ (self.state,
+ self.name,
+ self.description) = re.match(r'([A-Z]+):\s*(\S+)\s*(.*)',
+ summary_line).groups()
+ except:
+ print 'Failed to parse summary line: "%s"' % summary_line
+ raise
+ self.ordinal = ordinal
+ except ValueError:
+ Error('Cannot parse summary line "%s"' % summary_line)
+
+ if self.state not in _VALID_TEST_RESULTS:
+ Error('Invalid test result %s in "%s" (parsed as "%s")' % (
+ self.state, summary_line, self))
+
+ def __lt__(self, other):
+ return (self.name < other.name or
+ (self.name == other.name and self.ordinal < other.ordinal))
+
+ def __hash__(self):
+ return hash(self.state) ^ hash(self.name) ^ hash(self.description)
+
+ def __eq__(self, other):
+ return (self.state == other.state and
+ self.name == other.name and
+ self.description == other.description)
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ def __str__(self):
+ attrs = ''
+ if self.attrs:
+ attrs = '%s | ' % self.attrs
+ return '%s%s: %s %s' % (attrs, self.state, self.name, self.description)
+
+ def ExpirationDate(self):
+ # Return a datetime.date object with the expiration date for this
+ # test result. Return None, if no expiration has been set.
+ if re.search(r'expire=', self.attrs):
+ expiration = re.search(r'expire=(\d\d\d\d)(\d\d)(\d\d)', self.attrs)
+ if not expiration:
+ Error('Invalid expire= format in "%s". Must be of the form '
+ '"expire=YYYYMMDD"' % self)
+ return datetime.date(int(expiration.group(1)),
+ int(expiration.group(2)),
+ int(expiration.group(3)))
+ return None
+
+ def HasExpired(self):
+ # Return True if the expiration date of this result has passed.
+ expiration_date = self.ExpirationDate()
+ if expiration_date:
+ now = datetime.date.today()
+ return now > expiration_date
+
+
+def GetMakefileValue(makefile_name, value_name):
+ if os.path.exists(makefile_name):
+ makefile = open(makefile_name)
+ for line in makefile:
+ if line.startswith(value_name):
+ (_, value) = line.split('=', 1)
+ value = value.strip()
+ makefile.close()
+ return value
+ makefile.close()
+ return None
+
+
+def ValidBuildDirectory(builddir):
+ if (not os.path.exists(builddir) or
+ not os.path.exists('%s/Makefile' % builddir)):
+ return False
+ return True
+
+
+def IsComment(line):
+ """Return True if line is a comment."""
+ return line.startswith('#')
+
+
+def SplitAttributesFromSummaryLine(line):
+ """Splits off attributes from a summary line, if present."""
+ if '|' in line and not _VALID_TEST_RESULTS_REX.match(line):
+ (attrs, line) = line.split('|', 1)
+ attrs = attrs.strip()
+ else:
+ attrs = ''
+ line = line.strip()
+ return (attrs, line)
+
+
+def IsInterestingResult(line):
+ """Return True if line is one of the summary lines we care about."""
+ (_, line) = SplitAttributesFromSummaryLine(line)
+ return bool(_VALID_TEST_RESULTS_REX.match(line))
+
+
+def IsInclude(line):
+ """Return True if line is an include of another file."""
+ return line.startswith("@include ")
+
+
+def GetIncludeFile(line, includer):
+ """Extract the name of the include file from line."""
+ includer_dir = os.path.dirname(includer)
+ include_file = line[len("@include "):]
+ return os.path.join(includer_dir, include_file.strip())
+
+
+def IsNegativeResult(line):
+ """Return True if line should be removed from the expected results."""
+ return line.startswith("@remove ")
+
+
+def GetNegativeResult(line):
+ """Extract the name of the negative result from line."""
+ line = line[len("@remove "):]
+ return line.strip()
+
+
+def ParseManifestWorker(result_set, manifest_path):
+ """Read manifest_path, adding the contents to result_set."""
+ if _OPTIONS.verbosity >= 1:
+ print 'Parsing manifest file %s.' % manifest_path
+ manifest_file = open(manifest_path)
+ for line in manifest_file:
+ line = line.strip()
+ if line == "":
+ pass
+ elif IsComment(line):
+ pass
+ elif IsNegativeResult(line):
+ result_set.remove(TestResult(GetNegativeResult(line)))
+ elif IsInclude(line):
+ ParseManifestWorker(result_set, GetIncludeFile(line, manifest_path))
+ elif IsInterestingResult(line):
+ result_set.add(TestResult(line))
+ else:
+ Error('Unrecognized line in manifest file: %s' % line)
+ manifest_file.close()
+
+
+def ParseManifest(manifest_path):
+ """Create a set of TestResult instances from the given manifest file."""
+ result_set = set()
+ ParseManifestWorker(result_set, manifest_path)
+ return result_set
+
+
+def ParseSummary(sum_fname):
+ """Create a set of TestResult instances from the given summary file."""
+ result_set = set()
+ # ordinal is used when sorting the results so that tests within each
+ # .exp file are kept sorted.
+ ordinal=0
+ sum_file = open(sum_fname)
+ for line in sum_file:
+ if IsInterestingResult(line):
+ result = TestResult(line, ordinal)
+ ordinal += 1
+ if result.HasExpired():
+ # Tests that have expired are not added to the set of expected
+ # results. If they are still present in the set of actual results,
+ # they will cause an error to be reported.
+ print 'WARNING: Expected failure "%s" has expired.' % line.strip()
+ continue
+ result_set.add(result)
+ sum_file.close()
+ return result_set
+
+
+def GetManifest(manifest_path):
+ """Build a set of expected failures from the manifest file.
+
+ Each entry in the manifest file should have the format understood
+ by the TestResult constructor.
+
+ If no manifest file exists for this target, it returns an empty set.
+ """
+ if os.path.exists(manifest_path):
+ return ParseManifest(manifest_path)
+ else:
+ return set()
+
+
+def CollectSumFiles(builddir):
+ sum_files = []
+ for root, dirs, files in os.walk(builddir):
+ for ignored in ('.svn', '.git'):
+ if ignored in dirs:
+ dirs.remove(ignored)
+ for fname in files:
+ if fname.endswith('.sum'):
+ sum_files.append(os.path.join(root, fname))
+ return sum_files
+
+
+def GetResults(sum_files):
+ """Collect all the test results from the given .sum files."""
+ build_results = set()
+ for sum_fname in sum_files:
+ print '\t%s' % sum_fname
+ build_results |= ParseSummary(sum_fname)
+ return build_results
+
+
+def CompareResults(manifest, actual):
+ """Compare sets of results and return two lists:
+ - List of results present in ACTUAL but missing from MANIFEST.
+ - List of results present in MANIFEST but missing from ACTUAL.
+ """
+ # Collect all the actual results not present in the manifest.
+ # Results in this set will be reported as errors.
+ actual_vs_manifest = set()
+ for actual_result in actual:
+ if actual_result not in manifest:
+ actual_vs_manifest.add(actual_result)
+
+ # Collect all the tests in the manifest that were not found
+ # in the actual results.
+ # Results in this set will be reported as warnings (since
+ # they are expected failures that are not failing anymore).
+ manifest_vs_actual = set()
+ for expected_result in manifest:
+ # Ignore tests marked flaky.
+ if 'flaky' in expected_result.attrs:
+ continue
+ if expected_result not in actual:
+ manifest_vs_actual.add(expected_result)
+
+ return actual_vs_manifest, manifest_vs_actual
+
+
+def GetManifestPath(srcdir, target, user_provided_must_exist):
+ """Return the full path to the manifest file."""
+ manifest_path = _OPTIONS.manifest
+ if manifest_path:
+ if user_provided_must_exist and not os.path.exists(manifest_path):
+ Error('Manifest does not exist: %s' % manifest_path)
+ return manifest_path
+ else:
+ if not srcdir:
+ Error('Could not determine the location of GCC\'s source tree. '
+ 'The Makefile does not contain a definition for "srcdir".')
+ if not target:
+ Error('Could not determine the target triplet for this build. '
+ 'The Makefile does not contain a definition for "target_alias".')
+ return _MANIFEST_PATH_PATTERN % (srcdir, _MANIFEST_SUBDIR, target)
+
+
+def GetBuildData():
+ if not ValidBuildDirectory(_OPTIONS.build_dir):
+ # If we have been given a set of results to use, we may
+ # not be inside a valid GCC build directory. In that case,
+ # the user must provide both a manifest file and a set
+ # of results to check against it.
+ if not _OPTIONS.results or not _OPTIONS.manifest:
+ Error('%s is not a valid GCC top level build directory. '
+ 'You must use --manifest and --results to do the validation.' %
+ _OPTIONS.build_dir)
+ else:
+ return None, None
+ srcdir = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'srcdir =')
+ target = GetMakefileValue('%s/Makefile' % _OPTIONS.build_dir, 'target_alias=')
+ print 'Source directory: %s' % srcdir
+ print 'Build target: %s' % target
+ return srcdir, target
+
+
+def PrintSummary(msg, summary):
+ print '\n\n%s' % msg
+ for result in sorted(summary):
+ print result
+
+
+def GetSumFiles(results, build_dir):
+ if not results:
+ print 'Getting actual results from build directory %s' % build_dir
+ sum_files = CollectSumFiles(build_dir)
+ else:
+ print 'Getting actual results from user-provided results'
+ sum_files = results.split()
+ return sum_files
+
+
+def PerformComparison(expected, actual, ignore_missing_failures):
+ actual_vs_expected, expected_vs_actual = CompareResults(expected, actual)
+
+ tests_ok = True
+ if len(actual_vs_expected) > 0:
+ PrintSummary('Unexpected results in this build (new failures)',
+ actual_vs_expected)
+ tests_ok = False
+
+ if not ignore_missing_failures and len(expected_vs_actual) > 0:
+ PrintSummary('Expected results not present in this build (fixed tests)'
+ '\n\nNOTE: This is not a failure. It just means that these '
+ 'tests were expected\nto fail, but either they worked in '
+ 'this configuration or they were not\npresent at all.\n',
+ expected_vs_actual)
+
+ if tests_ok:
+ print '\nSUCCESS: No unexpected failures.'
+
+ return tests_ok
+
+
+def CheckExpectedResults():
+ srcdir, target = GetBuildData()
+ manifest_path = GetManifestPath(srcdir, target, True)
+ print 'Manifest: %s' % manifest_path
+ manifest = GetManifest(manifest_path)
+ sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
+ actual = GetResults(sum_files)
+
+ if _OPTIONS.verbosity >= 1:
+ PrintSummary('Tests expected to fail', manifest)
+ PrintSummary('\nActual test results', actual)
+
+ return PerformComparison(manifest, actual, _OPTIONS.ignore_missing_failures)
+
+
+def ProduceManifest():
+ (srcdir, target) = GetBuildData()
+ manifest_path = GetManifestPath(srcdir, target, False)
+ print 'Manifest: %s' % manifest_path
+ if os.path.exists(manifest_path) and not _OPTIONS.force:
+ Error('Manifest file %s already exists.\nUse --force to overwrite.' %
+ manifest_path)
+
+ sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
+ actual = GetResults(sum_files)
+ manifest_file = open(manifest_path, 'w')
+ for result in sorted(actual):
+ print result
+ manifest_file.write('%s\n' % result)
+ manifest_file.close()
+
+ return True
+
+
+def CompareBuilds():
+ (srcdir, target) = GetBuildData()
+
+ sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.build_dir)
+ actual = GetResults(sum_files)
+
+ clean_sum_files = GetSumFiles(_OPTIONS.results, _OPTIONS.clean_build)
+ clean = GetResults(clean_sum_files)
+
+ return PerformComparison(clean, actual, _OPTIONS.ignore_missing_failures)
+
+
+def Main(argv):
+ parser = optparse.OptionParser(usage=__doc__)
+
+ # Keep the following list sorted by option name.
+ parser.add_option('--build_dir', action='store', type='string',
+ dest='build_dir', default='.',
+ help='Build directory to check (default = .)')
+ parser.add_option('--clean_build', action='store', type='string',
+ dest='clean_build', default=None,
+ help='Compare test results from this build against '
+ 'those of another (clean) build. Use this option '
+ 'when comparing the test results of your patch versus '
+ 'the test results of a clean build without your patch. '
+ 'You must provide the path to the top directory of your '
+ 'clean build.')
+ parser.add_option('--force', action='store_true', dest='force',
+ default=False, help='When used with --produce_manifest, '
+ 'it will overwrite an existing manifest file '
+ '(default = False)')
+ parser.add_option('--ignore_missing_failures', action='store_true',
+ dest='ignore_missing_failures', default=False,
+ help='When a failure is expected in the manifest but '
+ 'it is not found in the actual results, the script '
+ 'produces a note alerting to this fact. This means '
+ 'that the expected failure has been fixed, or '
+ 'it did not run, or it may simply be flaky '
+ '(default = False)')
+ parser.add_option('--manifest', action='store', type='string',
+ dest='manifest', default=None,
+ help='Name of the manifest file to use (default = '
+ 'taken from '
+ 'contrib/testsuite-managment/<target_alias>.xfail)')
+ parser.add_option('--produce_manifest', action='store_true',
+ dest='produce_manifest', default=False,
+ help='Produce the manifest for the current '
+ 'build (default = False)')
+ parser.add_option('--results', action='store', type='string',
+ dest='results', default=None, help='Space-separated list '
+ 'of .sum files with the testing results to check. The '
+ 'only content needed from these files are the lines '
+ 'starting with FAIL, XPASS or UNRESOLVED (default = '
+ '.sum files collected from the build directory).')
+ parser.add_option('--verbosity', action='store', dest='verbosity',
+ type='int', default=0, help='Verbosity level (default = 0)')
+ global _OPTIONS
+ (_OPTIONS, _) = parser.parse_args(argv[1:])
+
+ if _OPTIONS.produce_manifest:
+ retval = ProduceManifest()
+ elif _OPTIONS.clean_build:
+ retval = CompareBuilds()
+ else:
+ retval = CheckExpectedResults()
+
+ if retval:
+ return 0
+ else:
+ return 1
+
+
+if __name__ == '__main__':
+ retval = Main(sys.argv)
+ sys.exit(retval)
diff --git a/gcc-4.9/contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail b/gcc-4.9/contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
new file mode 100644
index 000000000..fdb826855
--- /dev/null
+++ b/gcc-4.9/contrib/testsuite-management/x86_64-unknown-linux-gnu.xfail
@@ -0,0 +1,109 @@
+FAIL: g++.dg/guality/pr55665.C -O2 line 23 p == 40
+FAIL: g++.dg/guality/pr55665.C -O3 -fomit-frame-pointer line 23 p == 40
+FAIL: g++.dg/guality/pr55665.C -O3 -g line 23 p == 40
+XPASS: gcc.dg/guality/example.c -O0 execution test
+XPASS: gcc.dg/guality/example.c -O2 execution test
+XPASS: gcc.dg/guality/example.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
+XPASS: gcc.dg/guality/guality.c -O0 execution test
+XPASS: gcc.dg/guality/guality.c -O1 execution test
+XPASS: gcc.dg/guality/guality.c -O2 execution test
+XPASS: gcc.dg/guality/guality.c -O3 -fomit-frame-pointer execution test
+XPASS: gcc.dg/guality/guality.c -O3 -g execution test
+XPASS: gcc.dg/guality/guality.c -Os execution test
+XPASS: gcc.dg/guality/guality.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
+XPASS: gcc.dg/guality/guality.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
+XPASS: gcc.dg/guality/inline-params.c -O2 execution test
+XPASS: gcc.dg/guality/inline-params.c -O3 -fomit-frame-pointer execution test
+XPASS: gcc.dg/guality/inline-params.c -O3 -g execution test
+XPASS: gcc.dg/guality/inline-params.c -Os execution test
+XPASS: gcc.dg/guality/inline-params.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
+XPASS: gcc.dg/guality/pr41353-1.c -O0 line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O1 line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O2 line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O3 -fomit-frame-pointer line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O3 -g line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -Os line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41353-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 28 j == 28 + 37
+XPASS: gcc.dg/guality/pr41447-1.c -O0 execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O1 execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O2 execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O3 -fomit-frame-pointer execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O3 -g execution test
+XPASS: gcc.dg/guality/pr41447-1.c -Os execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
+XPASS: gcc.dg/guality/pr41447-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O0 execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O1 execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O2 execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O3 -fomit-frame-pointer execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O3 -g execution test
+XPASS: gcc.dg/guality/pr41616-1.c -Os execution test
+XPASS: gcc.dg/guality/pr41616-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test
+FAIL: gcc.dg/guality/pr43051-1.c -O3 -fomit-frame-pointer -funroll-loops line 39 c == &a[0]
+FAIL: gcc.dg/guality/pr43051-1.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions line 39 c == &a[0]
+FAIL: gcc.dg/guality/pr48437.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 14 i == 0
+FAIL: gcc.dg/guality/pr48437.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 14 i == 0
+FAIL: gcc.dg/guality/pr54200.c -Os line 20 z == 3
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 23 y == 117
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 23 z == 8
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-2.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-2.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 23 y == 117
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 23 z == 8
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 23 y == 117
+FAIL: gcc.dg/guality/pr54519-3.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 23 z == 8
+FAIL: gcc.dg/guality/pr54519-4.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-4.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-5.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-5.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 17 y == 25
+FAIL: gcc.dg/guality/pr54693-2.c -Os line 21 x == 10 - i
+FAIL: gcc.dg/guality/pr54693-2.c -Os line 21 y == 20 - 2 * i
+FAIL: gcc.dg/guality/vla-1.c -O0 line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O0 line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O1 line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O1 line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O2 line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O2 line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O3 -fomit-frame-pointer line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O3 -fomit-frame-pointer line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O3 -g line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O3 -g line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -Os line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -Os line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 17 sizeof (a) == 6
+FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 24 sizeof (a) == 17 * sizeof (short)
+FAIL: gcc.dg/guality/vla-2.c -O0 line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O0 line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O1 line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O1 line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O3 -fomit-frame-pointer line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O3 -fomit-frame-pointer line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O3 -g line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O3 -g line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -Os line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -Os line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 -flto -fno-use-linker-plugin -flto-partition=none line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 16 sizeof (a) == 5 * sizeof (int)
+FAIL: gcc.dg/guality/vla-2.c -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects line 25 sizeof (a) == 6 * sizeof (int)
+FAIL: gcc.dg/tree-ssa/slsr-39.c scan-tree-dump-times slsr "MEM" 4
+FAIL: libmudflap.c++/pass41-frag.cxx ( -O) execution test
+FAIL: libmudflap.c++/pass41-frag.cxx (-O2) execution test
+FAIL: libmudflap.c++/pass41-frag.cxx (-O3) execution test
+FAIL: libmudflap.c++/pass55-frag.cxx (-O3) execution test
+FAIL: sourcelocation output - source compiled test
+FAIL: sourcelocation -findirect-dispatch output - source compiled test
+FAIL: sourcelocation -O3 output - source compiled test
diff --git a/gcc-4.9/contrib/texi2pod.pl b/gcc-4.9/contrib/texi2pod.pl
new file mode 100755
index 000000000..5a4bbacdf
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/uninclude b/gcc-4.9/contrib/uninclude
new file mode 100755
index 000000000..8ba28e5cf
--- /dev/null
+++ b/gcc-4.9/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/gcc-4.9/contrib/update-copyright.py b/gcc-4.9/contrib/update-copyright.py
new file mode 100644
index 000000000..42d0bfbf2
--- /dev/null
+++ b/gcc-4.9/contrib/update-copyright.py
@@ -0,0 +1,765 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Free Software Foundation, Inc.
+#
+# This 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.
+
+# This script adjusts the copyright notices at the top of source files
+# so that they have the form:
+#
+# Copyright XXXX-YYYY Free Software Foundation, Inc.
+#
+# It doesn't change code that is known to be maintained elsewhere or
+# that carries a non-FSF copyright.
+#
+# The script also doesn't change testsuite files, except those in
+# libstdc++-v3. This is because libstdc++-v3 has a conformance testsuite,
+# while most tests in other directories are just things that failed at some
+# point in the past.
+#
+# Pass --this-year to the script if you want it to add the current year
+# to all applicable notices. Pass --quilt if you are using quilt and
+# want files to be added to the quilt before being changed.
+#
+# By default the script will update all directories for which the
+# output has been vetted. You can instead pass the names of individual
+# directories, including those that haven't been approved. So:
+#
+# update-copyright.pl --this-year
+#
+# is the command that would be used at the beginning of a year to update
+# all copyright notices (and possibly at other times to check whether
+# new files have been added with old years). On the other hand:
+#
+# update-copyright.pl --this-year libjava
+#
+# would run the script on just libjava/.
+#
+# Note that things like --version output strings must be updated before
+# this script is run. There's already a separate procedure for that.
+
+import os
+import re
+import sys
+import time
+import subprocess
+
+class Errors:
+ def __init__ (self):
+ self.num_errors = 0
+
+ def report (self, filename, string):
+ if filename:
+ string = filename + ': ' + string
+ sys.stderr.write (string + '\n')
+ self.num_errors += 1
+
+ def ok (self):
+ return self.num_errors == 0
+
+class GenericFilter:
+ def __init__ (self):
+ self.skip_files = set()
+ self.skip_dirs = set()
+ self.skip_extensions = set()
+ self.fossilised_files = set()
+ self.own_files = set()
+
+ self.skip_files |= set ([
+ # Skip licence files.
+ 'COPYING',
+ 'COPYING.LIB',
+ 'COPYING3',
+ 'COPYING3.LIB',
+ 'LICENSE',
+ 'fdl.texi',
+ 'gpl_v3.texi',
+ 'fdl-1.3.xml',
+ 'gpl-3.0.xml',
+
+ # Skip auto- and libtool-related files
+ 'aclocal.m4',
+ 'compile',
+ 'config.guess',
+ 'config.sub',
+ 'depcomp',
+ 'install-sh',
+ 'libtool.m4',
+ 'ltmain.sh',
+ 'ltoptions.m4',
+ 'ltsugar.m4',
+ 'ltversion.m4',
+ 'lt~obsolete.m4',
+ 'missing',
+ 'mkdep',
+ 'mkinstalldirs',
+ 'move-if-change',
+ 'shlibpath.m4',
+ 'symlink-tree',
+ 'ylwrap',
+
+ # Skip FSF mission statement, etc.
+ 'gnu.texi',
+ 'funding.texi',
+ 'appendix_free.xml',
+
+ # Skip imported texinfo files.
+ 'texinfo.tex',
+ ])
+
+
+ def get_line_filter (self, dir, filename):
+ if filename.startswith ('ChangeLog'):
+ # Ignore references to copyright in changelog entries.
+ return re.compile ('\t')
+
+ return None
+
+ def skip_file (self, dir, filename):
+ if filename in self.skip_files:
+ return True
+
+ (base, extension) = os.path.splitext (os.path.join (dir, filename))
+ if extension in self.skip_extensions:
+ return True
+
+ if extension == '.in':
+ # Skip .in files produced by automake.
+ if os.path.exists (base + '.am'):
+ return True
+
+ # Skip files produced by autogen
+ if (os.path.exists (base + '.def')
+ and os.path.exists (base + '.tpl')):
+ return True
+
+ # Skip configure files produced by autoconf
+ if filename == 'configure':
+ if os.path.exists (base + '.ac'):
+ return True
+ if os.path.exists (base + '.in'):
+ return True
+
+ return False
+
+ def skip_dir (self, dir, subdir):
+ return subdir in self.skip_dirs
+
+ def is_fossilised_file (self, dir, filename):
+ if filename in self.fossilised_files:
+ return True
+ # Only touch current current ChangeLogs.
+ if filename != 'ChangeLog' and filename.find ('ChangeLog') >= 0:
+ return True
+ return False
+
+ def by_package_author (self, dir, filename):
+ return filename in self.own_files
+
+class Copyright:
+ def __init__ (self, errors):
+ self.errors = errors
+
+ # Characters in a range of years. Include '.' for typos.
+ ranges = '[0-9](?:[-0-9.,\s]|\s+and\s+)*[0-9]'
+
+ # Non-whitespace characters in a copyright holder's name.
+ name = '[\w.,-]'
+
+ # Matches one year.
+ self.year_re = re.compile ('[0-9]+')
+
+ # Matches part of a year or copyright holder.
+ self.continuation_re = re.compile (ranges + '|' + name)
+
+ # Matches a full copyright notice:
+ self.copyright_re = re.compile (
+ # 1: 'Copyright (C)', etc.
+ '([Cc]opyright'
+ '|[Cc]opyright\s+\([Cc]\)'
+ '|[Cc]opyright\s+%s'
+ '|[Cc]opyright\s+&copy;'
+ '|[Cc]opyright\s+@copyright{}'
+ '|@set\s+copyright[\w-]+)'
+
+ # 2: the years. Include the whitespace in the year, so that
+ # we can remove any excess.
+ '(\s*(?:' + ranges + ',?'
+ '|@value\{[^{}]*\})\s*)'
+
+ # 3: 'by ', if used
+ '(by\s+)?'
+
+ # 4: the copyright holder. Don't allow multiple consecutive
+ # spaces, so that right-margin gloss doesn't get caught
+ # (e.g. gnat_ugn.texi).
+ '(' + name + '(?:\s?' + name + ')*)?')
+
+ # A regexp for notices that might have slipped by. Just matching
+ # 'copyright' is too noisy, and 'copyright.*[0-9]' falls foul of
+ # HTML header markers, so check for 'copyright' and two digits.
+ self.other_copyright_re = re.compile ('copyright.*[0-9][0-9]',
+ re.IGNORECASE)
+ self.comment_re = re.compile('#+|[*]+|;+|%+|//+|@c |dnl ')
+ self.holders = { '@copying': '@copying' }
+ self.holder_prefixes = set()
+
+ # True to 'quilt add' files before changing them.
+ self.use_quilt = False
+
+ # If set, force all notices to include this year.
+ self.max_year = None
+
+ # Goes after the year(s). Could be ', '.
+ self.separator = ' '
+
+ def add_package_author (self, holder, canon_form = None):
+ if not canon_form:
+ canon_form = holder
+ self.holders[holder] = canon_form
+ index = holder.find (' ')
+ while index >= 0:
+ self.holder_prefixes.add (holder[:index])
+ index = holder.find (' ', index + 1)
+
+ def add_external_author (self, holder):
+ self.holders[holder] = None
+
+ class BadYear():
+ def __init__ (self, year):
+ self.year = year
+
+ def __str__ (self):
+ return 'unrecognised year: ' + self.year
+
+ def parse_year (self, string):
+ year = int (string)
+ if len (string) == 2:
+ if year > 70:
+ return year + 1900
+ elif len (string) == 4:
+ return year
+ raise self.BadYear (string)
+
+ def year_range (self, years):
+ year_list = [self.parse_year (year)
+ for year in self.year_re.findall (years)]
+ assert len (year_list) > 0
+ return (min (year_list), max (year_list))
+
+ def set_use_quilt (self, use_quilt):
+ self.use_quilt = use_quilt
+
+ def include_year (self, year):
+ assert not self.max_year
+ self.max_year = year
+
+ def canonicalise_years (self, dir, filename, filter, years):
+ # Leave texinfo variables alone.
+ if years.startswith ('@value'):
+ return years
+
+ (min_year, max_year) = self.year_range (years)
+
+ # Update the upper bound, if enabled.
+ if self.max_year and not filter.is_fossilised_file (dir, filename):
+ max_year = max (max_year, self.max_year)
+
+ # Use a range.
+ if min_year == max_year:
+ return '%d' % min_year
+ else:
+ return '%d-%d' % (min_year, max_year)
+
+ def strip_continuation (self, line):
+ line = line.lstrip()
+ match = self.comment_re.match (line)
+ if match:
+ line = line[match.end():].lstrip()
+ return line
+
+ def is_complete (self, match):
+ holder = match.group (4)
+ return (holder
+ and (holder not in self.holder_prefixes
+ or holder in self.holders))
+
+ def update_copyright (self, dir, filename, filter, file, line, match):
+ orig_line = line
+ next_line = None
+ pathname = os.path.join (dir, filename)
+
+ intro = match.group (1)
+ if intro.startswith ('@set'):
+ # Texinfo year variables should always be on one line
+ after_years = line[match.end (2):].strip()
+ if after_years != '':
+ self.errors.report (pathname,
+ 'trailing characters in @set: '
+ + after_years)
+ return (False, orig_line, next_line)
+ else:
+ # If it looks like the copyright is incomplete, add the next line.
+ while not self.is_complete (match):
+ try:
+ next_line = file.next()
+ except StopIteration:
+ break
+
+ # If the next line doesn't look like a proper continuation,
+ # assume that what we've got is complete.
+ continuation = self.strip_continuation (next_line)
+ if not self.continuation_re.match (continuation):
+ break
+
+ # Merge the lines for matching purposes.
+ orig_line += next_line
+ line = line.rstrip() + ' ' + continuation
+ next_line = None
+
+ # Rematch with the longer line, at the original position.
+ match = self.copyright_re.match (line, match.start())
+ assert match
+
+ holder = match.group (4)
+
+ # Use the filter to test cases where markup is getting in the way.
+ if filter.by_package_author (dir, filename):
+ assert holder not in self.holders
+
+ elif not holder:
+ self.errors.report (pathname, 'missing copyright holder')
+ return (False, orig_line, next_line)
+
+ elif holder not in self.holders:
+ self.errors.report (pathname,
+ 'unrecognised copyright holder: ' + holder)
+ return (False, orig_line, next_line)
+
+ else:
+ # See whether the copyright is associated with the package
+ # author.
+ canon_form = self.holders[holder]
+ if not canon_form:
+ return (False, orig_line, next_line)
+
+ # Make sure the author is given in a consistent way.
+ line = (line[:match.start (4)]
+ + canon_form
+ + line[match.end (4):])
+
+ # Remove any 'by'
+ line = line[:match.start (3)] + line[match.end (3):]
+
+ # Update the copyright years.
+ years = match.group (2).strip()
+ try:
+ canon_form = self.canonicalise_years (dir, filename, filter, years)
+ except self.BadYear as e:
+ self.errors.report (pathname, str (e))
+ return (False, orig_line, next_line)
+
+ line = (line[:match.start (2)]
+ + ' ' + canon_form + self.separator
+ + line[match.end (2):])
+
+ # Use the standard (C) form.
+ if intro.endswith ('right'):
+ intro += ' (C)'
+ elif intro.endswith ('(c)'):
+ intro = intro[:-3] + '(C)'
+ line = line[:match.start (1)] + intro + line[match.end (1):]
+
+ # Strip trailing whitespace
+ line = line.rstrip() + '\n'
+
+ return (line != orig_line, line, next_line)
+
+ def process_file (self, dir, filename, filter):
+ pathname = os.path.join (dir, filename)
+ if filename.endswith ('.tmp'):
+ # Looks like something we tried to create before.
+ try:
+ os.remove (pathname)
+ except OSError:
+ pass
+ return
+
+ lines = []
+ changed = False
+ line_filter = filter.get_line_filter (dir, filename)
+ with open (pathname, 'r') as file:
+ prev = None
+ for line in file:
+ while line:
+ next_line = None
+ # Leave filtered-out lines alone.
+ if not (line_filter and line_filter.match (line)):
+ match = self.copyright_re.search (line)
+ if match:
+ res = self.update_copyright (dir, filename, filter,
+ file, line, match)
+ (this_changed, line, next_line) = res
+ changed = changed or this_changed
+
+ # Check for copyright lines that might have slipped by.
+ elif self.other_copyright_re.search (line):
+ self.errors.report (pathname,
+ 'unrecognised copyright: %s'
+ % line.strip())
+ lines.append (line)
+ line = next_line
+
+ # If something changed, write the new file out.
+ if changed and self.errors.ok():
+ tmp_pathname = pathname + '.tmp'
+ with open (tmp_pathname, 'w') as file:
+ for line in lines:
+ file.write (line)
+ if self.use_quilt:
+ subprocess.call (['quilt', 'add', pathname])
+ os.rename (tmp_pathname, pathname)
+
+ def process_tree (self, tree, filter):
+ for (dir, subdirs, filenames) in os.walk (tree):
+ # Don't recurse through directories that should be skipped.
+ for i in xrange (len (subdirs) - 1, -1, -1):
+ if filter.skip_dir (dir, subdirs[i]):
+ del subdirs[i]
+
+ # Handle the files in this directory.
+ for filename in filenames:
+ if filter.skip_file (dir, filename):
+ sys.stdout.write ('Skipping %s\n'
+ % os.path.join (dir, filename))
+ else:
+ self.process_file (dir, filename, filter)
+
+class CmdLine:
+ def __init__ (self, copyright = Copyright):
+ self.errors = Errors()
+ self.copyright = copyright (self.errors)
+ self.dirs = []
+ self.default_dirs = []
+ self.chosen_dirs = []
+ self.option_handlers = dict()
+ self.option_help = []
+
+ self.add_option ('--help', 'Print this help', self.o_help)
+ self.add_option ('--quilt', '"quilt add" files before changing them',
+ self.o_quilt)
+ self.add_option ('--this-year', 'Add the current year to every notice',
+ self.o_this_year)
+
+ def add_option (self, name, help, handler):
+ self.option_help.append ((name, help))
+ self.option_handlers[name] = handler
+
+ def add_dir (self, dir, filter = GenericFilter()):
+ self.dirs.append ((dir, filter))
+
+ def o_help (self, option = None):
+ sys.stdout.write ('Usage: %s [options] dir1 dir2...\n\n'
+ 'Options:\n' % sys.argv[0])
+ format = '%-15s %s\n'
+ for (what, help) in self.option_help:
+ sys.stdout.write (format % (what, help))
+ sys.stdout.write ('\nDirectories:\n')
+
+ format = '%-25s'
+ i = 0
+ for (dir, filter) in self.dirs:
+ i += 1
+ if i % 3 == 0 or i == len (self.dirs):
+ sys.stdout.write (dir + '\n')
+ else:
+ sys.stdout.write (format % dir)
+ sys.exit (0)
+
+ def o_quilt (self, option):
+ self.copyright.set_use_quilt (True)
+
+ def o_this_year (self, option):
+ self.copyright.include_year (time.localtime().tm_year)
+
+ def main (self):
+ for arg in sys.argv[1:]:
+ if arg[:1] != '-':
+ self.chosen_dirs.append (arg)
+ elif arg in self.option_handlers:
+ self.option_handlers[arg] (arg)
+ else:
+ self.errors.report (None, 'unrecognised option: ' + arg)
+ if self.errors.ok():
+ if len (self.chosen_dirs) == 0:
+ self.chosen_dirs = self.default_dirs
+ if len (self.chosen_dirs) == 0:
+ self.o_help()
+ else:
+ for chosen_dir in self.chosen_dirs:
+ canon_dir = os.path.join (chosen_dir, '')
+ count = 0
+ for (dir, filter) in self.dirs:
+ if (dir + os.sep).startswith (canon_dir):
+ count += 1
+ self.copyright.process_tree (dir, filter)
+ if count == 0:
+ self.errors.report (None, 'unrecognised directory: '
+ + chosen_dir)
+ sys.exit (0 if self.errors.ok() else 1)
+
+#----------------------------------------------------------------------------
+
+class TopLevelFilter (GenericFilter):
+ def skip_dir (self, dir, subdir):
+ return True
+
+class ConfigFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ def skip_file (self, dir, filename):
+ if filename.endswith ('.m4'):
+ pathname = os.path.join (dir, filename)
+ with open (pathname) as file:
+ # Skip files imported from gettext.
+ if file.readline().find ('gettext-') >= 0:
+ return True
+ return GenericFilter.skip_file (self, dir, filename)
+
+class GCCFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_files |= set ([
+ # Not part of GCC
+ 'math-68881.h',
+ ])
+
+ self.skip_dirs |= set ([
+ # Better not create a merge nightmare for the GNAT folks.
+ 'ada',
+
+ # Handled separately.
+ 'testsuite',
+ ])
+
+ self.skip_extensions |= set ([
+ # Maintained by the translation project.
+ '.po',
+
+ # Automatically-generated.
+ '.pot',
+ ])
+
+ self.fossilised_files |= set ([
+ # Old news won't be updated.
+ 'ONEWS',
+ ])
+
+class TestsuiteFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_extensions |= set ([
+ # Don't change the tests, which could be woend by anyone.
+ '.c',
+ '.C',
+ '.cc',
+ '.h',
+ '.hs',
+ '.f',
+ '.f90',
+ '.go',
+ '.inc',
+ '.java',
+ ])
+
+ def skip_file (self, dir, filename):
+ # g++.niklas/README contains historical copyright information
+ # and isn't updated.
+ if filename == 'README' and os.path.basename (dir) == 'g++.niklas':
+ return True
+ return GenericFilter.skip_file (self, dir, filename)
+
+class LibCppFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_extensions |= set ([
+ # Maintained by the translation project.
+ '.po',
+
+ # Automatically-generated.
+ '.pot',
+ ])
+
+class LibGCCFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_dirs |= set ([
+ # Imported from GLIBC.
+ 'soft-fp',
+ ])
+
+class LibJavaFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_dirs |= set ([
+ # Handled separately.
+ 'testsuite',
+
+ # Not really part of the library
+ 'contrib',
+
+ # Imported from upstream
+ 'classpath',
+ 'libltdl',
+ ])
+
+ def get_line_filter (self, dir, filename):
+ if filename == 'NameDecoder.h':
+ return re.compile ('.*NAME_COPYRIGHT')
+ if filename == 'ICC_Profile.h':
+ return re.compile ('.*icSigCopyrightTag')
+ return GenericFilter.get_line_filter (self, dir, filename)
+
+class LibMudflapFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_dirs |= set ([
+ # Handled separately.
+ 'testsuite',
+ ])
+
+class LibStdCxxFilter (GenericFilter):
+ def __init__ (self):
+ GenericFilter.__init__ (self)
+
+ self.skip_files |= set ([
+ # Contains no copyright of its own, but quotes the GPL.
+ 'intro.xml',
+ ])
+
+ self.skip_dirs |= set ([
+ # Contains automatically-generated sources.
+ 'html',
+
+ # The testsuite data files shouldn't be changed.
+ 'data',
+
+ # Contains imported images
+ 'images',
+ ])
+
+ self.own_files |= set ([
+ # Contains markup around the copyright owner.
+ 'spine.xml',
+ ])
+
+ def get_line_filter (self, dir, filename):
+ if filename == 'boost_concept_check.h':
+ return re.compile ('// \(C\) Copyright Jeremy Siek')
+ return GenericFilter.get_line_filter (self, dir, filename)
+
+class GCCCopyright (Copyright):
+ def __init__ (self, errors):
+ Copyright.__init__ (self, errors)
+
+ canon_fsf = 'Free Software Foundation, Inc.'
+ self.add_package_author ('Free Software Foundation', canon_fsf)
+ self.add_package_author ('Free Software Foundation.', canon_fsf)
+ self.add_package_author ('Free Software Foundation Inc.', canon_fsf)
+ self.add_package_author ('Free Software Foundation, Inc', canon_fsf)
+ self.add_package_author ('Free Software Foundation, Inc.', canon_fsf)
+ self.add_package_author ('The Free Software Foundation', canon_fsf)
+ self.add_package_author ('The Free Software Foundation, Inc.', canon_fsf)
+ self.add_package_author ('Software Foundation, Inc.', canon_fsf)
+
+ self.add_external_author ('ARM')
+ self.add_external_author ('AdaCore')
+ self.add_external_author ('Ami Tavory and Vladimir Dreizin, IBM-HRL.')
+ self.add_external_author ('Cavium Networks.')
+ self.add_external_author ('Faraday Technology Corp.')
+ self.add_external_author ('Florida State University')
+ self.add_external_author ('Greg Colvin and Beman Dawes.')
+ self.add_external_author ('Hewlett-Packard Company')
+ self.add_external_author ('Information Technology Industry Council.')
+ self.add_external_author ('James Theiler, Brian Gough')
+ self.add_external_author ('Makoto Matsumoto and Takuji Nishimura,')
+ self.add_external_author ('National Research Council of Canada.')
+ self.add_external_author ('Peter Dimov and Multi Media Ltd.')
+ self.add_external_author ('Peter Dimov')
+ self.add_external_author ('Pipeline Associates, Inc.')
+ self.add_external_author ('Regents of the University of California.')
+ self.add_external_author ('Silicon Graphics Computer Systems, Inc.')
+ self.add_external_author ('Silicon Graphics')
+ self.add_external_author ('Stephen L. Moshier')
+ self.add_external_author ('Sun Microsystems, Inc. All rights reserved.')
+ self.add_external_author ('The Go Authors. All rights reserved.')
+ self.add_external_author ('The Go Authors. All rights reserved.')
+ self.add_external_author ('The Go Authors.')
+ self.add_external_author ('The Regents of the University of California.')
+ self.add_external_author ('Unicode, Inc.')
+ self.add_external_author ('University of Toronto.')
+
+class GCCCmdLine (CmdLine):
+ def __init__ (self):
+ CmdLine.__init__ (self, GCCCopyright)
+
+ self.add_dir ('.', TopLevelFilter())
+ # boehm-gc is imported from upstream.
+ self.add_dir ('config', ConfigFilter())
+ # contrib isn't really part of GCC.
+ self.add_dir ('fixincludes')
+ self.add_dir ('gcc', GCCFilter())
+ self.add_dir (os.path.join ('gcc', 'testsuite'), TestsuiteFilter())
+ self.add_dir ('gnattools')
+ self.add_dir ('include')
+ self.add_dir ('libada')
+ self.add_dir ('libatomic')
+ self.add_dir ('libbacktrace')
+ self.add_dir ('libcpp', LibCppFilter())
+ self.add_dir ('libdecnumber')
+ # libffi is imported from upstream.
+ self.add_dir ('libgcc', LibGCCFilter())
+ self.add_dir ('libgfortran')
+ self.add_dir ('libgomp')
+ self.add_dir ('libiberty')
+ self.add_dir ('libitm')
+ self.add_dir ('libjava', LibJavaFilter())
+ self.add_dir (os.path.join ('libjava', 'testsuite'), TestsuiteFilter())
+ self.add_dir ('libmudflap', LibMudflapFilter())
+ self.add_dir (os.path.join ('libmudflap', 'testsuite'),
+ TestsuiteFilter())
+ self.add_dir ('libobjc')
+ self.add_dir ('libquadmath')
+ # libsanitiser is imported from upstream.
+ self.add_dir ('libssp')
+ self.add_dir ('libstdc++-v3', LibStdCxxFilter())
+ self.add_dir ('lto-plugin')
+ # zlib is imported from upstream.
+
+ self.default_dirs = [
+ 'gcc',
+ 'libada',
+ 'libatomic',
+ 'libbacktrace',
+ 'libcpp',
+ 'libdecnumber',
+ 'libgcc',
+ 'libgfortran',
+ 'libgomp',
+ 'libitm',
+ 'libmudflap',
+ 'libobjc',
+ 'libstdc++-v3',
+ ]
+
+GCCCmdLine().main()
diff --git a/gcc-4.9/contrib/warn_summary b/gcc-4.9/contrib/warn_summary
new file mode 100755
index 000000000..38e2c01ef
--- /dev/null
+++ b/gcc-4.9/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