Update Go testsuite to a copy of the Go 1.1.2 testsuite.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2013 21:24:30 +0000 (21:24 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 14 Oct 2013 21:24:30 +0000 (21:24 +0000)
* go.test/go-test.exp (go-find-packages): New proc.
(go-gc-tests): Skip stress and safe tests.  Skip *.dir
subdirectories.  Do simple +build line matching.  Handle run with
arguments.  Handle errorcheckdir and rundircmpout.  Use packages
for rundir.  Remove special handling for bug191 and dwarf.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203578 138bc75d-0d04-0410-961f-82ee72b054a4

321 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/go.test/go-test.exp
gcc/testsuite/go.test/test/alias1.go
gcc/testsuite/go.test/test/args.go
gcc/testsuite/go.test/test/bench/garbage/parser.go
gcc/testsuite/go.test/test/bench/go1/fmt_test.go [new file with mode: 0644]
gcc/testsuite/go.test/test/bench/go1/http_test.go [new file with mode: 0644]
gcc/testsuite/go.test/test/bench/go1/json_test.go
gcc/testsuite/go.test/test/bench/go1/jsondata_test.go
gcc/testsuite/go.test/test/bench/go1/parser_test.go
gcc/testsuite/go.test/test/bench/go1/regexp_test.go [new file with mode: 0644]
gcc/testsuite/go.test/test/bench/go1/time_test.go [new file with mode: 0644]
gcc/testsuite/go.test/test/bench/shootout/timing.sh
gcc/testsuite/go.test/test/bigalg.go
gcc/testsuite/go.test/test/blank.go
gcc/testsuite/go.test/test/blank1.go
gcc/testsuite/go.test/test/bugs/bug434.go [deleted file]
gcc/testsuite/go.test/test/chan/select2.go
gcc/testsuite/go.test/test/cmp.go
gcc/testsuite/go.test/test/cmplx.go
gcc/testsuite/go.test/test/cmplxdivide.go
gcc/testsuite/go.test/test/const.go
gcc/testsuite/go.test/test/const1.go
gcc/testsuite/go.test/test/const4.go
gcc/testsuite/go.test/test/const5.go
gcc/testsuite/go.test/test/const6.go [new file with mode: 0644]
gcc/testsuite/go.test/test/copy.go
gcc/testsuite/go.test/test/ddd2.dir/ddd2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/ddd2.dir/ddd3.go [moved from gcc/testsuite/go.test/test/ddd3.go with 75% similarity]
gcc/testsuite/go.test/test/ddd2.go
gcc/testsuite/go.test/test/decl.go
gcc/testsuite/go.test/test/declbad.go
gcc/testsuite/go.test/test/defer.go
gcc/testsuite/go.test/test/divide.go
gcc/testsuite/go.test/test/dwarf/dwarf.dir/main.go [moved from gcc/testsuite/go.test/test/dwarf/main.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z1.go [moved from gcc/testsuite/go.test/test/dwarf/z1.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z10.go [moved from gcc/testsuite/go.test/test/dwarf/z10.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z11.go [moved from gcc/testsuite/go.test/test/dwarf/z11.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z12.go [moved from gcc/testsuite/go.test/test/dwarf/z12.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z13.go [moved from gcc/testsuite/go.test/test/dwarf/z13.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z14.go [moved from gcc/testsuite/go.test/test/dwarf/z14.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z15.go [moved from gcc/testsuite/go.test/test/dwarf/z15.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z16.go [moved from gcc/testsuite/go.test/test/dwarf/z16.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z17.go [moved from gcc/testsuite/go.test/test/dwarf/z17.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z18.go [moved from gcc/testsuite/go.test/test/dwarf/z18.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z19.go [moved from gcc/testsuite/go.test/test/dwarf/z19.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z2.go [moved from gcc/testsuite/go.test/test/dwarf/z2.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z20.go [moved from gcc/testsuite/go.test/test/dwarf/z20.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z3.go [moved from gcc/testsuite/go.test/test/dwarf/z3.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z4.go [moved from gcc/testsuite/go.test/test/dwarf/z4.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z5.go [moved from gcc/testsuite/go.test/test/dwarf/z5.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z6.go [moved from gcc/testsuite/go.test/test/dwarf/z6.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z7.go [moved from gcc/testsuite/go.test/test/dwarf/z7.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z8.go [moved from gcc/testsuite/go.test/test/dwarf/z8.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.dir/z9.go [moved from gcc/testsuite/go.test/test/dwarf/z9.go with 100% similarity]
gcc/testsuite/go.test/test/dwarf/dwarf.go [new file with mode: 0644]
gcc/testsuite/go.test/test/errchk
gcc/testsuite/go.test/test/escape.go
gcc/testsuite/go.test/test/escape2.go
gcc/testsuite/go.test/test/escape5.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug040.go
gcc/testsuite/go.test/test/fixedbugs/bug083.go
gcc/testsuite/go.test/test/fixedbugs/bug085.go
gcc/testsuite/go.test/test/fixedbugs/bug133.go
gcc/testsuite/go.test/test/fixedbugs/bug160.go
gcc/testsuite/go.test/test/fixedbugs/bug191.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug191.go
gcc/testsuite/go.test/test/fixedbugs/bug205.go
gcc/testsuite/go.test/test/fixedbugs/bug228.go
gcc/testsuite/go.test/test/fixedbugs/bug255.go
gcc/testsuite/go.test/test/fixedbugs/bug297.go
gcc/testsuite/go.test/test/fixedbugs/bug313.go
gcc/testsuite/go.test/test/fixedbugs/bug322.go
gcc/testsuite/go.test/test/fixedbugs/bug324.dir/prog.go [moved from gcc/testsuite/go.test/test/fixedbugs/bug324.dir/main.go with 100% similarity]
gcc/testsuite/go.test/test/fixedbugs/bug324.go
gcc/testsuite/go.test/test/fixedbugs/bug342.go
gcc/testsuite/go.test/test/fixedbugs/bug357.go
gcc/testsuite/go.test/test/fixedbugs/bug367.dir/prog.go [moved from gcc/testsuite/go.test/test/fixedbugs/bug367.dir/main.go with 100% similarity]
gcc/testsuite/go.test/test/fixedbugs/bug367.go
gcc/testsuite/go.test/test/fixedbugs/bug379.go
gcc/testsuite/go.test/test/fixedbugs/bug382.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug382.go
gcc/testsuite/go.test/test/fixedbugs/bug385_32.go
gcc/testsuite/go.test/test/fixedbugs/bug385_64.go
gcc/testsuite/go.test/test/fixedbugs/bug412.go
gcc/testsuite/go.test/test/fixedbugs/bug414.dir/main.go [deleted file]
gcc/testsuite/go.test/test/fixedbugs/bug414.dir/p1.go
gcc/testsuite/go.test/test/fixedbugs/bug414.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug414.go
gcc/testsuite/go.test/test/fixedbugs/bug424.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug424.go
gcc/testsuite/go.test/test/fixedbugs/bug437.dir/x.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug437.go
gcc/testsuite/go.test/test/fixedbugs/bug453.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug454.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug455.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug456.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug457.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug458.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug459.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug460.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug460.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug460.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug461.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug462.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug463.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug464.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug465.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug465.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug465.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug466.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug466.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug466.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p3.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug467.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug468.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug470.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug471.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug472.dir/z.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug472.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug473.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/bug474.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue2615.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue3552.dir/one.go [moved from gcc/testsuite/go.test/test/bugs/bug434.dir/one.go with 100% similarity]
gcc/testsuite/go.test/test/fixedbugs/issue3552.dir/two.go [moved from gcc/testsuite/go.test/test/bugs/bug434.dir/two.go with 100% similarity]
gcc/testsuite/go.test/test/fixedbugs/issue3552.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue3705.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue3783.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue3924.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue3925.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4066.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4085a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4085b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4097.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4099.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4162.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4167.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4232.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4251.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4252.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4264.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4283.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4313.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4316.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4323.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/z.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4326.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4348.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4353.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4359.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p3.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4370.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4396a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4396b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4399.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4405.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4429.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4448.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4452.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4458.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4463.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4468.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4470.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4495.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4510.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4517a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4517b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4517c.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4518.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4529.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4545.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4562.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4585.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4590.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4610.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4614.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4618.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4620.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4654.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4663.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4667.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4734.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4748.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4752.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4785.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4813.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4879.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4909a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4909b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/foo.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4932.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue4964.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5002.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5056.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5089.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5105.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/bug.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5125.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5162.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5231.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5244.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/bug.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5259.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5260.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/pkg1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5291.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/b.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5470.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5493.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5515.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5607.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/rethinkgo.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/x.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/y.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5614.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5753.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/a.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/main.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5755.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5809.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5820.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue5841.go [new file with mode: 0644]
gcc/testsuite/go.test/test/fixedbugs/issue887.go [new file with mode: 0644]
gcc/testsuite/go.test/test/float_lit.go
gcc/testsuite/go.test/test/floatcmp.go
gcc/testsuite/go.test/test/func1.go
gcc/testsuite/go.test/test/func7.go
gcc/testsuite/go.test/test/func8.go
gcc/testsuite/go.test/test/funcdup.go [new file with mode: 0644]
gcc/testsuite/go.test/test/funcdup2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/golden.out
gcc/testsuite/go.test/test/goprint.go
gcc/testsuite/go.test/test/import2.dir/import2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/import2.dir/import3.go [moved from gcc/testsuite/go.test/test/import3.go with 89% similarity]
gcc/testsuite/go.test/test/import2.go
gcc/testsuite/go.test/test/import4.dir/empty.go [new file with mode: 0644]
gcc/testsuite/go.test/test/import4.dir/import4.go [new file with mode: 0644]
gcc/testsuite/go.test/test/import4.go
gcc/testsuite/go.test/test/index.go
gcc/testsuite/go.test/test/init1.go
gcc/testsuite/go.test/test/initializerr.go
gcc/testsuite/go.test/test/interface/embed1.dir/embed0.go [moved from gcc/testsuite/go.test/test/interface/embed0.go with 93% similarity]
gcc/testsuite/go.test/test/interface/embed1.dir/embed1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/interface/embed1.go
gcc/testsuite/go.test/test/interface/private.dir/private1.go [moved from gcc/testsuite/go.test/test/interface/private1.go with 92% similarity]
gcc/testsuite/go.test/test/interface/private.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/interface/private.go
gcc/testsuite/go.test/test/interface/recursive1.dir/recursive1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/interface/recursive1.dir/recursive2.go [moved from gcc/testsuite/go.test/test/interface/recursive2.go with 72% similarity]
gcc/testsuite/go.test/test/interface/recursive1.go
gcc/testsuite/go.test/test/literal.go
gcc/testsuite/go.test/test/map.go
gcc/testsuite/go.test/test/mapnan.go [new file with mode: 0644]
gcc/testsuite/go.test/test/method.go
gcc/testsuite/go.test/test/method4.dir/method4a.go [moved from gcc/testsuite/go.test/test/method4a.go with 87% similarity]
gcc/testsuite/go.test/test/method4.dir/prog.go [new file with mode: 0644]
gcc/testsuite/go.test/test/method4.go
gcc/testsuite/go.test/test/method5.go [new file with mode: 0644]
gcc/testsuite/go.test/test/nil.go
gcc/testsuite/go.test/test/nilptr.go
gcc/testsuite/go.test/test/nul1.go
gcc/testsuite/go.test/test/range.go
gcc/testsuite/go.test/test/recover.go
gcc/testsuite/go.test/test/recover3.go
gcc/testsuite/go.test/test/rename.go
gcc/testsuite/go.test/test/reorder.go
gcc/testsuite/go.test/test/return.go [new file with mode: 0644]
gcc/testsuite/go.test/test/rotate.go
gcc/testsuite/go.test/test/rotate0.go [new file with mode: 0644]
gcc/testsuite/go.test/test/rotate1.go [new file with mode: 0644]
gcc/testsuite/go.test/test/rotate2.go [new file with mode: 0644]
gcc/testsuite/go.test/test/rotate3.go [new file with mode: 0644]
gcc/testsuite/go.test/test/run.go
gcc/testsuite/go.test/test/safe/nousesafe.go
gcc/testsuite/go.test/test/safe/usesafe.go
gcc/testsuite/go.test/test/sigchld.go
gcc/testsuite/go.test/test/sinit.go
gcc/testsuite/go.test/test/sizeof.go
gcc/testsuite/go.test/test/stress/maps.go [new file with mode: 0644]
gcc/testsuite/go.test/test/stress/parsego.go [new file with mode: 0644]
gcc/testsuite/go.test/test/stress/runstress.go [new file with mode: 0644]
gcc/testsuite/go.test/test/string_lit.go
gcc/testsuite/go.test/test/switch.go
gcc/testsuite/go.test/test/switch4.go [new file with mode: 0644]
gcc/testsuite/go.test/test/testlib
gcc/testsuite/go.test/test/torture.go [new file with mode: 0644]
gcc/testsuite/go.test/test/typecheck.go [new file with mode: 0644]
gcc/testsuite/go.test/test/zerodivide.go

index 075d071..e4dca4b 100644 (file)
@@ -1,3 +1,11 @@
+2013-10-14  Ian Lance Taylor  <iant@google.com>
+
+       * go.test/go-test.exp (go-find-packages): New proc.
+       (go-gc-tests): Skip stress and safe tests.  Skip *.dir
+       subdirectories.  Do simple +build line matching.  Handle run with
+       arguments.  Handle errorcheckdir and rundircmpout.  Use packages
+       for rundir.  Remove special handling for bug191 and dwarf.
+
 2013-10-14  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/58658
index 6f39734..284bc99 100644 (file)
@@ -242,6 +242,42 @@ proc go-set-goarch { } {
     setenv GOARCH $goarch
 }
 
+# Take a list of files and return a lists of lists, where each list is
+# the set of files in the same package.
+proc go-find-packages { test name files } {
+    set packages [list]
+    foreach f $files {
+       set fd [open $f r]
+       while 1 {
+           if { [gets $fd line] < 0 } {
+               close $fd
+               clone_output "$test: could not read $f"
+               unresolved $name
+               return [list]
+           }
+
+           if { [regexp "^package (\\w+)" $line match package] } {
+               set len [llength $packages]
+               for { set i 0 } { $i < $len } { incr i } {
+                   set p [lindex $packages $i]
+                   if { [lindex $p 0] == $package } {
+                       lappend p $f
+                       lset packages $i $p
+                       break
+                   }
+               }
+               if { $i >= $len } {
+                   lappend packages [list $package $f]
+               }
+
+               close $fd
+               break
+           }
+       }
+    }
+    return $packages
+}
+
 proc go-gc-tests { } {
     global srcdir subdir
     global runtests
@@ -286,12 +322,28 @@ proc go-gc-tests { } {
            continue
        }
 
+       # Skip the files in stress; they are not tests.
+       if [string match "*go.test/test/stress/*" $test] {
+           continue
+       }
+
+       # Skip the files in safe; gccgo does not support safe mode.
+       if [string match "*go.test/test/safe/*" $test] {
+           continue
+       }
+
        # Skip files in sub-subdirectories: they are components of
        # other tests.
        if [string match "*go.test/test/*/*/*" $test] {
            continue
        }
 
+       # Skip files in *.dir subdirectories: they are components of
+       # other tests.
+       if [string match "*go.test/test/*.dir/*" $test] {
+           continue
+       }
+
        set name [dg-trim-dirname $srcdir $test]
 
        # Skip certain tests if target is RTEMS OS.
@@ -379,6 +431,21 @@ proc go-gc-tests { } {
                continue
            }
 
+           if { [ string match "// +build *" $test_line ] } {
+               if { [ string match "*[getenv GOARCH]*" $test_line ] } {
+                   continue
+               }
+               if { [ string match "*linux*" $test_line ] } {
+                   continue
+               }
+               if { [ string match "*!windows*" $test_line ] } {
+                   continue
+               }
+               close $fd
+               unsupported $name
+               set lines_ok 0
+           }
+
            break
        }
 
@@ -407,7 +474,8 @@ proc go-gc-tests { } {
 
        set go_compile_args ""
        set go_execute_args ""
-       if { [regexp ".*\\\$A.out (\[^|&>2\].*)\$" $test_line match progargs] } {
+       if { [regexp "// run (\[^|&>2\].*)\$" $test_line match progargs] \
+                && ! [string match "*.go*" "$progargs"] } {
            set go_execute_args $progargs
            verbose -log "$test: go_execute_args is $go_execute_args"
            set index [string last " $progargs" $test_line]
@@ -515,6 +583,27 @@ proc go-gc-tests { } {
            go-execute-xfail $test
        } elseif { $test_line == "// errorcheck" } {
            errchk $test ""
+       } elseif { $test_line == "// errorcheckdir" } {
+           set hold_runtests $runtests
+           set runtests "go-test.exp"
+           set dir "[file rootname $test].dir"
+           set files [lsort [glob "$dir/*.go"]]
+           set packages [go-find-packages $test $name $files]
+           if { [llength $packages] > 0 } {
+               set dg-do-what-default "assemble"
+               set del [list]
+               set last [lindex $packages end]
+               set packages [lreplace $packages end end]
+               foreach p $packages {
+                   dg-test -keep-output [lrange $p 1 end] "-O" "-w $DEFAULT_GOCFLAGS"
+                   lappend del "[file rootname [file tail [lindex $p 1]]].o"
+               }
+               errchk [lindex $last 1] "[lrange $last 2 end]"
+               foreach f $del {
+                   file delete $f
+               }
+           }
+           set runtests $hold_runtests
        } elseif { [string match "// errorcheckoutput*" $test_line] } {
            # Run the test to get a .go program to error check.
            set go_execute_args ""
@@ -557,21 +646,62 @@ proc go-gc-tests { } {
        } elseif { $test_line == "// rundir" } {
            set hold_runtests $runtests
            set runtests "go-test.exp"
-           set dg-do-what-default "assemble"
            set dir "[file rootname $test].dir"
-           set del {}
            set files [lsort [glob "$dir/*.go"]]
-           set last [lindex $files end]
-           set files [lreplace $files end end]
-           foreach f $files {
-               dg-test -keep-output $f "-O" "-w $DEFAULT_GOCFLAGS"
-               lappend del "[file rootname [file tail $f]].o"
+           set packages [go-find-packages $test $name $files]
+           if { [llength $packages] > 0 } {
+               set dg-do-what-default "assemble"
+               set del [list]
+               set last [lindex $packages end]
+               set packages [lreplace $packages end end]
+               foreach p $packages {
+                   dg-test -keep-output [lrange $p 1 end] "-O" "-w $DEFAULT_GOCFLAGS"
+                   lappend del "[file rootname [file tail [lindex $p 1]]].o"
+               }
+               set dg-do-what-default "link"
+               set go_compile_args $del
+               go-torture-execute [lrange $last 1 end]
+               foreach f $del {
+                   file delete $f
+               }
            }
-           set dg-do-what-default "link"
-           set go_compile_args $del
-           go-torture-execute $last
-           foreach f $del {
-               file delete $f
+           set runtests $hold_runtests
+       } elseif { $test_line == "// rundircmpout" } {
+           set hold_runtests $runtests
+           set runtests "go-test.exp"
+           set dir "[file rootname $test].dir"
+           set files [lsort [glob "$dir/*.go"]]
+           set packages [go-find-packages $test $name $files]
+           if { [llength $packages] > 0 } {
+               set dg-do-what-default "assemble"
+               set del [list]
+               set last [lindex $packages end]
+               set packages [lreplace $packages end end]
+               foreach p $packages {
+                   dg-test -keep-output [lrange $p 1 end] "-O" "-w $DEFAULT_GOCFLAGS"
+                   lappend del "[file rootname [file tail [lindex $p 1]]].o"
+               }
+               set dg-do-what-default "link"
+               dg-test -keep-output [lrange $last 1 end] "$del -O" "-w $DEFAULT_GOCFLAGS"
+               set base "[file rootname [file tail [lindex $last 1]]]"
+               set output_file "./$base.exe"
+               lappend del $output_file
+               if [isnative] {
+                   verbose -log "$output_file >$base.p 2>&1"
+                   if { [catch "exec $output_file 2>$base.p" catcherr] != 0 } {
+                       verbose -log $catcherr
+                       fail "$name execution"
+                       untested "$name compare"
+                   } else {
+                       pass "$name execution"
+                       regsub "\\.go$" "$test" ".out" expect
+                       filecmp $expect $base.p "$name compare"
+                   }
+                   lappend del $base.p
+               }
+               foreach f $del {
+                   file delete $f
+               }
            }
            set runtests $hold_runtests
        } elseif { "$test_line" == ""
@@ -709,33 +839,6 @@ proc go-gc-tests { } {
            file delete $ofile1 $ofile2 $ofile3 $output_file
            set runtests $hold_runtests
        } elseif { [string match \
-                       "// \$G \$D/bug191.dir/a.go && \$G \$D/bug191.dir/b.go && \$G \$D/\$F.go && \$L \$F.\$A" \
-                       $test_line] } {
-           set hold_runtests $runtests
-           set runtests "go-test.exp"
-           set dg-do-what-default "assemble"
-           regsub "\\.go$" $test ".dir/a.go" file1
-           dg-test -keep-output $file1 "-O" "-w $DEFAULT_GOCFLAGS"
-           set ofile1 "[file rootname [file tail $file1]].o"
-           regsub "\\.go$" $test ".dir/b.go" file2
-           dg-test -keep-output $file2 "-O" "-w $DEFAULT_GOCFLAGS"
-           set ofile2 "[file rootname [file tail $file2]].o"
-           dg-test -keep-output "$test" "-O" "-w $DEFAULT_GOCFLAGS"
-           set ofile3 "[file rootname [file tail $test]].o"
-           set dg-do-what-default "link"
-           set output_file "./[file rootname [file tail $test]].exe"
-           set comp_output [go_target_compile "$ofile1 $ofile2 $ofile3" \
-                                $output_file "executable" "$options"]
-           set comp_output [go-dg-prune $target_triplet $comp_output]
-           if [string match "" $comp_output] {
-               pass $name
-           } else {
-               verbose -log $comp_output
-               fail $name
-           }
-           file delete $ofile1 $ofile2 $ofile3 $output_file
-           set runtests $hold_runtests
-       } elseif { [string match \
                        "// \$G \$D/embed0.go && \$G \$D/\$F.go && \$L \$F.\$A && ./\$A.out" \
                        $test_line ] } {
            set hold_runtests $runtests
@@ -949,10 +1052,6 @@ proc go-gc-tests { } {
            regsub "\\.go$" $test ".dir/a.go" file1
            regsub "\\.go$" $test ".dir/b.go" file2
            errchk "$file1" "$file2"
-       } elseif { $test_line == "// \$G \$D/\$F.go \$D/z*.go && \$L \$F.\$A && ./\$A.out" } {
-           set dir [file dirname $test]
-           set go_compile_args [glob $dir/z*.go]
-           go-torture-execute $test
        } elseif { $test_line == "// \$G -N -o slow.\$A \$D/bug369.dir/pkg.go &&" \
                       && $test_line2 == "// \$G -o fast.\$A \$D/bug369.dir/pkg.go &&" \
                       && $test_line3 == "// run" } {
index 4219af8..42cf693 100644 (file)
@@ -17,7 +17,7 @@ func main() {
        case uint8:
                // ok
        default:
-               println("byte != uint8")
+               panic("byte != uint8")
        }
 
        x = uint8(2)
@@ -25,7 +25,7 @@ func main() {
        case byte:
                // ok
        default:
-               println("uint8 != byte")
+               panic("uint8 != byte")
        }
 
        rune32 := false
@@ -37,7 +37,7 @@ func main() {
                // must be new code
                rune32 = true
        default:
-               println("rune != int and rune != int32")
+               panic("rune != int and rune != int32")
        }
 
        if rune32 {
@@ -49,6 +49,6 @@ func main() {
        case rune:
                // ok
        default:
-               println("int (or int32) != rune")
+               panic("int (or int32) != rune")
        }
 }
index 9cfddc3..0ffe810 100644 (file)
@@ -1,7 +1,4 @@
-// $G $F.go && $L $F.$A && ./$A.out arg1 arg2
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// run arg1 arg2
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index b91e024..d85110b 100644 (file)
@@ -134,20 +134,31 @@ func main() {
        }
 }
 
+// find . -type d -not -path "./exp" -not -path "./exp/*" -printf "\t\"%p\",\n" | sort | sed "s/\.\///" | grep -v testdata
 var packages = []string{
+       "archive",
        "archive/tar",
-       "encoding/asn1",
-       "math/big",
+       "archive/zip",
        "bufio",
+       "builtin",
        "bytes",
-       "math/cmplx",
+       "compress",
+       "compress/bzip2",
        "compress/flate",
        "compress/gzip",
+       "compress/lzw",
        "compress/zlib",
+       "container",
        "container/heap",
        "container/list",
        "container/ring",
+       "crypto",
        "crypto/aes",
+       "crypto/cipher",
+       "crypto/des",
+       "crypto/dsa",
+       "crypto/ecdsa",
+       "crypto/elliptic",
        "crypto/hmac",
        "crypto/md5",
        "crypto/rand",
@@ -159,64 +170,111 @@ var packages = []string{
        "crypto/subtle",
        "crypto/tls",
        "crypto/x509",
+       "crypto/x509/pkix",
+       "database",
+       "database/sql",
+       "database/sql/driver",
+       "debug",
        "debug/dwarf",
-       "debug/macho",
        "debug/elf",
        "debug/gosym",
-       "exp/ebnf",
+       "debug/macho",
+       "debug/pe",
+       "encoding",
        "encoding/ascii85",
+       "encoding/asn1",
+       "encoding/base32",
        "encoding/base64",
        "encoding/binary",
+       "encoding/csv",
+       "encoding/gob",
        "encoding/hex",
+       "encoding/json",
        "encoding/pem",
-       "os/exec",
+       "encoding/xml",
+       "errors",
+       "expvar",
        "flag",
        "fmt",
+       "go",
        "go/ast",
+       "go/build",
        "go/doc",
+       "go/format",
        "go/parser",
        "go/printer",
        "go/scanner",
        "go/token",
-       "encoding/gob",
        "hash",
        "hash/adler32",
        "hash/crc32",
        "hash/crc64",
-       "net/http",
+       "hash/fnv",
+       "html",
+       "html/template",
        "image",
+       "image/color",
+       "image/draw",
+       "image/gif",
        "image/jpeg",
        "image/png",
+       "index",
+       "index/suffixarray",
        "io",
        "io/ioutil",
-       "encoding/json",
        "log",
+       "log/syslog",
        "math",
+       "math/big",
+       "math/cmplx",
+       "math/rand",
        "mime",
+       "mime/multipart",
        "net",
+       "net/http",
+       "net/http/cgi",
+       "net/http/cookiejar",
+       "net/http/fcgi",
+       "net/http/httptest",
+       "net/http/httputil",
+       "net/http/pprof",
+       "net/mail",
+       "net/rpc",
+       "net/rpc/jsonrpc",
+       "net/smtp",
+       "net/textproto",
+       "net/url",
        "os",
+       "os/exec",
+       "os/signal",
+       "os/user",
        "path",
-       "math/rand",
+       "path/filepath",
        "reflect",
        "regexp",
-       "net/rpc",
+       "regexp/syntax",
        "runtime",
-       "text/scanner",
+       "runtime/cgo",
+       "runtime/debug",
+       "runtime/pprof",
+       "runtime/race",
        "sort",
-       "net/smtp",
        "strconv",
        "strings",
        "sync",
+       "sync/atomic",
        "syscall",
-       "log/syslog",
-       "text/tabwriter",
-       "text/template",
        "testing",
        "testing/iotest",
        "testing/quick",
+       "text",
+       "text/scanner",
+       "text/tabwriter",
+       "text/template",
+       "text/template/parse",
        "time",
        "unicode",
-       "unicode/utf8",
        "unicode/utf16",
-       "encoding/xml",
+       "unicode/utf8",
+       "unsafe",
 }
diff --git a/gcc/testsuite/go.test/test/bench/go1/fmt_test.go b/gcc/testsuite/go.test/test/bench/go1/fmt_test.go
new file mode 100644 (file)
index 0000000..d3c6956
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package go1
+
+// benchmark based on fmt/fmt_test.go
+
+import (
+       "bytes"
+       "fmt"
+       "testing"
+)
+
+func BenchmarkFmtFprintfEmpty(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               fmt.Fprintf(&buf, "")
+       }
+}
+
+func BenchmarkFmtFprintfString(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "%s", "hello")
+       }
+}
+
+func BenchmarkFmtFprintfInt(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "%d", 5)
+       }
+}
+
+func BenchmarkFmtFprintfIntInt(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "%d %d", 5, 6)
+       }
+}
+
+func BenchmarkFmtFprintfPrefixedInt(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "This is some meaningless prefix text that needs to be scanned %d", 6)
+       }
+}
+
+func BenchmarkFmtFprintfFloat(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "%g", 5.23184)
+       }
+}
+
+func BenchmarkFmtManyArgs(b *testing.B) {
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               fmt.Fprintf(&buf, "%2d/%2d/%2d %d:%d:%d %s %s\n", 3, 4, 5, 11, 12, 13, "hello", "world")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/bench/go1/http_test.go b/gcc/testsuite/go.test/test/bench/go1/http_test.go
new file mode 100644 (file)
index 0000000..34e789f
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package go1
+
+import (
+       "bytes"
+       "io/ioutil"
+       "net/http"
+       "net/http/httptest"
+       "testing"
+)
+
+// BenchmarkHTTPClientServer benchmarks both the HTTP client and the HTTP server,
+// on small requests.
+func BenchmarkHTTPClientServer(b *testing.B) {
+       msg := []byte("Hello world.\n")
+       ts := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
+               rw.Write(msg)
+       }))
+       defer ts.Close()
+
+       tr := &http.Transport{}
+       defer tr.CloseIdleConnections()
+       cl := &http.Client{
+               Transport: tr,
+       }
+
+       b.ResetTimer()
+
+       for i := 0; i < b.N; i++ {
+               res, err := cl.Get(ts.URL)
+               if err != nil {
+                       b.Fatal("Get:", err)
+               }
+               all, err := ioutil.ReadAll(res.Body)
+               if err != nil {
+                       b.Fatal("ReadAll:", err)
+               }
+               if !bytes.Equal(all, msg) {
+                       b.Fatalf("Got body %q; want %q", all, msg)
+               }
+       }
+}
index 614e24a..1d42619 100644 (file)
@@ -7,12 +7,12 @@
 package go1
 
 import (
+       "bytes"
        "compress/bzip2"
        "encoding/base64"
        "encoding/json"
        "io"
        "io/ioutil"
-       "strings"
        "testing"
 )
 
@@ -23,7 +23,7 @@ var (
 
 func makeJsonBytes() []byte {
        var r io.Reader
-       r = strings.NewReader(jsonbz2_base64)
+       r = bytes.NewReader(bytes.Replace(jsonbz2_base64, []byte{'\n'}, nil, -1))
        r = base64.NewDecoder(base64.StdEncoding, r)
        r = bzip2.NewReader(r)
        b, err := ioutil.ReadAll(r)
index 7d42c96..cf0fac1 100644 (file)
 
 package go1
 
-var jsonbz2_base64 = "QlpoOTFBWSZTWZ0H0LkG0bxfgFH8UAf/8D////q////6YSvJveAAAAAH3ddt7gAN" +
-       "FrKppN9gw0gA++fGB9xKkUpX0YWTENCgqzUW1tlsyMB2w9nnvNSigNyS+3cui5zA" +
-       "AAAAAAAAAI4kILu6ytuWTLBbaPXfc+A+PQEgNAG1ZMBYWnWwPoFrGjoBnYMumlUF" +
-       "UKA7NVBQgut30zzu8eM2tsoapJ7u41djLsxZarplSoJouxrdfHrHPSiqAGgkAD6D" +
-       "QfT0ABu7gG1qDtdVHVXp7vWuBoBk2wEOjKChQ5bvbh3riupXZycASbaiQEECRKib" +
-       "ZFJFtqWjR7bsGoaa1lIFPRoKVQKoJFyqbWr5OB1Aie2pobm1EJKqVBU1EE2lCg6a" +
-       "AUBV9hqL00q9btQ0J9hqu2zavWVdjI6aAusU22tNa+8m70GjRqarKRWtUDW2yFBI" +
-       "1kBrrqrxeX3AyB9AD0wAAAeZ6weqV1rVu8UVICgAAABeDn2cAAd9gAACI+7DvjHo" +
-       "j73u8X2dDXT2x6adeFOTNe7BvavozFezkV1xXtJzu8H0983QAHr5aPT42iem53fX" +
-       "23IDr7YejQNtVVZr24gGgB0VQffPXH18g9DoaDW8vt729h9bt72XsKth0ANxgodG" +
-       "iRxvYclAAAAAnpqRtgGvcbo9ABpy6aPQADRZ3aACjyox4NawKCqNdA6offa1WtPc" +
-       "fdjQUPvauprcLoPe2oaplp2w7cnOHdlF27xvPY1QU67vc8goBRttLYKaHXkPAAAA" +
-       "AAdyFFaYCVClAVSlCqVSilFUKEgoNT0CAQCBAk00g1T0jQNNPSbKADQxAJEBESIg" +
-       "Seomk9EB6mjQ0NNGgAAAAkEgkiGk0CR6U9CNNNNNPQRo0ANAaAAk9UpEQmoNNRqe" +
-       "U02o00AAADQABoACJEAlKamUCjZT9UGnqAAG1AGgAAAFRJCAQCBA0SYjTKbQmqea" +
-       "p6YU2o09Q9TT00nAlwPEuSelCeXl28B3IYIQHEwXUMSCvlAYS5LkrZn+XhHHAXZz" +
-       "FTJHAzrKZzYWC0pthA9SCmbkyVzoHbSUjhnAfBrYpwWYIB7GRjOjDQqokMbJENSO" +
-       "SBCN0WhaRhQWpVuoOLN0NPRed7eO5eW2lv5L+X/jf7EpJkEUNMJKZREogmkjMgZJ" +
-       "BiEEEliRIUKAoiaSEoDQZJBhKEZEQySQCAIIFNIMwCiSYRSYzKMkSSlI0xZMZKko" +
-       "RKlRtkmWJIrNNIBEJEYiJBhGMMkWYxRqUsmjKJMmCFJMaSmiyDSaEJtBIJpANKMN" +
-       "JEkpGQAYjLNETGUBRAlBKURgsC0wzKZhRmhiYIQZIsZCIIMiiNmFCCiSZNjI0khE" +
-       "AYSEUkjTMSZskZKRQWJoRNBI2IojZmMhTIkQEgyREEMoomDSiYxAZMECFCSKIkGg" +
-       "kIDIw2MNAlgyA0SmKWSSyIaRCSDDIkZmNGghgyAEoERokkWTA0xZBEQhmUSBGmaQ" +
-       "aQBFmRJMokwxIyRSWbAkbCUFlAhgUISJIRkySYhAxoUARCSaIJMkyiZJNBMyGRIh" +
-       "Y0komKImgMDI/038qLf/av/bWSNVEtmFRx/2aaDVmKkY0NkIRDGJEWoEGLf9g9MV" +
-       "UJWGSu0pWVpSOdWDVjQJGRSChGBGDGhNNMYYwjEsaFISGPT3TbFXk873Xq8vPa9b" +
-       "0dcco0UEPXIl/+em0IMHNYJaXBEsiKQh/7QwsC9gAauDvWtMEBWhGBIBAerIYlBU" +
-       "SzPasze15BfAyGrr284QNjGNEmaUphiMxEMwCZjAYRpMiZBMpEMkkQzIwTDu5zru" +
-       "Xd1xdQ6A6E7m7d03OLnXOxd3HBu50dl0JOhxS4HdHczuO647uuLu6650O67t3Duu" +
-       "3DucukzRKIMhsUjSQQxDIzQJgxohEkYTYkZsAxSDGCJJERhpEAygoZRESSEjMpFE" +
-       "0UpJlBkIYwoyQ7/2f9H/Py8roY3wEn8nr7+72ybZtybdqY06yp1tjGVmsmJvG48y" +
-       "89EXnvy9F6OvX0vpBSIEiSRAmgSASYSkCGBkyc5J63pgiRBNsJW2xjGmmNsf9v7R" +
-       "z1rueFmZcfXzw/zTGRYxsYm2NjbbfXD64GtivKx5t9eubzmsMTbf9rTfKRsYx7YR" +
-       "jHWL7OoAJpsFBJgyAEzSJiLHxfJKWQgSlJjGduRqRxDIoETG4wj+VgUjnMt5PXnm" +
-       "vEQwO7ojzu7lxu7uasg9T00zjrtcaG2RKIwyHx2vUcbjd0OXXvfNafFE3u3t7bu9" +
-       "TpJ1t6SKh9vi13hQUX4d307pPHt553zxxHMGb4KrbbvJGTCcNs3WmOyG2fg5vsuZ" +
-       "jMi+lacpNcvr0XeKDnafDcIvhyL7927rr7/Pzfj7qLVW5dFKIg8+fKpuxf+vfhB+" +
-       "73vWXz3qCPPfw32Mn4c/9mtONctW/fc1sYad9JYn/D1DlDPoyyc7D5bSi3ncMPNH" +
-       "bWmvm42eODHImqooiuXwn95XZlmKYKGK7KdA6lrgzZpEiUccypzKofPy4kbjq6Nh" +
-       "o/ou++j5g2i5alDG/G3Cb0yaOY3lH7wd83fLG1uQ0nDG18UHnnOOsy+Y4u2Nv5Hl" +
-       "jTCKmSJYyBhnB1Lbbafjgaat8zzctvDjPPy7e5IdyZHPSTxq/zkHjinrI5v0/nmG" +
-       "Pp+JUz4odkc9b4/cze19oRNOjG2wb+PkWtt4RRjbBsfupHPO3Mmgc18az57U+TM7" +
-       "gQsH90UPHJCZN4WsaY383qkbxxO20pI23JHbCr3ssnqkVFJG/lN5x6yQydwiaSA6" +
-       "rcgBoSxEDRKIuS1slJsq1MtS6koA5+jFGb17XFu0owrTZZSqsjrkmLVo2tSN44ac" +
-       "fvD3aWfOerth5lG/Jlkfp6bqUbOZs2FpVptDIwCuWVgqIgkgJMtDBFi+2FpRDhEI" +
-       "JAKJtPXloMoKGWpU0YvH9h2nx/hxra8/8UoaoWbia9EeoTlN7Bd5PNdcCDKemn+L" +
-       "cY2qMUXGibc0a33/wjqMN0s8PmTeeup76JA7aKr1nMbhIkn1aX4m5rTPH4aOBlTQ" +
-       "I35HXHwtJ9z1XuF9EQDwDnCS3S9W358a/E4pTeTSVvyKGWTK/n4Xp7V4dB64Ua3Q" +
-       "BIaDtzTsXpXV1k9E54ousxG/XtEhuaGmyCefTL/r3478anc78deNRjg9uchGVxVD" +
-       "Fq6cMZqIdp0ihq0xoIf1zldyBS011SFzq08qfSxV8u0cT70dZgp8ebjk800pU8m2" +
-       "s1kKdj+zvmBEEU+P0+FlzrhOf/ifG2tOsmrlp7B88bbCY9u1VFK7YavjSQ7xtE94" +
-       "3aiJb59/et60wn2vrgeV/jeNd+O/Wt/fp6dNf7iJA5QICcGyiKgpFEFQiCjEGEQC" +
-       "LBIioACSIqiCxSCqIxJIw1GQ0Ua1Vam2qYsmg1rVTbQlmjVbWbaGLbU1kWtlqWrN" +
-       "LVNNaaQICZqIhD/QiASyQCUEBKiRKRAJSUiASySKRAJSD/zAgJUghMIgEojKiCf+" +
-       "CIBP9wICfq+/889/0uxkuba/pJdybzbJvEsZ/CpEx89uGn3OONVtyYDHCGIxNyIx" +
-       "JsYgJYbH+I5RK73DuMZminldjp3e8QpDJju1QToo7pQFEpABpEV4CLQo2QicBAbo" +
-       "SEINjsMsDt9BO4nJzGstqAmgEJwhRyggJYoMJE0sJoa0zOdEgXdwiQssy4L3pzbM" +
-       "CwOaLEYFDBQKzaJCjFh2yhQOHbgLVMHXFUf7jhKTXPWsNDuEPXRHfJuLlKqls5Tx" +
-       "pCC1IgIHnTm5PeWkwwjobODcCdTCa0YoDvMlcZwvmQTkg8KC06oALrhzZqrQmQq6" +
-       "E28rdrSUxBeLkBshIKRh04g4LDdsmTCpNKSszbu9lHOoAwkmTDrOKCmSqExdOsOV" +
-       "D1XsAQpFVMukLCcGYGVFpAp4Bg0VnXFFjjdC8avBE6BepA3q6bOgot8LtHTiIlkb" +
-       "ARVEcldJoYt4Pimls9rpBzDNzeMwOdNAdSkWo4CrsTZ065yPaODXMCkcZCarR0LU" +
-       "voX1R3nDEsLtlyklMo3qrYHIguO1Ci7xRXFwJZjfTrtZfAyzUKhgJcLOIzeTvWjG" +
-       "zDE27OYME6dM3Z2kVeKcV1I4jKga0x3vCKlcUmkjRE1Zzsmxsq7L3zOnQ8wzeGDZ" +
-       "pQO0uN0NpZhcQSuVETbLL2zvKTzqjtBhwIXGaksi8rYKx2Wi6C1J3Ulb1dwqkjat" +
-       "FU6mO1F5Ii+bGnOMaOlc5EKekFDaQ9tjCU1yqcE66xRVh1ndLcBt7ThNI8LbowKP" +
-       "Md0AHRNhdYOJksYIQETYuK3ytX1UEkFHZLCghijoBdFzCgKJmlJSADdF5CnsMoIp" +
-       "pMjeqUgBrXACCcshXWsqyAgenB7IMoT6ZghKl5ljwkJTUVQuhTp3YIWgQCl8eBO7" +
-       "FTzwWGBEw8BDaLuSqMmM0wWE6QVsFIpRwmCRA128BCKpdaVunHbkyuScBsqeFjLJ" +
-       "qAw0WUUIhMN3S5Keua7Wynjnew31G8jecPcVIYxGw3trGziGoCdTHKPOEpO5732V" +
-       "4lnVA4VvKsc+R4OHHQz2JkHFdwSzeiDBUGBiQAJcznd7Z0oCmMykE5KjZuKCyKhd" +
-       "5nTSBBtu1sj6s2JCiZBgpYdOIM4luy6evBlYUYldUQQZKOoAiZL4d7fe003l07CD" +
-       "omKNzZgXiveIrzXjCZel4BcyY752rec3eRoT6jAGZAGEc3kkZQhLcVNCq+qVFSim" +
-       "BuCKZeQr5FF85WTJZzIXXwto0cB2CpntlWr0xWTfLt1yrDg8503VJAdH0uqes4bJ" +
-       "d5wsYFakMZlVS7lsEko6gj0LqyENh3rvG7qYJiQ9xoY33UthsUwRtEF6HUjtHWGA" +
-       "1q5N1HNgiI7rFa5QiEzuCDZ03KzKswfM7185zaRUkRyiUUssQSPAwlc6CAaa2KwB" +
-       "CwsOVTUrpamy4uS+mkF2pVMrpWpG7eYkYjcqSMY+pyDKhDILMmR5HGGc5ml4LJEa" +
-       "A2sxQOlwRDZ0WyiDjMTFnLRKRw6sK02ph9cZnMe8fZrmsJ0710vNY0uY4QFbSrzd" +
-       "WY7FvR2oW0ZI0zyUKMETaoJFAUTUyWuaSjAQt4DbxyqAYcj2ysQneAWKMQAWMoBB" +
-       "hIT0HPY5ne8L49gqYBFQhCXlCmzuzQImhRcjCApqiwAmbWJbzsY5reBB1xT5l5T1" +
-       "ybWy6V0tnJKrLM5WHNy+RpkM2cyZ5hebCcdg7aCc7IdY80lCFwSGCAXNmQXb2QRQ" +
-       "x7k3NRDGXELYQ1gsQhhUDum3ZE72ughHRdRDe5Te6qw1u1LB7lbNrJow7QT1uAV3" +
-       "LMgyxdGjCMORl8Gn2BQuwIUzm8BtHWJnZGBtieoICDTvKJbIMisQ2U1BCZoZlhQX" +
-       "ygQBW0jtgQdslCYNcrXVNnBA+zLTmqmqYeS9YapA12zNGgCPsUFmdoio3ByWaNXs" +
-       "7NrZuGMrSZWRJA0vOHdOWzMw8kjKrskdtyHLanDtiyJzpWVgjo+aaaAkqTKWLcdw" +
-       "xANHQyoZ1XdCK2biAxFgjnDMsxEk4wrWTKgmoae5DQbpESptb1u3Dbpe6qOAZBKa" +
-       "UBJKBZeiCwEJ0WgjFAInS4JGF6SCWBfA6F3ud3YtJTVontzKvsRDk5lipuE0+KVI" +
-       "KnHbGmhhDdShYAZ20BJi8hNs22nd3MxNWKTyqlNVdr1vFs1kiRRBRoZYJt1SAw2W" +
-       "IVY7gXmtBFNaclgFQFjwnNh/g2AZt0p2YbFHgZ1ZkUHIuCAEMTDITBEMBgx4Ecgg" +
-       "OwyuETQ7GUQsGRFZENlWXORDAZBg5I2Qg0CU0NEcuCVhf8E4pyCmHivNaJAP8Dg6" +
-       "HMU/BCCcRX/CAZi3FTsR+gqagg7gfXVQF3AFS45ig+iMnICOKROLlQG9QyjKyxqt" +
-       "rL7DL2NWEoOARpsJENtjCQigyaiVbD8RcRpvD0dJYxh4KmINWGAOAshCD2ihhCBU" +
-       "w7Rz2iEeFpgIN0kKqUcbsJC1I9OQR1ARqIJlDBA9OIaiEhhK4RqJxpaG4HNX26+L" +
-       "L2uVbzYr6uxSpDYDItapRNSDSPMC40zShplaragEHVTTzmCYzRWDaG4boqxNVpQe" +
-       "/U/8feVF+H1z3Iy2hnvDyeOt5n1QI23zarZHe9m7tUTEm75vIImeGztcNqf8/DK0" +
-       "7AS3hyuujbWlvld0RqQIdaW8VAyyAqKpJUEU5BBqICLiixEH2fZwoinThP1ruaww" +
-       "Wxs79RpIWIc1I6VkHrWTkb36HKsT8aCEdYQp8dyc8nHc5Tn1GZ9DqfXs+w6jU5vi" +
-       "5KOwjHVB4s9RJbGxesXpEnueovCTuXRSXfPMqMjxq9le4We74avJg7nrh8fkY4r3" +
-       "uTybuqrI5WCNRuBiLUVuMAR02HDRwNFmhVQC0wOxtAjoECQdIAuc+ZfaLo6O0IVM" +
-       "EV4FEtlx4W2FCCd0Phvqkylm+T5VSzgZCqK7UNZc+X11LEfD369NnPNn684h236W" +
-       "bTiIcgobiiYguzQoGj4YxXj++cs4Tz0qdHkwXXYuqOxh4RlKlgXcTb+ZT58LL54/" +
-       "X5UkWd6UwSUtKWg8ezAgn3LlVGy99KvHea5jdcQUuTpOwzdqe2VOu9t12gz7+79S" +
-       "tp9hZGnb9KZ0+UWVGOfa8PL8MePzZ2jpXPc6c8Sz56UZnuR7VyqryWOdve7uxH+f" +
-       "7i9zTaJuakt23DIbPPKW3WvwvI5hyr5WOMzSpMgcRs3ZkcLrNrzmzOP/kkQSPs/c" +
-       "fx/623+62xX7H7t/15ZmW2yT/C26fxC/1B/Nm/4vHf4Y/W83vZdxnDDNatLLf4zJ" +
-       "2SOOSTXtmh6bgfkM/aUg/9rYz+ROs5f0f7Np83tXE0ON27ynOf4eduzHucnkr/bP" +
-       "/xPo+Tm1N30cm7RXZ2cox/U5Js3cZ8ctGrXWkfP6/AuC4YHo+wmtGj+jDpRjOnhC" +
-       "Rui6MS/oi+aX3Nt6cccYzh37RNxmjpw854P83H24dWtaabtnmK/F6q09XRzP6HOT" +
-       "UEd6oETQUHmXUt2toYLMjFiMiAgDhaE2Dii0fPTcNGH7p5jf0kPg3fXkttKDMGej" +
-       "3IKP2KJOlt/R+CT7PcY3AZxsoa+WREFD5vk4TdXR6uRq+MzKxSvDrq2ak+c2275m" +
-       "d5ettnJp+4/Y+HV6qxudXLdedt6uSdTKGaMJP6jNbZZww68/M8PzplDqYusu8ZQB" +
-       "AFQUJ8y9CB2DjMriYXiyEoiFRoNAmCWWSMuP4EvGSYUfk7ut8CD78n+j+iqqihWU" +
-       "fmZb8RVjX9LiIokXhgfqc+hjbZR8xHTSG2NvltyeEkBoz+i+EBqwZMS3bqJsEaIa" +
-       "GhUYwpTgGQIwCHFSPHf9PH5soVQwNtyu3LdB4H7h7qHvPtJPgw2vhhBmwPscrZ9i" +
-       "B0ofZ8/K22LZTR+R6NBmMbWj+o8N5NK4btPxmPo3Yvl53M08zTwps2Ux8n29W7or" +
-       "ecnOTH4LDyKfk9eenmurrptb6EDAylMSyCFoPt68A+P2W2rxpvgRO7eOTE06p78T" +
-       "pM095szdT5dJNkqV9yvdk2KjRq7ZNv2M/zD1uISNH5LRt2dPbXxwgg+aSTdJarr4" +
-       "+t4IO5+isaqdYSfl2IOJ0ntA756tsBY3I66SOBHlU+0+8bWUbHdtxa1P2y83z5Pv" +
-       "NqJ29h6ymz5tztPN04yw5+OsUx767u+t4Wb68vvztvPsCb27OnbrgHffegij8Dbt" +
-       "R+cpqFnrpoO2jCj+dtrCBfwtFtxfNrZd9ZcQzVPa9qbeq8duMYmVfF+2cTONb3u2" +
-       "m+N7LwZwK24TMUPA/s1xS2PJ211vg1JfBUXQLO2tMacGtLJmttPE59YWnForCNrr" +
-       "vbv4+/xy7+NG7BfXbnqKVTuo0DMuFW6c/DBvb4i5+crr56qLSmCHWi131w0DRNem" +
-       "G8J8mWF6/BavOE5YJruAqh/e19oRd79a8j2xXHhVteYnEW9a1AvE2WHFHnr7Wf43" +
-       "p9q/GjSGtZb51XBDR5fZe/afXwzt1jTi0aTqd5pQ9xPS9+tflc68V3+R30RS3anM" +
-       "Z7/OYoK83au2vY962u/PmnmvWmcymeWxxPne1H49bc+va/KVHaqJxTgrqcN7zDZ2" +
-       "TweudXvavlknvqpsg6zC6+IavvB2enbrx754TjNRir97rpG62S7VPnth+nn9KvmF" +
-       "thTinXkTrfbYcr54eVPbFQRF11vTW9+CcB+4r3XRpMtsKWHnhn3dFDF7PYpQoLeU" +
-       "zh639UyDF5ouhQerfW+FKROlO2lJwm+UDcwvkjwQ51nx2aQ+iINt/lkDDTrmb2vr" +
-       "xryHii648Xu/tF6QHbUcIFxgYRp4+V7eaLG64b2su+ONNxKEDlYjMR1Fuhvauj8z" +
-       "eus/aeYa2iB/Va1tuuH2zjOvxxxonwsbYInfrnTPNs504yedSRkJR0jeaBvNr5mG" +
-       "nFr5TFHNub0FVE3034E+q7tfF5n54uuT4o+28bYpzjhtI6mfB4jbVMEd31VAR4vi" +
-       "GN8Tu4umaeq9qLGLNUsvpQu/8faJd34UW2pXhjvaq0NFmKDNZ7UjVrNM4aXvd5pS" +
-       "g7LW/5p7955Vtvf6tsMfFl9rs3VvkKnfvemaXnFPGd4je+Y3iU3nXv37xz8/Ot5b" +
-       "nc6a2J+dPSXnLYpvqfBk7ZifA8RiUeNNauSKONwZWKpMDsKhPt+f5X25+dAjco/6" +
-       "X52E/Ys3128FfCeI+sV1Ngs+8/j7+sqrWwKe/0ydfK2xlW+++7Sx8Nr09NQEOaq5" +
-       "Z21TVe+3euawND9LPk1eaTWOD2M1bXSfq32fH5WrqCSRodPHmm85a3Gq8/ldR8zn" +
-       "NtO6s/E5oRyyZ1pX09q7BTxk/n5j1O8Yr8nSj+qezJTO/bzuIo9vLwYbxnRYVVut" +
-       "OL7dQJYPFNnRyNDLjWmONtQBd1AxDZA39o0QEps8eiBrSOQO+M2yN/b3A0Mr9bVG" +
-       "5A42A3LcI0uBvqcxzal1tziFTfaXakSnUaaNpTxpS+3avWO1hvyyUtPUe+uu45yi" +
-       "4aeNNM2GnS0nrucvjF/OGhoOnW1aB+Lxnmzq3GyztaXeuQpomp1FUXt7Rffavj8e" +
-       "Jxqux8eyex3ftOU4rXxtxMYwPRqwXX3Rcbx8dn9s3YtPa1XrnZx3dqikI3E1b3fP" +
-       "b83aGWPme0CcoGvA1o2PWLs1K+ceH4fTFuVHzrGWGpHci+dabeFi0V6m3aE68H73" +
-       "Zw10nviGOyJI6DzqzFDysrN7Vt3elS/jFreqKx+UpRu/mfHbO2Jz7663zp9WvTov" +
-       "vvvi14Hr7KrTbRduDN4R+UTmqrtsy2L5ZVHyb3Y6t0R06bVXuuJsOJpv5TdGqPBn" +
-       "vjuRp2u8z2WyNdKcny5v9uOfk2vv7aaeetW8z7wtz15nB6WenehxSnftgbkj3tWd" +
-       "Mah+7rRbrONx6m49l1arhpoQIQzabRKaTwFVPoKPOmlsaT9tWeFUp8/XrDuFrtXT" +
-       "1Ap74Ub+kFY8KMkmQ4I7OOw17bYmTediZ0ZtqXZakoO7cey6d0rpPrCrpmfgHM/b" +
-       "a7hjUcJ7c3OM2GCCHLLJ9KNHOb1c199tbZc8EKX0o9vETvYazOKX1tnTN9u/0fij" +
-       "7WpVRTrmmb7c73x2zlpOsWq3PBNjMryyVim+k6qIHV8cZzrm1NNNtGG3WiU222+q" +
-       "WvilXLVPDTtuujYqnq92HkjtPrnhn8wfFVRtPKbMlam+ja2nZNWzVGx40FOJoI1m" +
-       "jzX8RMGuvpd/eu+lF81TFb00pDIz9nRKTd6RSnvt2s+s7+qqt/jhaRHwyffKQ/z0" +
-       "/tG3K+dUXivrmu3jC03fjSsNvPfd9sob+3xr8iPBlBljpK63v6fnbHtxKpDNFNx4" +
-       "fWXi+m1XLycVHAWwI7iooCKfX4XX8vjqgNOk/E9udJqie7fMu3gr4Snj7XtqUiPX" +
-       "k/dmGsfHvAp85erxqS/xs1bwlgkOcUNz9VxavzsJ6RvKmczE3Qfa3x8N7dfP19fV" +
-       "5zBafd0+t4Gv1r9dSf3T6+afWJ0nyP0YagjzqAokAsvA5HMvICycScGRH5DZSUA+" +
-       "4yHCgQfxOdfUK0SiI3A5uCNvta9mxHytvJydnbe2vh3ekY7Rp0aKfJeTkcPDZ8Nm" +
-       "PB3NTaen67W1s5nLDjLOzJpdra8zzbuJp5Pt6W7cnZU5vM2/Y6dMPz9e5Tcsdwed" +
-       "g3dJ1jb2DdpxJIz0Z0kNPqBsn92/s4FF+N/glGnYgij0wPhQuH0EH5P7jwhh/JyC" +
-       "zw+Z3IMdOXTp3K3ZOHCvyezHJs5atrTSjQcMZLMtxWHd4dXKNgxw4aZq3nzb+1vu" +
-       "cjpvN/b6mqqpFQxWMPRn6H4LFK8ID7PD0s4SMs9KL0KMPT9CxUqLPxoSUfQf0KPy" +
-       "Lhh9D1vz6H9jW/B0emjPs4eCR1R8HP7MbkZSDnGyW2fQzpoFHCz0g/k0/c8XzYzM" +
-       "Xg5v2dmmnecnavJvG6+L5VVNPmrir5NP/86vZ5HJ8Nnbq3mj04tjyV4Y9nm2eh0f" +
-       "qafNu7Pns6K05Gnm+zfa1ps3fD43tuO76Gt3pHDu2Z4fN0c3eclcM5W46KqvgrfL" +
-       "ZZ8Ozk5zj2t+GJ1OZux01LfBLof2MVLIb+iTTw/Qko8MWFEI2oiP1WGGjYyKLrbb" +
-       "fh6PuDD7yk3srttD0dPqECggsURwgcKHFYVt9Z+a1C4nm6Upa9L3uLtW7mx0YcK4" +
-       "Kx0dfZa/Ltw8n9hXZ89reu1qDcLLcHUQNwHtoWoGtuURwwrIGERCPzCr0EbZJDNy" +
-       "QYwp37N0hT9ZQ2foLh0PmQ4bKfLwekfRti0fBA/YfU4d3PrbbDZ6xtdCy8gjwLiJ" +
-       "ERJhI2+1B1WIF0FdF1DCwjKkl0UI4z0M6fVMf6venWbllsbtgcPvILqxNlq6efK2" +
-       "Sq6vRw6K51ebu01V9Z5ui4IUOJjUBhQUeqIhoDPBJAf0TLYPoToLip4WdGkzxt/Z" +
-       "762yzA4Qhhh4oHIv3KIDT5KmZlTKwtaWOeREM8623/B6elo8Q1JxiWAgQncQECgM" +
-       "LAiWAQRUxWNHd3dxdjkaybr2VslNjq7NlVT2j4cJ2ejho/Rk05YtfCzu1xat+Hdu" +
-       "91cvNxDspIbRFIVURFCyHQYewlUKLjAgdUHOqqFXQdDAGooOZKIyENwSUKq4sEFR" +
-       "yNRMUadp0PLpEZlE3GfqYaDKGQcHDf7nD8kmHDRh4fwWWYffjxw24caYWfk0mkeN" +
-       "D4SFGhHiVFbu2EkgtHFezxIqaWnaEdzJFsqSNEFKpZXphid250aNmnZo7ZMVlx7m" +
-       "zFVXDo03KvK3TTdqZZZ0j34LqeGyvh6K8ns4bdrequzHYrNt5jMmO7tq3Hk9GTU6" +
-       "GMOGnzTTgbO08zq5PJjdy74zObhx6M8nJu5Vc+Lbm9uVj1ezk3q17t3D0exwYMKB" +
-       "pTOURDWRGaXREECYuJhxzxhETUu8mXv9Vjp48d1lC0/f0WGgxkH1HjiPyUUeFBGO" +
-       "am8bm7o07t3Vu5lah4OzS3020qqBK4ICgQPb8h8fj69n+3hleET5+1Kk1maNSlav" +
-       "R9c8+++/Pnenwej1erxtb6HV2SCSSdrJHVYHikZUg1ZVkDtUEypDVQZTN8kDSwll" +
-       "keMwS78akNOMiJQQc3dihLlKj+oCG7aEM7oG4kZW1NVLsxIVjJxmQMVBiUTaWsgY" +
-       "DYxiQYyPuBXhdUKWrZb79D15ra7uMfLW1eW8dXOaiNhdxQslkuUzMFKgagC1Ehom" +
-       "iOOZC4AyO5qNxXMVogEhIpqSNRe4grNtR7emHctEhpNtsXLSm9xOTBmOSDYeNILY" +
-       "2DG2ibk3hUFnKtvTMXYBFsiI1xxoHjiBJg0ZhC2Vig602I1PKTNWvbUbYm/JAG0U" +
-       "aUsNNFafJHs1SpG5rY8UsGwe7VRhp+PJFmpjr15ahtvTFpqhuKWCg24WKj7kpybZ" +
-       "c6V5CsG96jMayx1GWUOgDVCIZKqhixI3lLuejpuwX0E8/UR6+vsvzdYqEqnmqYPr" +
-       "ynyiMGXW2W+XV42wNasYmujHR/B20ne7B8uftj52a23ykGf0r2Fya3xEEDcibiTQ" +
-       "0lZLgyC2ePfZkNiK8bqa+t/uN5kVHlxN3dckC7FJia9ve/Uugg2wm6UBkqXOGuys" +
-       "qBJmITKhYQIImk5o5EECZQKpHrRxXGOTi2LXQmqWh6LhdyTi01SqSQ3VOEDXmHyx" +
-       "eGS7oe6mzQZ5CDD00rOtqeKJjKBw+ee+cWoiUVDVLJ/FhK0iGh1VeKiES0TeYm9Y" +
-       "aEWwQmDQoQiRwvF1pOMzCkqwS5CmptDqzik403jShJgqi2UaBbWZmCIlgrKzuoHE" +
-       "I80UvVUMTR9bJIWy6iiIAxXukg2P4TDx8uds7uzmTTj2cu9+82j892bLO1fYjuV1" +
-       "nOX+0ET1+9s/q59/SSQJI/0pffnnpk32yWNNLZIyLEInER1S3+6lv+L1te04VnqI" +
-       "JI1eRIDos0ygqI/u84V/ySnvUfr5/o6avXhuP26/+dG413/yfDY/hOza/3m6353D" +
-       "FQf4gPLyckmNf0/Z+79v75+CaSQkY8In6aqSH03WX6Z0X9VQB/vFWq6C5csRuvBZ" +
-       "nX9ytV12MkIm7FR+DLJ9H6IBOuiLogQGQ/eRgyJJAx+aYLFFoFE+nXZEmdeEk51K" +
-       "K8zR4ejlk1Rjyd9OlGOU1IHRC4Twt1lj8fuDSl+toyn7KlPBdN9GfhbdlfyOpi2j" +
-       "7n1z3jf4hxzT5xvpenii/OQ9atPRJOV8YpWSsyBkCMSKpoqNVJ4qi6kbGS0oTp5U" +
-       "Ze+1/H5LYmU6Uu362dTHpJsyInEO5DvTRhC0noXDbUrY0aAqh/N252CZJLYxRLww" +
-       "eDIgJvhTpSsrEJ4SVDvd9S6BwlgfShNMd9KmGrWk3I52ZEqkIKJiiDZgpwVrTuGm" +
-       "0Uo/ZLXM3bFdFTPSQCOxHSpDGrWnDhd5Y05Lm5qtLILG02ERoixRXRkaboZjM9Fm" +
-       "XShtFC7OcoJwLVrbJ2vpmlco5wxxJm17X2pWtUowXbS88ViaVfl1mbDdKMZhHFFV" +
-       "CHEiCc2ed3C08Xm0T2nd6Uv1K0yITQlBsslUGWxQP4OXJVEfYPWUXA+kdcuh/+HP" +
-       "wWUH7diyuFPB1lyF6ZrDIprJE4SEZ7msK+k6P1h5hh3qskj4roZNzZTZjCbg2ePa" +
-       "UWtQoyUuGzm+j26e5Sjd6d8bPnh8J/3oPU17aMyljAcLyiBhr8j7ZOg/Q3IF/0Ta" +
-       "f6XwNY0RdbAzegLT47336Ne7qtUughSk2m77D7Kk/viknCAADCufnfnmfRa+PuZ8" +
-       "GbDsi+jRFrzw3ixPHSw07DIXufXiw4eHq9LyQfWZnFx+S0TQXRM1QT6QbNSZJj8m" +
-       "7UMbjp4V/ZPnp3lbJ4dvxkSfH+zJaG1+r41D+t7jCD0giVFEsaiSGe8yzuQcIPsg" +
-       "7JTIOFnT68Mlm/XtHO4/DVboellFEFwpf9tkkmQRHs6yXoRCkuKPxU4Z4SueGdIi" +
-       "CB3cE9RKuhrCdlwcyTChsiIXrJwrTvs9M61zkDIsOaTPnYckuRlvrVGxZx0zpzzt" +
-       "8L7s4WtdLbRACW2FaHvN2uU7i5n0qt00Kgy9iK7Jba3/3pNiLNMrM1XhIIBPZHET" +
-       "RypdGC5pZhk1rtje4i3zM6TWPeYQEE2ICad2RgNnBwoZOXY1T9NwigxKQAH9P9Hz" +
-       "7gx+I7Cg/gWYSkB3Ml8YRVoO+7qZcd04606nOv7+wkB9/5D9dwJKJD9w/pOUxtmf" +
-       "p+39YZxm/5BaSsnQxtYbRsXraiFwqdRNWIdK5L46DjXUSMMKSKJGX16puhl1MLFs" +
-       "NjnoaUBMXnCJ+Kus2EV8F1F0KGG54HeshTQt8laFCKcUvV0VSQaPOy1KydMvj2Ez" +
-       "AewDB4P7DzDchscafa/a6vq62dZRm3G2jIrBxhr3MevBrYhskfQQhIEa0BTQhzBU" +
-       "xFWQUuAIPIiFQc+2IfQGI/BwLEPA90bT/w9O6Hlgj+ABZZYIk4UKMgIv5BFETg9o" +
-       "QqCd/YV/CKsIEgWiK+Iqgr+QaKBHSWPIIpYAYOlqJTAzWgXcJAWQkSQfBkVzkTkt" +
-       "EBuCK4412dduYOlRLbTkd6BOG9mJ3lkOMIivftOjRKpUQ1n8N8AXRv85sESi9I3B" +
-       "wqNAL+SbEH87kA4Q0iLxfAXQzIiiJA+Dio0PfHBFET4KwoGEuhuF0X0+Od6iPDZB" +
-       "vqe2ZbNmwwwQNnblG4ZREfEADnQldENc+vyD2hPFPDVaTmO6ErcB2CSrJHawjBeT" +
-       "Lu1HHXecOXpfFifajXzf803to/li3IQraCMnXE7aNaF+UhNCJJ6bST1yCMSEkvrk" +
-       "EZsiJnq9YnIRyfoE3qs1+5g4qCjgAB/d3LXII3r+NecgG/A/EBhNc2cEhOijxJO0" +
-       "FJewHGBzK1YnNiLkAPBkUztU2GMpL0j31B6VEaAuiEtObw0ViA2Qo2CQrPgdgapv" +
-       "FCGKU5zwAX48rSmSGfCh0sBAp5Vw+mHYBmgyfBvQ2gE9Qiw2eCK950Urem/KrOD7" +
-       "tAApA2iLxtGRmFUGVZgNFMIQi7APICVtlUdVP5fqGLX9TEJBSYcWuJiEgyD+whr8" +
-       "Qt4j0BCvhFy3AUJAHpE2ATCfY/XP0YM68EHwJaHTWChL8gPdCT9IoJW04ShPtj4h" +
-       "rXUO1N+9eNBzh958PwJ3onum3eftLwTIIDagDw+o2Baej5qT77qlol7lfPlQODAr" +
-       "7Qiue8ErGKQIVtOQ+yuebQ9jz0QHR0XSF1f1oB0wm+nhBsV5Dgxx5TjC7ifRJgWQ" +
-       "JQKDKZ5QcF8aA+2FRB9siyFbQEtXEFsiyD1KeYp4vn1kdk65sBN3fx5t3nO/Y59A" +
-       "R189AT77u6pOAXgcINOFPg0rAnT4ODvDpDvB+Q6AjhNjrJ2a9VBRzOAGZ6eDgd4b" +
-       "NoM0UeBxPD5FreuGt6Dwo9RFdb8nAiAa2R1p49xif5Sm4cGGg5x+6ZreF2MUxiIK" +
-       "+gryR/PfnDI6Q9Gn57KlMJ5766E3pkiWtHqD0EedIKlAC3QaBfbl/j82SCLdu7yW" +
-       "v6Hmk/T9Y/qXglgiQ/aIREU3sfkhFsOhToBSbFaUQBrYeBo78wWrCIiT9D1wcVo4" +
-       "GjuBz3joxqZU7bQDFwmjB5e74MBLoK0PA4QkclbwijNF7qEEoFkFRROi0IZfN0sI" +
-       "zwihRtDz4T7ibJnxZdmKq4qOeIUAbh8KmERXb9nKQ+5QdzgDPcJjvxw6bZ3TBIWY" +
-       "SSeN4U3EZkhKxct8oIiTDi7lqOt3Kvi/tFCQEsImhN98ZBnWjLEBK6dw+FxgB1I+" +
-       "dDUAkMR8mm+NWReOPvBhDZjk4boMpjxoBGF5Lqkt7tL3kyTUNCK+PoZx3oUqB7h4" +
-       "5wEXO/lduTg4NfIqAh8ZfJSAcG/jGkuHA8qr7Ro13OwIJLia9u+yBZ0dicUAxwCA" +
-       "kEDreMjHsNGLghIQjFyrYc98oQaGSKediKrHfuebY7DkhSaKvv+X/oH7Ij+oKSLw" +
-       "2kgfoPv0+vpfWeMjRqQk6L7QtAATi0oNZJzgYxP1w4HgU8+oYPhFESAjAyvt302e" +
-       "CDaAWgGAh7Xub6oUY6dMeNnQh4yl+Nm1AA19panR4CYHnOGiidVdfdsdGvhv6Zx0" +
-       "jjJBqQawcqukBR4Ux34pXobqCIL3lHdgOad5nLqYjUZgE4QvtAltbhvPRFES+goc" +
-       "QfyAkiF/e4WiKYNUIFjKWJZA5fwJczRRibFGT6zCHofhgW8eydxvZ1UFHu97Toow" +
-       "8FguNJpiKoCc0GQAn4ceHt3K0i1feYVcihrJaNBCZJgh3FO6ENqkEW9eLD7vi6wf" +
-       "fT7OU2J7Zn4VPfXdnohaADg6HCzQSKlLKttUpsb9HGGYyM1kdbG3LRyKBaAlAEQi" +
-       "6K3SwEpXNuY3BAQX+wSMOhQK6JuJ9BbiQxBRmAuim0FUeeYULAUKioFQBh8aR3Mo" +
-       "71V1gxByA7oX2gGDQe8klFNQQNSjx5kWPD8XwbJrOHhrmPG1eVz2hyCeCzw70QRm" +
-       "PBaXfmHpq4d6Cj30CwL4FmzRhVE1Z3PXGd4oUT3RT2fXIk3Tn6hAxuw6R4ZKzAfB" +
-       "E2O4JIhAk0YDAlY3e4AHkEgAr74ycQwAnQW7rtlcpF6JZA7VNu66JrCcgjUCEFCE" +
-       "RpghIiGj2TWA7EMd0aiCjpcIQOLL43hkAKrIRD57bdINOGQ01LwiQc32iwDYCMaA" +
-       "kHwImA5vu3GtiupPVup02YPe4G+iICJJzomO2gryY5W3M5zx7DfU8YCDsEXiG6zV" +
-       "+xuOJIG8KOYoQjJHHsGD13J0uAvNmGVfCbv+KJrzyu7cZk07DszWZjii34Z5Oq4J" +
-       "YoGxovONSVdyqdDaiI5o1E9gZEO+MOknbKrd3vCGjWOSCrnI7Ux2qgrF1ozkJ12i" +
-       "qiB+Qq2iQl6eKyIKevnnG4vy6vIfKJt1EpCX9n+P6PQpAeBRKJQ1sOYCWlkXAgV6" +
-       "zM7YJl8sa21D2vb7geeO2SpmkzN+KTwlzt0iohA2AcDPLw1FWDBUJvFW9ggVk6Dx" +
-       "nW8ShTWwRlT1sHHJyMsXFDhNL6q7kI6WJJzpELbUQNVIhmsRVy0ajWqqiK9NrXLa" +
-       "rEhagikVJEOvbHSFh2axoim1j1bJkioWVpJnTIwotJdInhXvflf6SU/PPQX0bTPh" +
-       "CdsP29ywEL0SWUfTCD7EJL6ETkKMZq+XfvOV9/V1w3yP6vw8Bs00Num+z8M7mbcc" +
-       "Nyaf49zDIxUaQ2EvqlaeEBsxpWMXnJV3xw2Tk85CvjXKxcvj69eMUfMr8bW8bRbU" +
-       "onKyW5YZYTLbI2sO+23t750Nk8klcxbgYLeIcQe/QCQJFkWj+oMfqaThzaIrMI2P" +
-       "7OfFp/TvReP9gGjSGXxEeEVFAmDkEvv9VUZSkBPbMF8w/60D9GpeH1QCFw55QkLu" +
-       "z9IAXDqKnNMEC9ziBCmelf4wfDqr8bOBhgIc0RJII4qPuV5Nz9AAJ6ARU+oPi6hT" +
-       "+q8gwvYgoidW+M0fbI8rtLFtXO8iTUFlJvXeyFxmJtnkC7zuiaT8nGztzQSqBLOU" +
-       "ovW3gp+vzfBxm7PhlVblQM2bd+/Rh4dPRBvEDSXngueiAwyDAY7g52aB58+eG+XC" +
-       "rEW8lGS1QUeWOAT3cakjvwRHNevLrWRGxOBmTNeUHz5BNT4o+AkxZAgM8CgQuYt7" +
-       "U5ikqOco13h+zN5A3dAfUbWApJdeQtkMkEkG1iAUlofiG95daxu0Xul4UwF56lZ8" +
-       "3m8LyQBioWOMnxAZw8H19FHnTZSfCQ8UKukI6IKbgi2EROEVBFDkVQRmNCWiK5gK" +
-       "gjqIqofRAygkWCEQQOEBE3AUBUywFE+iCoPxHKo4qQYSR0uWSDgsC3LBC2FUgIbA" +
-       "gEIgr0IFBFEV2beEGgOV2VCEkasTeUI35YWoqjQQJBJsaVFsgnIIYIegAZiYinAC" +
-       "KCHIB8L9aSU2jqpgHDRm0jioEdaHayC8iYiN6RSgqyRLYbpYJZUhzsQdYEVBA3EU" +
-       "HoIwQQ3BFaiKBRPagNKp4YAbiYCICDIIOliTxeOOGnL2EcaOMNDMGJjKNGgchDj/" +
-       "BKwYSZqRlgLQR7nzcAWpLACURHNK7oqAsUjajiiYMTUESEVX6ICF+TFgwSIL3tKF" +
-       "+9aliQFdBBB/IK0AryCL37njuaj74l8yZNHN1lSjgfcTgmPsJRZVGcrSr8IEjldQ" +
-       "KtmKapHX0QlsIki0IuSRcABgN0Gs+4HbDqPIFBxJiVh3OSukGiQvd5nogLDQRteh" +
-       "2MyW2SI9oRhikH4T0jXdxNxJF2Xnskl3AVffHjA67x2y8y73Yo5mAE1DhsMmXJEc" +
-       "XQigaZcogCwOAJSmvkK59/AZt5r6CHoKYtZF6XRWBxO/0HFiG/lmwBS0IXvAvwXw" +
-       "uNK56cJCuiEUIhAnVsVC0oQ/LDomFtpZXfIu324pRnto5FdNUA7OBqemCvdxU76w" +
-       "rnterFGPG+6Q45tXnD6WRacT+nbNIk1JCPpi9vz6KPo0aWTYVCFR78pPNQgpwlQo" +
-       "7nZl96ldo0qhd6oAriD7PYX3YjYi6+KtyURx0Dh5o389ggNbU0B+KOiBJNO/YO34" +
-       "6a7wfKK5PBjVqgozX5yrvYe4b+g/eQESyAJYADkx6QeCQZ6hHDToVxoz61c19ymI" +
-       "QUB4ySSEGSTHhMs0Tr7Of7v5ZHrYzWRqmxy/D2PVnfrHr7nmk6vMiLt6Pfbbft76" +
-       "NqFfrnncwD0EdL8qWqmCRcAGdrsAgwQV6XyemW3csQRzF17hRM8sNaA5u41TovvJ" +
-       "lL6Jmj0Qdj3rXVUPYlIJEIbMcN6Qo+y6+Gy6V0pk2Gw6o2eXyfFnBOzAXCDYADzR" +
-       "CSnRaQYZ+hwQZ0h7sXXIQK0DQwbFchiJ7Akq/buuqEJT+FvwSPhCs1JX34emWkc1" +
-       "+0JlH7mgV6fdrze3n1BaU/HP0Ip6Az60FlmH0F+FDieRNSpsh3JnZieg899kMapx" +
-       "A2AgedvbfYhjt7fwdfgTf5O/lUCeRAZEpJHwvsvi+d3wMBEna+Z6+GGGgCoek/BW" +
-       "dQo/JYryYiLihedIULrmV2fAYIU15yOAfqwHuI8EwYI7aM8kO0X6aYygiiUvGaA5" +
-       "AqKrb3bLK3Bu/ws6awNQMldRV/OihvSGeGuLuQ5zhdKQyvBbunGHiqbSVBLCBBR3" +
-       "sJmkCunDAXHHd4eQxhEGRYdBzZu7UXXMiBb3M0jRVaMN1xw04qyJ8G6DCyAXnHwZ" +
-       "RDcJFX32jyXoosS3eitAOfuZFfqdLyQBCCB3aIfY2OMhjfbVA5gUvI4NI0ulOm0b" +
-       "1FDfrFHR10hZU+ODKMCViSStxuklLxyrOzBrvpkTD7nncH/YWN/xZ/cWB4MEWMjo" +
-       "uNq+pDjINyCJIMft7GzDNPmQMmfKO8C3BCupq3ah8aC+3PLydaANlYxbybhnNhxC" +
-       "RTyS5wfe8lJ5C60b3pGVdQBEF12XTIjMtk1B3sJLjW843JTV6tmmB3szzW8PCNWR" +
-       "3yd28o27CnITe6LTd1rriEPv+r+W/Lr2jtO7uzN3c4O+Tfc02jcUkrJR8QctADA0" +
-       "gXSiA676RwOkRHURdCHLXIqelq5LOSTVlo0mrcKsbgjhEjApzpaorkBLDgWikaMD" +
-       "WBmkEQLF3ZzJGd55Vbo6iJbSXTzOm0HEagBiaN6SrGSjgMe8kJ1BRvIDKb2rTVuv" +
-       "UjayCQnFgki2WkEJGRQCMRewEqK/x1GDBcgGSKNrCGtI59lyNKkdOrQ0UCJT/tYC" +
-       "QsXuKTErgmB/L7qWQAgjObGxtYRpoNAhObSe0Yb86I/8koc5eNsi+mHWzWtVmg20" +
-       "+QHoAlFmGJHkyHlQ13uGhptHj5jDJQi8LDIbkOBvKk72hX8sJ7ueW16GHGq4y9iI" +
-       "j3yMYtSIbDhrWwlmqZXVJRCqouUAUhKKoGCwqjpq43WTfM2qub+jk2T4GKHeyOVj" +
-       "tYdlk++2vs+/+x5NvlJOLPYmGRLWSHhDrPt8vLxjo69Xl+W2ESbJz6o+epO91qFW" +
-       "HfEcnfU/36UAcqgbZ7xi7DdKjmP6OdAd8+vBt/QtBnxhQ5Y55yjps21VoCjTyYLL" +
-       "1CSAQTQgB7K2FHCvBzdvNMXNbRQpcZKHabwUfuGc374PhwMYpCQXoDnJZi+6wEgi" +
-       "AiX71dMRdTfvYRIwt14Tk5HPrJ9sRIYwCUOkZlDd4TvtfPdgHxB1w21pzT08CJyh" +
-       "7Xc8oYd9ZaSpdBvqDRYUDhA4KO7b0HDw6Hwa7XttFLJvwUIDpRXAcDIRWHS+aUSz" +
-       "xocp5qowJUFyIVcKHx7WHevE5XHZxO+4peTzkklyu0YuiXbLEIJQUcsg9pabkI/h" +
-       "od3gISwZ4fwv1Xzc/OeFHgwtN7OIIX02fD0/FYKloiIWHTB7PYJwBsz1ERDlrZJE" +
-       "YDEhYassKO0HhjnoW2l4pHuKoFBPAi0IHcnEsMNIUlBMw4wqCkAz69wRdbCpCqYV" +
-       "IiZOnuCR9k4a5ZjWNKYUSxiFzpNQQUVwU0iIm9GbESmCr3RFQr1Uigjc4jisu4pJ" +
-       "puPoO5yOeZt1LgztDDSQtUkU+DXS9idDpAhOhoTBeU7AAikkj6CLUxCIImIIc+BM" +
-       "GVzqBtTlqMISI1Sc4AgyKiD4gcWAivyJqEowpHETkhIOIUiJAsq4g6inSDsxKRWg" +
-       "Yt+3owIGgQI7FgKRip6JhDOMYUVRT0TqgKJELhtSrt5BLVIqtKhEQLggZJ4QhiQR" +
-       "Gq0Cqrhtk6wQnTdrZdiQdLJbBMJNwoI5yOuHOpAbHCioJ0J6YhibSGY1HllCJmB4" +
-       "jcrMaFD0ewXkW4ejjFIZTGKo4JHcpSBBPtd0Qxs1vmR1w4jyA/Q8IHSlHwHq+Ee/" +
-       "WKYiGSG4HC6NiRUCLF32CGopcnwE7g8WC7D27ysTrEzHoRC9BQyGYAhkqhOQBwpF" +
-       "wUlY3keYQrRXorRFPA+GhTj5pDpAE7BLgAlbrkDpk7XdBkMCe7aC56ythMcLyB5M" +
-       "qB1IiizVK6jgSzmXFAgGIgqwIgA6EtEewNxEDMEKsvoUzTnlKA5iDnmtY0XrFdi7" +
-       "oO1avSIz4+XbDYhpYNbXls12lualldWW6Rmvp3XiSn4tr7H2DBIdge2UHx5TmHNI" +
-       "B0iD6NlFC9gO0A7Si+DLWvYUsE7DYKO6BRETeHLcg6SAFuaZ2hO+UAetihqZiOFA" +
-       "GI9nCa1gvgaJXoNNThLNEDOVQpTOKJxUxb7ouRUN5KMOSuV3bdQuokVEdMKFDQPm" +
-       "AmkMhmx1/f2bHBC8ijYJk50C6E0XqgwMJ6K9wOKaAATyGEoaSjjPogj2CyAOQRZk" +
-       "JxFQViYRM0i+Ei8gAZiihW1WUkg7JgoKGBijbIMenRopoooFjRhdB5EbkD0B3K05" +
-       "69Q6zqcbkOM1FpwnoGyJMqYsuqUojv8cZ1sKM4tO5+rCm9ZZJCE6fbttA7APREM1" +
-       "9CSIPRp816UCN9JJBPsHGQVvYZdivqFy+EDnwVAwp4cGED2KJDVUXA7yrAlwDiMK" +
-       "5xTOPCYrIplcSlucCUpqSpZoxggu32wzjnF2FlIidoAllPOFbJzD2SICWniGwEiA" +
-       "3QNDcV1ngXIKepNW41sRWLhvPSg1vwFIhjFd0VnVLBR9WMhksUIIoiX6b6aI6gwm" +
-       "eWGTazqFhRbYz6BwdaC+k9L6lESGVK0KgKYufORB0fYYzTnBemj4BH2gEaHaaIrv" +
-       "fxwDWvTnqdY6WgKUpgSoZrcEXkiQwPFhy9jFIQUORTJpUAFrhENwKQV1OLa5FQdh" +
-       "FEEkFVhFQCQVCRUlRhtibMFYg7DmjWQ0vBThVntDVh0KBEg8z0VFZ1dnlwvOxCyV" +
-       "yFg6KORRzKtb9eVaU6PsPpQ6vqCxMQymmlu1MoOofNGJrbSJqCnCG0ZkU3SmgEqj" +
-       "ljqxILxoC0NXXqMYPKZsTNGgseiQX1Um+tDnWCzEFM5KYaQwiK2hebBFtFvWbIKl" +
-       "A0gySQIKEVUFY1qkKQisEBDEYcpVOMqLjVHCwFV4coAKcGYVaniPIi0IDFCEO6py" +
-       "iK3Sb5QtwUTkeVRqSZvgtiPRiC9YmOGphARNmQ6kLF5Mm9RN5UknKirNlCkLBMDw" +
-       "LZGwouEWmYel0VvPJk0f9vqDgB1OMRmKZKIzWahOGd6NWRFAnCIXEL6B0Uc2fl5P" +
-       "sIeQC1FobsyuXXTiCpCs4yTW8WkdGVi02BNTSDmtnKPWeq9Y4twF4gEpDgiKRGKA" +
-       "rATvQoMREzE7FMRAK9ixd+aTuQoIDMYQZSoQTcKEAaDgwLsSRHUTmeBlwAjqJW12" +
-       "haMGnPdB7Rko8t7UYLQRAzDoHldEqn4zfIlR+ahTFDj40bkEs7N9ubb1r5Pkz4P7" +
-       "KmacMbzsQ60kjr28eWZT5fOlM3PVqKOMRxDR3mUfp54ZLqzcSJorg+9hoxMGzVzk" +
-       "E32DW2JtbU2qrPLpN5Xpxamjzu8wb1lW8jakUx6dIsLnCxQwpEzLzYbSCTWTEZrw" +
-       "p0sG2G5EvMnZyhFFF5tTkG1AZohFJveaYcvskKd5SozIJ5nClUEHKNtLZSLNdA29" +
-       "uDYo7sXxjC44bazLkkiHu8qrYzJnnJ2oQ08SqTZVlzXJN05fOLkVt9y4SAdhsUds" +
-       "ETItUioA4xSCJRd2ihTicgxYcOnBhN2OXCLbNOTBhkqTgh2g0U4XAdMYmaJDRnHR" +
-       "R4Lu3sBvFYojVUFkFCHnDpF0yh0wkgezuLUwW6maOnVNAne9DRbH+AAHETar2+Ft" +
-       "41Wuaum2jm5bd3WKQkCQUMg9FB/ynAQTMVeIB8oh6CKP0EAQxoFOUgEEvm7+N6n5" +
-       "WSrmuWdsdiR+nu8pv3szvUcbeXbM8Y2rYHrC4l+zyLjDfmIMYVsENPkK9m6v+lyT" +
-       "5D1f3aEZuONmS117lX6NWkjPZo21sYFwu55fns3WZHrU9bIXYmXLdyesJJhtZsyP" +
-       "8XuYeY2qPLzk8i2eMXprLlTUee8pZwCQX5F0LaW8MCu2YWI+FoVCAHBD2BOl9jQc" +
-       "oGoiISmkexUTRuFCkqlW4ITOGyomsKYHBjZrY5wncn7k8ejM3ET0XYlJU8VglCrh" +
-       "D1mEVbUgnLS6ENcMUAAwOwooznxlE7lPuAKOBPjKFlnYC6ADqLSrEfFWgZgi07lQ" +
-       "JqzHsmsUg1ZBbG7lW9a5qOWxHURNRDgomOIhVc+e4RuBqAVWjExp9ZXgMJ2l+KEV" +
-       "vOwwHQfplT6irimoKktr1mTvMn1AI6Nj8IOjnF6dHXSm3bQx3SNAEqFigcKwa6F/" +
-       "BubLQ9vcq85KsS6AydGpaE6qtgkARpz1BKuNSoGBOgBQ5A1kBa73YHOdtULNUiHq" +
-       "pDygDESZngsBXWfdQdUGGBnhtbsFzJEXO68eFC4N2M3gCnwhLjo2sgkKuQ/2GLWH" +
-       "g0I67776B8O/3enHovnD5QgD5SX19KJhml4fQjZ7+0Q5JZrA6YidgWYyY4jl8xSV" +
-       "sK0myHtg0AKidGTG7nAv1K6y5UVikEpJJeVcrzdb0hpFKVRzLlSn17KMaMkjCTLM" +
-       "QQ0FPTr0SQkXhEVoyWhvoQ9yPsIB3yDPeHXPwPw9rkIoDOGz49jxbEtALl682Rhs" +
-       "0JwxZeyKgGTMoB+YAhZz8Qa9iOMdcWRB55QGYQwryLwiXDkQLgYR9ATDOHVU8lId" +
-       "eOvOCO8PhtQKPJPaSS5gH9u2h8QPjqFhzWX1iUDkBGGRdQFORGvidcljOQQDzVBl" +
-       "TGG2UR07istKQkPDezFCw0PURkJVk1fFtUDEY3CtDUhqIFYmbk+TNC9bRLgC1B2Q" +
-       "hmoGNNdEXHTlVNGEVIJL1zKJJcvOiDo0nuITwMO7aogoMQulp1Uzxq+a5SU07uZm" +
-       "vE1CJnZZ70OyN16aWcbe7CfhB0W5dv9C6SR3sHAFMHzkGZVhljT9BtpAZFGb0IBh" +
-       "iANn4yVtUWWNjZlODZOyQgvvs4J4XQtR3HQo1zIKaCGoA3MHDeDBQRyGSIusq+Iu" +
-       "UOnPeNgBZsMVdUK/MA7M74eXN+cCMybrgKkJpI2AViGsH9t9NE2mTXEAH2u1lnrn" +
-       "3EhxUTGqz2uqtiqAhUVEQ7IFAI05ncwTfKHWxRzwOqtWiKznM7zWPbVzw4j5iIaD" +
-       "SHW84UBRM2Z3vmt3R7bnF9KAsRXK5MOIWdxy1IhO4yIpyYRjiTl6klPndDcCERED" +
-       "fIAlT9GeQO/FHYQ4IvbAcQGRxYyPYeZewWBoEX3dzOxpl0F2A6Xk4RptVObwVYvR" +
-       "JgUdJSoUBw0WAB93YAWGu4uiaiu2D0oQ6CQqYz2svjWxM5GLngT4hPu9PIny6IsR" +
-       "ZwrtKctQEYHDXdoRqg5oQ2uSsX4bCJ3NGGNxFpY9K9jfyTMPt60P9tHlUE941bvY" +
-       "0CWQSCsNUdyq41StOyY05v6ryYNfhWLruNAJjmG6yfUmfUshkQw5BAYqlskE4XZZ" +
-       "0rCcTJIRvQcxBsbodFNqdCpMhmSYhrWBxkg7XIf371jehCbUwexm4dGgVDsU5gmy" +
-       "ARYrMvjRHnRAjrEi0GYc5Y6OiwRdCNAUhDcJxjcBNIBhrUp2G6ndXbO7n1V1kivl" +
-       "8XxGjFDj0HsLjFztVYhL2gQARiRjzTgeTHDnuVV3Z6EWdEVx3o6ECjQ5rCJk6KO7" +
-       "JyyngW7FaBI8Q0m90Hkz6/HSOXw7wPcGEkM3MXsytQGxEqIOeR5s569+9oW4M1qt" +
-       "CS6KKEewSrVVQ9Z2x1nmgZsV5A2G0sh3RXUp64xy5NrrMXvw/jH9rrG9Vbajixah" +
-       "aXPO4PyEx5aentlmgg3UzPNcyQmn8jm7WpaxrIJeGcWmiyb2JVHMgUcgNYWQZ8qR" +
-       "l9nHMTRw3MikGYWca2t3QhhaYddzCOLk1SxmG3vec1U7jhzaLKrbNpl7cveuJ4GT" +
-       "VKmHNOGIKDJJCa1hZpVTd9ddzdqXynyK3LQF/1fvHvFwDEEAgG7s21nIU4+UAFqO" +
-       "BOzZXxvafGAJlsTLa0vUiRYNbsqb6jMCVwky24SylLvbtzhy4U047dzRIGiqxGqI" +
-       "kIjQID2qNEqudsyoALL7RxclL04W5tQJ5QDpK7RHXccMSIKzBREj6ROmSpdaVrt4" +
-       "adqfw1EQX0QzEHsCa660tktLxhOLIkn2OyUnq6l1++dxH9/n3L2c8+25+V4ffTlL" +
-       "WbIZ6mIoWFkymTGcEwjhh9wUdmPPecx/I04eIAX8Pfv3s8Jw7Rz+F57P356BfL1E" +
-       "2R485lDJBs/Jx45HbNb+1znkLrlQVg2n3Z3ePSJuR7bhMxd8mt5Ml7Cna2v47Av2" +
-       "ShobDchLus/dr8YRijOCfI/aoS1CEk62/SwaX0d+zqSS4TLcKBNHf3WDoO6NgvqD" +
-       "AcAR82hL32rdu4FRZaPc4BSzInYiK90PsiBLMdwBZzGeZDD4g5u3gUBylQUbarAR" +
-       "BUBIVnQqbgplEWh9veEZod7p4BlUkk5VEijGEoh0dAiX2FHNFOZcC5CaW4XLEDTI" +
-       "SgogmLJAKIqAY78+xmDgxem8eRwYA+e+7Gs7BLa59uFG8ZoVeVgy9USRkUkhykQ2" +
-       "gdhQBuNLAzEGQWz6uWiSqgkgPFhL1X2+0eYLcIcj3iZyxIJ5vmkDHss1UAY9Kwmu" +
-       "cUvi7vEKuyu0GwhCTA/yoyJyKgfHT7x1mgrpxkN4KkOQXU5C2Mg4GpNJatXYSKiD" +
-       "qMyBxJCb3pESGxB3ecBzpYGNW/OquelOkMMQhLMNvp2CszyQXClDLJFNasPABkrG" +
-       "Mqh3NC4P2iBrGm2BOkclnvhVhaRISz3tcWC4e3pxcma792AaxCl7oESlxfjoIKJ7" +
-       "a2FiDuAweHtnbwXS5c7GQzEPRFNwEFkCQFcwLhdUKEAz2x8RGVU4dMOHfKVIFIhm" +
-       "2iWtGuVMhENpjLWFciSZlotHBr+3aNL0JXa8XgqPAEd6EVpKnkMUG11O6XJWr5Yd" +
-       "e1Z9xlu5eR7mJ0wHvDupi0w9qHg0QgciAVh2IX6IXeOlrntOQTFZdBawzrREld3j" +
-       "PlFqXVGJkUYTNlohLiPDOszjjML0boQtWicWm1LQfEJgpwVZEwVAf1rpwKDiWeW2" +
-       "T44FofGx9X7FflnTv57B7RWfe+Ko/xh7BrfbW16MdhYNV5PvlOkBqBZnJhkCwWXb" +
-       "ALoENInGVVyEpJHrMH1FM5yhFxZi6xvmHQaSOdy8vvLlDQ0cip0Q10A0glmjphjg" +
-       "AtXhh5sC2DuE7wOi1ogHvNgoaKThOzB1lxriiGCeshTQvqL89HPQ+io6J1Omxss5" +
-       "Zv6kfi67wFWe2dNZFCyzJZwresuVNd9sV2RTnE5N7GjnjtGhDOLCGejhEM4VqEAY" +
-       "I4iKBkRFL4BZuzJlfc28UAYvBA0puE6ZecsRdO8V2w3M1t4YGKaBMQ9gzlCEQ22W" +
-       "BSqbwKaRdjkQHC4ixmWzxGIaJQxyRAxHr6FlXRHCtOM7Ur2KSG17m5xIKQuaUIjp" +
-       "KPU4oul3DGBPUe9XNE5SjJ7usYsvJroDQcDTaLFrKnCLS1aqHqo1vSGEySRhymq1" +
-       "0Ub2JdLjui5Cg0OgAyFwRzuTtrLIETnek84awMtCp9ESClI6GC70L6VcHG5I5VRM" +
-       "DxkDYaht0wnKaDRTpUruQQOhrJt5eU9zwnDZsQC8XLboLBCToaxiPIoixht299g1" +
-       "eAN4RdbBM3PFsKrg6ERTws9wPEE53AHu9HnSjwnUOBSNrBA70oCmilLYPe+DGDgh" +
-       "6AG94FT/EZfpoKj3EISVg8QpAngqM8vmA3SBJCvRSw6yhCJNdyVUolCjZPDeXsG9" +
-       "6bxkCEDL4kgQb0NHSghSvjbgTCRImOgQX9g5YQnK1JnCHQir06levMFKVYkHy0hY" +
-       "Iko0oj33Fl52C2vKsBIXYs0AwtC0BAVsqkEI2A51DCQ4czmzpfPFmm+b8ANnSoK6" +
-       "NuBO5JsE9wB54ZFkSd6awB68gOzx6BZkU0W41kPJp0tdlQoNWMl5ouXnVwAAOBQV" +
-       "QtmwACYSMN8JJSXDEpDDXCxMzIoc1vtUCyI83wsQowQmOdEQeu+6wUTUVTUZ6V0G" +
-       "BjiUxQLwwVYDEAdoXZoZo9PK2kLxhW04FenMCowg8QhwJC6ISvJoZdAMI4RxmXl9" +
-       "WGpq1m5QDogASIegEgDIpUXcDP6wOlBb2oB2J7FIYiZ3rGZXNIJf2atRcQbYVDkx" +
-       "Cz1D0GsdMvIO8NzFYSwtpbyZ1nGAWozaQYNERCAeNIRK/KCxiAvTnMSeKBcSoITt" +
-       "OIamG40xIsICd7QGYq7g5yMZSfYIBjSC8cIthVOmEmzl5cjRRQSFEKnIqSKUG2y0" +
-       "d4pDaUQkJ5CMiAKrdvrMLFEIFbQrfWW0hD7GB2FrFcwCpSROwIDjxYYPX3mjKzEA" +
-       "oiIESUYpR3ygcvabgvYb5JsUBDar6xA08yYdnJ3dmc8KkH6un9F+sESctLBFkQGm" +
-       "Ta0bPig+sM/K4rcNlicUhXGvkeO2yqSZ5oKmK7mzQnIIpTd6txohrPWxC+w7O7Xd" +
-       "9LQtO6uqZLhzsHZpRcxYOi1CFignFLhwDuxorIb1rsUMRBHkUkH9+wAqL2aiyPoA" +
-       "lLwUclJO0yK/pNNLRBkAgxgRJDowL+MDbn7aFmDs3Zum7TMmpl6eNnnKXjW+cIZL" +
-       "KTUDBhEK8ciqkQeV7o9nO+RdjYhyConjMQRTBWmeLu3GkKYbSDZ+NFythpRclB0u" +
-       "+MM9hIPy379/P5JvRp9K7Hh8rACxIThkR9bC/mjT79r7kMrZfL3DsQq9dPzd80jy" +
-       "omUQ0MGQccce3Fj7MWzP6VNxLUm/pBuxmmyioIE45y9suzCqg25nIpkvY49evNI1" +
-       "vdkD9EHHY32D6/Wt95wXiY14QGHv6Tupr4QlovqZsUxN/gppAOiLCJKKRQoB3Tq7" +
-       "wOD2KVRzt/RlCRyIOQHSOSr3uh4krxkmwT/BsrQ79YvUxmCBsaLPe3BE9rd44cRs" +
-       "EtHttA6UiBxgHNHMBs2t3WoqicOUCJ/pdOhWwXx0xzvjx3O0KVN84or1DOx3VbmY" +
-       "XBKjiLHHQ6cosigwdb8KKicNL3O90EPY3XkwoBs5FPf48Tw4m8Z4osEyHXmsb2fA" +
-       "Ok4HFRdQRcU7OGXaHlQhmiCfcEzj2hQNDNA6MRu4t68O2Z1CjKZpojvIZ6gSyZPH" +
-       "rL9rdnsgo9LEDXNXd1XbuepmStaOYiD4/r5zmElX0N6F0Tz3VCoRv4sIsFhYUIgI" +
-       "numbH4pN2G+IcL7ABCaNu1mNj6QkUIMAhtoR0MMPiEUwHvdwMF50hG8QYCTnhfkt" +
-       "UMX5FQVzDOdATVLQbTBOoetSGcCjNrjgN51GgITFdoNWnL64lJHbNklnJKcjAsED" +
-       "6LlEuu3zlPY6SEcibIy1pLUAd0IHMRZuIwhRlzAXsU1wRK4F5NYIkTsbgaGKAOrk" +
-       "3mDdrs9oHE5vbz3eO7IwqJxcJxDru7DPr5kZnfTpXLnLVEx7eQEex5Vc10EW/bNS" +
-       "/UN3fOWkQhgOwHG8e4Yi8HiGe47HhLNWwnMlMsrBHoa5VyAyXB8ny2xOvMcOHDgH" +
-       "b3EqkrzSChHUyZmLI+6hu7wISKUqFFKTFWDllLromzIiucDwBOQQ1kp6KGChwrGN" +
-       "IdiidKkg6IolNojcrO0BeJ7r7kxA8TUb1OsJ0DwXlDQCiVkWTKjwgEQoLqhDMXRo" +
-       "Qo9pGorE3XPYHlVcm/Fl0ZUNWuXAbPgxVowsObJtykwDZmd3Rs9kF7ovtgP9gQ+4" +
-       "ImoCUYDVbTqWeNIfHhQ3fcGSykKPKGvzG0gw0ZETg97odgi+CtWJvpYu2qwoTAIs" +
-       "E9R6CGlAcEl9tTTwETIhk6KNV2KAPhQLimtCFryG/Hiw3nYgO3u3TfEJHQuFVBHi" +
-       "QGsiLqgzs4bdm1MO8CUwBqvDVp0jQlTrbg64FHW97NcVIgioHQCAjzim4h2byc6c" +
-       "ANEWA7Wm3xWoYIRbEHeZqnzzDMAxmjmtCjoyJRko4E6qJSoabUiR5UHY4rwkhjGi" +
-       "57nGCJQGyYa6EIE1ZkbQuFKKxvM0KGlAUTD2PCxzTTr3sa2oAwP2Ie5M1JRb4eh8" +
-       "NazCTDn7w1nJjXI8EDCKsUADgQVYSIv0oS9b+UA6gPIs1SOiIhCIbAeri0sZgp2q" +
-       "Cjt1qVoBinB93WUFd3i+GNTr0BMoqCtDIo66aNKIkZtiCtBFYTxRAkbRGHW4E2Qa" +
-       "wGELRMBSlDORfaNHjJo8HetTIRdgB0R/fXAbO2dWJb6DfUEsipYiw5A0GnF8Ezhv" +
-       "GlTxeCaEA4SjJdyifLMm9GUIqQiABhBNrSrnBJZwcLnsUPG8AVmRARIaJRIAl2Aq" +
-       "vN8GsE1zgnAAG4OQm/dxkQHKoewTW3RsFeU7RIFDvSeKq6tmLIwK8gvYW2oipkRT" +
-       "wRjRc2uNOhMZYE5yw8o4PRldld0CRW1Do6zyeWGLAfbpCqPTGDSqcoJXE1eKBT20" +
-       "VES/Gir1g0EQCpg7m5ZtoK5GATGOZsXKcwCUdiYw78huOate6CDObwFxCKBgXHBB" +
-       "V6vNFaO1koc5AG7nTRtcl9SatzUT+2esG3qOOQchoqjI0MZiYEGiTyVZp67hPaez" +
-       "0Y0m6xKBzy6R5ZAO9vJiMqshjhrIky5HVSaeZ5qEyNVLWOJtWG+4jGMGDZuXubu+" +
-       "1BVxAySGWyePnaGc7uXgXUFUo7J3BHWdzfN0ndx97DRHhMuD3FIbtcmDu9FIUiHM" +
-       "wvJzV1rl7V3DAElvIjuzuAN5aVFegjAg8oRCh3gtOg4EUlSNQ+g+YCsNL0DFoWiB" +
-       "8GhSYOOE2b5zZHnFEUAwcmIWCMHBxMSoJhWMWrtE4EJmAmGLhxoTvSHCijrgpjFw" +
-       "YaJ00WnSJr+RmC5jFqtEbUiI3kQFaXgg7vKLYF/fBgwaV+EnRk9XQKQPOgkBdnA8" +
-       "kKDUtNQ28kWcA2LCiCujWK5nSsg+u2au4siUCIIuFgTFpAqiDAnZW7L63Tx5sg/t" +
-       "IR5eMo5HINaaOXDMrHyG8ytg+NvLtlHBkBo9kRnrKYt8/qyVqWjj5VEqVy3GpUqV" +
-       "hixKBqJGzkfhHgoFl/X1yrlEscB5vLEAKPAYyGQRirBKEZm6RZfA9cJGIMRHO5ca" +
-       "CEW/DnIynaC2XohJQkB3yhFrMFq3qxHJ4+QOtEUb2wG1dJBDDTr2sZrvJ4RcRMbT" +
-       "qH2Jdooaxt0NjDiScucKju2YzYaBBzvUkkz7Rs5QxX2gwjkdYD4UtQubOAigAFmX" +
-       "wNXZ4di59KNNkgtapzDO5Ze1RNDg3lGlzmLiBgSsl48e7xxrPEEVA8DigDOnCoWC" +
-       "NyRTfSavpnxLQ91Rqpqq7DJKoyD2FuCLkgrmASASJuqhEdivR0jzeV9CZNSuy7ox" +
-       "U34bo3ZBM43NBAmhDigDK71FQEKZjWNaenQQjAhUwtFmR3diUG9KvqSEILrtcrnK" +
-       "JYMYsRyZAMUMhxGC3SmHeUddC8aQDaajNAGHbXfMJnKQ3Io5u809jIeOAiCmGwEc" +
-       "SGxFf2Mh3Ck7Q8NmAQs8MQPGwLfoDFgfOCTl3U4o3sLxM3kkQktElpUOIQi8KGes" +
-       "JJoQV1lFdBdVKBU8i65cXjg3ziOG1RVyGUA5EA1Bz2PdlZvXiVd3sCFzpi7ZkuuA" +
-       "okzCH5e60sadzfeQCtFe9t3jHrFGwPRHJzHlWiIzEmgstR6IY+MDjh98XwynDQJ9" +
-       "BcV2odeecqlvFnFC/t9u3NHjnIqGa7bYikVnM+yf5vO/or7fvUJSIr379aG/2n64" +
-       "/p2BO0/o9sxrOt3vIpd9x5yvc+etFPveVHuePsUB3DIaidl4CxRx010k46whEN0I" +
-       "g9O0ug506JYDlFzQbuZEuMBAWvO6IBV8LQl756E4B76UHCsGLzEOHBSd+XvXk9WI" +
-       "YMbfg56ndwHELY0vRDPXRQ99d6bL5OdJIUUzbJDqWMfi11tQANmXKblIsgFamLRx" +
-       "GwxzOeJQdSQi75cWKugYgDTZ3sYwfDRyoBTFJzhNZdKia3kOBcotQFEQCbS2nCSC" +
-       "TtEiEuncq5ywL4jCuAjum3CYQzZnvAElVp2RRCOSGjCgOCgk5JdEY3YqtbGzSJKS" +
-       "UdKYzo16eoPENGLo0phETPJZ6OIkAK9m+kPCOQTXKwGmFeO3Qo9mYJjmt47wpZ4n" +
-       "OUCpkBXxs5+EADfPu0KwMIEgyIE6Rn15vJ9n2j32MTvEFNRG+O5FKG2lrAqyh+Tf" +
-       "Rzh4eWFJaDwsQTEaSEdaoYgZ1LlWfjUAeC8q2dWnJ0LQ8IrFg6vYcrdprGOfYLx4" +
-       "1uAB00NBrexzAOhxEV0hJgfdnNpAR2yetGXXTyUK7POeMFSwUcyK0k54TYZ3BFZc" +
-       "82vsHiaF0rspFEpTTqjrGMohOJwo131kTcrGNoxl7VJWqRTYNtAAJC7V+xyyGxzg" +
-       "D6IYN9WtIiQNBELyUK0RY7CBDsyDhV4eNdSOX7wMOkXgGQkRysCNmAEPpdYUaOma" +
-       "XGtvRVaKBTpnHMGXsHRzNvcHtrkV4qMS3LQYC7AFDRgeIQXw4+CQaigKJZLolFEe" +
-       "ynETG9VkDEWb3PCLQWZvtb1uyQ9OCb2ljqdYeYVQUVrlhSmZCCLoCzeq3qihdKlC" +
-       "FCVu9GdtanaDaeoee8Gh0XfV746AG0mFR3grOkNaEV4oAxcwugi+5mLavDgNyeab" +
-       "aPNUAdaRx6GueEE8UgBraaEPEBA90Hd0IoiYKzzLeyC+QP86S24oNGgPN7VEZLkc" +
-       "3KKB9yaO3suM7dsqIyXBAyaPJIVawzuyNy8Uis1TN6MwDW+Sc8Jp63uyww2NEo+W" +
-       "pXWbpGdzmc2qkqcY5CJNMqipmJnZ7lPXMBYk5A0CO8LEGgRCLCyFEGqDni6GFwh4" +
-       "ISrK96I0lzDiiuVYcpktYea5V0fSBQQ4HLSCYxVJEIpIEG1ivgPWGQ9zRCT5pzks" +
-       "lUdNyhMqyFLVbXZ+dbaAL5MolnGQ0f2Y0lbErTW9N9zvnf1PL7QhIQj5Qqg9+9Ze" +
-       "cP2k9FIfAnPPeCQEemCDu+PpovnNLGt2xn12fm+7k++eYUe5zI3I85qKYoJjmjnl" +
-       "nmGtQxhZ8OrjWLs29chu705lyXsj00pO0r01isVaNX6Hs8cRtAzPRBUpl8Xo2aUU" +
-       "RMFSH1bMAjgAzlpfCL5AHePjDzgQW5sEzApAHGDajlxaEJMRENKpBhNAm92ON0Jo" +
-       "cKOslyv1CmpWvaQTDp2e7sgwMWOxFETVedrRILOecthi4+kHbXO7UCGYShLGHMPL" +
-       "BFyJnklnbddyTMMgm68FBsVzHACN16/QBHAADr0hyZ57ivEsZjdscOB4MukOoq75" +
-       "3Sm6oznxvBWSoYDs0mM85hVF3AUJAQhIC+IAnAQ0nYeBojTtDDu9fb2ZgfOvvEtI" +
-       "Ir4U3SSAbviqYgJSp4BnTGwbatDG9A3mGF9hEO+hcZwvmsmKw4IUUYSm04b969eJ" +
-       "yhd9UFNe3iSa87znSZ8uMCA9unXVOthwgCtrI694ULz3RAeRPJ0dGGH4cQq8+E1k" +
-       "N2XKOIV8b7t0k3pInQ2SYhUaCSxLkRMIbumyj4sTVz8/OCjnFqV6iuYCrEQETZhg" +
-       "aTaO1M91eVU+0dN5lIKE0hY+6ZhdH8xPatSu9IGjiSBRxdlYhnVgx3DM3OmAAPUh" +
-       "oivOGZEA50UKDKlBGKmuKZHM7ZnaIrey9kZzbWmTBux5hLriaXv3sCjh3RSQN2Km" +
-       "seQirWUXffY2PUwR4ix73JkV2Xnrhe5wc7ATvBMNCGsQ9s1jt3XLtQAW0gIAsK7i" +
-       "GYMN4XZoBFGRARR6qCjNIi9RgC+TuutUGw5urUrW9IBs3WmZh5j0JAQtReBHKKCw" +
-       "Ao1BYPjdMlMyTuA3z3s5HrzxCD7DNUpI9NKK1QCbU3u6DYiKaA7sOUSYFvgSL2GV" +
-       "56raInCNge3z1vokDQ4oBA7DVZChDpWQ6HOcrY+5Qi5tmkDUUFPEQNwVKiIBqChg" +
-       "igm4JIiXEAJEBKiKBIihiUjIdguH3TxtEV8CLnCZZJXuZrns5yGzNcQqb5nRD8Kf" +
-       "Ejj1uLimHfFsXzlUZzvk7zxYPeGzkRdgYzYoe7Nc34mq1NfS0+Tpc572vBToIi+h" +
-       "NC8Ksk0wShGEgp3jOt0s2159erxfPx1eTb02DQXSuDB5AkTVTpTmMjNgcOdrKEzr" +
-       "tc4aYgDJqgdKhmhE3HZulPmAHB7632oFlcTlmCvKgosDR7ft7TOgZfTYJwR7AXuW" +
-       "/S8+gIFeKNjkv3u7oLzAyBFiIY4bJOh4OuYdqgOIWvESJAdRUwkRH0TBzeSHfdN6" +
-       "Bz4E9oSSCWPhUXvDkFmbZ2uSLokHIEKenMqeTFXgg3poKBEk9zF2SbQhJap4uGJJ" +
-       "FC6V1rXoCFhRw7YcnMjkezOEULe98ME6Ds0IYzERWbF33DHNcyL7qBnaeKKU8Wx9" +
-       "AYMaYwHMmO44OFPK1nebx24PdpQEPFOIOCGGRgnfbPFFecB7CSMybA7NNoCJdWkq" +
-       "A6uxgQHTSlzjN02jfYhsKEJKfK3grm8IX6/ZCr04RBTyJ2sbuCdybNeEICJ26MbJ" +
-       "jeDS6wgqPaR9ormfdmFDLWdBF0bbY2212EiKqJfXchQkdNNXrLktUifqXfCq84+8" +
-       "Z6VhYN5i5hktLGeDvDyUvWWAs27y4SHHMOtg0Rag4RHHJZJzJpVzqEypuBMu2xKI" +
-       "MQEgIgDMNB440aFxBiGgVIhdjaNkyK8RRKsepNlmwLGE3pI5dmBEqgxMdV0KaHO8" +
-       "HhyQ2xG2KGDGNoGzBt7biE+kQ6Bod7WXByC2xtI4zTaLsEoGd3XlmZdylWF1alnb" +
-       "M69mJMgnkxqru4Oogy+Ri7zgqVzMxct3GGZgXGSdkzJjhyAuE2PZ723DJwTyMnjh" +
-       "l3tHY5VDpUieCoJmSC8uhRWOsIvHrs3IcXRWXW5dAv7/778fUJpA9gUVtiDse9fX" +
-       "eLqjFjg9tC9YHmeTlFWicKAUpOimCqgEtGlSNGcpe3u66YHC5aNSJLww2kUhcBCo" +
-       "sQJBzkAYmK7l1EZTiK2JEzDnWILQWZzI5NHO5yHsQScKeLA3Y1UxANcWcBcAXTZC" +
-       "nG3WEshvETCEE/bPauJ2LcYYpkGUUtAj4AMoK/tv6dyS4In1VQtIbiS0kHqwagwE" +
-       "s2PM5itnuLiqWW680Rhkknpn2RxZA/NquFxL9qJ+MWTj/aqbZM1Eg28nmVVm5HKs" +
-       "lPLjlU2yZl+lLy2b+bKSNUYSElldBP7yb+gMMPeIR9GJowRgkgRoYVdqHQlwIDLQ" +
-       "aiI6H1XmnDYFAee304yulhRgMIl8rODvjPsYDh4FRB4lS0XTd85zYMBdO9uA1XQj" +
-       "EQiIrzFbmDjy+83gvNdxScSEU2bnSmgAjjhZ0eHKQtVyg3vI5fSCEKUQLGWCcN64" +
-       "SoBE1gka0aWw7IlYUoJeMdqQ5ytWEITjsqzKm8ZQESwE6E2CN4IIUSEnUYdM0vGl" +
-       "bHppfLXOIXBTSfWIgFSl6IChy+B0e4/JZIPYtHBc8xqqNyEaYZAWKNvfjpvJ6pXN" +
-       "iRCGxlbePrTJreU3HXYA2d8CBSRKa51BpHeF0vGi5yH3vMvA8hjcyHuijgTurUuj" +
-       "QcspGgZqbDJsCwLljxYqwh0UedgzggA1oQPI1qSzDKyyTLBusjazKdKbN8Mpiiht" +
-       "tahHCFFJFECD5lOaLBoYNnSA5Vo0uVRGun3s3jbMCD8MAOHpiyBtrvGjhr1I4Kam" +
-       "hC90hDDgrxsCgbMgmSDrjyPJSVi0W46roi+Blde3oaM85BCOMlkvxXOBKzLEV9tx" +
-       "jdKcCx5V102vHRvAEBovGic6QBeiErtETJWKgpIgxvYmMdZt+YQ8c1CsakICg2WZ" +
-       "YJ1wKg5NIYcsHI7TKYIG9UiK5Dh3nMiYQyjsFTApEA2cmsjhUIqrYHeoS28gi1UT" +
-       "O+eZXGRAHUG1Gwk33qXWInhbyo5dSTqBDuQtgRSK2UpGW9OB04oooTkj1I1XpEzE" +
-       "sEzSF8gCdoVyiYDkYCLfSn0SyX2hCQQsiaxSyGKpCEVn+T+7ACroi7X8aJopBWVZ" +
-       "ZWHIQaTx4SNUeLDFSxevebd+cHKoaR+Uldj4hZiyxAxiEJPs55pQEVzsqkE5E3EK" +
-       "C8Zrl12Z6ZyL3XJIIiYtC1Axc5KDSj612cHXeoDiFrcpuKKB6LCLGCsgEWAcjIYi" +
-       "7hqF7Haj4908uyiAKrcawQQ5bsgLte4FvgR3kPuHtlEgneUBi6RqG4DiDmJiBIgS" +
-       "VKzW6RQTsDZDRB7vFB/Npbn3thjxnOfz03l8o4iPr5vcTXayIrevu4elRUVaMYKB" +
-       "TVWh4hpU3OBfMUdpqaMvN5RfQRHEA5SRsCqgNvSaSWAjxg2Sce8tmpLwQTzaEJKY" +
-       "a7vw4DMq4BBwDCYqTySZ5Y4qUEBqrTyjRBdDSeJIR3x93G24dW0Fsfb52b53LqcB" +
-       "LxkrVu+jOgAOVeWKSAPYajZnWDo8DQrwVXMRLreCHM8HdKQ7MnILkIj3MoONh0TW" +
-       "CXGY8bOCBgAXDflHcvJbxkD4icpcbMiA0ObDPeZMm9qh4TsxeYSrNdsERNogpnNA" +
-       "iWcLBMk3AFNaaFs84CFDeDFXxodhl7a9MyVyMFFD0AIGiNGCvoSCLqpw0errcmtJ" +
-       "ZMaVMLAkEC6A0HNHB9bcXzSDliqUfebISAiIRkyhvuGM41wC0GZ9e14N0k1dvH2j" +
-       "IIzL0HDgOgo2Teq2QOrLViXLanCQRVQkcYimjkTcFagkgFwMQzjIhkESKoRYDARO" +
-       "OUM3MEMWezt6GgSuFhS2HQXOveJgcUGzsH1FZhnVaE8D1kRDjrF+riAwE0VbuVvu" +
-       "Wx0Vo0Ivo3snYbRflxgcfJwR3m0ICx85dsSDvT3cZ29Q4CWGBQLggyCKEiARitqr" +
-       "sNm0fTrW3Krxa102dakYpVhqwhVCrC2SGOlkRk1UlqBaSVYVJYN7ERi1FAbW+G3z" +
-       "51re5VjVbm5W5UlbmrUmM9t/6/T6vv9Po7vhq+xJDxqrZJCSN4A9ebXxyczXxmoN" +
-       "33VoVPS3BLDLLHbi5spPNZK0uCZvZgZzc23MBvtLdad1ruTZJGVJwaelJw113fR8" +
-       "rnExqR0PrSFjAyjjVUETBCGwkwwK3s287kNjE+yu0Hbm242i5VRLlk0STTSgxaFK" +
-       "RQ77zTcyWsiGy8yIrLiHHJjtG1A2Yw3W9UlzdFd2HcNCqkQgyani4Bu3NroVFnYL" +
-       "2HzDRFdvTmig2HcOnFxATrA0TnGma3YZz0ymbsQAYJGBFbqwZSEku3x21FBfCArF" +
-       "0wi6MyRrQQhzxXZCortLApgcocDruDxkuASSjkkCRHHVa1oVlDu7SymYTanF4+3W" +
-       "eROwxPvSBh9NNJ8ik1JAnwJivP2b/k6eXnnoQc+e3REtcmUhKCgg9oIgj3cO94cZ" +
-       "1/yZZPYXmLsEVzL9wyayYqdoLf7u7cMaiHlnOXVcjK1tFvlVLZVUn6CtS/Dc2MGy" +
-       "jQgfhC2Kdjr3P4oF82DpTA7dJI8fmoIQcC1skeRzKgLQfdKJKWsxDeDRAOkVD1Uj" +
-       "6REe5pkkFtcBVDyBmsYcJiDPKL4QYIAKg3pFBYsEheQysfqhKb7Z5Wjm10jpNiZp" +
-       "B5IyQBQMUV05k5WF025JblIlxOjYPTSQS14ht99a4g4RAIMEXBQ9VYdUOnAHboCb" +
-       "AM8xBqUidwUIqCaNuDndlLcheCQRzyDZsza6jpcC8J5t93uI52DOCUmxyBWG6xjU" +
-       "DfvcQN2R3loD2RQpUCyjb0Nnj8jM44gOI4HkYOhJNFBUaBwiiugHBtgmVWWcPJ2v" +
-       "AGlYg8pB1knDeEQyYzoFW+nZieSuAOXHdpQnYHIIvsnV62gW62oGOQSq0ZHQmkz6" +
-       "ve09eR6+As6PaDEAPBAjCRxHiizSKSWE3lI8fDOCDmGnmVpNbi8eUVoBcnjVYXJH" +
-       "Wy5Y+Ig8gsiDUDTA6xDbTXjDHGKyNg20+8AoKRpUzjVgeIneyymHNIhlOlRveBNb" +
-       "AyNu+YZy5q7JQKKSSPDgYkgOZ54N9vTDVhqc6UhuwvCADsV5z0KRpEITXj4+mgml" +
-       "oIZg4a71Zlm7m0gkdp4U3zAnK2iHrqjsxi8S8sDdGDo9ucdGhjq81Jfa1MiJSKcB" +
-       "A701FV6aw8Hp7V9EURNiZNADwG3dhrhp2xsMQdoNaPWpg17FE8O8dR1VHRzpUzs4" +
-       "oW8uITBTDYPLynlwZDIItG+CIpXe2AKuCI7Qs1rnC94AEyGbMuhIPF1HgmbONCmS" +
-       "5k7bSMjXhXQp1OCjmkAGTvLOmI0HOAt3YzBQRFgqFp2bepbOC2EIwJLOpBSCVEHI" +
-       "kdNxHOkAQs0VIpgJl4XMHMjEgid0t3FO8MJhYYXY8sERIghdxq3vQKeC72BkdCeG" +
-       "xRxAiGkDGK5LYsCK3AWW+AM5VQaWqrkJ3NiK8HR0Oyaird7M0013PrNY4oA67ZPe" +
-       "zuDTrV0oZMsRpR7ZipzQ1jzg4Ut53oN2DS2qHRF3Qms17VFoJ5zQGLHnTQ1WhcBQ" +
-       "uEUTQhQjEQUHI85hT5R2UYC3twsue/zOINAzYK9Mg24cwzR4rXfuB43f5g0wg+ma" +
-       "n54RRErdutOia0EPZPBoCriZ3WIjYiAiY9ycBy8PvV0fdNCtr1kSkUTFpWjZQ33A" +
-       "Gh0a7ep6g4nkWoASDIDjZq/BgHfve9jgEEhzWCeQR7Hli6A20uwCorkhnm7lK6hw" +
-       "1GyiXCVzPlIK80MpCjwRAoagLZOVxmZA+eBSGhCIL9tBXabrpw47c5zKNaAKO4sL" +
-       "7KvUaVGgeYA4XSjsTXG+b3fBFtoGLhoKvIHohI5zzHSwDMUyPCJ8Zjolsa6FJ1An" +
-       "5EizYQKcpor6HHhk6GdulzXbHMekayul6RlzuOIXQHGhtCOsOrdgh5yBUI4QD6cJ" +
-       "CNmU1QYJoXJADgxaZvbMMEEkHSPshs7OGaJOF613Nd0CBj2PIi+PXV5W90bvAECz" +
-       "SV7CKiJiGUeZErQbfUGQNmjhny5vomzEBFviHjwiiJ0o1E52tFzGaXbdCZ4hwwYE" +
-       "QPQQkQZFRB5oqVQlVfs5E1NSQq6LJmIhqJUJBkSTmKRwxxBG4hmGYgYhOlbgcIM3" +
-       "Qhnd3c1BbjEYvIhbZzEQRGBE2cgI5W4RhHpgCsRsjcdWFMN0olQDA5nd4AckRPbG" +
-       "2+i25y8WqkxW8Wupq+jB2ymQckBbjqGGJ2AtMuBuG4BrSNp5MsuWwgXbcCXcIAxo" +
-       "J5BTSW05do8jzcwVXNZNxgxuimapGRGRMeE3YqpoRFQVEB1gVMQgYxo7G7bmRDES" +
-       "u71hcZac1QBCRIHe0LZAbAbHxDwuLIhFlGQ311uRlODv9YkCQRH+Eh/r6Q/7bT83" +
-       "9x/Fr+4/N+xjJ/ef+if6dubx/+uT/af5yl/qO7x5v6rVWuWZlZjM5eZ/VustitjY" +
-       "3HC0dHExsx/qOenTOnMdJLi6X+gqTDD7MX/BpCpmFwf/C6fg79fommh7CkD5icKI" +
-       "rVSTX/Uh8fGFGKs+lPgrQH+bz8pu235HwdPyPCs0aP60bPSYwmirZ/oP34xfQ1wP" +
-       "pnDAX5KPS23/G6nZ/TKCJiCNS5oIRTN0GCKEmhG9kYgIrr/UH+fx/tEuBL+6UPJP" +
-       "b3bTrJphJ0Vu8PmOnIeyvm4J8dKtpVV7Nxk1Ldm7r2f9z6VbD/lVr/jIa0/ZP2/6" +
-       "fsPJ4euM7/l/w/Hbe2qPmk4Gye8+XFXSsxt8HE/hOObeMcPpNPb7slXdTm6OZ/v/" +
-       "5dVzU58rFtJ4e3yv9l6buQsjiD1R2Np9hTyeTt6+038W47SRy6PY06E+P3JOgWaQ" +
-       "hHAkkR/Xh/2ncXif2afyf4Svf5NvY3/UP3JXCqfaxkZRL/J3CPDzFxNGAzKcQTnd" +
-       "cHPayzzbvLxDd1UnVvMbTw9BywcPDfsc2zm/nyMfDmf932T7p87KrxgyeFftQ+tf" +
-       "Cfh7HZyeE2aj8Ld3bXw43xb83/u3I6WSftIeD/xbZE/8bwT5H1OjB9vDc2fr8Q+u" +
-       "397X9Gf+PSdnVOzpP8PP+c7z52c3SP5Gtkn9kn/w7H1cp+5o+HrPZPv7uTykTn4t" +
-       "qMW5ktlnN5X7r3/GJDMMmGVMJN7siu/yfnqffmvSXMu6ft6bOJlTaKqp/L3k/g2n" +
-       "c/7fv5SH4e7wSNdHTnGSe7brKd9m2+rfs+75c1sWpbaXqOkkpTo6LvZVDoKaaPJd" +
-       "rf6/wabfy//P+Ses/dNe1Wv4P05eaf0Xg/vluP7Okm/5eu4+LJMnvJ6vyfdiuNK0" +
-       "Wbn2ZOW7k/O5dVV1S0twqcn6SMKzp/2y3c5D8U7EssiWcxtqybtlfi2p2J1xcn7G" +
-       "nI/NwcrP+tfj8/scv7QZ8v3tjkfXsw7Hk28PhyNkcPY3e7To4dLZXs52SnOcp+0v" +
-       "BzIaa0rMZV/r4j+X7dHd5OqeK/l2Ng6ZCf3R4MsiMaozClqv621/Cfwfp/G2c4GO" +
-       "dLV9XSfLMq1YzWaxrDFXxLOJ3YfCa+Wpzeb8XWTm+JzP+IICf93/kNaqLaNrWSqi" +
-       "ttajRqjbapmqtpS2qxVk1bUlWpNqLRWpZqtJNKo1U0ttRsy20zVJqrG2wBY1sVoL" +
-       "FUWJs1ikLFTK0am2RVFYUrYNFpNtTCoNYjWpaFbG0TKLTDY1RrJSWwCVU1K0mkrG" +
-       "yUpUbZDVikMW0bZkYotZMmZGLRsY0KIViLGjRsUWxtRUzFiTQaisJEzIaWTNYIjU" +
-       "RhTZsyUWxsUUlY2oyRsm1G1k1MhLM2Q2gWRRMpDGE0zA0ktFBaZGyBETCCMgSEaj" +
-       "EWjaJKU2NqZFooxiokSIyMMUIWEaiMhQoIiiqQmIYEkRhFpEhYqSGCLFCKEMEEGT" +
-       "9mvzf2fuM6SFZC4Qd9fugRia8BBCIvlh/UPmUoYBieRgSMiPA/zM5kG80OwWXxVB" +
-       "kDKCgX+vVRm/7UQIDInnOZ/vuDq/4D8+p51Kq1Jw/kWTzvI4d9a7SyLfWstuvCsR" +
-       "8vO+Ve9WpNJv7s7+fuL8JV+dboUuDPzER7chJZ58smGb6bfHJ+/wytuIdr6d7a47" +
-       "bq+tvU9ubKTxSujpWpbkOGArKSYHFiSSfHgG2RPcG5lSlkRGbrdlTVFVeA1pC41W" +
-       "V8XE0QYWbMrorO7DWTBoBRpgyaqKdSFItuzQ+QpmRRpSUkgkAkgVhutQk5vCYVVC" +
-       "2pCBtTYcnZA1HRmQ5KEKUJCjE441UykKrp04rW12EaksMjEqCmiOKKAiIoVAjHHG" +
-       "4Oy2vMLFphr2skmltbAj2yHto+/C1qRSHQI0oYJy4xPAK0hBhkBkzKGIDKfqR5fu" +
-       "9Rb6jriPwFfrT57/BORRUS2uxaWe/23vw/VDRJUNDKbcoql9hR1STaoUKFJAhAE0" +
-       "AZZLjCTR5qxIgYLhyUQktqwQ0LakMUoDZaYvf1dL7/UTZGZSt/h0bF8bOrkShINm" +
-       "UC5JVQoULQdWFmExZOwxx6b/nrJEIzcATXe9RX4uAjQuZbT7+8dvCcTe970nE51j" +
-       "cmac2WktrRIBr8KKqmFiShChQWsTPnID4M0CSyZe7rltE0/bIvrM+YcPthAH85JJ" +
-       "219mY5mjPQZhiZDYZA1DzBlAjUcjXvLL8BABMGVQh/A/vPwUfqX/5kl6UGGJn8FC" +
-       "P2GG+QceVRTNvxzts75paBK7NzM7TzVVUzlIqqif8NJKRImR08cg2cHrQWxKYcNh" +
-       "OjnHzz+YPyaL9PWNrPR37fFaHr23fpcy+YYGWlsuQf4q7bXFjzjZ66t5DEnZsqLU" +
-       "ixYlKiy0ibZsjalZamaizKs1laSpmk2ratltZbWSta0bazUrFJs0ttalazaQUhKg" +
-       "lSUAqyQoWSKtotVYtSmoyW220arUsoo1tpLaNtMsmtaaYsVTbS2UtJgram22rCkS" +
-       "qQSxISyQS0FSSyM1KaS2laa0lhNFGhYWigRULZFiyykqoCxFBKRFSItCrIUWLKak" +
-       "ppY2WbY2tps1pm2ymqbabbLNiZojaZkrFMKZrKzaWVptZtppijZNM2SzKmmxsRab" +
-       "LZs2K1NVqWqEzMlJtmqVRjVNZWllSVLM0LNNZpalZokSlltLasJRUqopUpZIElIE" +
-       "lkqrYjVi0aSNqWmLKpslJtFRBbSbbMy1KoplRspaNlNUrNUaaak2mpVFTZVGxk2a" +
-       "GTSWmzaCpKbNJW2WqWqKMmNk1GkKUtk2ysrLNs2WwyrMqKpqZmmmKxtmqayKZlUk" +
-       "qNltKlRSm2StUtbLWxTNUqlspo1ZtltNKRIqGm0tlRtNmmalNGZYybMozNNKkxpI" +
-       "2i2ULJqUrGyyxJslNGpZmtNSsrNWZY222yttmrVNTbWZZMms2lllbKstpmrNMUmp" +
-       "KqUtptKyaplKbRSbJbLNplZtqM1KKbabU1ZSUAmUaxpZjUkhUmyZmxbRSltNsrMq" +
-       "qVbNtslSptEzVrMqaazNpmkqZsxExpJSk1itlWqay1KppYopMUkkkmbLNlMymsxS" +
-       "0TKlNjKbA1TLLLU0lTWalTNMilKmys2ZY2mqViUVKSyksmapVNqSJRqxZSyylMlS" +
-       "yLFSWRUliWKLJPR487tzxPbvpf6y887/zT6h9UmfSx2PLPXLE2t67TNb+d8616jt" +
-       "tPkeNmjOnd2bULjnN/5x19I3dES+7KaAHB8sg9OaIHogcFmowcPkd56v4UKiqJhg" +
-       "oAU9AHxYiJSboAuO2tYkauzYowUsXVGVlc0nYOpihEKtGCELstXcQR40ZwxcKms+" +
-       "7pFjCoGnlWDFSsNDI2M37zbDfLv3avdlnZZ+BC52UzTjZKLth+XpejoaOcVlvLIp" +
-       "Bt0bICZGx12W3MemDI+BEABpXP87P4rJiq/on3ucmKl3H2qkVoDOXeBVIHThRlRW" +
-       "oIeneSsFb5P81QBgJOLBARAX3nH8/r/f8w3ilqIGYIs2ETpWjUrVBz3ap+abPKWH" +
-       "pLM3ltPx/+N/Wbt1NbzHN6yn49NkVXLjHsi0YsxWYxt0mpP5liJ0D/BK861JPxVJ" +
-       "KrrKd1DEsjkf2fd+E1sqc+0G02nKaZP3/wWYV/JKhVSKU/9f2kP+Es6z7k/gUksW" +
-       "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" +
-       "Vs3lZLSSASqcfM7yVxGYledbnrN50XJBATYaCsBtFYJlZR2SKwb21+jqRiNFI0Sa" +
-       "rSjgiATZnWelW7O0mbziCfju7ylzo7WSqylsYp0JpjJU0qaMlJUUVhGilWTZudCx" +
-       "M+kc+l5uTSG84qLYv2ZJMli2qrILI2Tqln4cMqNhAj4gogAncslWOiwaV+BwnPnE" +
-       "jdp7E6UlqPtYJYV9Tg3WI95FkO6beZO8nlbeyYVc7od2tLylZPKLTp1I35t2iLsk" +
-       "ipSBQqtbUX19H2kWD8z2PyVPmh9rLUcrDSKQsTJIfukqY7Hl5DzdPLdUqq1+LJp5" +
-       "emzvHWPLN9YtWeh+2WzylkbFNlTCyVWKZpKyQ4YwqnWq3kKzCwje4lWdzTuDbTZx" +
-       "x4bJ8tzHGu7m3prWSakaVZncMwY02dcu7kznctvM5MknBXCmwVtKfU0xWphkowpi" +
-       "VsxiVW7I2rWqtRhwpcXDoaZN1MN6tYlKrh3GpWUlJLvXd43OuslSWQ0fVcxqeL+B" +
-       "Xv1rpQyBqdm7e1Ra8loulyubVzbXOGoNVpN1/mjcbxaAiUP6xnhT7z2IJaTCQVgt" +
-       "DpQcGFJgWSBTA5batqKV5l3ruu7XC3NyZRFeT486vWm68lRqMyRNpSzSpsi1KyzL" +
-       "GmTS2azSVMZqtq2bay1a0raVmmyq2yqikIVCwBSIqSpJJKsVBYgSKsBLSopRkS2t" +
-       "tKmrVKmA1rSpZU2JTWWSGtUtmsrMWKVLLVRCkSkEqQS0GpKlKZllNtK0WFGTNpZY" +
-       "2lmmZKZLbWbabW0ttZTSTFMklmzbbTaajUNZaVNKzWaipYqKmU2mMk2lilaVplhZ" +
-       "MykpmlSwamzZsrUtUJCNs2xE2zWbLJpmmmlSyzaYzNqWpssspZTaqtm1VbJlmm01" +
-       "kzUtDKks1LIK020pKUpNRlKTSlmUprKzRSmk1NTZZJrNhJIZMlSpNJDMktbNVDEs" +
-       "mpKFKVJtllm0ps2WzabGsbM2aQtmsJaMkNaVJmssNbZtbMprNYqWVKlaTUapJmGz" +
-       "RClCZhpmEmZpEympqWZmWbRs0SaY0lNTU2lqbLNtts1tsrNtKqSWmGWWW0tZrNiG" +
-       "Uy2ylLU2jJWUySmlNmpspWFKJrTVkE1lJmakWTZmUtpS0rKyqpVsilmsNrWWbLMq" +
-       "aVLFlNmazabZtNppoZJEkxlJIlplYbNUMaaVKhIUylmxaWkEslm2WoAZmYGmm02k" +
-       "mZ9vNcym/zYZ1m/E+UySfg39LUVVWb+0CAnu+IVnzkTYexs7ufDm0VjDZ7mmLPDC" +
-       "jvRkCK4NH4KYIPfTEsxAJVJTCY4MNNqKqTgrJkmjRkVkyN9MMuNskxW0mmjTSlSs" +
-       "RiUzxDKZmvWVXm9Y8a6VLqbbWXtSMLsZGTNoSqYkyYjI2VEskoLRRUbRRsbWkqSt" +
-       "Sau0WgopMsq6V0SZehQ82kyxbJsqq2k6xbaqqpy8chxElkKVybMPBqa1jIGLJqNa" +
-       "WSNnw5w5rJRVJ8pXQahwWUzyp0wnz/U0hIEiEYfzEVFZGtr8GqLFqNUUa0pVZVFV" +
-       "lLVsEy7VF1qILVeGEk2aS+WJki7F2pqD7InRyG/WjNbxTzY7E029eTdr/1ZJlhzx" +
-       "xZEk7TYxZI2Vk4yI8WLZEUcfOpyzjm2I50sicpFjzHRZKelYLMxipnrpolbK2wP3" +
-       "Gj5QrZ3mE7dW70dJN3aTWPvGzFnLOYscQkecNk/KdSbVattW/g8tatRJ9BbaVmTU" +
-       "cNkbE5NiRgCjqJjBFYYMQEpXT39BIxlLWwvLhFGpGWUqKViqxkcZkznhqQLSNrGQ" +
-       "hBUdGYxN2kbWNpAzdTVXSs46S3TNK5yd26mxXO7tXNdm0m6bRbSTJvK6rpKW2TFt" +
-       "vPLvJbNaSixoxKyEmNk0kWK0SdjZs2NohYnAsejhFowruXCQlUVFqVGpE0UGZIZE" +
-       "c3lktTo03a6N+EiflSdFScJJ0xKRxN5+ZDlCLZB9FWySZUtkhL9OWNS5Kx7HmGk3" +
-       "Zm+vn/kuSquatyCwYtGGhIxpQKVBh9sws7qnJ2thu+NtlbJbljpdXFmFp6I0cN3V" +
-       "hW7RqTNacWNJ80k/pbIVr82CR/iVzKp1fJPyjz7u0PGnOl53LbDvYakR0ZJD8qm5" +
-       "9mWLpEWRzhu+1n9OUKT1kn8VOh3p4lv5ZjCqf3P82pWjKmxUzVvxpOH8eDZPhDwf" +
-       "ii4JZZPcJ67Ts94+JJ8JN6n2RXJ/iPpDEN5uehqR3Yxju2bXbGDrRv6T0R5vdxJO" +
-       "R2mD+4dUjVjZFQf6RFZJ8rFskqu7VMy3EjDuzE2K5wH1nnG971lZjE1GMMpMLzVo" +
-       "tmMJoN2gv8yApnCpgihcVoiUFH+c9nnbz+momOTD2WTT5sRko0skZYttki1bLSVY" +
-       "mmMY0wqhWnGhdSllSSW9z4amEW8VfPq+6qyaeu2jZNvXtEl6ptryvUoxwqtXN1Fm" +
-       "Yqyc7Jqlsb2TXkulki/galjcAwqxIxJEkIZjxWvohjDLbjDg3VHCdKtlCUmTvHq1" +
-       "g1bKsb1nufaqpD0uQWNon9Cdrrb3LTMlSbUTSbK0ohajIvgjH+99Bt8p3n6qleSV" +
-       "ZE6o9h2eHZRzpwc3OYmK009E9R328jxMbJvFH6StQnM1NNmLDBWdD/DwdQc+bD7v" +
-       "Uoz8D4pQaY3jgmo4UpCiqrGzZpNbC5h/TXGpNqn1Vaok4ZPk4KphiwyWJy5ZHRwf" +
-       "oiZC34h6SrVlWif7FRHs1+Nuh+L5Hs6k7WWyNKyald2mpMaNp8+jr5z3H5HpDpU/" +
-       "yqPXPAk91O6UFo2PK2u5jy7lWy35Kw+iPIqfOySOpNDJ1k4nqsilXhkeZbW8c56z" +
-       "Rx1kbkR1nBpJ1VUPWotkR0rdsQsexSuL+5pk+Mk2l/i7Oi6XGwkvE5JyD6Ifc0l8" +
-       "iIBO6c0DixXt8Wk0H6+6WxFliWWWhO5P1UUsfx/o/JZJ9iprtPkmjEsfWdqnbtat" +
-       "q24OckqqqnQw+6k7EfBZHMentbUafUcOiqVVVYFUlFKKqejEY6Y+lfo+ubdLJdCu" +
-       "RFXLgVQwrGW3GIYJWGCYwwtWWlUskYxZ+emKaZHyQfWMWTUkP9FV7wTx+WRVUrZI" +
-       "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" +
-       "mStcsHMrio8lNypolKYqrT5AyFDChtZGHuINKBspBGKg7kJt6Bo8fNBswFHISJJt" +
-       "PcLdHk1+NWshZCgqnMZITrDX2VnDFGhCe+9um2kaWy3BLFDrBte5ISqMa3whRNX2" +
-       "hdsSnCgdmnJiwaaFmqxgEhoSkmS4W5nnc2pOkjMCi0Pn4WGjUumeTCfLJJ1jYrHx" +
-       "jaFRrCj5qXWxkTinm7fk9Hu2JvELPk8MMVKpWKtKq1iVVKKUxXlx31G9Tw/vO6Mb" +
-       "E80lYmSJp0FRrDJyLJ51U9ZI6GiLTUsTlnZqBqxHcOldSSip2iosJI2Ehx0kHxDZ" +
-       "/AZNzYUGDTXrMplachkVuS1tsiYIYyt2mzZDErJJWTTEalrQplZC7YM+li2SUoxV" +
-       "VZY0yZkycNIiDcCJMaGNe5kXBpN+8HIUgoKqYnY1JISR6tshCE6JhknVjg6cMhWn" +
-       "JNlbSdppsotV9zG202HYjiEnmTz+E7xXhSrLv5ZtdazVbW2hjEYNKDGEBkJ9/vy+" +
-       "vnrFURs1YvpvLuyE245w0VLL1kr7cOg/Ba/Qf0QM8JPxZLLOStL5KZ+faXr7LE9j" +
-       "17oH4+OiR8orIu4h/RAagtxGICYpOWtBCN8eXMu7rl485VKQmKi+aU6rwbyfLXpr" +
-       "161+qbettfqWN0pL88tJbgpKWur4a8ki2arIszGhZJVK03h6o84nieE+RSDA2EJn" +
-       "ygppzrRHjjDHHjQ3oAGNIa0QIJjBiGd8s3glSnsMZSEY1I4BqCBOrFtgXZ7YoGff" +
-       "5SOeYkWToVOR6a7/Dmyl7pPebOTUlLEYebR5Ikzr5O+azEJXRy731dGOXtcW5mTx" +
-       "HG7GnHVxIbSbnuyUslYdMltVhpO7tytjo3Cx2IyGZDKmmWOxCaYRisSq0VhSVpit" +
-       "JWkrS3VY0DcaigxKkRFVBNRkkg1UhOMurldw8knJjznZobpJOCnNMtmM9JI/gses" +
-       "Dl0es/T0c4b+aSO5yy8it57PtER7yQ49svq6K2KoqVhjFUqmm02P9rP+enbyTaJy" +
-       "k7zyB5VdEyRHyqE2jlT/N+4jPJHNVfOPajFtvo+bRIhxDIiAREIBEBHmAseJvCKp" +
-       "aWSr3OREAnaST8LJp9TClbcGN022eOxs0mObY5x+f0+u0ck5RKKUopJrgB87bebv" +
-       "yv5u7W3q/fvzQ+JGypskPUreRLIrmybatMsX0a/RksaxtIKIX8sn739qsebzOZiG" +
-       "by7s3vdaJR6Dj2macG0WSRT7SDN9KC4xmGSRgRYwaf7MbwGIOPrP6Rb8N/DY1I1H" +
-       "JIkrMaQbxJHdIbifDkh15l2d27BHRHVPKch+6RBzeUnBMtctc4pKUyuu2upJrlrq" +
-       "667pW6+1t+6Vk20JkkpYV59A5unxbofu3vn21Ey/s+HYx9zasPu1JNm5an1x85Hp" +
-       "GG1LFk0RAJ1kfSK+E9UPntJMsjrKWnc/YuFg5pe8Oyx5qIpZEbwKh7e7yTBhymws" +
-       "JtGzb8PDzkfvPfLZJ5yR/o9pH2H9KqdtVVX7VbbWI2Nmr22lllliKehVTXVI09Cd" +
-       "Z/Ou/e1aKs8lfvPiSD3/Bks8PeYcuVmGgTKW2WyVY/isZRxJN2T4vyfP0vRyfZZK" +
-       "rbaZNZsTidKX8ofEcnunxzNEJWu9xbuQ3w1er3T4Y3g7/gteJ4WVbTtmn85O7lJ/" +
-       "VEnkTJ9atqsYYYeujDUxIwoxR56sknNj7SbuGneRs8nq4fJO2cpuiWKioslVKlRS" +
-       "pJZ/ULtdlKi0b+Z81+yixKtJIPDdvJ+LvDu0SyY/h7/w/FiNs+mias1cSpOznIPK" +
-       "yrHt1CY942YTzH+yrZIoqhOEiZIT845d3T6Pps/6Ofl4bEm9vIZB/UJBbEtgRgyB" +
-       "QrgTP96/o80lj8FrpZ3WuiX6brraSSqxRuxjTFUbWarrGGKMDbBcSioFSqf3ZLaC" +
-       "XBlKqfB9CZLWcmutdlVXXxEzqHZVo2a5uZjrbE5X5CvSKi2WpbDaOR0OqaV2Vjxq" +
-       "myEND13YGGgTBqRBqAkgipVktsk1bJm28lu2ll5dkUpklpVLKkqjThs7SaJqeWRG" +
-       "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" +
-       "BBBIJBq/KsYn0ippp9W01W5ZRjbTSfDNkM7isVOp5Wk82WrJNLTsbRZZzsMYDiQS" +
-       "QQGRB573Pe988yZmZmaB0HgHcz7ZHJKFgkEgyIkiSS9eHnk2SvPDryK1aqqqmtW4" +
-       "PSycD/w8sflE+v8v83/dyIplqpb1llszKa0Kl8tWXbMGzMy8XWnF0X937o/wO4fq" +
-       "0+r7tk9qe2FJ6z3CkozLYqzEKiqUFDKGP7kqsHaWq1aDYcCQokp/eU+vt7uZp4fD" +
-       "vw29FcKUSuratW2rX7I00/UcnqCIfPyP4ftqCVUyNaqZi2P7Lo2/nvtw1Ntxu2Ov" +
-       "M1cLOMOjTdl/Jw/jqwjhrHX7ljvTS0Ng9YWklWliFUpZUiCjOKclNiKmjWdFMjuo" +
-       "dSAo96JmslmGgyCeUmmjEtITqi4DqWXTg4318osVuX2Vfa63aYJNvvZpHIUVXXbr" +
-       "pPMYqxKrXRvoXCGuFnXhSb4SVZtAm6ojtvuIBkdOcqdgEZ6lcZZFN1kPKhJJhRBr" +
-       "WEQyIWkl1hnFU3uys63k4eJJlSIMlKqoErDI6G4EEUnpZfaOrlixLp9DvOUpB4Ta" +
-       "n2/ZW/q+fvPhH07t9H4MT16XESiARMKUE/rVVU3KNwDooJ7dlAzgnD7EhScMIYxZ" +
-       "/mOidHDestpVUIAEgC0t7/m9fLzzvPVb1fK+s+Y+f0Pon6xzJ9vzOD8R9GeLf1T5" +
-       "3aq222kVRIqwftW1VyfHRO+89MPe5zaktbKQr49+/jZmajwxNu3Zk7fVWkSWG+K2" +
-       "a1xZlKFOw5BlJpDTgyzEORiGVhmzt4tctufPV1DsnIxdsV3SbUdlXBrTgwnt41HJ" +
-       "0263X9faPss1y+iNSMUfp/X6ff7/6/TW98cccp1bYjhzq/3uXPJj5bT8/7W+nhNo" +
-       "/69v1+jGyfY/aaf9UV6T6SQPl1Bq30rH6H4yV69J/bdqqKoSHon4AEpmUtPAez+t" +
-       "92Y5lOj2CJ7CYdkZxf0D3R/XfsuFMS/C43Nv5T9sfMZV4L/G9pvd03/3mq9yzlm2" +
-       "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" +
-       "7sCx2jKWaQSEq05Vh2otTsmLP8nxVuGAJlL6CQ0fXzP22Mn0O/dc+RzxqdnXq/N3" +
-       "KIZUKGEwHCFgyKwJcqXSyY9+KkWLMIVwWZW84+AK/Bz5wnaLI44LmU90x/EkyBYo" +
-       "YS1EJA9jWfE+/5tRUV1ipCoof2zsjgKQ8vpHUIwQU4hNNSOW4tYulfaqfz6P4wYH" +
-       "GDM4DID3+NqN1ONUA/PfuPMRXS88tk7zKq/wt5RmaVy9WAxsjPw3pHVUomq01Y27" +
-       "q1V1m7Yd2KfWl+O5Zq7729d9zZ0l0p3fEcrJ5YgfbvWje7O3f3xZrowIWRkq4O+T" +
-       "FRyxJpiWo4lFPH3WrGdl4cvrRgQWOs7e+Rm7Fg5SGPs7K8wII3++tGhUMYuglST7" +
-       "5KtdoyntNOHVVlYkvFyJtG6k2rcPNYnRazDvM0jtv9e0GxHtPw9lbsVHo999iMnW" +
-       "ySQyREBBJkSLp6BsnvG/p9faVUKlPzdQ/ZVIRVFqLwVZA3bCzzChJo/VG3vBX5SF" +
-       "rWK1RZmzbONI5WDQJSoSvFrWQPYWLVWpk4wJi851alamk1f8QZvBepyqUITCUW1M" +
-       "PO3E+bYpbGJWorqrG+spHFPy6ovW+piPxPDpvMK9cLBMXT02D897907tO7q6Tqpw" +
-       "mu19VLVj5w68m9aLxrh5pRd60Z1Y7OPlnWyT67h8VWsGO4nUUKiC8Pu5yxhCT898" +
-       "xuvPfY+fhoRK5T5qvf5+ore9q8fDLTyk2u/mia2vXGhbTXwjpwro94vOKUYpdrNK" +
-       "/ilIKJN59XedxQPPGvYqUmlTpq88kgneW7DHmiG23HMo7Zsh04+H7xMdo7xOJJtY" +
-       "eizcYZdt7XbKVK6OL4vQLe/M+3jq86SgU5889oFKfPVuxF3wlFrkIun9efjz79d+" +
-       "wYeN/C+u3m1rd0jFGq9X89KmLLXN2C5Po/veZd64ndf3MKIxsceKwWTeL7MD3i1L" +
-       "FVj6xz2pzr8QKCFNCFKpIp+xTH6JnyBsNsPitQloYgqd1l5g4jhq6cPDUvHlmwrI" +
-       "oOhRQkOJcJfIaDs0KhNWaJJhi4g5WXdYcDKbkpiy7o20IRRpRFyOFooQ42GI3+Su" +
-       "oMuUwozR5RSK47UcIoQsIwhhRiAXHRoVM/c+S9/l9R47JC+j+m/Feaff6jz8TUQc" +
-       "fBu36cbfXyrsgqiUIyVfLNwCKvgnlBRwKKm+brfbFcOClV8LfTPJElZDw+Yw7n3R" +
-       "/39I96pWacn74akmCfZk9N7Hnbmfnm+G9N9IIVf233Vjv2K+dmOqXTgm/cpSxjx5" +
-       "NoTM+aO9xtTisCE1pRXSdT2doOxqKdUb7MQGth/hkgx+xCAlvCV3TRG0Ce6IyQW7" +
-       "O5ROkRaOiwj2YN2coi/fFuizw675bLOfJnWg2VO7rRIEXexnFH3XUPPfxRcRGzXs" +
-       "xpAtbS7eu63smcY2W+6RTU1psvDNdHE51pxd+N1FlWJbYbvu4qRoHx0s6pEIRV8N" +
-       "xbCsclUVRe1t0Tr9/qt689+zMRbOMBXqvBVD8KyFEO9HimPzqLzwaL5e+3ZBPN5Y" +
-       "7c/Kfp4kQCKdTjmOa/v154+n3TBe7/D3+v6r+/voinkqWoitVotACCo664ufF4Po" +
-       "3J6cfruz8fcQTLL13Kd1yNXLle7zzhNiNjuuwY3dvT6en4e/3/ffT7fX3eKmQXX0" +
-       "/wDQj59+yNfHDLb2ngE11HTs1D00z1Rmnx+dfhwbhbzuLp0qd0QHMBspKuzzC3ON" +
-       "dfyL9+3rQfBoYPjz4zsDVN+WG7vLnXx9Tr2sSvtE8MUa1li7Bpqrgl9mbKWWkUrS" +
-       "xt51NbR1yPPlQlNbX2vpMO6OipAZVCnOzMdCcdMd8ANNA3fU9nxFkfotXt+qp9oP" +
-       "k+AQUQa8iUvJUoSVIGwuzKjMpmM+3+Z0JJ9oAjV234RfrNBxtZMos3vCkrhlcmZX" +
-       "JZqK1aqYUg1pqK4fwfD1WX0eSASEKQ/xP5j5X1rQTbnv3OI8ip3bm/IdSENUwIVV" +
-       "CBlkpUlnZ2REw9p9/blysnsiOzjy+3xKhFfg6Y9VKDt267q3dT8u8J9NhYJotAkH" +
-       "UBPU1WdVV2dPq97X2saP9b/I78+d+hJa9dsO8Dq7uuiXBGuVPDdiDl5sgMgCCkTR" +
-       "ucudbu90qcSryhxzaniH091sPgD3KHqWgJEDwpMCgIuFF5DDtnI77sGMf+eGrB8U" +
-       "CUkTW1qLEWR7RSwstGmUIlsNwAQgEqgykQQLO1knr6u1ttq21Hb6I+XSd9/RPL0/" +
-       "pE9I8J/gr8OkY248frxb8ffHG2a4zitLxY9lPyn2k/bD85+59xlp+/KfS6jzTDGV" +
-       "KlCSXUKDuGBA2GxzjS7K6hA7uoAgSlLYS2qL/6jhPn+y2y2u3o2Tt0/s8v7+lrl/" +
-       "tPT9O/Fvbfdk0V+HtoX6P4/h5fh/Zzr65P+z5dyH9HPb4K1fuqT5PuQMhcP2210T" +
-       "TD6Tx8InpqHwj333mVmPK+Lfw/Zy/VOHTmPh/Y4e230Y6cunLw2flSdvb90NP4n7" +
-       "P7x+yfRP3enyjwH7P7Pb7p+s+0w6WTLFVJtJ7fRw+3jh93hw0r/PVq20NKhwUT+m" +
-       "nppNp/lXTSUy24lK/p9p+x+7bhT5Y/39es1H9J9h/LTt/Ha6djhODEY0qtFflRyn" +
-       "0FY5fsE/Dp0+HL/Lb9lnh6YcP0Ym32Y/Rwp+H3k/Kf3z7vTy8I+K+yj22wqny+Ps" +
-       "dv3/tbwj0m1dOmO2g8Kfo4emjSqXi3tw+KtNzhy7Y8PwY/U/sn9o/l8PSD+utZcW" +
-       "37Ph7krkPur4qw0fu31nGszW2itKPy7n5Y+v8W+vzZf2Onp4K8qjB+bb8v8tOH1H" +
-       "B8o/l+O9+G0tG1pa21taN/eU7knnyMCjBUlf4T4Nvg4a8W9DpG34af0dOXz/L8Bt" +
-       "/Lo8d/GXPh9HDFcPhj+ngr92if2dHMPk+xw0x+XptPtbdPTbXxbFcOvGltuZktu3" +
-       "B29JpHD9/l+75T24fcjp/93tG58fLFy/Nc1mOE2PTw+O7a/KsP1dPKz1Ielp65m3" +
-       "Lly5mZmOW2qiqrJOg0SUOpO/Ym4AUdn91ovgujOz4FB0MBZWJO4mPoNtb+7266rf" +
-       "z9zM1txqittGlEv4/jbbCTioBO/q3CKi49u7fnvTo05uxVVX8Y0CiogUNx5JLet3" +
-       "YPFu7NOEC+62c7AwsFCz2reusG9vMFWax1VlAwU1dUyIEhit6aC7Du7M7VdNstC1" +
-       "lXlm7XRkSLM0jajTZqNBA9IW4mqEa7U3XwsODHDZVYjuyTqypLVdoZbqcyjdlRjo" +
-       "dkyjWpGBmkajVWlJ1DzMPPfJIIJJJJPAQDIGiiFDI221bW79r+Dx4685zOUWtrbb" +
-       "fyOzogfCvL38Olr2TVKbaW0vvu6QF5fnnbMxw4f2Y/dynRyqptyw2Smnj++v21rW" +
-       "uHL/Sh6afEfd+rg7tq21/aO38mnw4SfDyY9KYm/9rcSPu/X7Jy8DtpVNp/s39X6P" +
-       "xVjyn28Mf2culqrID0/Z9WNK9+LbXseXB+yp9IezTttsnsw0m2J9HPXrTWa1mZcr" +
-       "Y5Fj9fX8f16/rtx/W/7ccT29K9P8fS2fRp+r4CerERJEebBr/HVX8Y2yv6ZK4N87" +
-       "Oc3/UFSf54kQJDPt4hEQISiNsJ19vv6d5ePOXnLnKlVRMqnKJRN8HOc4eHnBzoIH" +
-       "MpAZ5mOq2Kzf1XTznObSPHfYLFdt2e53f+MGA8zED54z4hfEg7rRJfbXkeq33bpR" +
-       "ebgJAwUvLQPVZKKFSSDRYI4wwgQCBcqqHmqrcrro/+ISKcn/1pVyxUc+791ve+Gi" +
-       "7f91U5/UtURLrEFwxif/K7mLJLLBmTJklllMbAuMlEryqfWitYksSyFR0c9WGSW2" +
-       "NMjKZLbGmSTzVb7Jbba9lttvnPje29ykZaxopllRLYrTpUlc4iY8qqyI5d705MZv" +
-       "u1ZllGstGZYT7z6Z6plQwqduumGQywMcHwrK86pav3RTHhW18XfjLFYyWbjorjna" +
-       "TttpVOBUpg27Ou7MrMMyszLdHBzymitUJ4Tz0dVMpiyXRJDbskep0BN7JGO8mdHV" +
-       "Pd1TStUzfsg4eXuWE9PVt2juEFWDZr24eiXW5DE7KjZzEOuNZG7I2ocWRlLYLVvF" +
-       "GIucZOLIbpOKjLLUtRat4sjIGnHJoJtX59aGaxoZtSn3kjr/BfvvEueqYoavHjKx" +
-       "lfTkQc9PwqlPyjh+1Tjaztea0tZo/XVFD512U2EDj9tVTpSLeu7zGstZacdMaS3H" +
-       "LvcS+9fHUcNsArlVO3L8To+YZW3QdvX46+4ZlyqnDs2vzrkqcOL7lnnrnu8/OY54" +
-       "O1Vp+VBoMO5sxa7ODUmwnEJvqyTdRq22yZN7KutPTVelXigrJvTW7bYeEeJUxwNk" +
-       "NlWq21IcSHn3w6MTx68cHTacUEfeN4zPFzT3uFY7X3XTNafe0tNeKqbVU8s+c5mt" +
-       "7E7erU+HTx2Su+OmvhpwPmcIeHwW7qx29oNMLvh0fHz44pNODegO6ZMEIgYczrCT" +
-       "WdKk8MDFGSiuOOdBzS1zZzVoqio5kOTtbKzi7aNMZgoHKdbV9Dlq7N0h523x9+6i" +
-       "49cdHhy5L3Kdee8uTrlo5JI8MkRs0xx3Jy2Vtbxbho8Fzs+RYy555fVjxRvjk17q" +
-       "u+TeMhUNSCJxOGSaXOJIampROLhmaO2zc6CyY2kbd7PgiY9Mkmm76s3Tx7yp8fnf" +
-       "E1+NlrW6nhoz1fPXb3ymeTtuRGa89uIgybYSRnch0uU2n5K6nymfCrxsnUc7yc9N" +
-       "gY+UCpqeMhw3YTjNExOOB6OpwmBt07D27E2yOkgo92SedsjGFb5T4cKHWuV2M8cF" +
-       "8zMy4FsuJXHLaRIdimuHBprXH3TZTtjDi8eLZ0dKHf427eFdKGF72HenvID6MMOn" +
-       "bCLWNsgpUEoZZG/vyoPxPnHd+D3Y+H3rpjqclZUisODjFbL69xIOG+QclTpogxxw" +
-       "qNO9m2ni+V9vD2uz1tpoxtt5t1PjrlVPhy7WwKnZHuC3ruTKRLY2yUlqGlKqWkiW" +
-       "y9iHnhPZO0rN94N2brW8hut0yR51BrPKXs7JGxb5AnRiZTl2Xq1hpiXy8iczq1p0" +
-       "4OUvW9g8WPrtcenxbXL58ic8LgbnL1I0m4MeNSM4zVJrWW9uI3DW3tqHzluUwxR9" +
-       "+s0Vc0hpweORY4VOtNXbALUCyXLqNFcCR7xxw8jTkStO873DPfY017vHfEhE5xAu" +
-       "lh+U9Pt+W9++O/u05zeb4c7pzjRaWurtlU91y/Pj38bnSo+8PfvF8I5SNJ62aL20" +
-       "QZtJUXrrTO3rYPXw+NeuFWmevi1C41Gt1m2DMqHmySGsXd4XEMFkBpCUlZSTWAUm" +
-       "a5gWmZLEQcLCwtjR0rZplkWrZuMqsNpWrMyvBJ5/Gff5lT3FTnKql0x9H4PU/DTX" +
-       "OxAXime7qULq7DqoaFW7tVaVWymOAghDdEltpIwwyIooHivfPjSHoqKy0NCBIRpB" +
-       "IGQK8fXhPBpMTMhc4OCJWMuxlIYammJ2sgEEXEs8oDopthFpLOUlVTJVAqKGFoiu" +
-       "fFmCKtsq1oM33uOW59vV16cDSvt7p7+u80IySXnVy5lF3Mz5ZLDu9ZrDzoUPrekc" +
-       "9Ie3XnPlekWLviZo7sWzm9WT4r4vmvd4+Mn1zI9eadvv8/FYv0fllb9OdHfmF98c" +
-       "xiihhSVRBRSemqq32pgz4bzMD6OjNYamHHHp0WsLbYyKxZ3mLD52kY91zW6fPB9d" +
-       "GObcd2fPPjX0d4du7bA4tvfmSzb6t9NouC2GU+LHHGJNXK4s3xiY6MfbxT4Z83cZ" +
-       "UuZDLGk0mY/Z/iHrRxSY3S1SG9mvzS+bvxc44Th6JqNHLLC4ZR+p+NfpU+sMTeHg" +
-       "a67ZI7LO0gsjRa278NqHpyOH+PRsdMcqF5x65vjp0KeJjqR4dknzo+Zsle+oZmSN" +
-       "f8ttztuTWnh+4V2fpXP02u7ttibExiUsNhbdfPzh1+rQ09U+enFtXS5qQkjjxMd8" +
-       "MkkY56cYwqZcb6vi222vU9cyYersXMh7cOOI2Y7Viz6BNspac/J9fjp3RQw/gqpU" +
-       "1kIPpx1mbn6DEJI5wLjKElOj3z3XAvFr+HD+fSn8rhs166dJp1CBw82PeVw26dIv" +
-       "7MUi/KQbLXXHt4nPh0fSOYs35zI1WtZGrbfqaOvlNp6VywnitCl7G/RjngwTGOXw" +
-       "v3ThnnFFDb8PHJ2lL1vMzxiXS7Hci9P169PULTtp8MorSZB25VNA4Pw6X609+3Vz" +
-       "WTVcyRy2dbt8H177mEWSRvh8M+vSerjnx/SZfuZ0beIXSUuzna/Om+czLbbbVfTz" +
-       "54naAdd+pE26qa+jh4iOkG3g+U1FmjxmGX6Gj40+jLEntyrIn7/D+T8fy1+Pjjup" +
-       "Bc3CtbNuXO2tRdulIu21ItGsL9ccDt6aEtrxfwXjqcDx58HqqhesQkkFR5Hw5s+Y" +
-       "95rjxZ49Zxzzzs55zny5Y/Trf42ninShp2tC5MykPXPDq/HSuOcy/Hrg+uXOZjhw" +
-       "qpi7evQ+G3aueLbIW2pPLBOXPB2k0qeWcvH8dPX3537NGVVjFVhhjKxliVkqkjay" +
-       "ptqZq2S1WktJVZNtVJa0VtCm2mzbZsiNNZVVSy2ti1tS2Sq3md9hy4638z5PHNMz" +
-       "Ix3IfMkD8jgU/hevg0z6O9vrhfx2u0pdXi4ooddn1WwLTt3u0dtfx13/DwegMQYQ" +
-       "wdp85zgwAfA3hJq69eh7Lu7zLGHl5V6eivCu1elHunTwnjRy61p714uThUcOOcz8" +
-       "O1cqxabWOunLt5Rw9iSJHt3F3y3WWZdtujHhx50iRPHtKachw2vnz8eK369x98Ov" +
-       "hw2vztQt4JRlnK9QFCycOHEpchMB0Ym5SeIlIUMnPFcafA3klDSwWSTX9VVFP3k/" +
-       "KQ0+nzF4rj5wtvArh604+dqCN3Qjz0VcqypVmrlXVlSVcqyiSeckRld1JlJlRlJB" +
-       "zmlk1LS0RqoTfWN3vzzprfXjY+ZUWT9c+ednqsvvSSJCkAXphQSFpCgXIwRJFQeP" +
-       "HfxpU2Op7pg4ZhX80D8P0HcE+tvtafe0PslS2h6bEUphB+Trt9zcMySlFfrXx8s6" +
-       "aKGUneDdfjQ99/yYfX7l9meCDI/bvJDJAQgdu6SzNW3eZlBQykZoKrwo37d0TaW2" +
-       "0DnfHOPJfg278PvnXg+re/l0U+vfj83QmJIyIhDN53JH5Px9XhPr2/DXcY+NzGJO" +
-       "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" +
-       "3asyajzIENvnh5J4Xw8OuDlfBN8GUCx4420ZVU52z250coXTppy6fELl7Rjpy+nP" +
-       "x28cG3ng7sNCRkisEe3Ltzt62dtbszTgXpLw27ePvRw+vlFcKR0ekbTaMSHDJB5e" +
-       "nZ8vLbTt78dG25fCwkJ//etW1scxPdFsVVsi0tFqS177RsuXJMklSkhrEjSwORa5" +
-       "3WlxTnZfjFJJ8qqYtJkGIYaQX+CRXd/3dKH8uAJ8Y9cu+OcSSPAL6Gs336Z468Zz" +
-       "vNxQRIyXt3dm7s0SAwKIJ5wEk8AwcCHFznBwg8o1kzNO72t3vAPY+sfngZ9dFb0o" +
-       "+X4H6XmWneYezTTiKIZ4CUUD4QEQCdPGmwTwkyTaXmJ2d+i8PAPAvDjERepd2Z2U" +
-       "tFeZqfopOh7VAjAeQ8BPpenxxACAkEQhEExObQ9XlR+e37Iw1mN+ICD34z4TEzKK" +
-       "dyQ5oUQnsRgHH1l1ker09IZ4KIqyrFUOLmqZbKLYUGaGAgOcGgdbwVvRho1lbYNU" +
-       "cdPj1zU4ogY7l1TxfNNPT+zP92ta1Xu6TpY6QeISM9/hrny59kjOErh+Ht2BPj57" +
-       "6L5BzgoCDQAx6HNqd9+Dyvbt27Lq3osAuFDt/Zv5zu78vxMXPz5rDDqp1z+Pi2nh" +
-       "zxuQkFAnqvWm2HD09db9dvJvpZ775mY/Nd5n5du34vVU6F+N+jTb5SesToqJfaen" +
-       "DXwdO+bu81I8knny2dLk+lPtFD493Hx70x8+ZnD/LrkygIFr4AcZGrTDQcMwVWSB" +
-       "UIKC4cStoBZZEzt+9tptwYhbUixKXVLSo3XvhOmipnoTQ+XBJCdfHJ8r47yZmPlN" +
-       "tp88W+HnzreZnj2dX2cPfT3zCQm3ifI8tvCeDfBNnl0nnzDynndrPNObjUhIM70k" +
-       "+Phvzu5niebfbE8NY1HHuJBzqbt41px6TjT2wnuOfnskTlZwenlVTqj+HnLFtEu3" +
-       "oQOnRi96VHqH1D1c+g/IZ9nQp1cZlfv1606UPjEUVw/C6dh+Pz4Dro+bIdOl2OTP" +
-       "vLTZ5+7/XSX29Bv0PSCdHY28GJ5eY3ddXvTet3d8H187Yn31vrt8fNKu1D4+cOuX" +
-       "InT13p65ql8fJv74217Pm/vXbqk3NtnkqrqnTkK7wpfdhA+r975xmcNIp7Twznji" +
-       "evTlp74w9peduGxXiNdczaymNYnPSSSSFdH57db5cA+GzcQeEkOBjPVentzlrtHQ" +
-       "fBtWJ18UIb3yjguww+BUcg8J5eHbljZU09Ja1euOjrmjp59ooZ2hzKN2Qay4mLA1" +
-       "pTOLMipVkiB0k7w4rISoDm5vGxYTTI8ymFxmtm+OGuNY5ZPbcqyxJP8qLkqcrsuN" +
-       "XvVCjgr1Q3zy6o5T0ZznGJlVeY1Td52qu2m5V2aq1GXbu10ddY3rOrpy0u3G0gaI" +
-       "oCqoGaZwMADnKp1up7vrdzvSOe91CCUrW9pWJcngyfSVtIngw8zxCUFzpAJs+tb5" +
-       "Zsn1j4Dp7628zYe6Rgm2wa9FYc1vkPNMB5NQ8Ic3l160dXv1c6zek8W9yRs1O1TS" +
-       "z1rN1EhwklOMD2NGX6ryTXTqgq+B6Y+TGD0AgzsO3XvudNp0bcBy7fASeOUcunRo" +
-       "167Ew2GNnFZG/O7eEsenI5SHrvvWZ2addPjD+TtfXdODuwvq5huPLaODCtE0ntOn" +
-       "L4e8t7dJ5M07bNC1FSRtpsdzzppPfI7dxw1640x8bjJekxsa5Y8VNtjEcBtCWwcl" +
-       "ZTbCJcD8HrfbHN5KHTo4Fp819fe92ONY4erddMSl2w76PG6tcHtZwrlPXKVGjFac" +
-       "1j+rOTbp5jOXJwuP10ofsoU9Td33dv3n1t2cqdfj9Pvyqk2efPmZ48XTl0KlODvM" +
-       "5h0nx+MfdEOnxtt86WaVU/eucz4+eu3ZVKY+v3r850xVTdadrjormihyN/evHXTl" +
-       "OFR1cY65NTCcRp8FenYLLIlUW8sJOnpScPWt7tZIJtsSOmHB33atvt8eF2+HHiQg" +
-       "NCRxrt5ejjpt8Lh0U4HvntHLtejv64WuYovx4cvjudsIfUUV5bOXl6xXKF8KXjpP" +
-       "vQ+fOmXao1fF8OImWnu/i1atr4deV54zS60z0kRUkUeKm8HijJ0r4pFq7Fh+ZW0p" +
-       "aNBfXr10NlfrR0278/Td06Kxn1/HSm+H8Kqdssebvr9V00fgPx9owrAzk/h42KL1" +
-       "67fvfB4VPiUIfGBcH0P4etPoVyKa5fXxT68OOsAuVItPWj1w165dPPO3Prp1euH7" +
-       "9fds6coXoqU5gR9Lj1cVXDfOfUFnHKJcn73553ve94fphI76boE5x5eZtBy+Ht3z" +
-       "2NsO2PGCnbwrDt+Pq4KodNhA28Ozw9e3Tlac0vVRrljGXXjK74Z2eHlKbXHRrpJ2" +
-       "M2gxJI5S8WzbWJB5fOzzK0ngIDK6THQVqb+66e221x72x9UW+rxDexdJ8d+/O9Zr" +
-       "M1mXw8jyxjie+j29RJENvabZofCnhWL1wD3ljj4BcQ54OO0GkHSQe/IN7t4HfjuD" +
-       "tPHLp3KlkOazq8sUy9Y3tjOLJlCzMmaWi4d78Kd+VQ0sVjFFisKSwqlNNSpaCyMY" +
-       "JhUqbN41WLJEmRFsshFLI70wpzxVDVJQOGVDMCz+Yz50FeeCnxee+p0OKhjnr5nP" +
-       "et8cb4wgYO5ud9c665eXro2ZltpaqQ2VAWc7xIg8F9WbmVmuss1wH46NPSq6o+75" +
-       "r6ndGvN2auHmEkDx6GEenCEQjUVKH6S7o7nqeTy/VH1TrvmVfi24LBBw8xYwSNpE" +
-       "8sJnV1c5fbaj7DwBMORMfPLNZvLOcobrd4s2vvkgcp4VXw0SckHZ8PbX4yw2pF80" +
-       "01SGzT3e1kxTTTd04UOGN4uYNHi8W+3ItR+t5UkOHvho7WGOo9fXnnm5jU28kkcn" +
-       "h8ar34DKQz8PS+0UNLpvX12vxVVT4FixZRLGVTCKg7d6NpMKY20fHFHbPHAd9cW8" +
-       "W3B6uvHn1lut71682+3b0eekCcIhIfPBfemlNvtyBHAV/OuTYkcsZ7vxb3PCthAc" +
-       "J5Tp8ErwsxlI0n3rzjvR4rr5meB17QHbhSBLIyHa1ZzsIKrDw6gTDhlwJiwFxV7C" +
-       "TiTvjH4uOQLhBYpFs7g9iZz1eObpyecFTp09Ydve/h67KmyAMb5631VNtmzEgiaH" +
-       "voEEA9jOcHBB6Y5jttTflN4ntsbyJB2kkiqnekzu324+Oz6u+mggPLyZ359BJ5B0" +
-       "H75vv+O98cccbcv12976z0kU9dPnSF745HyYQ33cpPXoOXLOhUp0DfHblUbbed8u" +
-       "lr64ejy5Ydw69Z2I9N+ed8a3ve9zh58tTm3kTpI2VpN8Mb84XPTbiYlSnHxsVKd7" +
-       "5NOQ9jvhPHro9jznCFWeydPNaNzME08nR6LWss1Ouel7em2Jvht075zNukuFDuk1" +
-       "adIWgfePGTgVKdrr4ziPTO8PPDtjuAh51atsnp486Ws04OcX3GrzMsVSx9Po989d" +
-       "4u9uULJywb+G3r10Y9F054GPrm4+L04ZJJkqxvxw8zVtr078cZmaVPNF8eWOnzjt" +
-       "m+Dzp6MOXKqbXT5aKmzzblVTg1w8Fy8+g7bfFrpVSnXPW1fHbb1XDGGpmJERNfAa" +
-       "YbUdLIY1MzGDJvWaVJua1NSM8i0YiLdVbblrW5bVtO8YJSMqFKEhgmDmWUhjLJDM" +
-       "DKMoiZY0CluHGm7ksuQolpmExItaAGFEt1JhFAmUBNrbKCiJTAyJZtArEMXRREHC" +
-       "ZTHBRGRExxlmSkstEbmFe7IABXoWWFGHTOoGks2lkVQKlwsertIkulaYxU1YkYar" +
-       "IugRakIpIA20qUYZmFcabhmNazfPjwNMIdbaUG3czeq/mv+/sp9452V9fRjeX3nA" +
-       "+uetKRd6dGlzfHRVjgAwXV1frY5IFJFDJHyc4IKXOHll1l7lpW8epW5ML2nMCWfF" +
-       "zdoNoJaHyyw0D1bEtW98yTVcnh6l4fNM870OjJT1pY+N9aOlHSOoPVAjvfOy6XY2" +
-       "YjllLzgBwOAG54zy9JMd5d5Q8hgek7RpQ8GnkrxxqqbKdNcHfWnS55Ncmdbrjhq8" +
-       "o7ZUGlvWBfCumh2vHI1+9s962fXxMfAcquYF86TrDOPl1vW8b/pXKecTuBeH0U+L" +
-       "2fGp45XJw718Z9c+sP5PnLvB4ymlt2KlHLXaTto+Lz741xvN7za4jqJInjts1qe5" +
-       "S8qL8mlDH49Q5+dZrXjzpsqcd5m9LldKpvtv4EDZ8DPrN/Putb32490+paWvg7pO" +
-       "vrlKWmnnI72+pedYn31Y0duGm3a9uBOGOHp0h1SV29OedcZxres3mbt32npptw7E" +
-       "xetpdUUOnblLt5m2eaqlyh4KfAeqHL66aztyzHfh69Zol/TfR5kRkieuPNq2+3lo" +
-       "JODHljhPalUp+OsY+bVGsXp3+KNK9OtuXLOAJqZoZPU24tuyRwnGurXKohrzvvvN" +
-       "a1ts2nXKnipqQDwxOu8bJI6ZfCCZCNw6XfbiBozK29Oz5zmLqvm1x9cipT7Klty8" +
-       "pOF329uON9fPvbr1pzeMpPe+Hr3sIHq4+uc3mZ3PLvZO09OHTzESDs426htwdn3f" +
-       "VRW3ZttTnnnM+rHbw7G+GlU7XPMqrzx1qcbOsdvGePMYn1vf33e97bkXTF7M1573" +
-       "x3nTpy0frx3VKHxzqqHTh4ED3htxzp0rR7w7XpnFbjBaMsMAti2WdMGWWphmA3IG" +
-       "ILJKMBLTKBQMAVWSsjIorJMWW8bZqzbphIxqPLNyrUqhpj+j5VOekvjvVUYBwAAa" +
-       "KM8rSbnby5mMvMGZKspWru7uiVau7t3V3cu7uqaSIWAE8B4eAc8bruXXY8ta9Ryl" +
-       "s10jpy+y++675d2EUSCjzzqZO093qYXV3T5vii7tdBPVdZIj3ygmbS4u+tw9U5gd" +
-       "efWVrXZ6tawSHPWTXMsxnk4iq+i56tphw8+ToZ4O5ATgW0MkEcLw296lNsfrDk50" +
-       "J1jPLRV90fWN0hz8XrpcPBenvXi8edeZs4mllq+utW458+TOnpnKJE+E9OPI7Lq6" +
-       "OG1pjRt3w5fVc9jp+Ncu5Uh7FTth7vi3HHbwktHIvTl5d+3CHhU0LhwySh1NMXTX" +
-       "faqcvPWZmV6OkmSyxFrWcJrWi1kksrvvgqr6xW9zj1ymeq4dcNajmbSDkR2mTlry" +
-       "5AnE7fgk9Tk978Fs2pXhPvjltkl3AXoF93yfjrr84+98655556eaKe/TcvX8+tDp" +
-       "+Pi1RQ8fdUu2pvFdMbdPAQGNN8ivU7S9Ryc166k8yJc5IdVFdb88+uu+/zeZveuG" +
-       "j1wuL35UllCnrTCt7IYcNxThFFbQtqjNZgXr60baY2hffWp4+ubvM/NIWzW5Uj1D" +
-       "p8eU+ZTg3naukLoZzl+a1n3vGta8samSFp7nvlKVuVxKevXTjTg2duJ3SfNK066b" +
-       "lwcPF5xw2+0cZJzrx68c3veNZrGOHXbTSSRwPSDE242fCWz4vTsVKYqOF4bx775p" +
-       "0xeOddrOpVXqcPaqqOW22WtV88c4xmZY7dL6ei956V67bbVtWu+nzM5fLQ6pS9sJ" +
-       "RXrzSp0cNSpHqF1oswXg7xoeipTO2OO3gSMFkwqyWwWmzzmd5mSrkIb9W0R4V052" +
-       "4SQ8m/L07yCFN+NEinDh32PHfHDzfDTYp2pF9vXXneZ84x6vcPRzRtDb1rS9KNoj" +
-       "G3tt8trVSm4nKzy3R6xxhOMVR5krVhMyjGXOrVEkqjaow3ghlCSpZNWBcVaxL3Fc" +
-       "Y9ZJpkrnJzlzh3m8wze+XP8uV2KlNuHovYPm99afPmu8VUqUJ47l3jmZl5eHCqbb" +
-       "HO7xlEBFcBA5Jb3t32Zl9tPvd2smGycKE9uyfDQQPDS8Ltb4qBF9a8qnudmpDwX4" +
-       "+wdtdWPrzp5ZJ51IafAcnZAsPkypcqpRFBAcxIYWs3vTR50fEtvnqdcUo/dUXwei" +
-       "bTydGiJ4PFIOWjex8NM77ddunuIT3rfm5Wc23BHly1Kmmj152czh1j2qUpWYqJEq" +
-       "vL10rcCedpLOreZEjlnPpzu3bt2Pe9pIbbhG5VdskX49R4c9PrbZr3tVMdOn17de" +
-       "nw+aNedrTuVI+Pjo67O359n1jijiSSJ9jstJAwAWh6D6ObOekTEOeh3nAr2g7ynr" +
-       "8xXTOMYFcwj5xiIpx8cwczh8LfyjzhSPBt74x6zvdzHlySLo8nCSRsk0eS6TRbxm" +
-       "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"
+var jsonbz2_base64 = []byte(`
+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
+5dVzU58rFtJ4e3yv9l6buQsjiD1R2Np9hTyeTt6+038W47SRy6PY06E+P3JOgWaQ
+hHAkkR/Xh/2ncXif2afyf4Svf5NvY3/UP3JXCqfaxkZRL/J3CPDzFxNGAzKcQTnd
+cHPayzzbvLxDd1UnVvMbTw9BywcPDfsc2zm/nyMfDmf932T7p87KrxgyeFftQ+tf
+Cfh7HZyeE2aj8Ld3bXw43xb83/u3I6WSftIeD/xbZE/8bwT5H1OjB9vDc2fr8Q+u
+397X9Gf+PSdnVOzpP8PP+c7z52c3SP5Gtkn9kn/w7H1cp+5o+HrPZPv7uTykTn4t
+qMW5ktlnN5X7r3/GJDMMmGVMJN7siu/yfnqffmvSXMu6ft6bOJlTaKqp/L3k/g2n
+c/7fv5SH4e7wSNdHTnGSe7brKd9m2+rfs+75c1sWpbaXqOkkpTo6LvZVDoKaaPJd
+rf6/wabfy//P+Ses/dNe1Wv4P05eaf0Xg/vluP7Okm/5eu4+LJMnvJ6vyfdiuNK0
+Wbn2ZOW7k/O5dVV1S0twqcn6SMKzp/2y3c5D8U7EssiWcxtqybtlfi2p2J1xcn7G
+nI/NwcrP+tfj8/scv7QZ8v3tjkfXsw7Hk28PhyNkcPY3e7To4dLZXs52SnOcp+0v
+BzIaa0rMZV/r4j+X7dHd5OqeK/l2Ng6ZCf3R4MsiMaozClqv621/Cfwfp/G2c4GO
+dLV9XSfLMq1YzWaxrDFXxLOJ3YfCa+Wpzeb8XWTm+JzP+IICf93/kNaqLaNrWSqi
+ttajRqjbapmqtpS2qxVk1bUlWpNqLRWpZqtJNKo1U0ttRsy20zVJqrG2wBY1sVoL
+FUWJs1ikLFTK0am2RVFYUrYNFpNtTCoNYjWpaFbG0TKLTDY1RrJSWwCVU1K0mkrG
+yUpUbZDVikMW0bZkYotZMmZGLRsY0KIViLGjRsUWxtRUzFiTQaisJEzIaWTNYIjU
+RhTZsyUWxsUUlY2oyRsm1G1k1MhLM2Q2gWRRMpDGE0zA0ktFBaZGyBETCCMgSEaj
+EWjaJKU2NqZFooxiokSIyMMUIWEaiMhQoIiiqQmIYEkRhFpEhYqSGCLFCKEMEEGT
+9mvzf2fuM6SFZC4Qd9fugRia8BBCIvlh/UPmUoYBieRgSMiPA/zM5kG80OwWXxVB
+kDKCgX+vVRm/7UQIDInnOZ/vuDq/4D8+p51Kq1Jw/kWTzvI4d9a7SyLfWstuvCsR
+8vO+Ve9WpNJv7s7+fuL8JV+dboUuDPzER7chJZ58smGb6bfHJ+/wytuIdr6d7a47
+bq+tvU9ubKTxSujpWpbkOGArKSYHFiSSfHgG2RPcG5lSlkRGbrdlTVFVeA1pC41W
+V8XE0QYWbMrorO7DWTBoBRpgyaqKdSFItuzQ+QpmRRpSUkgkAkgVhutQk5vCYVVC
+2pCBtTYcnZA1HRmQ5KEKUJCjE441UykKrp04rW12EaksMjEqCmiOKKAiIoVAjHHG
+4Oy2vMLFphr2skmltbAj2yHto+/C1qRSHQI0oYJy4xPAK0hBhkBkzKGIDKfqR5fu
+9Rb6jriPwFfrT57/BORRUS2uxaWe/23vw/VDRJUNDKbcoql9hR1STaoUKFJAhAE0
+AZZLjCTR5qxIgYLhyUQktqwQ0LakMUoDZaYvf1dL7/UTZGZSt/h0bF8bOrkShINm
+UC5JVQoULQdWFmExZOwxx6b/nrJEIzcATXe9RX4uAjQuZbT7+8dvCcTe970nE51j
+cmac2WktrRIBr8KKqmFiShChQWsTPnID4M0CSyZe7rltE0/bIvrM+YcPthAH85JJ
+219mY5mjPQZhiZDYZA1DzBlAjUcjXvLL8BABMGVQh/A/vPwUfqX/5kl6UGGJn8FC
+P2GG+QceVRTNvxzts75paBK7NzM7TzVVUzlIqqif8NJKRImR08cg2cHrQWxKYcNh
+OjnHzz+YPyaL9PWNrPR37fFaHr23fpcy+YYGWlsuQf4q7bXFjzjZ66t5DEnZsqLU
+ixYlKiy0ibZsjalZamaizKs1laSpmk2ratltZbWSta0bazUrFJs0ttalazaQUhKg
+lSUAqyQoWSKtotVYtSmoyW220arUsoo1tpLaNtMsmtaaYsVTbS2UtJgram22rCkS
+qQSxISyQS0FSSyM1KaS2laa0lhNFGhYWigRULZFiyykqoCxFBKRFSItCrIUWLKak
+ppY2WbY2tps1pm2ymqbabbLNiZojaZkrFMKZrKzaWVptZtppijZNM2SzKmmxsRab
+LZs2K1NVqWqEzMlJtmqVRjVNZWllSVLM0LNNZpalZokSlltLasJRUqopUpZIElIE
+lkqrYjVi0aSNqWmLKpslJtFRBbSbbMy1KoplRspaNlNUrNUaaak2mpVFTZVGxk2a
+GTSWmzaCpKbNJW2WqWqKMmNk1GkKUtk2ysrLNs2WwyrMqKpqZmmmKxtmqayKZlUk
+qNltKlRSm2StUtbLWxTNUqlspo1ZtltNKRIqGm0tlRtNmmalNGZYybMozNNKkxpI
+2i2ULJqUrGyyxJslNGpZmtNSsrNWZY222yttmrVNTbWZZMms2lllbKstpmrNMUmp
+KqUtptKyaplKbRSbJbLNplZtqM1KKbabU1ZSUAmUaxpZjUkhUmyZmxbRSltNsrMq
+qVbNtslSptEzVrMqaazNpmkqZsxExpJSk1itlWqay1KppYopMUkkkmbLNlMymsxS
+0TKlNjKbA1TLLLU0lTWalTNMilKmys2ZY2mqViUVKSyksmapVNqSJRqxZSyylMlS
+yLFSWRUliWKLJPR487tzxPbvpf6y887/zT6h9UmfSx2PLPXLE2t67TNb+d8616jt
+tPkeNmjOnd2bULjnN/5x19I3dES+7KaAHB8sg9OaIHogcFmowcPkd56v4UKiqJhg
+oAU9AHxYiJSboAuO2tYkauzYowUsXVGVlc0nYOpihEKtGCELstXcQR40ZwxcKms+
+7pFjCoGnlWDFSsNDI2M37zbDfLv3avdlnZZ+BC52UzTjZKLth+XpejoaOcVlvLIp
+Bt0bICZGx12W3MemDI+BEABpXP87P4rJiq/on3ucmKl3H2qkVoDOXeBVIHThRlRW
+oIeneSsFb5P81QBgJOLBARAX3nH8/r/f8w3ilqIGYIs2ETpWjUrVBz3ap+abPKWH
+pLM3ltPx/+N/Wbt1NbzHN6yn49NkVXLjHsi0YsxWYxt0mpP5liJ0D/BK861JPxVJ
+KrrKd1DEsjkf2fd+E1sqc+0G02nKaZP3/wWYV/JKhVSKU/9f2kP+Es6z7k/gUksW
+JYe1an/921pBsrUdXyfSH+6h3N4k/jE5ItS1VTkajSXnZgf5UtgpKk2jaxZibyd4
+83LeR6x6+RPw/T0lWWVLOy4k54wllqVWtTTUvHd5G6VXZwcLVpZCyOySqT/VUqI2
+a3OjB+BJ/c5vJ17xaYezrA2WTu8JipWJ34en5WSThOGGFkqslgxWw1Riyit2TjUk
+4m2SJs+3WFSYNQcR9lN+j4j1noP93VyHCfI7cNMSZzH2ZNRThulseIk/yU5KdXt9
+v7zmbk+gjtO690cSQSoFfmmeBxfI+vqGsirzNH5C+xTw2WGGHE0X+u176U0uLoPT
+OEn+qsbDvaA4s+lX8EqpJzPrH0sloeXR1c9OiqmXer0zgSe5ZrT6ScTDZPxHCbPN
+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
+am6yrFq3COr+Gv1fkE1ZskzBUlfkrr8b8hzk8yxE2fNMfNrmi187J8z+Bmx2Wzuo
+upumHT834f0K/hL3SkSzQ2U85TkrZYbKMVKVsprfbMMsmUWyWP1W3DVjWss1MNMa
+H1WP6OTaGllrnZoiAS6ssfNp5sy3o6d+z1Phfsunc9WPbpmXPm3eqbeJ3nCllcoS
+R9y0sQeiKPWxdMHSL5yAm6DOmnZx9/de80IwLgMAwP8AgoIErJWSGzBhMaRbyCyG
+/KI3YnIr+zatN5zJm9iJx5FlEPllZszjniMMODP1NDhIdNGSUoDpyr2MFiNFAp7m
+dhmsM3rn7xcKDPsQKdNOmEcqRWE10Vn0f5jdKeQdD+sX9BD/gPSY95PtG5r5T0HY
+ruV86045uEMRVSihTsyZa8MesmkTJVlLKqkjBRhG+JG9NNZ4h9alqTnNfxllQNGA
+0GINwKMDY0ZDqh5V+GFsqw2G6lfuxMZjyPPPVzVO+/y341ul3m+NvxltY2IqNsRY
+1tTEiANRtZmKiypqJVJKtpSltTk/sPm7/O/dRNKm7YOQYxq6uWOcR7KE3fYnBOUc
+rZ8tbxGpQnw+T1h+E9UnrJ+6E4e77/fdEqziI7b4QxqWvgPVY2JuUihvCTzqWzax
+J8k0/ueZNn2cHv/723l7vkvl321HbIYegUM+f6eVz7iFR6+P17uMwF+AHuHwfOrG
+7J7tnlJLoqxiJZp7OkanzOMm8/JPR9k3N9px0iV2kiN/2MZWOp+Dmehw93hD9FiR
+9EvPnH5sfKX5VzOWREnZyUU+va6YuauVpl1jSzGGKqpqKIOVA2BEIIMpS3xoVbiJ
+DZ+4+ep9reEaqbrqJ9X9jOrrvJSr+/C3LCqZIomMTTGl5droWwvUnqT7fVasJ7Q3
+Vdshbp9jH8pBJ6bD2U+Cd/hZbX9ay6kU8KxTu8ttbZlm1Zpptjy1hjMVabYxkKUR
+gyjKMrbFpVVpilVWFxd4lsXb8MOW7fVipDJxhwVyRmzTVLLxkzco2dz5NnmsjnxG
+SQ0xLOUGItVGqYkjaPOd1ixXJ8pvAbHrxPhNAgJ168Kvepi5THZi1Orm5ld4ad8r
+162e8Lnx2rLKuWUXYSACKn+0Q+UPkiWkUT/jy4+mbc//nw1tlzru26a16nw/ipmj
+oukAwgMmggdSKdGbGU/Iprgvjn77Ct2WhTTOcy5KZMORZMZRWwQ6QquGZW1JTVlg
+QmM8osKKGDGMJIGMIBsiwhShSkqxMPy+3NPLDrbgVBbDqzyCBgWZKJrEQiRzR54q
+wia4gUepCJo2SzrcVXl3bH+sTOvr0qFHlmMYpGEQaiFZjEgQmdarIu7T2kdmRlAF
+SkKsnConJTZVYwmzOAdnDjWUlQbpLqEmzOttyWq429ehDBlMRRpyaUji5o2uW/LZ
+8wQgAFSMYB0Wdnuk9X8nH0naSH9JI+g9o2Gzu5nUVw9VrujeRN048OjNoP8LOjhS
+uG/rTtFPk8g307qhpyc48W4wop6dLpbpG62VarE1XE8iOyVK9ztXvOYw0JoSwJZJ
+Ftfft+V8JibSreNomUqaifeYC3fJ5fCnZQIMR8DDQUIxtbZGzGjKKNDyRspoqZqZ
+ossZ6UUDMFZKUgwYwsMaaYqaYrCr66wtypjY2abpVSX/mXeSNkaJPqgQhw2mmMjH
+EHymdzJLzYsvmuuvVbsqy6m7aYqyZnGoerqj3UePiyIVZIoqKthYOZ6vGFsYpWJz
+5ns4SY/yi4BSSyktv0dXbf1b1fl9fp9+36YjGvdRRMDFkx6Pp9wzFt1H2f0Y5CMb
+VjGyUszErxN3k9ks0S1Zk8IeitT1VrI3R37ye53Th502X+9254a+co8o7nMnWdCi
+wosHYmvktSVSyC6P4FSTb4evj8e+aNQ/gr3by2tmlU3bI5CjjaesCuuOTInFMxR6
+BGGiWW1NjQqsYxKUlU0qtak2QF9FdGkKOPTjiqoqd6H0PuA+KaOAwX65yfbt0Uu2
+t+9+OvxwswtdK+Z6T46z9ur6JavYqrVySsYUxinbay2mTZRVK1bWMy8Hm/TRaetZ
+W+L6HJ1GI7KbTEnokj3nzVNViyloqqryY4aU20msYtW5mTfBtWDH/fMFA6MUxGMR
+NFAuSNrZk1GrtLMg2RpFCqVUaUsYRZMiN2Nim9bnyPI1L5d7amo7nk142ZMm73SJ
+/eoPU902bpY5T5yQ6ffJkrLbKvs844reynK6fNsroOIGSOqTdhDZO0IlkpYiq6Oz
+Fkc0U/fPTYvU9bxWXZeLi5F902sZZU2ysGSmlVu0qcXTGyX5KS21VKrYw87pVnOc
+iN204sTwOM8R5cJLXpE8sT3gdCaTqejSJPFnanubqkqvQ5+EkEjrFki/syRPSKqx
+ixHNf1x69+Xp6t6l5LGF8d0xI7umlRgxkIYgsKQGahBGMdwkbbIclCjg2oW00iZA
+hDSVAoDGhqhIDTC4UGjDNVSwINaWT7/c+6B936RGV91beaH+tFpClUqVar6a57xS
+1YsdOxwxj98iTq3teHw5yT2NnV6Ms+s+NR8b24bKw/NWKKqqZhiqnM8QftpfQb+C
+Vs3lZLSSASqcfM7yVxGYledbnrN50XJBATYaCsBtFYJlZR2SKwb21+jqRiNFI0Sa
+rSjgiATZnWelW7O0mbziCfju7ylzo7WSqylsYp0JpjJU0qaMlJUUVhGilWTZudCx
+M+kc+l5uTSG84qLYv2ZJMli2qrILI2Tqln4cMqNhAj4gogAncslWOiwaV+BwnPnE
+jdp7E6UlqPtYJYV9Tg3WI95FkO6beZO8nlbeyYVc7od2tLylZPKLTp1I35t2iLsk
+ipSBQqtbUX19H2kWD8z2PyVPmh9rLUcrDSKQsTJIfukqY7Hl5DzdPLdUqq1+LJp5
+emzvHWPLN9YtWeh+2WzylkbFNlTCyVWKZpKyQ4YwqnWq3kKzCwje4lWdzTuDbTZx
+x4bJ8tzHGu7m3prWSakaVZncMwY02dcu7kznctvM5MknBXCmwVtKfU0xWphkowpi
+VsxiVW7I2rWqtRhwpcXDoaZN1MN6tYlKrh3GpWUlJLvXd43OuslSWQ0fVcxqeL+B
+Xv1rpQyBqdm7e1Ra8loulyubVzbXOGoNVpN1/mjcbxaAiUP6xnhT7z2IJaTCQVgt
+DpQcGFJgWSBTA5batqKV5l3ruu7XC3NyZRFeT486vWm68lRqMyRNpSzSpsi1KyzL
+GmTS2azSVMZqtq2bay1a0raVmmyq2yqikIVCwBSIqSpJJKsVBYgSKsBLSopRkS2t
+tKmrVKmA1rSpZU2JTWWSGtUtmsrMWKVLLVRCkSkEqQS0GpKlKZllNtK0WFGTNpZY
+2lmmZKZLbWbabW0ttZTSTFMklmzbbTaajUNZaVNKzWaipYqKmU2mMk2lilaVplhZ
+MykpmlSwamzZsrUtUJCNs2xE2zWbLJpmmmlSyzaYzNqWpssspZTaqtm1VbJlmm01
+kzUtDKks1LIK020pKUpNRlKTSlmUprKzRSmk1NTZZJrNhJIZMlSpNJDMktbNVDEs
+mpKFKVJtllm0ps2WzabGsbM2aQtmsJaMkNaVJmssNbZtbMprNYqWVKlaTUapJmGz
+RClCZhpmEmZpEympqWZmWbRs0SaY0lNTU2lqbLNtts1tsrNtKqSWmGWWW0tZrNiG
+Uy2ylLU2jJWUySmlNmpspWFKJrTVkE1lJmakWTZmUtpS0rKyqpVsilmsNrWWbLMq
+aVLFlNmazabZtNppoZJEkxlJIlplYbNUMaaVKhIUylmxaWkEslm2WoAZmYGmm02k
+mZ9vNcym/zYZ1m/E+UySfg39LUVVWb+0CAnu+IVnzkTYexs7ufDm0VjDZ7mmLPDC
+jvRkCK4NH4KYIPfTEsxAJVJTCY4MNNqKqTgrJkmjRkVkyN9MMuNskxW0mmjTSlSs
+RiUzxDKZmvWVXm9Y8a6VLqbbWXtSMLsZGTNoSqYkyYjI2VEskoLRRUbRRsbWkqSt
+Sau0WgopMsq6V0SZehQ82kyxbJsqq2k6xbaqqpy8chxElkKVybMPBqa1jIGLJqNa
+WSNnw5w5rJRVJ8pXQahwWUzyp0wnz/U0hIEiEYfzEVFZGtr8GqLFqNUUa0pVZVFV
+lLVsEy7VF1qILVeGEk2aS+WJki7F2pqD7InRyG/WjNbxTzY7E029eTdr/1ZJlhzx
+xZEk7TYxZI2Vk4yI8WLZEUcfOpyzjm2I50sicpFjzHRZKelYLMxipnrpolbK2wP3
+Gj5QrZ3mE7dW70dJN3aTWPvGzFnLOYscQkecNk/KdSbVattW/g8tatRJ9BbaVmTU
+cNkbE5NiRgCjqJjBFYYMQEpXT39BIxlLWwvLhFGpGWUqKViqxkcZkznhqQLSNrGQ
+hBUdGYxN2kbWNpAzdTVXSs46S3TNK5yd26mxXO7tXNdm0m6bRbSTJvK6rpKW2TFt
+vPLvJbNaSixoxKyEmNk0kWK0SdjZs2NohYnAsejhFowruXCQlUVFqVGpE0UGZIZE
+c3lktTo03a6N+EiflSdFScJJ0xKRxN5+ZDlCLZB9FWySZUtkhL9OWNS5Kx7HmGk3
+Zm+vn/kuSquatyCwYtGGhIxpQKVBh9sws7qnJ2thu+NtlbJbljpdXFmFp6I0cN3V
+hW7RqTNacWNJ80k/pbIVr82CR/iVzKp1fJPyjz7u0PGnOl53LbDvYakR0ZJD8qm5
+9mWLpEWRzhu+1n9OUKT1kn8VOh3p4lv5ZjCqf3P82pWjKmxUzVvxpOH8eDZPhDwf
+ii4JZZPcJ67Ts94+JJ8JN6n2RXJ/iPpDEN5uehqR3Yxju2bXbGDrRv6T0R5vdxJO
+R2mD+4dUjVjZFQf6RFZJ8rFskqu7VMy3EjDuzE2K5wH1nnG971lZjE1GMMpMLzVo
+tmMJoN2gv8yApnCpgihcVoiUFH+c9nnbz+momOTD2WTT5sRko0skZYttki1bLSVY
+mmMY0wqhWnGhdSllSSW9z4amEW8VfPq+6qyaeu2jZNvXtEl6ptryvUoxwqtXN1Fm
+Yqyc7Jqlsb2TXkulki/galjcAwqxIxJEkIZjxWvohjDLbjDg3VHCdKtlCUmTvHq1
+g1bKsb1nufaqpD0uQWNon9Cdrrb3LTMlSbUTSbK0ohajIvgjH+99Bt8p3n6qleSV
+ZE6o9h2eHZRzpwc3OYmK009E9R328jxMbJvFH6StQnM1NNmLDBWdD/DwdQc+bD7v
+Uoz8D4pQaY3jgmo4UpCiqrGzZpNbC5h/TXGpNqn1Vaok4ZPk4KphiwyWJy5ZHRwf
+oiZC34h6SrVlWif7FRHs1+Nuh+L5Hs6k7WWyNKyald2mpMaNp8+jr5z3H5HpDpU/
+yqPXPAk91O6UFo2PK2u5jy7lWy35Kw+iPIqfOySOpNDJ1k4nqsilXhkeZbW8c56z
+Rx1kbkR1nBpJ1VUPWotkR0rdsQsexSuL+5pk+Mk2l/i7Oi6XGwkvE5JyD6Ifc0l8
+iIBO6c0DixXt8Wk0H6+6WxFliWWWhO5P1UUsfx/o/JZJ9iprtPkmjEsfWdqnbtat
+q24OckqqqnQw+6k7EfBZHMentbUafUcOiqVVVYFUlFKKqejEY6Y+lfo+ubdLJdCu
+RFXLgVQwrGW3GIYJWGCYwwtWWlUskYxZ+emKaZHyQfWMWTUkP9FV7wTx+WRVUrZI
+0/KPlYWlUqaINRpIxmMlMfoeftr+7+JP2H69M/jD8xaKRKgSrdibLHI0VxjbdHGN
+jQd0aMDA0QIQWEpTRDGZrq3R00OH8GFjuAD9iwhU2MP6wiGD+jp0Ymd06Ksv5piO
+Uq1rMkwZkiw2SmZIUHD5pP5P1qcNmkgD9vum0hi+X4S/PJ3/mfi9rbspyye2Fk1Y
+tSqo+5O33q0nAeTHbg7lc2zBxS2K2xjL/dLmkWZGHQNxp9NkyrGxuvp9akHp3+A3
+ROSdXUb1air5yyvdI8km6PrIgEskaR1ceOmv5q4dpNp4dofKup3NzUTxsvxlZbZ/
+V7KshwsVcSqwxapT6487uYnOE9IdPT5DshyR8GTg8yZIxO7D2Xoe8wbPD2vkrki1
+J6oe6xXDYppjTbDezUkdjZXVjE75bVWXRUdldu05D4OvVbD8SxVZLZ009nJEkSTN
+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
+mStcsHMrio8lNypolKYqrT5AyFDChtZGHuINKBspBGKg7kJt6Bo8fNBswFHISJJt
+PcLdHk1+NWshZCgqnMZITrDX2VnDFGhCe+9um2kaWy3BLFDrBte5ISqMa3whRNX2
+hdsSnCgdmnJiwaaFmqxgEhoSkmS4W5nnc2pOkjMCi0Pn4WGjUumeTCfLJJ1jYrHx
+jaFRrCj5qXWxkTinm7fk9Hu2JvELPk8MMVKpWKtKq1iVVKKUxXlx31G9Tw/vO6Mb
+E80lYmSJp0FRrDJyLJ51U9ZI6GiLTUsTlnZqBqxHcOldSSip2iosJI2Ehx0kHxDZ
+/AZNzYUGDTXrMplachkVuS1tsiYIYyt2mzZDErJJWTTEalrQplZC7YM+li2SUoxV
+VZY0yZkycNIiDcCJMaGNe5kXBpN+8HIUgoKqYnY1JISR6tshCE6JhknVjg6cMhWn
+JNlbSdppsotV9zG202HYjiEnmTz+E7xXhSrLv5ZtdazVbW2hjEYNKDGEBkJ9/vy+
+vnrFURs1YvpvLuyE245w0VLL1kr7cOg/Ba/Qf0QM8JPxZLLOStL5KZ+faXr7LE9j
+17oH4+OiR8orIu4h/RAagtxGICYpOWtBCN8eXMu7rl485VKQmKi+aU6rwbyfLXpr
+161+qbettfqWN0pL88tJbgpKWur4a8ki2arIszGhZJVK03h6o84nieE+RSDA2EJn
+ygppzrRHjjDHHjQ3oAGNIa0QIJjBiGd8s3glSnsMZSEY1I4BqCBOrFtgXZ7YoGff
+5SOeYkWToVOR6a7/Dmyl7pPebOTUlLEYebR5Ikzr5O+azEJXRy731dGOXtcW5mTx
+HG7GnHVxIbSbnuyUslYdMltVhpO7tytjo3Cx2IyGZDKmmWOxCaYRisSq0VhSVpit
+JWkrS3VY0DcaigxKkRFVBNRkkg1UhOMurldw8knJjznZobpJOCnNMtmM9JI/gses
+Dl0es/T0c4b+aSO5yy8it57PtER7yQ49svq6K2KoqVhjFUqmm02P9rP+enbyTaJy
+k7zyB5VdEyRHyqE2jlT/N+4jPJHNVfOPajFtvo+bRIhxDIiAREIBEBHmAseJvCKp
+aWSr3OREAnaST8LJp9TClbcGN022eOxs0mObY5x+f0+u0ck5RKKUopJrgB87bebv
+yv5u7W3q/fvzQ+JGypskPUreRLIrmybatMsX0a/RksaxtIKIX8sn739qsebzOZiG
+by7s3vdaJR6Dj2macG0WSRT7SDN9KC4xmGSRgRYwaf7MbwGIOPrP6Rb8N/DY1I1H
+JIkrMaQbxJHdIbifDkh15l2d27BHRHVPKch+6RBzeUnBMtctc4pKUyuu2upJrlrq
+667pW6+1t+6Vk20JkkpYV59A5unxbofu3vn21Ey/s+HYx9zasPu1JNm5an1x85Hp
+GG1LFk0RAJ1kfSK+E9UPntJMsjrKWnc/YuFg5pe8Oyx5qIpZEbwKh7e7yTBhymws
+JtGzb8PDzkfvPfLZJ5yR/o9pH2H9KqdtVVX7VbbWI2Nmr22lllliKehVTXVI09Cd
+Z/Ou/e1aKs8lfvPiSD3/Bks8PeYcuVmGgTKW2WyVY/isZRxJN2T4vyfP0vRyfZZK
+rbaZNZsTidKX8ofEcnunxzNEJWu9xbuQ3w1er3T4Y3g7/gteJ4WVbTtmn85O7lJ/
+VEnkTJ9atqsYYYeujDUxIwoxR56sknNj7SbuGneRs8nq4fJO2cpuiWKioslVKlRS
+pJZ/ULtdlKi0b+Z81+yixKtJIPDdvJ+LvDu0SyY/h7/w/FiNs+mias1cSpOznIPK
+yrHt1CY942YTzH+yrZIoqhOEiZIT845d3T6Pps/6Ofl4bEm9vIZB/UJBbEtgRgyB
+QrgTP96/o80lj8FrpZ3WuiX6brraSSqxRuxjTFUbWarrGGKMDbBcSioFSqf3ZLaC
+XBlKqfB9CZLWcmutdlVXXxEzqHZVo2a5uZjrbE5X5CvSKi2WpbDaOR0OqaV2Vjxq
+myEND13YGGgTBqRBqAkgipVktsk1bJm28lu2ll5dkUpklpVLKkqjThs7SaJqeWRG
+VasWSxZLZu4aIgE5GtmzUkyWRexTG+WO1qi40I7X+GXLi6g1d5IU5Kydn5ZoeE4k
+iNK7HJJHZ32hk/RzVTRzKwrOelrcXxZCb6V8ambb6i+3z7g8vV7o2qRK3bNfx+d9
+az5ZypWyvNOJkq2zTDGW3I2kxsrRVg0qaU6NmxvJVssZPf5Ch3jJZiNskkJC5thW
+jziKca5yYTlK0RAJy2l5f1mHrY2Dc6OkI2TTTy2TGVsRATPxGssjZRlnpIg3iSRi
+xI5OR2SOZJPl5/ncvR8vln1Y/uaaeTGFSl5VO11Z1vnvja5W9Kw09ahkgtDDYyAY
+Qw/WRKMp5aFVusKrZpjSKdZ3v58tazxmJb6NXQlD2AabBtG1MLD6P6xKQChW0XsB
+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
+Zs2RDWNrUlQ/P8x6SH7v7Pz/8fq/1tn9U3lWuTf1JnUUMBZ0zXwlfGtzjVdDGdNw
+/Wb/TcYvZhOV0yvddt9942XK1inv3hKPY1yG22ftVJYGIHecMa1WHrVRdWNFu82a
+cxAgPKsqap3SvCX1k9lfXPem9N6bX0uaUbPfM+K4StqpjulMkJsnYV74vTdMY1Ed
+oFSIZ4/h6sOvXBROO5iA46Ydg4cPQkTnMmYnMTmTOZL0JQOVaKsWLsGxYqhdCCQM
+UGxBBBEJ7+U3578j0euaooSZ6QPtSOwWKBXnFoZlecqTfq1/RtQ4OItiMpbHqNXS
+LBpu9xQ9UiKIOt8lmoPPrrV81xoI5KWxvXhM3vY8pR7qqK4YLstYwxOVYstg0KRO
+i1fLX6rgTrxlmqlbrkE9LEGeIed9k26rGnWed6Nh06p11O87aBEwmLoD3HcEEAkE
+GRBBBBBEkFZVQUUkTHdrccRvm2/fthj1pS2KWAbKGFox0dOmXvOlr51nWKGJum43
+BBBIJBq/KsYn0ippp9W01W5ZRjbTSfDNkM7isVOp5Wk82WrJNLTsbRZZzsMYDiQS
+QQGRB573Pe988yZmZmaB0HgHcz7ZHJKFgkEgyIkiSS9eHnk2SvPDryK1aqqqmtW4
+PSycD/w8sflE+v8v83/dyIplqpb1llszKa0Kl8tWXbMGzMy8XWnF0X937o/wO4fq
+0+r7tk9qe2FJ6z3CkozLYqzEKiqUFDKGP7kqsHaWq1aDYcCQokp/eU+vt7uZp4fD
+vw29FcKUSuratW2rX7I00/UcnqCIfPyP4ftqCVUyNaqZi2P7Lo2/nvtw1Ntxu2Ov
+M1cLOMOjTdl/Jw/jqwjhrHX7ljvTS0Ng9YWklWliFUpZUiCjOKclNiKmjWdFMjuo
+dSAo96JmslmGgyCeUmmjEtITqi4DqWXTg4318osVuX2Vfa63aYJNvvZpHIUVXXbr
+pPMYqxKrXRvoXCGuFnXhSb4SVZtAm6ojtvuIBkdOcqdgEZ6lcZZFN1kPKhJJhRBr
+WEQyIWkl1hnFU3uys63k4eJJlSIMlKqoErDI6G4EEUnpZfaOrlixLp9DvOUpB4Ta
+n2/ZW/q+fvPhH07t9H4MT16XESiARMKUE/rVVU3KNwDooJ7dlAzgnD7EhScMIYxZ
+/mOidHDestpVUIAEgC0t7/m9fLzzvPVb1fK+s+Y+f0Pon6xzJ9vzOD8R9GeLf1T5
+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
+KIZUKGEwHCFgyKwJcqXSyY9+KkWLMIVwWZW84+AK/Bz5wnaLI44LmU90x/EkyBYo
+YS1EJA9jWfE+/5tRUV1ipCoof2zsjgKQ8vpHUIwQU4hNNSOW4tYulfaqfz6P4wYH
+GDM4DID3+NqN1ONUA/PfuPMRXS88tk7zKq/wt5RmaVy9WAxsjPw3pHVUomq01Y27
+q1V1m7Yd2KfWl+O5Zq7729d9zZ0l0p3fEcrJ5YgfbvWje7O3f3xZrowIWRkq4O+T
+FRyxJpiWo4lFPH3WrGdl4cvrRgQWOs7e+Rm7Fg5SGPs7K8wII3++tGhUMYuglST7
+5KtdoyntNOHVVlYkvFyJtG6k2rcPNYnRazDvM0jtv9e0GxHtPw9lbsVHo999iMnW
+ySQyREBBJkSLp6BsnvG/p9faVUKlPzdQ/ZVIRVFqLwVZA3bCzzChJo/VG3vBX5SF
+rWK1RZmzbONI5WDQJSoSvFrWQPYWLVWpk4wJi851alamk1f8QZvBepyqUITCUW1M
+PO3E+bYpbGJWorqrG+spHFPy6ovW+piPxPDpvMK9cLBMXT02D897907tO7q6Tqpw
+mu19VLVj5w68m9aLxrh5pRd60Z1Y7OPlnWyT67h8VWsGO4nUUKiC8Pu5yxhCT898
+xuvPfY+fhoRK5T5qvf5+ore9q8fDLTyk2u/mia2vXGhbTXwjpwro94vOKUYpdrNK
+/ilIKJN59XedxQPPGvYqUmlTpq88kgneW7DHmiG23HMo7Zsh04+H7xMdo7xOJJtY
+eizcYZdt7XbKVK6OL4vQLe/M+3jq86SgU5889oFKfPVuxF3wlFrkIun9efjz79d+
+wYeN/C+u3m1rd0jFGq9X89KmLLXN2C5Po/veZd64ndf3MKIxsceKwWTeL7MD3i1L
+FVj6xz2pzr8QKCFNCFKpIp+xTH6JnyBsNsPitQloYgqd1l5g4jhq6cPDUvHlmwrI
+oOhRQkOJcJfIaDs0KhNWaJJhi4g5WXdYcDKbkpiy7o20IRRpRFyOFooQ42GI3+Su
+oMuUwozR5RSK47UcIoQsIwhhRiAXHRoVM/c+S9/l9R47JC+j+m/Feaff6jz8TUQc
+fBu36cbfXyrsgqiUIyVfLNwCKvgnlBRwKKm+brfbFcOClV8LfTPJElZDw+Yw7n3R
+/39I96pWacn74akmCfZk9N7Hnbmfnm+G9N9IIVf233Vjv2K+dmOqXTgm/cpSxjx5
+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
+qNO9m2ni+V9vD2uz1tpoxtt5t1PjrlVPhy7WwKnZHuC3ruTKRLY2yUlqGlKqWkiW
+y9iHnhPZO0rN94N2brW8hut0yR51BrPKXs7JGxb5AnRiZTl2Xq1hpiXy8iczq1p0
+4OUvW9g8WPrtcenxbXL58ic8LgbnL1I0m4MeNSM4zVJrWW9uI3DW3tqHzluUwxR9
++s0Vc0hpweORY4VOtNXbALUCyXLqNFcCR7xxw8jTkStO873DPfY017vHfEhE5xAu
+lh+U9Pt+W9++O/u05zeb4c7pzjRaWurtlU91y/Pj38bnSo+8PfvF8I5SNJ62aL20
+QZtJUXrrTO3rYPXw+NeuFWmevi1C41Gt1m2DMqHmySGsXd4XEMFkBpCUlZSTWAUm
+a5gWmZLEQcLCwtjR0rZplkWrZuMqsNpWrMyvBJ5/Gff5lT3FTnKql0x9H4PU/DTX
+OxAXime7qULq7DqoaFW7tVaVWymOAghDdEltpIwwyIooHivfPjSHoqKy0NCBIRpB
+IGQK8fXhPBpMTMhc4OCJWMuxlIYammJ2sgEEXEs8oDopthFpLOUlVTJVAqKGFoiu
+fFmCKtsq1oM33uOW59vV16cDSvt7p7+u80IySXnVy5lF3Mz5ZLDu9ZrDzoUPrekc
+9Ie3XnPlekWLviZo7sWzm9WT4r4vmvd4+Mn1zI9eadvv8/FYv0fllb9OdHfmF98c
+xiihhSVRBRSemqq32pgz4bzMD6OjNYamHHHp0WsLbYyKxZ3mLD52kY91zW6fPB9d
+GObcd2fPPjX0d4du7bA4tvfmSzb6t9NouC2GU+LHHGJNXK4s3xiY6MfbxT4Z83cZ
+UuZDLGk0mY/Z/iHrRxSY3S1SG9mvzS+bvxc44Th6JqNHLLC4ZR+p+NfpU+sMTeHg
+a67ZI7LO0gsjRa278NqHpyOH+PRsdMcqF5x65vjp0KeJjqR4dknzo+Zsle+oZmSN
+f8ttztuTWnh+4V2fpXP02u7ttibExiUsNhbdfPzh1+rQ09U+enFtXS5qQkjjxMd8
+MkkY56cYwqZcb6vi222vU9cyYersXMh7cOOI2Y7Viz6BNspac/J9fjp3RQw/gqpU
+1kIPpx1mbn6DEJI5wLjKElOj3z3XAvFr+HD+fSn8rhs166dJp1CBw82PeVw26dIv
+7MUi/KQbLXXHt4nPh0fSOYs35zI1WtZGrbfqaOvlNp6VywnitCl7G/RjngwTGOXw
+v3ThnnFFDb8PHJ2lL1vMzxiXS7Hci9P169PULTtp8MorSZB25VNA4Pw6X609+3Vz
+WTVcyRy2dbt8H177mEWSRvh8M+vSerjnx/SZfuZ0beIXSUuzna/Om+czLbbbVfTz
+54naAdd+pE26qa+jh4iOkG3g+U1FmjxmGX6Gj40+jLEntyrIn7/D+T8fy1+Pjjup
+Bc3CtbNuXO2tRdulIu21ItGsL9ccDt6aEtrxfwXjqcDx58HqqhesQkkFR5Hw5s+Y
+95rjxZ49Zxzzzs55zny5Y/Trf42ninShp2tC5MykPXPDq/HSuOcy/Hrg+uXOZjhw
+qpi7evQ+G3aueLbIW2pPLBOXPB2k0qeWcvH8dPX3537NGVVjFVhhjKxliVkqkjay
+ptqZq2S1WktJVZNtVJa0VtCm2mzbZsiNNZVVSy2ti1tS2Sq3md9hy4638z5PHNMz
+Ix3IfMkD8jgU/hevg0z6O9vrhfx2u0pdXi4ooddn1WwLTt3u0dtfx13/DwegMQYQ
+wdp85zgwAfA3hJq69eh7Lu7zLGHl5V6eivCu1elHunTwnjRy61p714uThUcOOcz8
+O1cqxabWOunLt5Rw9iSJHt3F3y3WWZdtujHhx50iRPHtKachw2vnz8eK369x98Ov
+hw2vztQt4JRlnK9QFCycOHEpchMB0Ym5SeIlIUMnPFcafA3klDSwWSTX9VVFP3k/
+KQ0+nzF4rj5wtvArh604+dqCN3Qjz0VcqypVmrlXVlSVcqyiSeckRld1JlJlRlJB
+zmlk1LS0RqoTfWN3vzzprfXjY+ZUWT9c+ednqsvvSSJCkAXphQSFpCgXIwRJFQeP
+HfxpU2Op7pg4ZhX80D8P0HcE+tvtafe0PslS2h6bEUphB+Trt9zcMySlFfrXx8s6
+aKGUneDdfjQ99/yYfX7l9meCDI/bvJDJAQgdu6SzNW3eZlBQykZoKrwo37d0TaW2
+0DnfHOPJfg278PvnXg+re/l0U+vfj83QmJIyIhDN53JH5Px9XhPr2/DXcY+NzGJO
+6t1p8J77+GH2+xfbwXyN7S7ySU8e36ZcY2cmX9ZqJVTbyyJ9LNd2Hy9pFJjOJx48
+YJh9fxDDVU7nuPtjdzVxq4025elJxy5kTGLIXu3JDla90qnLmi/u/hOXSqnQu+mf
+lpHZt8sRqH7saHSSEQXU251XwY4dOFRt18lS6cUnTgWreu+m18JO/RkmYWb9Oofm
+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
+6L5BzgoCDQAx6HNqd9+Dyvbt27Lq3osAuFDt/Zv5zu78vxMXPz5rDDqp1z+Pi2nh
+zxuQkFAnqvWm2HD09db9dvJvpZ775mY/Nd5n5du34vVU6F+N+jTb5SesToqJfaen
+DXwdO+bu81I8knny2dLk+lPtFD493Hx70x8+ZnD/LrkygIFr4AcZGrTDQcMwVWSB
+UIKC4cStoBZZEzt+9tptwYhbUixKXVLSo3XvhOmipnoTQ+XBJCdfHJ8r47yZmPlN
+tp88W+HnzreZnj2dX2cPfT3zCQm3ifI8tvCeDfBNnl0nnzDynndrPNObjUhIM70k
++Phvzu5niebfbE8NY1HHuJBzqbt41px6TjT2wnuOfnskTlZwenlVTqj+HnLFtEu3
+oQOnRi96VHqH1D1c+g/IZ9nQp1cZlfv1606UPjEUVw/C6dh+Pz4Dro+bIdOl2OTP
+vLTZ5+7/XSX29Bv0PSCdHY28GJ5eY3ddXvTet3d8H187Yn31vrt8fNKu1D4+cOuX
+InT13p65ql8fJv74217Pm/vXbqk3NtnkqrqnTkK7wpfdhA+r975xmcNIp7Twznji
+evTlp74w9peduGxXiNdczaymNYnPSSSSFdH57db5cA+GzcQeEkOBjPVentzlrtHQ
+fBtWJ18UIb3yjguww+BUcg8J5eHbljZU09Ja1euOjrmjp59ooZ2hzKN2Qay4mLA1
+pTOLMipVkiB0k7w4rISoDm5vGxYTTI8ymFxmtm+OGuNY5ZPbcqyxJP8qLkqcrsuN
+XvVCjgr1Q3zy6o5T0ZznGJlVeY1Td52qu2m5V2aq1GXbu10ddY3rOrpy0u3G0gaI
+oCqoGaZwMADnKp1up7vrdzvSOe91CCUrW9pWJcngyfSVtIngw8zxCUFzpAJs+tb5
+Zsn1j4Dp7628zYe6Rgm2wa9FYc1vkPNMB5NQ8Ic3l160dXv1c6zek8W9yRs1O1TS
+z1rN1EhwklOMD2NGX6ryTXTqgq+B6Y+TGD0AgzsO3XvudNp0bcBy7fASeOUcunRo
+167Ew2GNnFZG/O7eEsenI5SHrvvWZ2addPjD+TtfXdODuwvq5huPLaODCtE0ntOn
+L4e8t7dJ5M07bNC1FSRtpsdzzppPfI7dxw1640x8bjJekxsa5Y8VNtjEcBtCWwcl
+ZTbCJcD8HrfbHN5KHTo4Fp819fe92ONY4erddMSl2w76PG6tcHtZwrlPXKVGjFac
+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
+0xeOddrOpVXqcPaqqOW22WtV88c4xmZY7dL6ei956V67bbVtWu+nzM5fLQ6pS9sJ
+RXrzSp0cNSpHqF1oswXg7xoeipTO2OO3gSMFkwqyWwWmzzmd5mSrkIb9W0R4V052
+4SQ8m/L07yCFN+NEinDh32PHfHDzfDTYp2pF9vXXneZ84x6vcPRzRtDb1rS9KNoj
+G3tt8trVSm4nKzy3R6xxhOMVR5krVhMyjGXOrVEkqjaow3ghlCSpZNWBcVaxL3Fc
+Y9ZJpkrnJzlzh3m8wze+XP8uV2KlNuHovYPm99afPmu8VUqUJ47l3jmZl5eHCqbb
+HO7xlEBFcBA5Jb3t32Zl9tPvd2smGycKE9uyfDQQPDS8Ltb4qBF9a8qnudmpDwX4
++wdtdWPrzp5ZJ51IafAcnZAsPkypcqpRFBAcxIYWs3vTR50fEtvnqdcUo/dUXwei
+bTydGiJ4PFIOWjex8NM77ddunuIT3rfm5Wc23BHly1Kmmj152czh1j2qUpWYqJEq
+vL10rcCedpLOreZEjlnPpzu3bt2Pe9pIbbhG5VdskX49R4c9PrbZr3tVMdOn17de
+nw+aNedrTuVI+Pjo67O359n1jijiSSJ9jstJAwAWh6D6ObOekTEOeh3nAr2g7ynr
+8xXTOMYFcwj5xiIpx8cwczh8LfyjzhSPBt74x6zvdzHlySLo8nCSRsk0eS6TRbxm
+Z3wnmxmnHMkNhygxjtJKwkU83mOviqqNjty5d4e44KmUaw855t7i6cPI8nbp5Sqj
+jbpFk2djdy3yk88pG+mJSHbOXfhw58IK24kkSC+DzcXXnNW612O4HXcPOwd+O0Fl
+8PvuZjsCx5376uzwIG+WIPHLtDGueXTEg7dMzfR0JnnGHYm9idAqLLCyKsqxZVXx
+lbdLKpppSUky2SmfGld42pFyh9d+861rCugePr6r6xOggdtdPr4hx457uTlQ/lju
+vcrnltjnbtqu9rUk6cL7e+9cX1mt71d5mJrs2PD2zySR16d72kTx67dPB2rKOy76
+78XpyWhUp8dXq0t/AX04768zWa18ejz5cuUnls27TZy4O2rxRtxcg11S6cfNoYO+
++madlcs6drb67VY8K3zSk4YqtLvupO/Da6JNXUsg3mJLapKtWFixTMIxiMYqYxW1
+DMkpmVKMqXrbSzMt9/sqIqP+t/93+I/0n5Sn7T+QT8zf0X7f+TD+B4CttqUP4hlE
+RRRTARIfupD+YUw/Q0KfxO/YVFVv5cOFw/8J24f+hMf6Mf+DF/3MXL//P7Nv+9/D
+R8PD7NE/L5Y0/73/Q5TalV9v/fbLbfTY6Wd/hbKsn7vhvhcttfh9p/Rx9F7ThpoO
+zo/of+imn7jnrLbavsef4r/UcA+RPuf3Q+f9UqkU/8ap/+MFIjMqlZkqslsVZsrV
+JUlRZLa2yy2qaRaWWqRTKzaZooGCAwg+x/nV+FYg+fi2+gz8s/Z89W73ufUfZfMZ
+rG5jSeX2+tXiLy5tM25ZFqjVUHVXHVO7t3Rjfk7WWV5Xd3zfCC7d74/Bsvzb8BBp
+uu3U3zvXOnzxjyszB3F1Lpzy88Auvjt8OJfX88hg8tvPa23zrze8IBCEkACBACSe
+svoy46IiKqqiKiKrmbpczNUAkJJCTVerLbqur773rXpy1c6c7tea+Z7XygAnXQEQ
+RJmCo+i1VHsgGMnt6oTG4h52C6u8SvLrMP/waB4Bwc2A8sBaDwhBB/o7aeobMefe
+uPi73vZt7rVet2rb0T0fQ/9rykNCbO/hd3LcnNv0nxbJpOOM9dbX3aauDKzP4RVk
+8gGChiP3tin+2Ko0zGvv8rm997r3xV1pt67QJwiEFqEG2tbkdFH93DBwDjIPBfPi
+1V5aFeIAHWiKoxX7fYcN7XsJzs2YByCqCB9JkFUVQVTA6PRvzz5effmf8/OC9PMp
+C+ZtzACFV1K3GMDvG5p00Ri2rRwdRGfGJGZluZmRrhVWSvlPXhbVm0jUeerZfHWX
+OyPb4dvG7fq7d2YuV64ePXrvx6mb41zvjnrfDiqrwFcQ9VbJCMKmIWYsyFKsKZAp
+mGYZYsykKYZSrJYGZBVZVDChZKsAxJMKFRiFQZVKxBZKLJJhJTbbapSlmzRec3cV
+XShD4BDzmq1wkRIYPpUFVy20DjqcYA1wAOHwq+O9r3vWre0sCbAG9xdKyeSrfivb
+QO34ZArRrbCmGhJ6LPbla+t+POc5nw7qzbdSzdq7p0eJSUbVXZtq6NOrQouWy7TR
+Es2HZNRu1Stu7Ysi26gMq7VS751zzvXPF5506HQJCRi6HLltz9uN8Xm7zDLmXMwz
+p7a33LluY0zKuVZCe1T/O/Vl8LrrrqrrpOIUG2dJip/z1f+mv/K98HqwOlWunXPV
+64nVSTpZbdoyVil8PHTcq/c4iSP+Kkth+WA/sxSm2JD/tMfEf8rSNT+n1kfxMmZY
+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 `)
index 26580b8..7848cad 100644 (file)
@@ -33,7 +33,7 @@ func makeParserBytes() []byte {
        return b
 }
 
-func BenchmarkParse(b *testing.B) {
+func BenchmarkGoParse(b *testing.B) {
        b.SetBytes(int64(len(parserbytes)))
        for i := 0; i < b.N; i++ {
                if _, err := parser.ParseFile(token.NewFileSet(), "", parserbytes, parser.ParseComments); err != nil {
diff --git a/gcc/testsuite/go.test/test/bench/go1/regexp_test.go b/gcc/testsuite/go.test/test/bench/go1/regexp_test.go
new file mode 100644 (file)
index 0000000..3ce9f3a
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package go1
+
+import (
+       "math/rand"
+       "regexp"
+       "testing"
+)
+
+// benchmark based on regexp/exec_test.go
+
+var regexpText []byte
+
+func makeRegexpText(n int) []byte {
+       rand.Seed(0) // For reproducibility.
+       if len(regexpText) >= n {
+               return regexpText[:n]
+       }
+       regexpText = make([]byte, n)
+       for i := range regexpText {
+               if rand.Intn(30) == 0 {
+                       regexpText[i] = '\n'
+               } else {
+                       regexpText[i] = byte(rand.Intn(0x7E+1-0x20) + 0x20)
+               }
+       }
+       return regexpText
+}
+
+func benchmark(b *testing.B, re string, n int) {
+       r := regexp.MustCompile(re)
+       t := makeRegexpText(n)
+       b.ResetTimer()
+       b.SetBytes(int64(n))
+       for i := 0; i < b.N; i++ {
+               if r.Match(t) {
+                       b.Fatal("match!")
+               }
+       }
+}
+
+const (
+       easy0  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
+       easy1  = "A[AB]B[BC]C[CD]D[DE]E[EF]F[FG]G[GH]H[HI]I[IJ]J$"
+       medium = "[XYZ]ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
+       hard   = "[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
+)
+
+func BenchmarkRegexpMatchEasy0_32(b *testing.B)  { benchmark(b, easy0, 32<<0) }
+func BenchmarkRegexpMatchEasy0_1K(b *testing.B)  { benchmark(b, easy0, 1<<10) }
+func BenchmarkRegexpMatchEasy1_32(b *testing.B)  { benchmark(b, easy1, 32<<0) }
+func BenchmarkRegexpMatchEasy1_1K(b *testing.B)  { benchmark(b, easy1, 1<<10) }
+func BenchmarkRegexpMatchMedium_32(b *testing.B) { benchmark(b, medium, 1<<0) }
+func BenchmarkRegexpMatchMedium_1K(b *testing.B) { benchmark(b, medium, 1<<10) }
+func BenchmarkRegexpMatchHard_32(b *testing.B)   { benchmark(b, hard, 32<<0) }
+func BenchmarkRegexpMatchHard_1K(b *testing.B)   { benchmark(b, hard, 1<<10) }
diff --git a/gcc/testsuite/go.test/test/bench/go1/time_test.go b/gcc/testsuite/go.test/test/bench/go1/time_test.go
new file mode 100644 (file)
index 0000000..4687de3
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package go1
+
+// benchmark based on time/time_test.go
+
+import (
+       "testing"
+       "time"
+)
+
+func BenchmarkTimeParse(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               time.Parse(time.ANSIC, "Mon Jan  2 15:04:05 2006")
+       }
+}
+
+func BenchmarkTimeFormat(b *testing.B) {
+       t := time.Unix(1265346057, 0)
+       for i := 0; i < b.N; i++ {
+               t.Format("Mon Jan  2 15:04:05 2006")
+       }
+}
index d269b87..2db895c 100755 (executable)
@@ -10,6 +10,14 @@ O=$GOCHAR
 GC="go tool ${O}g"
 LD="go tool ${O}l"
 
+gccm=""
+case "$O" in
+8)
+       gccm=-m32;;
+6)
+       gccm=-m64;;
+esac
+
 PATH=.:$PATH
 
 havegccgo=false
@@ -78,7 +86,7 @@ run() {
 
 fasta() {
        runonly echo 'fasta -n 25000000'
-       run 'gcc -O2 fasta.c' a.out 25000000
+       run "gcc $gccm -O2 fasta.c" a.out 25000000
        run 'gccgo -O2 fasta.go' a.out -n 25000000      #commented out until WriteString is in bufio
        run 'gc fasta' $O.out -n 25000000
        run 'gc_B fasta' $O.out -n 25000000
@@ -88,7 +96,7 @@ revcomp() {
        runonly gcc -O2 fasta.c
        runonly a.out 25000000 > x
        runonly echo 'reverse-complement < output-of-fasta-25000000'
-       run 'gcc -O2 reverse-complement.c' a.out < x
+       run "gcc $gccm -O2 reverse-complement.c" a.out < x
        run 'gccgo -O2 reverse-complement.go' a.out < x
        run 'gc reverse-complement' $O.out < x
        run 'gc_B reverse-complement' $O.out < x
@@ -97,7 +105,7 @@ revcomp() {
 
 nbody() {
        runonly echo 'nbody -n 50000000'
-       run 'gcc -O2 nbody.c -lm' a.out 50000000
+       run "gcc $gccm -O2 nbody.c -lm" a.out 50000000
        run 'gccgo -O2 nbody.go' a.out -n 50000000
        run 'gc nbody' $O.out -n 50000000
        run 'gc_B nbody' $O.out -n 50000000
@@ -105,7 +113,7 @@ nbody() {
 
 binarytree() {
        runonly echo 'binary-tree 15 # too slow to use 20'
-       run 'gcc -O2 binary-tree.c -lm' a.out 15
+       run "gcc $gccm -O2 binary-tree.c -lm" a.out 15
        run 'gccgo -O2 binary-tree.go' a.out -n 15
        run 'gccgo -O2 binary-tree-freelist.go' a.out -n 15
        run 'gc binary-tree' $O.out -n 15
@@ -114,7 +122,7 @@ binarytree() {
 
 fannkuch() {
        runonly echo 'fannkuch 12'
-       run 'gcc -O2 fannkuch.c' a.out 12
+       run "gcc $gccm -O2 fannkuch.c" a.out 12
        run 'gccgo -O2 fannkuch.go' a.out -n 12
        run 'gccgo -O2 fannkuch-parallel.go' a.out -n 12
        run 'gc fannkuch' $O.out -n 12
@@ -126,7 +134,7 @@ regexdna() {
        runonly gcc -O2 fasta.c
        runonly a.out 100000 > x
        runonly echo 'regex-dna 100000'
-       run 'gcc -O2 regex-dna.c -lpcre' a.out <x
+       run "gcc $gccm -O2 regex-dna.c -lpcre" a.out <x
        run 'gccgo -O2 regex-dna.go' a.out <x
        run 'gccgo -O2 regex-dna-parallel.go' a.out <x
        run 'gc regex-dna' $O.out <x
@@ -137,7 +145,7 @@ regexdna() {
 
 spectralnorm() {
        runonly echo 'spectral-norm 5500'
-       run 'gcc -O2 spectral-norm.c -lm' a.out 5500
+       run "gcc $gccm -O2 spectral-norm.c -lm" a.out 5500
        run 'gccgo -O2 spectral-norm.go' a.out -n 5500
        run 'gc spectral-norm' $O.out -n 5500
        run 'gc_B spectral-norm' $O.out -n 5500
@@ -160,7 +168,7 @@ knucleotide() {
 
 mandelbrot() {
        runonly echo 'mandelbrot 16000'
-       run 'gcc -O2 mandelbrot.c' a.out 16000
+       run "gcc $gccm -O2 mandelbrot.c" a.out 16000
        run 'gccgo -O2 mandelbrot.go' a.out -n 16000
        run 'gc mandelbrot' $O.out -n 16000
        run 'gc_B mandelbrot' $O.out -n 16000
@@ -168,7 +176,7 @@ mandelbrot() {
 
 meteor() {
        runonly echo 'meteor 2098'
-       run 'gcc -O2 meteor-contest.c' a.out 2098
+       run "gcc $gccm -O2 meteor-contest.c" a.out 2098
        run 'gccgo -O2 meteor-contest.go' a.out -n 2098
        run 'gc meteor-contest' $O.out -n 2098
        run 'gc_B  meteor-contest' $O.out -n 2098
@@ -176,7 +184,7 @@ meteor() {
 
 pidigits() {
        runonly echo 'pidigits 10000'
-       run 'gcc -O2 pidigits.c -lgmp' a.out 10000
+       run "gcc $gccm -O2 pidigits.c -lgmp" a.out 10000
        run 'gccgo -O2 pidigits.go' a.out -n 10000
        run 'gc pidigits' $O.out -n 10000
        run 'gc_B  pidigits' $O.out -n 10000
@@ -184,14 +192,14 @@ pidigits() {
 
 threadring() {
        runonly echo 'threadring 50000000'
-       run 'gcc -O2 threadring.c -lpthread' a.out 50000000
+       run "gcc $gccm -O2 threadring.c -lpthread" a.out 50000000
        run 'gccgo -O2 threadring.go' a.out -n 50000000
        run 'gc threadring' $O.out -n 50000000
 }
 
 chameneos() {
        runonly echo 'chameneos 6000000'
-       run 'gcc -O2 chameneosredux.c -lpthread' a.out 6000000
+       run "gcc $gccm -O2 chameneosredux.c -lpthread" a.out 6000000
        run 'gccgo -O2 chameneosredux.go' a.out 6000000
        run 'gc chameneosredux' $O.out 6000000
 }
index 55a15c3..60e8229 100644 (file)
@@ -15,18 +15,21 @@ type T struct {
        d byte
 }
 
-var a = []int{ 1, 2, 3 }
+var a = []int{1, 2, 3}
 var NIL []int
 
 func arraycmptest() {
        if NIL != nil {
                println("fail1:", NIL, "!= nil")
+               panic("bigalg")
        }
        if nil != NIL {
                println("fail2: nil !=", NIL)
+               panic("bigalg")
        }
        if a == nil || nil == a {
                println("fail3:", a, "== nil")
+               panic("bigalg")
        }
 }
 
@@ -49,12 +52,14 @@ func maptest() {
        t1 := mt[0]
        if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
                println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
+               panic("bigalg")
        }
 
        ma[1] = a
        a1 := ma[1]
        if !SameArray(a, a1) {
                println("fail: map val array", a, a1)
+               panic("bigalg")
        }
 }
 
@@ -72,15 +77,18 @@ func chantest() {
        t1 := <-ct
        if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
                println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
+               panic("bigalg")
        }
 
        a1 := <-ca
        if !SameArray(a, a1) {
                println("fail: map val array", a, a1)
+               panic("bigalg")
        }
 }
 
-type E struct { }
+type E struct{}
+
 var e E
 
 func interfacetest() {
@@ -90,6 +98,7 @@ func interfacetest() {
        a1 := i.([]int)
        if !SameArray(a, a1) {
                println("interface <-> []int", a, a1)
+               panic("bigalg")
        }
        pa := new([]int)
        *pa = a
@@ -97,12 +106,14 @@ func interfacetest() {
        a1 = *i.(*[]int)
        if !SameArray(a, a1) {
                println("interface <-> *[]int", a, a1)
+               panic("bigalg")
        }
 
        i = t
        t1 := i.(T)
        if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
                println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)
+               panic("bigalg")
        }
 
        i = e
index ee618b1..7f7d9f6 100644 (file)
@@ -8,6 +8,11 @@
 
 package main
 
+import (
+       "os"
+       "unsafe"
+)
+
 import _ "fmt"
 
 var call string
@@ -102,8 +107,19 @@ func main() {
                panic(sum)
        }
 
+       // exp/ssa/interp doesn't yet skip blank fields in struct
+       // equivalence.  It also cannot support unsafe.Pointer.
+       if os.Getenv("GOSSAINTERP") == "" {
+               type T1 struct{ x, y, z int }
+               t1 := *(*T)(unsafe.Pointer(&T1{1, 2, 3}))
+               t2 := *(*T)(unsafe.Pointer(&T1{4, 5, 6}))
+               if t1 != t2 {
+                       panic("T{} != T{}")
+               }
+       }
+
        h(a, b)
-       
+
        m()
 }
 
@@ -133,14 +149,13 @@ func fp1(x, y int) {
        }
 }
 
-
 func m() {
        var i I
-       
+
        i = TI{}
        i.M(1, 1)
        i.M(2, 2)
-       
+
        fp(1, 1)
        fp(2, 2)
 }
@@ -162,4 +177,3 @@ func _() {
 func ff() {
        var _ int = 1
 }
-
index c6e038a..f7e98b4 100644 (file)
@@ -9,8 +9,13 @@
 
 package _      // ERROR "invalid package name _"
 
+var t struct {
+       _ int
+}
+
 func main() {
        _()     // ERROR "cannot use _ as value"
        x := _+1        // ERROR "cannot use _ as value"
        _ = x
+       _ = t._ // ERROR "cannot refer to blank field|invalid use of"
 }
diff --git a/gcc/testsuite/go.test/test/bugs/bug434.go b/gcc/testsuite/go.test/test/bugs/bug434.go
deleted file mode 100644 (file)
index 5eec7a5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go || echo BUG:bug434
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
-
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ignored
index 40bc357..4a08139 100644 (file)
@@ -47,7 +47,7 @@ func main() {
        runtime.GC()
        runtime.ReadMemStats(memstats)
 
-       if memstats.Alloc-alloc > 1e5 {
+       if memstats.Alloc-alloc > 1.1e5 {
                println("BUG: too much memory for 100,000 selects:", memstats.Alloc-alloc)
        }
 }
index a56ca6e..5be6456 100644 (file)
@@ -8,9 +8,13 @@
 
 package main
 
-import "unsafe"
+import (
+       "os"
+       "unsafe"
+)
 
 var global bool
+
 func use(b bool) { global = b }
 
 func stringptr(s string) uintptr { return *(*uintptr)(unsafe.Pointer(&s)) }
@@ -38,8 +42,12 @@ func main() {
        var c string = "hello"
        var d string = "hel" // try to get different pointer
        d = d + "lo"
-       if stringptr(c) == stringptr(d) {
-               panic("compiler too smart -- got same string")
+
+       // exp/ssa/interp can't handle unsafe.Pointer.
+       if os.Getenv("GOSSAINTERP") != "" {
+               if stringptr(c) == stringptr(d) {
+                       panic("compiler too smart -- got same string")
+               }
        }
 
        var e = make(chan int)
@@ -283,7 +291,7 @@ func main() {
                isfalse(ix != z)
                isfalse(iz != x)
        }
-       
+
        // structs with _ fields
        {
                var x = struct {
@@ -296,7 +304,7 @@ func main() {
                        x: 1, y: 2, z: 3,
                }
                var ix interface{} = x
-               
+
                istrue(x == x)
                istrue(x == ix)
                istrue(ix == x)
index 248672e..2d8a622 100644 (file)
@@ -9,12 +9,23 @@
 
 package main
 
+type (
+       Float32    float32
+       Float64    float64
+       Complex64  complex64
+       Complex128 complex128
+)
+
 var (
        f32 float32
        f64 float64
+       F32 Float32
+       F64 Float64
 
        c64  complex64
        c128 complex128
+       C64  Complex64
+       C128 Complex128
 )
 
 func main() {
@@ -25,4 +36,19 @@ func main() {
        _ = complex128(0)     // ok
        _ = complex(f32, f64) // ERROR "complex"
        _ = complex(f64, f32) // ERROR "complex"
+       _ = complex(f32, F32) // ERROR "complex"
+       _ = complex(F32, f32) // ERROR "complex"
+       _ = complex(f64, F64) // ERROR "complex"
+       _ = complex(F64, f64) // ERROR "complex"
+
+       c128 = complex(f32, f32) // ERROR "cannot use"
+       c64 = complex(f64, f64)  // ERROR "cannot use"
+
+       c64 = complex(1.0, 2.0) // ok, constant is untyped
+       c128 = complex(1.0, 2.0)
+       C64 = complex(1.0, 2.0)
+       C128 = complex(1.0, 2.0)
+
+       C64 = complex(f32, f32)  // ERROR "cannot use"
+       C128 = complex(f64, f64) // ERROR "cannot use"
 }
index 92a9835..40c8448 100644 (file)
@@ -45,4 +45,7 @@ func main() {
                        fmt.Printf("%v/%v: expected %v error; got %v\n", t.f, t.g, t.out, x)
                }
        }
+       if bad {
+               panic("cmplxdivide failed.")
+       }
 }
index 80fbfaf..d583659 100644 (file)
@@ -8,27 +8,29 @@
 
 package main
 
+import "os"
+
 const (
-       c0 = 0
-       cm1 = -1
-       chuge = 1 << 100
+       c0      = 0
+       cm1     = -1
+       chuge   = 1 << 100
        chuge_1 = chuge - 1
-       c1 = chuge >> 100
-       c3div2 = 3/2
-       c1e3 = 1e3
+       c1      = chuge >> 100
+       c3div2  = 3 / 2
+       c1e3    = 1e3
 
-       ctrue = true
+       ctrue  = true
        cfalse = !ctrue
 )
 
 const (
-       f0 = 0.0
-       fm1 = -1.
-       fhuge float64 = 1 << 100
+       f0              = 0.0
+       fm1             = -1.
+       fhuge   float64 = 1 << 100
        fhuge_1 float64 = chuge - 1
-       f1 float64 = chuge >> 100
-       f3div2 = 3./2.
-       f1e3 float64 = 1e3
+       f1      float64 = chuge >> 100
+       f3div2          = 3. / 2.
+       f1e3    float64 = 1e3
 )
 
 func assert(t bool, s string) {
@@ -41,8 +43,8 @@ func ints() {
        assert(c0 == 0, "c0")
        assert(c1 == 1, "c1")
        assert(chuge > chuge_1, "chuge")
-       assert(chuge_1 + 1 == chuge, "chuge 1")
-       assert(chuge + cm1 +1  == chuge, "cm1")
+       assert(chuge_1+1 == chuge, "chuge 1")
+       assert(chuge+cm1+1 == chuge, "cm1")
        assert(c3div2 == 1, "3/2")
        assert(c1e3 == 1000, "c1e3 int")
        assert(c1e3 == 1e3, "c1e3 float")
@@ -81,9 +83,12 @@ func ints() {
 func floats() {
        assert(f0 == c0, "f0")
        assert(f1 == c1, "f1")
-       assert(fhuge == fhuge_1, "fhuge")       // float64 can't distinguish fhuge, fhuge_1.
-       assert(fhuge_1 + 1 == fhuge, "fhuge 1")
-       assert(fhuge + fm1 +1  == fhuge, "fm1")
+       // TODO(gri): exp/ssa/interp constant folding is incorrect.
+       if os.Getenv("GOSSAINTERP") == "" {
+               assert(fhuge == fhuge_1, "fhuge") // float64 can't distinguish fhuge, fhuge_1.
+       }
+       assert(fhuge_1+1 == fhuge, "fhuge 1")
+       assert(fhuge+fm1+1 == fhuge, "fm1")
        assert(f3div2 == 1.5, "3./2.")
        assert(f1e3 == 1000, "f1e3 int")
        assert(f1e3 == 1.e3, "f1e3 float")
index 1580b76..58bddee 100644 (file)
@@ -9,6 +9,8 @@
 
 package main
 
+import "unsafe"
+
 type I interface{}
 
 const (
@@ -86,3 +88,7 @@ func main() {
 }
 
 const ptr = nil // ERROR "const.*nil"
+const _ = string([]byte(nil)) // ERROR "is not a? ?constant"
+const _ = uintptr(unsafe.Pointer((*int)(nil))) // ERROR "is not a? ?constant"
+const _ = unsafe.Pointer((*int)(nil)) // ERROR "cannot be nil|invalid constant type"
+const _ = (*int)(nil) // ERROR "cannot be nil|invalid constant type"
index 677fcef..2fb2d06 100644 (file)
@@ -9,7 +9,7 @@
 package main
 
 var b struct {
-       a[10]int
+       a [10]int
 }
 
 var m map[string][20]int
@@ -61,17 +61,22 @@ var c1 = func() chan *[70]int {
 func main() {
        if n1 != 10 || n2 != 20 || n3 != 30 || n4 != 40 || n5 != 50 || n6 != 60 || n7 != 70 {
                println("BUG:", n1, n2, n3, n4, n5, n6, n7)
+               panic("fail")
        }
        if !calledF {
                println("BUG: did not call f")
+               panic("fail")
        }
        if <-c == nil {
                println("BUG: did not receive from c")
+               panic("fail")
        }
        if !calledG {
                println("BUG: did not call g")
+               panic("fail")
        }
        if <-c1 == nil {
                println("BUG: did not receive from c1")
+               panic("fail")
        }
 }
index d0eed13..87fe33a 100644 (file)
@@ -24,10 +24,10 @@ const (
        n2 = len(m[""])
        n3 = len(s[10])
 
-       n4 = len(f())  // ERROR "must be constant|is not constant"
-       n5 = len(<-c) // ERROR "must be constant|is not constant"
+       n4 = len(f())  // ERROR "is not a constant|is not constant"
+       n5 = len(<-c) // ERROR "is not a constant|is not constant"
 
-       n6 = cap(f())  // ERROR "must be constant|is not constant"
-       n7 = cap(<-c) // ERROR "must be constant|is not constant"
+       n6 = cap(f())  // ERROR "is not a constant|is not constant"
+       n7 = cap(<-c) // ERROR "is not a constant|is not constant"
 )
 
diff --git a/gcc/testsuite/go.test/test/const6.go b/gcc/testsuite/go.test/test/const6.go
new file mode 100644 (file)
index 0000000..c005ac3
--- /dev/null
@@ -0,0 +1,30 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Ideal vs non-ideal bool. See issue 3915, 3923.
+
+package p
+
+type mybool bool
+type mybool1 bool
+
+var (
+       x, y int = 1, 2
+       c1 bool = x < y
+       c2 mybool = x < y
+       c3 mybool = c2 == (x < y)
+       c4 mybool = c2 == (1 < 2)
+       c5 mybool = 1 < 2
+       c6 mybool1 = x < y
+       c7 = c1 == c2 // ERROR "mismatched types|incompatible types"
+       c8 = c2 == c6 // ERROR "mismatched types|incompatible types"
+       c9 = c1 == c6 // ERROR "mismatched types|incompatible types"
+       _ = c2 && (x < y)
+       _ = c2 && (1 < 2)
+       _ = c1 && c2 // ERROR "mismatched types|incompatible types"
+       _ = c2 && c6 // ERROR "mismatched types|incompatible types"
+       _ = c1 && c6 // ERROR "mismatched types|incompatible types"
+)
index 65ffb6f..e6108d9 100644 (file)
@@ -132,6 +132,7 @@ func verify8(length, in, out, m int) {
        n := ncopied(length, in, out)
        if m != n {
                fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n)
+               os.Exit(1)
                return
        }
        // before
@@ -172,6 +173,7 @@ func verifyS(length, in, out, m int) {
        n := ncopied(length, in, out)
        if m != n {
                fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n)
+               os.Exit(1)
                return
        }
        // before
@@ -212,6 +214,7 @@ func verify16(length, in, out, m int) {
        n := ncopied(length, in, out)
        if m != n {
                fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n)
+               os.Exit(1)
                return
        }
        // before
@@ -252,6 +255,7 @@ func verify32(length, in, out, m int) {
        n := ncopied(length, in, out)
        if m != n {
                fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n)
+               os.Exit(1)
                return
        }
        // before
@@ -292,6 +296,7 @@ func verify64(length, in, out, m int) {
        n := ncopied(length, in, out)
        if m != n {
                fmt.Printf("count bad(%d %d %d): %d not %d\n", length, in, out, m, n)
+               os.Exit(1)
                return
        }
        // before
diff --git a/gcc/testsuite/go.test/test/ddd2.dir/ddd2.go b/gcc/testsuite/go.test/test/ddd2.dir/ddd2.go
new file mode 100644 (file)
index 0000000..c9a2675
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2010 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file is compiled and then imported by ddd3.go.
+
+package ddd
+
+func Sum(args ...int) int {
+       s := 0
+       for _, v := range args {
+               s += v
+       }
+       return s
+}
+
similarity index 75%
rename from gcc/testsuite/go.test/test/ddd3.go
rename to gcc/testsuite/go.test/test/ddd2.dir/ddd3.go
index d8de0a7..5486fe8 100644 (file)
@@ -1,8 +1,3 @@
-// $G $D/ddd2.go && $G $D/$F.go && $L $F.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
-
 // Copyright 2010 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
index a141a39..0d9f634 100644 (file)
@@ -1,18 +1,9 @@
-// skip
+// rundir
 
 // Copyright 2010 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// This file is compiled and then imported by ddd3.go.
-
-package ddd
-
-func Sum(args ...int) int {
-       s := 0
-       for _, v := range args {
-               s += v
-       }
-       return s
-}
+// Test that variadic functions work across package boundaries.
 
+package ignored
index 6f84245..e2f126a 100644 (file)
@@ -33,8 +33,9 @@ func main() {
                m, h, s := f3()
                _, _, _, _, _, _, _, _, _ = i, f, s, j, k, m, g, s, h
        }
-       if x() != "3" {
-               println("x() failed")
+       if y := x(); y != "3" {
+               println("x() failed", y)
+               panic("fail")
        }
        _, _, _, _, _, _, _, _, _ = i, f, s, j, k, m, g, s, h
 }
index ff53ab0..728eceb 100644 (file)
@@ -41,7 +41,8 @@ func main() {
        {
                // multiline no new variables
                i := f1
-               i := func() { // ERROR "redeclared|no new|incompatible"
+               i := func() int { // ERROR "redeclared|no new|incompatible"
+                       return 0
                }
                _ = i
        }
index 2f67d35..6731ab7 100644 (file)
@@ -25,6 +25,7 @@ func test1() {
        test1helper()
        if result != "9876543210" {
                fmt.Printf("test1: bad defer result (should be 9876543210): %q\n", result)
+               panic("defer")
        }
 }
 
@@ -41,6 +42,7 @@ func test2() {
        test2helper()
        if result != "9876543210" {
                fmt.Printf("test2: bad defer result (should be 9876543210): %q\n", result)
+               panic("defer")
        }
 }
 
index c91a33e..b20f106 100644 (file)
@@ -13,36 +13,44 @@ import "fmt"
 func f8(x, y, q, r int8) {
        if t := x / y; t != q {
                fmt.Printf("%d/%d = %d, want %d\n", x, y, t, q)
+               panic("divide")
        }
        if t := x % y; t != r {
                fmt.Printf("%d%%%d = %d, want %d\n", x, y, t, r)
+               panic("divide")
        }
 }
 
 func f16(x, y, q, r int16) {
        if t := x / y; t != q {
                fmt.Printf("%d/%d = %d, want %d\n", x, y, t, q)
+               panic("divide")
        }
        if t := x % y; t != r {
                fmt.Printf("%d%%%d = %d, want %d\n", x, y, t, r)
+               panic("divide")
        }
 }
 
 func f32(x, y, q, r int32) {
        if t := x / y; t != q {
                fmt.Printf("%d/%d = %d, want %d\n", x, y, t, q)
+               panic("divide")
        }
        if t := x % y; t != r {
                fmt.Printf("%d%%%d = %d, want %d\n", x, y, t, r)
+               panic("divide")
        }
 }
 
 func f64(x, y, q, r int64) {
        if t := x / y; t != q {
                fmt.Printf("%d/%d = %d, want %d\n", x, y, t, q)
+               panic("divide")
        }
        if t := x % y; t != r {
                fmt.Printf("%d%%%d = %d, want %d\n", x, y, t, r)
+               panic("divide")
        }
 }
 
diff --git a/gcc/testsuite/go.test/test/dwarf/dwarf.go b/gcc/testsuite/go.test/test/dwarf/dwarf.go
new file mode 100644 (file)
index 0000000..32dd7d3
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// See issue 2241 and issue 1878: dwarf include stack size
+// issues in linker.
+
+package ignored
index 6b00570..b8b312a 100755 (executable)
@@ -31,7 +31,7 @@ if(@ARGV < 1) {
 
 # Grab SOURCEFILES
 foreach(reverse 0 .. @ARGV-1) {
-       unless($ARGV[$_] =~ /\.go$/) {
+       unless($ARGV[$_] =~ /\.(go|s)$/) {
                @file = @ARGV[$_+1 .. @ARGV-1];
                last;
        }
index e8ede52..252a1e5 100644 (file)
@@ -52,9 +52,11 @@ func chk(p, q *int, v int, s string) {
 func chkalias(p, q *int, v int, s string) {
        if p != q {
                println("want aliased pointers but got different after", s)
+               bad = true
        }
        if *q != v+1 {
                println("wrong value want", v+1, "got", *q, "after", s)
+               bad = true
        }
 }
 
index 8db12d9..511b74a 100644 (file)
@@ -80,7 +80,9 @@ func foo12(yyy **int) { // ERROR "leaking param: yyy"
        xxx = yyy
 }
 
-func foo13(yyy **int) { // ERROR "yyy does not escape"
+// Must treat yyy as leaking because *yyy leaks, and the escape analysis 
+// summaries in exported metadata do not distinguish these two cases.
+func foo13(yyy **int) { // ERROR "leaking param: yyy"
        *xxx = *yyy
 }
 
@@ -142,13 +144,13 @@ func (b Bar) AlsoLeak() *int { // ERROR "leaking param: b"
 }
 
 func (b Bar) LeaksToo() *int { // ERROR "leaking param: b"
-       v := 0  // ERROR "moved to heap: v"
+       v := 0    // ERROR "moved to heap: v"
        b.ii = &v // ERROR "&v escapes"
        return b.ii
 }
 
 func (b *Bar) LeaksABit() *int { // ERROR "b does not escape"
-       v := 0  // ERROR "moved to heap: v"
+       v := 0    // ERROR "moved to heap: v"
        b.ii = &v // ERROR "&v escapes"
        return b.ii
 }
@@ -299,7 +301,8 @@ func (f *Foo) foo45() { // ERROR "f does not escape"
        F.x = f.x
 }
 
-func (f *Foo) foo46() { // ERROR "f does not escape"
+// See foo13 above for explanation of why f leaks.
+func (f *Foo) foo46() { // ERROR "leaking param: f"
        F.xx = f.xx
 }
 
@@ -561,12 +564,21 @@ func myprint1(y *int, x ...interface{}) *interface{} { // ERROR "y does not esca
        return &x[0] // ERROR "&x.0. escapes to heap"
 }
 
-func foo75(z *int) { // ERROR "leaking param: z"
+func foo75(z *int) { // ERROR "z does not escape"
        myprint(z, 1, 2, 3) // ERROR "[.][.][.] argument does not escape"
 }
 
 func foo75a(z *int) { // ERROR "z does not escape"
-       myprint1(z, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
+       myprint1(z, 1, 2, 3) // ERROR "[.][.][.] argument does not escape"
+}
+
+func foo75esc(z *int) { // ERROR "leaking param: z"
+       gxx = myprint(z, 1, 2, 3) // ERROR "[.][.][.] argument does not escape"
+}
+
+func foo75aesc(z *int) { // ERROR "z does not escape"
+       var ppi **interface{}       // assignments to pointer dereferences lose track
+       *ppi = myprint1(z, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
 }
 
 func foo76(z *int) { // ERROR "leaking param: z"
@@ -574,7 +586,7 @@ func foo76(z *int) { // ERROR "leaking param: z"
 }
 
 func foo76a(z *int) { // ERROR "leaking param: z"
-       myprint1(nil, z) // ERROR "[.][.][.] argument escapes to heap"
+       myprint1(nil, z) // ERROR "[.][.][.] argument does not escape"
 }
 
 func foo76b() {
@@ -582,7 +594,7 @@ func foo76b() {
 }
 
 func foo76c() {
-       myprint1(nil, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
+       myprint1(nil, 1, 2, 3) // ERROR "[.][.][.] argument does not escape"
 }
 
 func foo76d() {
@@ -590,7 +602,7 @@ func foo76d() {
 }
 
 func foo76e() {
-       defer myprint1(nil, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
+       defer myprint1(nil, 1, 2, 3) // ERROR "[.][.][.] argument does not escape"
 }
 
 func foo76f() {
@@ -610,10 +622,15 @@ func foo77(z []interface{}) { // ERROR "z does not escape"
        myprint(nil, z...) // z does not escape
 }
 
-func foo77a(z []interface{}) { // ERROR "leaking param: z"
+func foo77a(z []interface{}) { // ERROR "z does not escape"
        myprint1(nil, z...)
 }
 
+func foo77b(z []interface{}) { // ERROR "leaking param: z"
+       var ppi **interface{}
+       *ppi = myprint1(nil, z...)
+}
+
 func foo78(z int) *int { // ERROR "moved to heap: z"
        return &z // ERROR "&z escapes to heap"
 }
@@ -646,6 +663,21 @@ func foo81() *int {
        return nil
 }
 
+func tee(p *int) (x, y *int) { return p, p } // ERROR "leaking param"
+
+func noop(x, y *int) {} // ERROR "does not escape"
+
+func foo82() {
+       var x, y, z int  // ERROR "moved to heap"
+       go noop(tee(&z)) // ERROR "&z escapes to heap"
+       go noop(&x, &y)  // ERROR "escapes to heap"
+       for {
+               var u, v, w int     // ERROR "moved to heap"
+               defer noop(tee(&u)) // ERROR "&u escapes to heap"
+               defer noop(&v, &w)  // ERROR "escapes to heap"
+       }
+}
+
 type Fooer interface {
        Foo()
 }
@@ -1079,29 +1111,29 @@ L1:
        _ = i
 }
 
-func foo124(x **int) { // ERROR "x does not escape"
-       var i int       // ERROR "moved to heap: i"
-       p := &i         // ERROR "&i escapes"
-       func() {        // ERROR "func literal does not escape"
-               *x = p  // ERROR "leaking closure reference p"
+func foo124(x **int) { // ERROR "x does not escape"
+       var i int // ERROR "moved to heap: i"
+       p := &i   // ERROR "&i escapes"
+       func() {  // ERROR "func literal does not escape"
+               *x = p // ERROR "leaking closure reference p"
        }()
 }
 
-func foo125(ch chan *int) {    // ERROR "does not escape"
-       var i int       // ERROR "moved to heap"
-       p := &i         // ERROR "&i escapes to heap"
-       func() {        // ERROR "func literal does not escape"
-               ch <- p // ERROR "leaking closure reference p"
+func foo125(ch chan *int) { // ERROR "does not escape"
+       var i int // ERROR "moved to heap"
+       p := &i   // ERROR "&i escapes to heap"
+       func() {  // ERROR "func literal does not escape"
+               ch <- p // ERROR "leaking closure reference p"
        }()
 }
 
 func foo126() {
-       var px *int  // loopdepth 0
+       var px *int // loopdepth 0
        for {
                // loopdepth 1
-               var i int  // ERROR "moved to heap"
+               var i int // ERROR "moved to heap"
                func() {  // ERROR "func literal does not escape"
-                       px = &i  // ERROR "&i escapes"
+                       px = &i // ERROR "&i escapes"
                }()
        }
 }
@@ -1109,8 +1141,8 @@ func foo126() {
 var px *int
 
 func foo127() {
-       var i int  // ERROR "moved to heap: i"
-       p := &i  // ERROR "&i escapes to heap"
+       var i int // ERROR "moved to heap: i"
+       p := &i   // ERROR "&i escapes to heap"
        q := p
        px = q
 }
@@ -1123,12 +1155,12 @@ func foo128() {
 }
 
 func foo129() {
-       var i int  // ERROR "moved to heap: i"
-       p := &i  // ERROR "&i escapes to heap"
+       var i int // ERROR "moved to heap: i"
+       p := &i   // ERROR "&i escapes to heap"
        func() {  // ERROR "func literal does not escape"
-               q := p  // ERROR "leaking closure reference p"
-               func() {  // ERROR "func literal does not escape"
-                       r := q  // ERROR "leaking closure reference q"
+               q := p   // ERROR "leaking closure reference p"
+               func() { // ERROR "func literal does not escape"
+                       r := q // ERROR "leaking closure reference q"
                        px = r
                }()
        }()
@@ -1136,40 +1168,40 @@ func foo129() {
 
 func foo130() {
        for {
-               var i int  // ERROR "moved to heap"
+               var i int // ERROR "moved to heap"
                func() {  // ERROR "func literal does not escape"
-                       px = &i  // ERROR "&i escapes" "leaking closure reference i"
+                       px = &i // ERROR "&i escapes" "leaking closure reference i"
                }()
        }
 }
 
 func foo131() {
-       var i int  // ERROR "moved to heap"
+       var i int // ERROR "moved to heap"
        func() {  // ERROR "func literal does not escape"
-               px = &i  // ERROR "&i escapes" "leaking closure reference i"
+               px = &i // ERROR "&i escapes" "leaking closure reference i"
        }()
 }
 
 func foo132() {
-       var i int  // ERROR "moved to heap"
-       go func() {  // ERROR "func literal escapes to heap"
-               px = &i  // ERROR "&i escapes" "leaking closure reference i"
+       var i int   // ERROR "moved to heap"
+       go func() { // ERROR "func literal escapes to heap"
+               px = &i // ERROR "&i escapes" "leaking closure reference i"
        }()
 }
 
 func foo133() {
-       var i int  // ERROR "moved to heap"
-       defer func() {  // ERROR "func literal does not escape"
-               px = &i  // ERROR "&i escapes" "leaking closure reference i"
+       var i int      // ERROR "moved to heap"
+       defer func() { // ERROR "func literal does not escape"
+               px = &i // ERROR "&i escapes" "leaking closure reference i"
        }()
 }
 
 func foo134() {
        var i int
        p := &i  // ERROR "&i does not escape"
-       func() {  // ERROR "func literal does not escape"
+       func() { // ERROR "func literal does not escape"
                q := p
-               func() {  // ERROR "func literal does not escape"
+               func() { // ERROR "func literal does not escape"
                        r := q
                        _ = r
                }()
@@ -1177,11 +1209,11 @@ func foo134() {
 }
 
 func foo135() {
-       var i int  // ERROR "moved to heap: i"
-       p := &i  // ERROR "&i escapes to heap" "moved to heap: p"
-       go func() {  // ERROR "func literal escapes to heap"
-               q := p  // ERROR "&p escapes to heap"
-               func() {  // ERROR "func literal does not escape"
+       var i int   // ERROR "moved to heap: i"
+       p := &i     // ERROR "&i escapes to heap" "moved to heap: p"
+       go func() { // ERROR "func literal escapes to heap"
+               q := p   // ERROR "&p escapes to heap"
+               func() { // ERROR "func literal does not escape"
                        r := q
                        _ = r
                }()
@@ -1189,11 +1221,11 @@ func foo135() {
 }
 
 func foo136() {
-       var i int  // ERROR "moved to heap: i"
-       p := &i  // ERROR "&i escapes to heap" "moved to heap: p"
-       go func() {  // ERROR "func literal escapes to heap"
-               q := p  // ERROR "&p escapes to heap" "leaking closure reference p"
-               func() {  // ERROR "func literal does not escape"
+       var i int   // ERROR "moved to heap: i"
+       p := &i     // ERROR "&i escapes to heap" "moved to heap: p"
+       go func() { // ERROR "func literal escapes to heap"
+               q := p   // ERROR "&p escapes to heap" "leaking closure reference p"
+               func() { // ERROR "func literal does not escape"
                        r := q // ERROR "leaking closure reference q"
                        px = r
                }()
@@ -1201,12 +1233,12 @@ func foo136() {
 }
 
 func foo137() {
-       var i int  // ERROR "moved to heap: i"
-       p := &i  // ERROR "&i escapes to heap"
+       var i int // ERROR "moved to heap: i"
+       p := &i   // ERROR "&i escapes to heap"
        func() {  // ERROR "func literal does not escape"
-               q := p  // ERROR "leaking closure reference p" "moved to heap: q"
+               q := p      // ERROR "leaking closure reference p" "moved to heap: q"
                go func() { // ERROR "func literal escapes to heap"
-                       r := q  // ERROR "&q escapes to heap"
+                       r := q // ERROR "&q escapes to heap"
                        _ = r
                }()
        }()
@@ -1216,7 +1248,7 @@ func foo138() *byte {
        type T struct {
                x [1]byte
        }
-       t := new(T) // ERROR "new.T. escapes to heap"
+       t := new(T)    // ERROR "new.T. escapes to heap"
        return &t.x[0] // ERROR "&t.x.0. escapes to heap"
 }
 
@@ -1226,6 +1258,70 @@ func foo139() *byte {
                        y byte
                }
        }
-       t := new(T) // ERROR "new.T. escapes to heap"
+       t := new(T)   // ERROR "new.T. escapes to heap"
        return &t.x.y // ERROR "&t.x.y escapes to heap"
 }
+
+// issue 4751
+func foo140() interface{} {
+       type T struct {
+               X string
+       }
+       type U struct {
+               X string
+               T *T
+       }
+       t := &T{} // ERROR "&T literal escapes to heap"
+       return U{
+               X: t.X,
+               T: t,
+       }
+}
+
+//go:noescape
+
+func F1([]byte)
+
+func F2([]byte)
+
+//go:noescape
+
+func F3(x []byte) // ERROR "F3 x does not escape"
+
+func F4(x []byte)
+
+func G() {
+       var buf1 [10]byte
+       F1(buf1[:]) // ERROR "buf1 does not escape"
+       
+       var buf2 [10]byte // ERROR "moved to heap: buf2"
+       F2(buf2[:]) // ERROR "buf2 escapes to heap"
+
+       var buf3 [10]byte
+       F3(buf3[:]) // ERROR "buf3 does not escape"
+       
+       var buf4 [10]byte // ERROR "moved to heap: buf4"
+       F4(buf4[:]) // ERROR "buf4 escapes to heap"
+}
+
+type Tm struct {
+       x int
+}
+
+func (t *Tm) M() { // ERROR "t does not escape"
+}
+
+func foo141() {
+       var f func()
+       
+       t := new(Tm) // ERROR "escapes to heap"
+       f = t.M // ERROR "t.M does not escape"
+       _ = f
+}
+
+var gf func()
+
+func foo142() {
+       t := new(Tm) // ERROR "escapes to heap"
+       gf = t.M // ERROR "t.M escapes to heap"
+}
diff --git a/gcc/testsuite/go.test/test/escape5.go b/gcc/testsuite/go.test/test/escape5.go
new file mode 100644 (file)
index 0000000..6b327fe
--- /dev/null
@@ -0,0 +1,144 @@
+// errorcheck -0 -m -l
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test, using compiler diagnostic flags, that the escape analysis is working.
+// Compiles but does not run.  Inlining is disabled.
+
+package foo
+
+func noleak(p *int) int { // ERROR "p does not escape"
+       return *p
+}
+
+func leaktoret(p *int) *int { // ERROR "leaking param: p to result"
+       return p
+}
+
+func leaktoret2(p *int) (*int, *int) { // ERROR "leaking param: p to result .anon1" "leaking param: p to result .anon2"
+       return p, p
+}
+
+func leaktoret22(p, q *int) (*int, *int) { // ERROR "leaking param: p to result .anon2" "leaking param: q to result .anon3"
+       return p, q
+}
+
+func leaktoret22b(p, q *int) (*int, *int) { // ERROR "leaking param: p to result .anon3" "leaking param: q to result .anon2"
+       return leaktoret22(q, p)
+}
+
+func leaktoret22c(p, q *int) (*int, *int) { // ERROR "leaking param: p to result .anon3" "leaking param: q to result .anon2"
+       r, s := leaktoret22(q, p)
+       return r, s
+}
+
+func leaktoret22d(p, q *int) (r, s *int) { // ERROR "leaking param: p to result s" "leaking param: q to result r"
+       r, s = leaktoret22(q, p)
+       return
+}
+
+func leaktoret22e(p, q *int) (r, s *int) { // ERROR "leaking param: p to result s" "leaking param: q to result r"
+       r, s = leaktoret22(q, p)
+       return r, s
+}
+
+func leaktoret22f(p, q *int) (r, s *int) { // ERROR "leaking param: p to result s" "leaking param: q to result r"
+       rr, ss := leaktoret22(q, p)
+       return rr, ss
+}
+
+var gp *int
+
+func leaktosink(p *int) *int { // ERROR "leaking param: p"
+       gp = p
+       return p
+}
+
+func f1() {
+       var x int
+       p := noleak(&x) // ERROR "&x does not escape"
+       _ = p
+}
+
+func f2() {
+       var x int
+       p := leaktoret(&x) // ERROR "&x does not escape"
+       _ = p
+}
+
+func f3() {
+       var x int          // ERROR "moved to heap: x"
+       p := leaktoret(&x) // ERROR "&x escapes to heap"
+       gp = p
+}
+
+func f4() {
+       var x int              // ERROR "moved to heap: x"
+       p, q := leaktoret2(&x) // ERROR "&x escapes to heap"
+       gp = p
+       gp = q
+}
+
+func f5() {
+       var x int
+       leaktoret22(leaktoret2(&x)) // ERROR "&x does not escape"
+}
+
+func f6() {
+       var x int                               // ERROR "moved to heap: x"
+       px1, px2 := leaktoret22(leaktoret2(&x)) // ERROR "&x escapes to heap"
+       gp = px1
+       _ = px2
+}
+
+type T struct{ x int }
+
+func (t *T) Foo(u int) (*T, bool) { // ERROR "leaking param: t to result"
+       t.x += u
+       return t, true
+}
+
+func f7() *T {
+       r, _ := new(T).Foo(42) // ERROR "new.T. escapes to heap"
+       return r
+}
+
+func leakrecursive1(p, q *int) (*int, *int) { // ERROR "leaking param: p" "leaking param: q"
+       return leakrecursive2(q, p)
+}
+
+func leakrecursive2(p, q *int) (*int, *int) { // ERROR "leaking param: p" "leaking param: q"
+       if *p > *q {
+               return leakrecursive1(q, p)
+       }
+       // without this, leakrecursive? are safe for p and q, b/c in fact their graph does not have leaking edges.
+       return p, q
+}
+
+
+var global interface{}
+
+type T1 struct {
+       X *int
+}
+
+type T2 struct {
+       Y *T1
+}
+
+func f8(p *T1) (k T2) { // ERROR "leaking param: p to result k" "leaking param: p"
+       if p == nil {
+               k = T2{}
+               return
+       }
+
+       global = p // should make p leak always
+       return T2{p}
+}
+
+func f9() {
+       var j T1 // ERROR "moved to heap: j"
+       f8(&j) // ERROR "&j escapes to heap"
+}
index 007f47f..d2cf88a 100644 (file)
@@ -7,5 +7,5 @@
 package main
 
 func f (x,             // GCCGO_ERROR "previous"
-       x int) {        // ERROR "redeclared|redefinition" "duplicate"
+       x int) {        // ERROR "duplicate argument|redefinition"
 }
index 8bdecaa..54a1742 100644 (file)
@@ -1,10 +1,7 @@
-// $G $D/$F.dir/bug0.go && errchk $G $D/$F.dir/bug1.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckdir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-ignored
+package ignored
index 93ae7e0..dae83f8 100644 (file)
@@ -20,7 +20,7 @@ Bus error
 
 /* expected scope hierarchy (outermost to innermost)
 
-universe scope (contains predeclared identifiers int, float, int32, len, etc.)
+universe scope (contains predeclared identifiers int, float32, int32, len, etc.)
 "solar" scope (just holds the package name P so it can be found but doesn't conflict)
 global scope (the package global scope)
 local scopes (function scopes)
index a6baac2..54a1742 100644 (file)
@@ -1,10 +1,7 @@
-// $G $D/$F.dir/bug0.go && $G $D/$F.dir/bug1.go && errchk $G $D/$F.dir/bug2.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckdir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-ignored
+package ignored
index c5e166a..fde797b 100644 (file)
@@ -1,10 +1,7 @@
-// $G $D/bug160.dir/x.go && $G $D/bug160.dir/y.go && $L y.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-nothing to see here
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug191.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/bug191.dir/main.go
new file mode 100644 (file)
index 0000000..995134c
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import . "./a"
+import . "./b"
+
+var _ T
+var _ V
+
+func main() {
+}
index 11a6e58..248e23e 100644 (file)
@@ -1,19 +1,9 @@
-// $G $D/bug191.dir/a.go && $G $D/bug191.dir/b.go && $G $D/$F.go && $L $F.$A
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package main
-
-import . "./a"
-import . "./b"
-
-var _ T
-var _ V
+// Tests bug with dot imports.
 
-func main() {
-}
+package ignored
index de17cb6..1e0d9d1 100644 (file)
@@ -11,8 +11,8 @@ var s string;
 var m map[string]int;
 
 func main() {
-       println(t["hi"]);       // ERROR "integer"
-       println(s["hi"]);       // ERROR "integer" "to type uint"
-       println(m[0]);  // ERROR "map index"
+       println(t["hi"]); // ERROR "non-integer slice index|must be integer"
+       println(s["hi"]); // ERROR "non-integer string index|must be integer"
+       println(m[0]);    // ERROR "cannot use.*as type string"
 }
 
index f2dd545..3fccd17 100644 (file)
@@ -12,7 +12,7 @@ func g(x int, y float32) (...)        // ERROR "[.][.][.]" "final argument"
 
 func h(x, y ...int)            // ERROR "[.][.][.]"
 
-func i(x int, y ...int, z float)       // ERROR "[.][.][.]"
+func i(x int, y ...int, z float32)     // ERROR "[.][.][.]"
 
 var x ...int;          // ERROR "[.][.][.]|syntax|type"
 
index dbd41cc..acf4f23 100644 (file)
@@ -12,4 +12,4 @@ var c [1.5]int        // ERROR "truncated"
 var d ["abc"]int       // ERROR "invalid array bound|not numeric"
 var e [nil]int // ERROR "invalid array bound|not numeric"
 var f [e]int   // ERROR "invalid array bound|not constant"
-var g [1<<65]int       // ERROR "overflows"
+var g [1<<65]int       // ERROR "array bound is too large|overflows"
index b5dfa8d..ee2ff92 100644 (file)
@@ -11,5 +11,5 @@ package main
 type ByteSize float64
 const (
        _ = iota;   // ignore first value by assigning to blank identifier
-       KB ByteSize = 1<<(10*X) // ERROR "undefined" "as type ByteSize"
+       KB ByteSize = 1<<(10*X) // ERROR "undefined" "is not a constant|as type ByteSize"
 )
index 9009c5e..a7c1d36 100644 (file)
@@ -1,7 +1,4 @@
-// errchk $G -e $D/$F.dir/[ab].go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckdir
 
 // Copyright 2010 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
index 401a860..21efbb5 100644 (file)
@@ -1,11 +1,8 @@
-// $G $D/$F.dir/lib.go && $G $D/$F.dir/main.go && $L main.$A && ./$A.out || echo BUG: fails incorrectly
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
 // Test case for issue 1402.
-ignored
+package ignored
index ee090ae..36b8b56 100644 (file)
@@ -1,11 +1,10 @@
-// $G $D/$F.dir/p.go && $G $D/$F.dir/main.go && $L main.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Test case for issue 1550
-ignored
+// Test case for issue 1550: a type cannot implement an interface
+// from another package with a private method, and type assertions
+// should fail.
+package ignored
index 5f1efbd..ffcb668 100644 (file)
@@ -9,11 +9,7 @@
 package p
 
 type a interface {
-       foo(x int) (x int) // ERROR "redeclared|redefinition"
-}
-
-var b interface {
-       bar(y int) (y int) // ERROR "redeclared|redefinition"
+       foo(x int) (x int) // ERROR "duplicate argument|redefinition"
 }
 
 /*
index 2ac64a8..ceb2009 100644 (file)
@@ -15,7 +15,7 @@ func bla1() bool {
 
 func bla5() bool {
        _ = 1
-       false  // ERROR "false not used|value computed is not used"
+       false  // ERROR "false evaluated but not used|value computed is not used"
        _ = 2
        return false
 }
index bf8edcd..05252cd 100644 (file)
@@ -1,10 +1,10 @@
-// $G $D/$F.dir/p.go && $G $D/$F.dir/main.go && $L main.$A && ./$A.out || echo BUG: should not fail
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Issue 1536: bug when handling imported interfaces with
+// private methods.
+
 package ignored
index 81e9c26..14abe46 100644 (file)
@@ -14,5 +14,5 @@
 package main
 
 func main() {
-       1 + 2 // ERROR "1 \+ 2 not used|value computed is not used"
+       1 + 2 // ERROR "1 \+ 2 evaluated but not used|value computed is not used"
 }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug382.dir/prog.go b/gcc/testsuite/go.test/test/fixedbugs/bug382.dir/prog.go
new file mode 100644 (file)
index 0000000..b74a82d
--- /dev/null
@@ -0,0 +1,13 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file
+
+// Issue 2529
+
+package main
+
+import "./pkg"
+
+var x = pkg.E
+
+var fo = struct{ F pkg.T }{F: x}
index 10c71d4..6039939 100644 (file)
@@ -1,17 +1,9 @@
-// $G $D/$F.dir/pkg.go && $G $D/$F.go || echo "Bug 382"
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// compiledir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file
 
-// Issue 2529
-
-package main
-import "./pkg"
-
-var x = pkg.E
+// Issue 2529.
 
-var fo = struct {F pkg.T}{F: x}
+package ignored
index 5ac4136..4c3cad7 100644 (file)
@@ -1,7 +1,5 @@
-// [ $A == 6 ] || errchk $G -e $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// +build 386 arm
+// errorcheck
 
 // Copyright 2011 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -11,7 +9,7 @@
 
 package main
 func main() {
-       var arr [1000200030]int   // ERROR "type .* too large"
+       var arr [1000200030]int   // GC_ERROR "type .* too large"
        arr_bkup := arr
        _ = arr_bkup
-}
\ No newline at end of file
+}
index 8c7b9d5..b593cd5 100644 (file)
@@ -1,18 +1,22 @@
-// [ $A != 6 ]  || errchk $G -e $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// +build amd64
+// errorcheck
 
 // Copyright 2011 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
 // Issue 2444
+// Issue 4666: issue with arrays of exactly 4GB.
 
 package main
-func main() {  // ERROR "stack frame too large"
+
+func main() { // GC_ERROR "stack frame too large"
        var arr [1000200030]int32
        arr_bkup := arr
        _ = arr_bkup
 }
 
+func F() { // GC_ERROR "stack frame too large"
+       var arr [1 << 30]int32
+       _ = arr[42]
+}
index 8dd0a5f..c7ddc0c 100644 (file)
@@ -7,8 +7,8 @@
 package p
 
 type t struct {
-       x int  // ERROR "duplicate field x|duplicate field name .x."
-       x int
+       x int  // GCCGO_ERROR "duplicate field name .x."
+       x int  // GC_ERROR "duplicate field x"
 }
 
 func f(t *t) int {
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug414.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/bug414.dir/main.go
deleted file mode 100644 (file)
index 5200123..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2012 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-         package main
-       
-         import "./p1"
-       
-         type MyObject struct {
-           p1.Fer
-         }
-       
-         func main() {
-           var b p1.Fer = &p1.Object{}
-           p1.PrintFer(b)
-           var c p1.Fer = &MyObject{b}
-           p1.PrintFer(c)
-         }
index 7768818..2463834 100644 (file)
@@ -2,20 +2,20 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-         package p1
-       
-         import "fmt"
-       
-         type Fer interface {
-           f() string
-         }
-       
-         type Object struct {}
-       
-         func (this *Object) f() string {
-           return "Object.f"
-         }
-       
-         func PrintFer(fer Fer) {
-           fmt.Sprintln(fer.f())
-         }
+package p1
+
+import "fmt"
+
+type Fer interface {
+       f() string
+}
+
+type Object struct{}
+
+func (this *Object) f() string {
+       return "Object.f"
+}
+
+func PrintFer(fer Fer) {
+       fmt.Sprintln(fer.f())
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug414.dir/prog.go b/gcc/testsuite/go.test/test/fixedbugs/bug414.dir/prog.go
new file mode 100644 (file)
index 0000000..f55d946
--- /dev/null
@@ -0,0 +1,18 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./p1"
+
+type MyObject struct {
+       p1.Fer
+}
+
+func main() {
+       var b p1.Fer = &p1.Object{}
+       p1.PrintFer(b)
+       var c p1.Fer = &MyObject{b}
+       p1.PrintFer(c)
+}
index 5612fd5..35e19be 100644 (file)
@@ -1,10 +1,9 @@
-// $G $D/$F.dir/p1.go && $G $D/$F.dir/main.go && $L main.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Issue 1743: test embedding of imported types with private methods.
+
 package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug424.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/bug424.dir/main.go
new file mode 100644 (file)
index 0000000..c2fe146
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Tests that method calls through an interface always
+// call the locally defined method localT.m independent
+// at which embedding level it is and in which order
+// embedding is done.
+
+package main
+
+import "./lib"
+import "reflect"
+import "fmt"
+
+type localI interface {
+       m() string
+}
+
+type localT struct{}
+
+func (t *localT) m() string {
+       return "main.localT.m"
+}
+
+type myT1 struct {
+       localT
+}
+
+type myT2 struct {
+       localT
+       lib.T
+}
+
+type myT3 struct {
+       lib.T
+       localT
+}
+
+func main() {
+       var i localI
+
+       i = new(localT)
+       if i.m() != "main.localT.m" {
+               println("BUG: localT:", i.m(), "called")
+       }
+
+       i = new(myT1)
+       if i.m() != "main.localT.m" {
+               println("BUG: myT1:", i.m(), "called")
+       }
+
+       i = new(myT2)
+       if i.m() != "main.localT.m" {
+               println("BUG: myT2:", i.m(), "called")
+       }
+
+       t3 := new(myT3)
+       if t3.m() != "main.localT.m" {
+               println("BUG: t3:", t3.m(), "called")
+       }
+       
+       i = new(myT3)
+       if i.m() != "main.localT.m" {
+               t := reflect.TypeOf(i)
+               n := t.NumMethod()
+               for j := 0; j < n; j++ {
+                       m := t.Method(j)
+                       fmt.Printf("#%d: %s.%s %s\n", j, m.PkgPath, m.Name, m.Type)
+               }
+               println("BUG: myT3:", i.m(), "called")
+       }
+       
+       var t4 struct {
+               localT
+               lib.T
+       }
+       if t4.m() != "main.localT.m" {
+               println("BUG: t4:", t4.m(), "called")
+       }
+       i = &t4
+       if i.m() != "main.localT.m" {
+               println("BUG: myT4:", i.m(), "called")
+       }
+       
+       var t5 struct {
+               lib.T
+               localT
+       }
+       if t5.m() != "main.localT.m" {
+               println("BUG: t5:", t5.m(), "called")
+       }
+       i = &t5
+       if i.m() != "main.localT.m" {
+               println("BUG: myT5:", i.m(), "called")
+       }
+}
index 4152454..59c2cd3 100644 (file)
@@ -1,7 +1,4 @@
-// $G $D/$F.dir/lib.go && $G $D/$F.go && $L $F.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -12,91 +9,5 @@
 // at which embedding level it is and in which order
 // embedding is done.
 
-package main
-
-import "./lib"
-import "reflect"
-import "fmt"
-
-type localI interface {
-       m() string
-}
-
-type localT struct{}
-
-func (t *localT) m() string {
-       return "main.localT.m"
-}
-
-type myT1 struct {
-       localT
-}
-
-type myT2 struct {
-       localT
-       lib.T
-}
-
-type myT3 struct {
-       lib.T
-       localT
-}
-
-func main() {
-       var i localI
-
-       i = new(localT)
-       if i.m() != "main.localT.m" {
-               println("BUG: localT:", i.m(), "called")
-       }
-
-       i = new(myT1)
-       if i.m() != "main.localT.m" {
-               println("BUG: myT1:", i.m(), "called")
-       }
-
-       i = new(myT2)
-       if i.m() != "main.localT.m" {
-               println("BUG: myT2:", i.m(), "called")
-       }
+package ignored
 
-       t3 := new(myT3)
-       if t3.m() != "main.localT.m" {
-               println("BUG: t3:", t3.m(), "called")
-       }
-       
-       i = new(myT3)
-       if i.m() != "main.localT.m" {
-               t := reflect.TypeOf(i)
-               n := t.NumMethod()
-               for j := 0; j < n; j++ {
-                       m := t.Method(j)
-                       fmt.Printf("#%d: %s.%s %s\n", j, m.PkgPath, m.Name, m.Type)
-               }
-               println("BUG: myT3:", i.m(), "called")
-       }
-       
-       var t4 struct {
-               localT
-               lib.T
-       }
-       if t4.m() != "main.localT.m" {
-               println("BUG: t4:", t4.m(), "called")
-       }
-       i = &t4
-       if i.m() != "main.localT.m" {
-               println("BUG: myT4:", i.m(), "called")
-       }
-       
-       var t5 struct {
-               lib.T
-               localT
-       }
-       if t5.m() != "main.localT.m" {
-               println("BUG: t5:", t5.m(), "called")
-       }
-       i = &t5
-       if i.m() != "main.localT.m" {
-               println("BUG: myT5:", i.m(), "called")
-       }
-}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug437.dir/x.go b/gcc/testsuite/go.test/test/fixedbugs/bug437.dir/x.go
new file mode 100644 (file)
index 0000000..364d017
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test converting a type defined in a different package to an
+// interface defined in a third package, where the interface has a
+// hidden method.  This used to cause a link error with gccgo.
+
+package main
+
+import (
+       "./one"
+       "./two"
+)
+
+func F(i1 one.I1) {
+       switch v := i1.(type) {
+       case two.S2:
+               one.F1(v)
+       }
+}
+
+func main() {
+       F(nil)
+}
index b1e76a6..5c4a2ad 100644 (file)
@@ -1,7 +1,4 @@
-// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go && $G $D/$F.go && $L $F.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -11,20 +8,4 @@
 // interface defined in a third package, where the interface has a
 // hidden method.  This used to cause a link error with gccgo.
 
-package main
-
-import (
-       "./one"
-       "./two"
-)
-
-func F(i1 one.I1) {
-       switch v := i1.(type) {
-       case two.S2:
-               one.F1(v)
-       }
-}
-
-func main() {
-       F(nil)
-}
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug453.go b/gcc/testsuite/go.test/test/fixedbugs/bug453.go
new file mode 100644 (file)
index 0000000..136abef
--- /dev/null
@@ -0,0 +1,39 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4138: bug in floating-point registers numbering.
+// Makes 6g unable to use more than 11 registers.
+
+package main
+
+func formula() float32 {
+       mA := [1]float32{1.0}
+       det1 := mA[0]
+       det2 := mA[0]
+       det3 := mA[0]
+       det4 := mA[0]
+       det5 := mA[0]
+       det6 := mA[0]
+       det7 := mA[0]
+       det8 := mA[0]
+       det9 := mA[0]
+       det10 := mA[0]
+       det11 := mA[0]
+       det12 := mA[0]
+
+       return det1 + det2*det3 +
+               det4*det5 + det6*det7 +
+               det8*det9 + det10*det11 +
+               det12
+}
+
+func main() {
+       x := formula()
+       if x != 7.0 {
+               println(x, 7.0)
+               panic("x != 7.0")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug454.go b/gcc/testsuite/go.test/test/fixedbugs/bug454.go
new file mode 100644 (file)
index 0000000..a10abba
--- /dev/null
@@ -0,0 +1,21 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4173
+
+package main
+
+func main() {
+       var arr *[10]int
+       s := 0
+       for i, _ := range arr {
+               // used to panic trying to access arr[i]
+               s += i
+       }
+       if s != 45 {
+               println("BUG")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug455.go b/gcc/testsuite/go.test/test/fixedbugs/bug455.go
new file mode 100644 (file)
index 0000000..8e3c770
--- /dev/null
@@ -0,0 +1,54 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4156: out of fixed registers when chaining method calls.
+// Used to happen with 6g.
+
+package main
+
+type test_i interface {
+       Test() test_i
+       Result() bool
+}
+
+type test_t struct {
+}
+
+func newTest() *test_t {
+       return &test_t{}
+}
+
+type testFn func(string) testFn
+
+func main() {
+       test := newTest()
+
+       switch {
+       case test.
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Test().
+               Result():
+               // case worked
+       default:
+               panic("Result returned false unexpectedly")
+       }
+}
+
+func (t *test_t) Test() test_i {
+       return t
+}
+
+func (t *test_t) Result() bool {
+       return true
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug456.go b/gcc/testsuite/go.test/test/fixedbugs/bug456.go
new file mode 100644 (file)
index 0000000..064e1aa
--- /dev/null
@@ -0,0 +1,26 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3907: out of fixed registers in nested byte multiply.
+// Used to happen with both 6g and 8g.
+
+package main
+
+func F(a, b, c, d uint8) uint8 {
+       return a * (b * (c * (d *
+               (a * (b * (c * (d *
+                       (a * (b * (c * (d *
+                               a * (b * (c * d)))))))))))))
+}
+
+func main() {
+       var a, b, c, d uint8 = 1, 1, 1, 1
+       x := F(a, b, c, d)
+       if x != 1 {
+               println(x)
+               panic("x != 1")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug457.go b/gcc/testsuite/go.test/test/fixedbugs/bug457.go
new file mode 100644 (file)
index 0000000..ee70489
--- /dev/null
@@ -0,0 +1,15 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4197: growing a slice of zero-width elements
+// panics on a division by zero.
+
+package main
+
+func main() {
+       var x []struct{}
+       x = append(x, struct{}{})
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug458.go b/gcc/testsuite/go.test/test/fixedbugs/bug458.go
new file mode 100644 (file)
index 0000000..ddc97bd
--- /dev/null
@@ -0,0 +1,22 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4200: 6g crashes when a type is larger than 4GB.
+
+package main
+
+import "unsafe"
+
+// N=16 on 32-bit arches, 256 on 64-bit arches.
+// On 32-bit arches we don't want to test types
+// that are over 4GB large.
+const N = 1 << unsafe.Sizeof(uintptr(0))
+
+type T [N][10][10][10][10][3]byte
+
+func F(t *T) byte {
+       return t[0][0][0][0][0][0]
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug459.go b/gcc/testsuite/go.test/test/fixedbugs/bug459.go
new file mode 100644 (file)
index 0000000..014f2ef
--- /dev/null
@@ -0,0 +1,35 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3890: missing detection of init loop involving
+// method calls in function bodies.
+
+package flag
+
+var commandLine = NewFlagSet() // ERROR "loop|depends upon itself"
+
+type FlagSet struct {
+}
+
+func (f *FlagSet) failf(format string, a ...interface{}) {
+       f.usage()
+}
+
+func (f *FlagSet) usage() {
+       if f == commandLine {
+               panic(3)
+       }
+}
+
+func NewFlagSet() *FlagSet {
+       f := &FlagSet{}
+       f.setErrorHandling(true)
+       return f
+}
+
+func (f *FlagSet) setErrorHandling(b bool) {
+       f.failf("DIE")
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug460.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/bug460.dir/a.go
new file mode 100644 (file)
index 0000000..02a287b
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+type Foo struct {
+       int
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug460.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/bug460.dir/b.go
new file mode 100644 (file)
index 0000000..1868afe
--- /dev/null
@@ -0,0 +1,14 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package b
+
+import "./a"
+
+var x a.Foo
+
+func main() {
+       x.int = 20 // ERROR "unexported field"
+}
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug460.go b/gcc/testsuite/go.test/test/fixedbugs/bug460.go
new file mode 100644 (file)
index 0000000..79234a3
--- /dev/null
@@ -0,0 +1,10 @@
+// errorcheckdir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// part one of issue 4124. Make sure that the compiler rejects access attempts.
+
+package ignored
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug461.go b/gcc/testsuite/go.test/test/fixedbugs/bug461.go
new file mode 100644 (file)
index 0000000..f0f7b0e
--- /dev/null
@@ -0,0 +1,23 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// part two of issue 4124. Make sure reflect doesn't mark the field as exported.
+
+package main
+
+import "reflect"
+
+var T struct {
+       int
+}
+
+func main() {
+       v := reflect.ValueOf(&T)
+       v = v.Elem().Field(0)
+       if v.CanSet() {
+               panic("int should be unexported")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug462.go b/gcc/testsuite/go.test/test/fixedbugs/bug462.go
new file mode 100644 (file)
index 0000000..1a23ad0
--- /dev/null
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "os"
+
+type T struct {
+       File int
+}
+
+func main() {
+       _ = T {
+               os.File: 1, // ERROR "unknown T? ?field"
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug463.go b/gcc/testsuite/go.test/test/fixedbugs/bug463.go
new file mode 100644 (file)
index 0000000..3e7a184
--- /dev/null
@@ -0,0 +1,22 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3757: unhelpful typechecking loop message
+// for constants that refer to themselves.
+
+package main
+
+const a = a // ERROR "refers to itself|definition loop"
+
+const (
+       X    = A
+       A    = B // ERROR "refers to itself|definition loop"
+       B    = D
+       C, D = 1, A
+)
+
+func main() {
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug464.go b/gcc/testsuite/go.test/test/fixedbugs/bug464.go
new file mode 100644 (file)
index 0000000..5821939
--- /dev/null
@@ -0,0 +1,12 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3937: unhelpful typechecking loop message
+// for identifiers wrongly used as types.
+
+package main
+
+func foo(x foo) {} // ERROR "expected type|not a type"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug465.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/bug465.dir/a.go
new file mode 100644 (file)
index 0000000..a9a8614
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+type T struct{ A, B int }
+
+type A []int
+
+type M map[int]int
+
+func F1() int {
+       if (T{1, 2}) == (T{3, 4}) {
+               return 1
+       }
+       return 0
+}
+
+func F2() int {
+       if (M{1: 2}) == nil {
+               return 1
+       }
+       return 0
+}
+
+func F3() int {
+       if nil == (A{}) {
+               return 1
+       }
+       return 0
+}
+
+func F4() int {
+       if a := (A{}); a == nil {
+               return 1
+       }
+       return 0
+}
+
+func F5() int {
+       for k, v := range (M{1: 2}) {
+               return v - k
+       }
+       return 0
+}
+
+func F6() int {
+       switch a := (T{1, 1}); a == (T{1, 2}) {
+       default:
+               return 1
+       }
+       return 0
+}
+
+func F7() int {
+       for m := (M{}); len(m) < (T{1, 2}).A; m[1] = (A{1})[0] {
+               return 1
+       }
+       return 0
+}
+
+func F8() int {
+       if a := (&T{1, 1}); a != nil {
+               return 1
+       }
+       return 0
+}
+
+func F9() int {
+       var a *T
+       if a = (&T{1, 1}); a != nil {
+               return 1
+       }
+       return 0
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug465.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/bug465.dir/b.go
new file mode 100644 (file)
index 0000000..c84c683
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func main() {
+       for _, f := range []func() int{
+               a.F1, a.F2, a.F3, a.F4,
+               a.F5, a.F6, a.F7, a.F8, a.F9} {
+               if f() > 1 {
+                       panic("f() > 1")
+               }
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug465.go b/gcc/testsuite/go.test/test/fixedbugs/bug465.go
new file mode 100644 (file)
index 0000000..a6ef587
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4230: inlining bug for composite literal in
+// if, for, switch statements.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug466.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/bug466.dir/a.go
new file mode 100644 (file)
index 0000000..b9de63e
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+const N = 2+3i
+
+func Func() []complex128 {
+       return []complex128{1, complex(2, 3), complex(4, 5)}
+}
+
+func Mul(z complex128) complex128 {
+       return z * (3 + 4i)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug466.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/bug466.dir/b.go
new file mode 100644 (file)
index 0000000..82d66ea
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func main() {
+       s := a.Func()
+       if s[0] != 1 {
+               println(s[0])
+               panic("s[0] != 1")
+       }
+       if s[1] != 2+3i {
+               println(s[1])
+               panic("s[1] != 2+3i")
+       }
+       if s[2] != 4+5i {
+               println(s[2])
+               panic("s[2] != 4+5i")
+       }
+
+       x := 1 + 2i
+       y := a.Mul(x)
+       if y != (1+2i)*(3+4i) {
+               println(y)
+               panic("y != (1+2i)*(3+4i)")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug466.go b/gcc/testsuite/go.test/test/fixedbugs/bug466.go
new file mode 100644 (file)
index 0000000..6b65b33
--- /dev/null
@@ -0,0 +1,11 @@
+// rundir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4159: exported inlinable functions squash
+// complex literals "a+bi" to "a+b".
+
+package ignored
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p1.go
new file mode 100644 (file)
index 0000000..538b554
--- /dev/null
@@ -0,0 +1,5 @@
+package p1
+
+type SockaddrUnix int
+
+func (s SockaddrUnix) Error() string { return "blah" }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p2.go
new file mode 100644 (file)
index 0000000..d80d3a3
--- /dev/null
@@ -0,0 +1,5 @@
+package p2
+
+import "./p1"
+
+func SockUnix() error { var s *p1.SockaddrUnix; return s }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p3.go b/gcc/testsuite/go.test/test/fixedbugs/bug467.dir/p3.go
new file mode 100644 (file)
index 0000000..c795646
--- /dev/null
@@ -0,0 +1,7 @@
+package main
+
+import "./p2"
+
+func main() {
+       _ = p2.SockUnix()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug467.go b/gcc/testsuite/go.test/test/fixedbugs/bug467.go
new file mode 100644 (file)
index 0000000..d73adba
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Exported data for inlining could forget types of
+// local variables declared in inlinable bodies.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p1.go
new file mode 100644 (file)
index 0000000..ca17577
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p1
+
+type S struct { X, Y int }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/bug468.dir/p2.go
new file mode 100644 (file)
index 0000000..1793c0e
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "reflect"
+
+       "./p1"
+)
+
+func main() {
+       var v1 = p1.S{1, 2}
+       var v2 = struct { X, Y int }{1, 2}
+       v1 = v2
+       t1 := reflect.TypeOf(v1)
+       t2 := reflect.TypeOf(v2)
+       if !t1.AssignableTo(t2) {
+               panic(0)
+       }
+       if !t2.AssignableTo(t1) {
+               panic(1)
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug468.go b/gcc/testsuite/go.test/test/fixedbugs/bug468.go
new file mode 100644 (file)
index 0000000..12e4997
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// The reflect package was not correctly checking field names
+// when checking for struct assignability.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug470.go b/gcc/testsuite/go.test/test/fixedbugs/bug470.go
new file mode 100644 (file)
index 0000000..0a35918
--- /dev/null
@@ -0,0 +1,26 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Converting constants between types must introduce rounding.
+
+package main
+
+import "fmt"
+
+const (
+    F32 = 0.00999999977648258209228515625
+    F64 = 0.01000000000000000020816681711721685132943093776702880859375
+)
+
+var F = float64(float32(0.01))
+
+func main() {
+       // 0.01 rounded to float32 then to float64 is F32.
+       // 0.01 represented directly in float64 is F64.
+       if F != F32 {
+               panic(fmt.Sprintf("F=%.1000g, want %.1000g", F, F32))
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug471.go b/gcc/testsuite/go.test/test/fixedbugs/bug471.go
new file mode 100644 (file)
index 0000000..e454259
--- /dev/null
@@ -0,0 +1,18 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Caused an internal compiler error in gccgo.
+
+package p
+
+type C chan struct{}
+
+func (c C) F() {
+       select {
+       case c <- struct{}{}:
+       default:
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p1.go
new file mode 100644 (file)
index 0000000..9d47fd8
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p1
+
+import "runtime"
+
+func E() func() int { return runtime.NumCPU }
+
+func F() func() { return runtime.Gosched }
+
+func G() func() string { return runtime.GOROOT }
+
+func H() func() { return runtime.GC }
+
+func I() func() string { return runtime.Version }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/p2.go
new file mode 100644 (file)
index 0000000..34a3f04
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p2
+
+import "runtime"
+
+func E() func() int { return runtime.NumCPU }
+
+func F() func() { return runtime.GC }
+
+func G() func() string { return runtime.GOROOT }
+
+func H() func() { return runtime.Gosched }
+
+func I() func() string { return runtime.Version }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/z.go b/gcc/testsuite/go.test/test/fixedbugs/bug472.dir/z.go
new file mode 100644 (file)
index 0000000..6c29dd0
--- /dev/null
@@ -0,0 +1,13 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       _ "./p1"
+       _ "./p2"
+)
+
+func main() {
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug472.go b/gcc/testsuite/go.test/test/fixedbugs/bug472.go
new file mode 100644 (file)
index 0000000..c79c64c
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Linker would incorrectly parse export data and think
+// definitions are inconsistent.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug473.go b/gcc/testsuite/go.test/test/fixedbugs/bug473.go
new file mode 100644 (file)
index 0000000..49ce7d7
--- /dev/null
@@ -0,0 +1,69 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Used to be miscompiled by gccgo, due to a bug in handling
+// initialization ordering.
+
+package main
+
+func F(a ...interface{}) interface{} {
+       s := 0
+       for _, v := range a {
+               s += v.(int)
+       }
+       return s
+}
+
+var V1 = F(V10, V4, V3, V11)
+
+var V2 = F(V1)
+
+var V3 = F(1)
+
+var V4 = F(2)
+
+var V5 = F(3)
+
+var V6 = F(4)
+
+var V7 = F(5)
+
+var V8 = F(V14, V7, V3, V6, V5)
+
+var V9 = F(V4, F(V12))
+
+var V10 = F(V4, V9)
+
+var V11 = F(6)
+
+var V12 = F(V5, V3, V8)
+
+var V13 = F(7)
+
+var V14 = F(8)
+
+func expect(name string, a interface{}, b int) {
+       if a.(int) != b {
+               panic(name)
+       }
+}
+
+func main() {
+       expect("V1", V1, 38)
+       expect("V2", V2, 38)
+       expect("V3", V3, 1)
+       expect("V4", V4, 2)
+       expect("V5", V5, 3)
+       expect("V6", V6, 4)
+       expect("V7", V7, 5)
+       expect("V8", V8, 21)
+       expect("V9", V9, 27)
+       expect("V10", V10, 29)
+       expect("V11", V11, 6)
+       expect("V12", V12, 25)
+       expect("V13", V13, 7)
+       expect("V14", V14, 8)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug474.go b/gcc/testsuite/go.test/test/fixedbugs/bug474.go
new file mode 100644 (file)
index 0000000..b826487
--- /dev/null
@@ -0,0 +1,29 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Bug in method values: escape analysis was off.
+
+package main
+
+import "sync"
+
+var called = false
+
+type T struct {
+       once sync.Once
+}
+
+func (t *T) M() {
+       called = true
+}
+
+func main() {
+       var t T
+       t.once.Do(t.M)
+       if !called {
+               panic("not called")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue2615.go b/gcc/testsuite/go.test/test/fixedbugs/issue2615.go
new file mode 100644 (file)
index 0000000..686e1e1
--- /dev/null
@@ -0,0 +1,547 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 2615: a long chain of else if's causes an overflow
+// in the parser stack.
+
+package main
+
+// test returns the index of the lowest set bit in a 256-bit vector.
+func test(x [4]uint64) int {
+       if x[0]&(1<<0) != 0 {
+               return 0
+       } else if x[0]&(1<<1) != 0 {
+               return 1
+       } else if x[0]&(1<<2) != 0 {
+               return 2
+       } else if x[0]&(1<<3) != 0 {
+               return 3
+       } else if x[0]&(1<<4) != 0 {
+               return 4
+       } else if x[0]&(1<<5) != 0 {
+               return 5
+       } else if x[0]&(1<<6) != 0 {
+               return 6
+       } else if x[0]&(1<<7) != 0 {
+               return 7
+       } else if x[0]&(1<<8) != 0 {
+               return 8
+       } else if x[0]&(1<<9) != 0 {
+               return 9
+       } else if x[0]&(1<<10) != 0 {
+               return 10
+       } else if x[0]&(1<<11) != 0 {
+               return 11
+       } else if x[0]&(1<<12) != 0 {
+               return 12
+       } else if x[0]&(1<<13) != 0 {
+               return 13
+       } else if x[0]&(1<<14) != 0 {
+               return 14
+       } else if x[0]&(1<<15) != 0 {
+               return 15
+       } else if x[0]&(1<<16) != 0 {
+               return 16
+       } else if x[0]&(1<<17) != 0 {
+               return 17
+       } else if x[0]&(1<<18) != 0 {
+               return 18
+       } else if x[0]&(1<<19) != 0 {
+               return 19
+       } else if x[0]&(1<<20) != 0 {
+               return 20
+       } else if x[0]&(1<<21) != 0 {
+               return 21
+       } else if x[0]&(1<<22) != 0 {
+               return 22
+       } else if x[0]&(1<<23) != 0 {
+               return 23
+       } else if x[0]&(1<<24) != 0 {
+               return 24
+       } else if x[0]&(1<<25) != 0 {
+               return 25
+       } else if x[0]&(1<<26) != 0 {
+               return 26
+       } else if x[0]&(1<<27) != 0 {
+               return 27
+       } else if x[0]&(1<<28) != 0 {
+               return 28
+       } else if x[0]&(1<<29) != 0 {
+               return 29
+       } else if x[0]&(1<<30) != 0 {
+               return 30
+       } else if x[0]&(1<<31) != 0 {
+               return 31
+       } else if x[0]&(1<<32) != 0 {
+               return 32
+       } else if x[0]&(1<<33) != 0 {
+               return 33
+       } else if x[0]&(1<<34) != 0 {
+               return 34
+       } else if x[0]&(1<<35) != 0 {
+               return 35
+       } else if x[0]&(1<<36) != 0 {
+               return 36
+       } else if x[0]&(1<<37) != 0 {
+               return 37
+       } else if x[0]&(1<<38) != 0 {
+               return 38
+       } else if x[0]&(1<<39) != 0 {
+               return 39
+       } else if x[0]&(1<<40) != 0 {
+               return 40
+       } else if x[0]&(1<<41) != 0 {
+               return 41
+       } else if x[0]&(1<<42) != 0 {
+               return 42
+       } else if x[0]&(1<<43) != 0 {
+               return 43
+       } else if x[0]&(1<<44) != 0 {
+               return 44
+       } else if x[0]&(1<<45) != 0 {
+               return 45
+       } else if x[0]&(1<<46) != 0 {
+               return 46
+       } else if x[0]&(1<<47) != 0 {
+               return 47
+       } else if x[0]&(1<<48) != 0 {
+               return 48
+       } else if x[0]&(1<<49) != 0 {
+               return 49
+       } else if x[0]&(1<<50) != 0 {
+               return 50
+       } else if x[0]&(1<<51) != 0 {
+               return 51
+       } else if x[0]&(1<<52) != 0 {
+               return 52
+       } else if x[0]&(1<<53) != 0 {
+               return 53
+       } else if x[0]&(1<<54) != 0 {
+               return 54
+       } else if x[0]&(1<<55) != 0 {
+               return 55
+       } else if x[0]&(1<<56) != 0 {
+               return 56
+       } else if x[0]&(1<<57) != 0 {
+               return 57
+       } else if x[0]&(1<<58) != 0 {
+               return 58
+       } else if x[0]&(1<<59) != 0 {
+               return 59
+       } else if x[0]&(1<<60) != 0 {
+               return 60
+       } else if x[0]&(1<<61) != 0 {
+               return 61
+       } else if x[0]&(1<<62) != 0 {
+               return 62
+       } else if x[0]&(1<<63) != 0 {
+               return 63
+       } else if x[1]&(1<<0) != 0 {
+               return 64
+       } else if x[1]&(1<<1) != 0 {
+               return 65
+       } else if x[1]&(1<<2) != 0 {
+               return 66
+       } else if x[1]&(1<<3) != 0 {
+               return 67
+       } else if x[1]&(1<<4) != 0 {
+               return 68
+       } else if x[1]&(1<<5) != 0 {
+               return 69
+       } else if x[1]&(1<<6) != 0 {
+               return 70
+       } else if x[1]&(1<<7) != 0 {
+               return 71
+       } else if x[1]&(1<<8) != 0 {
+               return 72
+       } else if x[1]&(1<<9) != 0 {
+               return 73
+       } else if x[1]&(1<<10) != 0 {
+               return 74
+       } else if x[1]&(1<<11) != 0 {
+               return 75
+       } else if x[1]&(1<<12) != 0 {
+               return 76
+       } else if x[1]&(1<<13) != 0 {
+               return 77
+       } else if x[1]&(1<<14) != 0 {
+               return 78
+       } else if x[1]&(1<<15) != 0 {
+               return 79
+       } else if x[1]&(1<<16) != 0 {
+               return 80
+       } else if x[1]&(1<<17) != 0 {
+               return 81
+       } else if x[1]&(1<<18) != 0 {
+               return 82
+       } else if x[1]&(1<<19) != 0 {
+               return 83
+       } else if x[1]&(1<<20) != 0 {
+               return 84
+       } else if x[1]&(1<<21) != 0 {
+               return 85
+       } else if x[1]&(1<<22) != 0 {
+               return 86
+       } else if x[1]&(1<<23) != 0 {
+               return 87
+       } else if x[1]&(1<<24) != 0 {
+               return 88
+       } else if x[1]&(1<<25) != 0 {
+               return 89
+       } else if x[1]&(1<<26) != 0 {
+               return 90
+       } else if x[1]&(1<<27) != 0 {
+               return 91
+       } else if x[1]&(1<<28) != 0 {
+               return 92
+       } else if x[1]&(1<<29) != 0 {
+               return 93
+       } else if x[1]&(1<<30) != 0 {
+               return 94
+       } else if x[1]&(1<<31) != 0 {
+               return 95
+       } else if x[1]&(1<<32) != 0 {
+               return 96
+       } else if x[1]&(1<<33) != 0 {
+               return 97
+       } else if x[1]&(1<<34) != 0 {
+               return 98
+       } else if x[1]&(1<<35) != 0 {
+               return 99
+       } else if x[1]&(1<<36) != 0 {
+               return 100
+       } else if x[1]&(1<<37) != 0 {
+               return 101
+       } else if x[1]&(1<<38) != 0 {
+               return 102
+       } else if x[1]&(1<<39) != 0 {
+               return 103
+       } else if x[1]&(1<<40) != 0 {
+               return 104
+       } else if x[1]&(1<<41) != 0 {
+               return 105
+       } else if x[1]&(1<<42) != 0 {
+               return 106
+       } else if x[1]&(1<<43) != 0 {
+               return 107
+       } else if x[1]&(1<<44) != 0 {
+               return 108
+       } else if x[1]&(1<<45) != 0 {
+               return 109
+       } else if x[1]&(1<<46) != 0 {
+               return 110
+       } else if x[1]&(1<<47) != 0 {
+               return 111
+       } else if x[1]&(1<<48) != 0 {
+               return 112
+       } else if x[1]&(1<<49) != 0 {
+               return 113
+       } else if x[1]&(1<<50) != 0 {
+               return 114
+       } else if x[1]&(1<<51) != 0 {
+               return 115
+       } else if x[1]&(1<<52) != 0 {
+               return 116
+       } else if x[1]&(1<<53) != 0 {
+               return 117
+       } else if x[1]&(1<<54) != 0 {
+               return 118
+       } else if x[1]&(1<<55) != 0 {
+               return 119
+       } else if x[1]&(1<<56) != 0 {
+               return 120
+       } else if x[1]&(1<<57) != 0 {
+               return 121
+       } else if x[1]&(1<<58) != 0 {
+               return 122
+       } else if x[1]&(1<<59) != 0 {
+               return 123
+       } else if x[1]&(1<<60) != 0 {
+               return 124
+       } else if x[1]&(1<<61) != 0 {
+               return 125
+       } else if x[1]&(1<<62) != 0 {
+               return 126
+       } else if x[1]&(1<<63) != 0 {
+               return 127
+       } else if x[2]&(1<<0) != 0 {
+               return 128
+       } else if x[2]&(1<<1) != 0 {
+               return 129
+       } else if x[2]&(1<<2) != 0 {
+               return 130
+       } else if x[2]&(1<<3) != 0 {
+               return 131
+       } else if x[2]&(1<<4) != 0 {
+               return 132
+       } else if x[2]&(1<<5) != 0 {
+               return 133
+       } else if x[2]&(1<<6) != 0 {
+               return 134
+       } else if x[2]&(1<<7) != 0 {
+               return 135
+       } else if x[2]&(1<<8) != 0 {
+               return 136
+       } else if x[2]&(1<<9) != 0 {
+               return 137
+       } else if x[2]&(1<<10) != 0 {
+               return 138
+       } else if x[2]&(1<<11) != 0 {
+               return 139
+       } else if x[2]&(1<<12) != 0 {
+               return 140
+       } else if x[2]&(1<<13) != 0 {
+               return 141
+       } else if x[2]&(1<<14) != 0 {
+               return 142
+       } else if x[2]&(1<<15) != 0 {
+               return 143
+       } else if x[2]&(1<<16) != 0 {
+               return 144
+       } else if x[2]&(1<<17) != 0 {
+               return 145
+       } else if x[2]&(1<<18) != 0 {
+               return 146
+       } else if x[2]&(1<<19) != 0 {
+               return 147
+       } else if x[2]&(1<<20) != 0 {
+               return 148
+       } else if x[2]&(1<<21) != 0 {
+               return 149
+       } else if x[2]&(1<<22) != 0 {
+               return 150
+       } else if x[2]&(1<<23) != 0 {
+               return 151
+       } else if x[2]&(1<<24) != 0 {
+               return 152
+       } else if x[2]&(1<<25) != 0 {
+               return 153
+       } else if x[2]&(1<<26) != 0 {
+               return 154
+       } else if x[2]&(1<<27) != 0 {
+               return 155
+       } else if x[2]&(1<<28) != 0 {
+               return 156
+       } else if x[2]&(1<<29) != 0 {
+               return 157
+       } else if x[2]&(1<<30) != 0 {
+               return 158
+       } else if x[2]&(1<<31) != 0 {
+               return 159
+       } else if x[2]&(1<<32) != 0 {
+               return 160
+       } else if x[2]&(1<<33) != 0 {
+               return 161
+       } else if x[2]&(1<<34) != 0 {
+               return 162
+       } else if x[2]&(1<<35) != 0 {
+               return 163
+       } else if x[2]&(1<<36) != 0 {
+               return 164
+       } else if x[2]&(1<<37) != 0 {
+               return 165
+       } else if x[2]&(1<<38) != 0 {
+               return 166
+       } else if x[2]&(1<<39) != 0 {
+               return 167
+       } else if x[2]&(1<<40) != 0 {
+               return 168
+       } else if x[2]&(1<<41) != 0 {
+               return 169
+       } else if x[2]&(1<<42) != 0 {
+               return 170
+       } else if x[2]&(1<<43) != 0 {
+               return 171
+       } else if x[2]&(1<<44) != 0 {
+               return 172
+       } else if x[2]&(1<<45) != 0 {
+               return 173
+       } else if x[2]&(1<<46) != 0 {
+               return 174
+       } else if x[2]&(1<<47) != 0 {
+               return 175
+       } else if x[2]&(1<<48) != 0 {
+               return 176
+       } else if x[2]&(1<<49) != 0 {
+               return 177
+       } else if x[2]&(1<<50) != 0 {
+               return 178
+       } else if x[2]&(1<<51) != 0 {
+               return 179
+       } else if x[2]&(1<<52) != 0 {
+               return 180
+       } else if x[2]&(1<<53) != 0 {
+               return 181
+       } else if x[2]&(1<<54) != 0 {
+               return 182
+       } else if x[2]&(1<<55) != 0 {
+               return 183
+       } else if x[2]&(1<<56) != 0 {
+               return 184
+       } else if x[2]&(1<<57) != 0 {
+               return 185
+       } else if x[2]&(1<<58) != 0 {
+               return 186
+       } else if x[2]&(1<<59) != 0 {
+               return 187
+       } else if x[2]&(1<<60) != 0 {
+               return 188
+       } else if x[2]&(1<<61) != 0 {
+               return 189
+       } else if x[2]&(1<<62) != 0 {
+               return 190
+       } else if x[2]&(1<<63) != 0 {
+               return 191
+       } else if x[3]&(1<<0) != 0 {
+               return 192
+       } else if x[3]&(1<<1) != 0 {
+               return 193
+       } else if x[3]&(1<<2) != 0 {
+               return 194
+       } else if x[3]&(1<<3) != 0 {
+               return 195
+       } else if x[3]&(1<<4) != 0 {
+               return 196
+       } else if x[3]&(1<<5) != 0 {
+               return 197
+       } else if x[3]&(1<<6) != 0 {
+               return 198
+       } else if x[3]&(1<<7) != 0 {
+               return 199
+       } else if x[3]&(1<<8) != 0 {
+               return 200
+       } else if x[3]&(1<<9) != 0 {
+               return 201
+       } else if x[3]&(1<<10) != 0 {
+               return 202
+       } else if x[3]&(1<<11) != 0 {
+               return 203
+       } else if x[3]&(1<<12) != 0 {
+               return 204
+       } else if x[3]&(1<<13) != 0 {
+               return 205
+       } else if x[3]&(1<<14) != 0 {
+               return 206
+       } else if x[3]&(1<<15) != 0 {
+               return 207
+       } else if x[3]&(1<<16) != 0 {
+               return 208
+       } else if x[3]&(1<<17) != 0 {
+               return 209
+       } else if x[3]&(1<<18) != 0 {
+               return 210
+       } else if x[3]&(1<<19) != 0 {
+               return 211
+       } else if x[3]&(1<<20) != 0 {
+               return 212
+       } else if x[3]&(1<<21) != 0 {
+               return 213
+       } else if x[3]&(1<<22) != 0 {
+               return 214
+       } else if x[3]&(1<<23) != 0 {
+               return 215
+       } else if x[3]&(1<<24) != 0 {
+               return 216
+       } else if x[3]&(1<<25) != 0 {
+               return 217
+       } else if x[3]&(1<<26) != 0 {
+               return 218
+       } else if x[3]&(1<<27) != 0 {
+               return 219
+       } else if x[3]&(1<<28) != 0 {
+               return 220
+       } else if x[3]&(1<<29) != 0 {
+               return 221
+       } else if x[3]&(1<<30) != 0 {
+               return 222
+       } else if x[3]&(1<<31) != 0 {
+               return 223
+       } else if x[3]&(1<<32) != 0 {
+               return 224
+       } else if x[3]&(1<<33) != 0 {
+               return 225
+       } else if x[3]&(1<<34) != 0 {
+               return 226
+       } else if x[3]&(1<<35) != 0 {
+               return 227
+       } else if x[3]&(1<<36) != 0 {
+               return 228
+       } else if x[3]&(1<<37) != 0 {
+               return 229
+       } else if x[3]&(1<<38) != 0 {
+               return 230
+       } else if x[3]&(1<<39) != 0 {
+               return 231
+       } else if x[3]&(1<<40) != 0 {
+               return 232
+       } else if x[3]&(1<<41) != 0 {
+               return 233
+       } else if x[3]&(1<<42) != 0 {
+               return 234
+       } else if x[3]&(1<<43) != 0 {
+               return 235
+       } else if x[3]&(1<<44) != 0 {
+               return 236
+       } else if x[3]&(1<<45) != 0 {
+               return 237
+       } else if x[3]&(1<<46) != 0 {
+               return 238
+       } else if x[3]&(1<<47) != 0 {
+               return 239
+       } else if x[3]&(1<<48) != 0 {
+               return 240
+       } else if x[3]&(1<<49) != 0 {
+               return 241
+       } else if x[3]&(1<<50) != 0 {
+               return 242
+       } else if x[3]&(1<<51) != 0 {
+               return 243
+       } else if x[3]&(1<<52) != 0 {
+               return 244
+       } else if x[3]&(1<<53) != 0 {
+               return 245
+       } else if x[3]&(1<<54) != 0 {
+               return 246
+       } else if x[3]&(1<<55) != 0 {
+               return 247
+       } else if x[3]&(1<<56) != 0 {
+               return 248
+       } else if x[3]&(1<<57) != 0 {
+               return 249
+       } else if x[3]&(1<<58) != 0 {
+               return 250
+       } else if x[3]&(1<<59) != 0 {
+               return 251
+       } else if x[3]&(1<<60) != 0 {
+               return 252
+       } else if x[3]&(1<<61) != 0 {
+               return 253
+       } else if x[3]&(1<<62) != 0 {
+               return 254
+       } else if x[3]&(1<<63) != 0 {
+               return 255
+       }
+       return -1
+}
+
+func main() {
+       const ones = ^uint64(0)
+       for i := 0; i < 256; i++ {
+               bits := [4]uint64{ones, ones, ones, ones}
+
+               // clear bottom i bits
+               bits[i/64] ^= 1<<(uint(i)&63) - 1
+               for j := i/64 - 1; j >= 0; j-- {
+                       bits[j] = 0
+               }
+
+               k := test(bits)
+               if k != i {
+                       print("test(bits)=", k, " want ", i, "\n")
+                       panic("failed")
+               }
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue3552.go b/gcc/testsuite/go.test/test/fixedbugs/issue3552.go
new file mode 100644 (file)
index 0000000..a198dbe
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3552: cross-package inlining misbehaves when
+// referencing embedded builtins.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue3705.go b/gcc/testsuite/go.test/test/fixedbugs/issue3705.go
new file mode 100644 (file)
index 0000000..64ef38b
--- /dev/null
@@ -0,0 +1,9 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+func init() // ERROR "missing function body|cannot declare init"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue3783.go b/gcc/testsuite/go.test/test/fixedbugs/issue3783.go
new file mode 100644 (file)
index 0000000..d7a4a2e
--- /dev/null
@@ -0,0 +1,12 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package foo
+
+var i int
+
+func (*i) bar() // ERROR "not a type|expected type"
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue3924.go b/gcc/testsuite/go.test/test/fixedbugs/issue3924.go
new file mode 100644 (file)
index 0000000..d4739b2
--- /dev/null
@@ -0,0 +1,13 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package foo
+
+type mybool bool
+
+var x, y = 1, 2
+var _ mybool = x < y && x < y // ERROR "cannot use"
+var _ mybool = x < y || x < y // ERROR "cannot use"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue3925.go b/gcc/testsuite/go.test/test/fixedbugs/issue3925.go
new file mode 100644 (file)
index 0000000..a62d439
--- /dev/null
@@ -0,0 +1,23 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 3925: wrong line number for error message "missing key in map literal"
+
+// also a test for correct line number in other malformed composite literals.
+
+package foo
+
+var _ = map[string]string{
+       "1": "2",
+       "3", "4", // ERROR "missing key|must have keys"
+}
+
+var _ = []string{
+       "foo",
+       "bar",
+       20, // ERROR "cannot use|incompatible type"
+}
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4066.go b/gcc/testsuite/go.test/test/fixedbugs/issue4066.go
new file mode 100644 (file)
index 0000000..19cfe66
--- /dev/null
@@ -0,0 +1,37 @@
+// run
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 4066: return values not being spilled eagerly enough
+
+package main
+
+func main() {
+       n := foo()
+       if n != 2 {
+               println(n)
+               panic("wrong return value")
+       }
+}
+
+type terr struct{}
+
+func foo() (val int) {
+       val = 0
+       defer func() {
+               if x := recover(); x != nil {
+                       _ = x.(terr)
+               }
+       }()
+       for {
+               val = 2
+               foo1()
+       }
+       panic("unreachable")
+}
+
+func foo1() {
+       panic(terr{})
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4085a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4085a.go
new file mode 100644 (file)
index 0000000..1d8e57c
--- /dev/null
@@ -0,0 +1,18 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+type T []int
+
+func main() {
+       _ = make(T, -1)       // ERROR "negative"
+       _ = make(T, 0.5)       // ERROR "constant 0.5 truncated to integer|non-integer"
+       _ = make(T, 1.0)       // ok
+       _ = make(T, 1<<63)  // ERROR "len argument too large"
+       _ = make(T, 0, -1)    // ERROR "negative cap"
+       _ = make(T, 10, 0) // ERROR "len larger than cap"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4085b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4085b.go
new file mode 100644 (file)
index 0000000..63aca23
--- /dev/null
@@ -0,0 +1,49 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "strings"
+       "unsafe"
+)
+
+type T []int
+
+func main() {
+       n := -1
+       shouldPanic("len out of range", func() {_ = make(T, n)})
+       shouldPanic("cap out of range", func() {_ = make(T, 0, n)})
+       var t *byte
+       if unsafe.Sizeof(t) == 8 {
+               n = 1<<20
+               n <<= 20
+               shouldPanic("len out of range", func() {_ = make(T, n)})
+               shouldPanic("cap out of range", func() {_ = make(T, 0, n)})
+               n <<= 20
+               shouldPanic("len out of range", func() {_ = make(T, n)})
+               shouldPanic("cap out of range", func() {_ = make(T, 0, n)})
+       } else {
+               n = 1<<31 - 1
+               shouldPanic("len out of range", func() {_ = make(T, n)})
+               shouldPanic("cap out of range", func() {_ = make(T, 0, n)})
+       }
+}
+
+func shouldPanic(str string, f func()) {
+       defer func() {
+               err := recover()
+               if err == nil {
+                       panic("did not panic")
+               }
+               s := err.(error).Error()
+               if !strings.Contains(s, str) {
+                       panic("got panic " + s + ", want " + str)
+               }
+       }()
+       
+       f()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4097.go b/gcc/testsuite/go.test/test/fixedbugs/issue4097.go
new file mode 100644 (file)
index 0000000..c2b7d9b
--- /dev/null
@@ -0,0 +1,11 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package foo
+
+var s [][10]int
+const m = len(s[len(s)-1]) // ERROR "is not a constant|is not constant" 
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4099.go b/gcc/testsuite/go.test/test/fixedbugs/issue4099.go
new file mode 100644 (file)
index 0000000..89392bf
--- /dev/null
@@ -0,0 +1,26 @@
+// errorcheck -0 -m
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Check go:noescape annotations.
+
+package p
+
+// The noescape comment only applies to the next func,
+// which must not have a body.
+
+//go:noescape
+
+func F1([]byte)
+
+func F2([]byte)
+
+func G() {
+       var buf1 [10]byte
+       F1(buf1[:]) // ERROR "buf1 does not escape"
+       
+       var buf2 [10]byte // ERROR "moved to heap: buf2"
+       F2(buf2[:]) // ERROR "buf2 escapes to heap"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4162.go b/gcc/testsuite/go.test/test/fixedbugs/issue4162.go
new file mode 100644 (file)
index 0000000..c2a8338
--- /dev/null
@@ -0,0 +1,17 @@
+// compile
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4162. Trailing commas now allowed in conversions.
+
+package p
+
+// All these are valid now.
+var (
+       _ = int(1.0,)      // comma was always permitted (like function call)
+       _ = []byte("foo",) // was syntax error: unexpected comma
+       _ = chan int(nil,) // was syntax error: unexpected comma
+       _ = (func())(nil,) // was syntax error: unexpected comma
+)
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4167.go b/gcc/testsuite/go.test/test/fixedbugs/issue4167.go
new file mode 100644 (file)
index 0000000..4e35331
--- /dev/null
@@ -0,0 +1,50 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4167: inlining of a (*T).Method expression taking
+// its arguments from a multiple return breaks the compiler.
+
+package main
+
+type pa []int
+
+type p int
+
+func (this *pa) func1() (v *p, c int) {
+       for _ = range *this {
+               c++
+       }
+       v = (*p)(&c)
+       return
+}
+
+func (this *pa) func2() p {
+       return (*p).func3(this.func1())
+}
+
+func (this *p) func3(f int) p {
+       return *this
+}
+
+func (this *pa) func2dots() p {
+       return (*p).func3(this.func1())
+}
+
+func (this *p) func3dots(f ...int) p {
+       return *this
+}
+
+func main() {
+       arr := make(pa, 13)
+       length := arr.func2()
+       if int(length) != len(arr) {
+               panic("length != len(arr)")
+       }
+       length = arr.func2dots()
+       if int(length) != len(arr) {
+               panic("length != len(arr)")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4232.go b/gcc/testsuite/go.test/test/fixedbugs/issue4232.go
new file mode 100644 (file)
index 0000000..e5daa65
--- /dev/null
@@ -0,0 +1,33 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+func f() {
+       var a [10]int
+       _ = a[-1]  // ERROR "invalid array index -1|index out of bounds"
+       _ = a[-1:] // ERROR "invalid slice index -1|index out of bounds"
+       _ = a[:-1] // ERROR "invalid slice index -1|index out of bounds"
+       _ = a[10]  // ERROR "invalid array index 10|index out of bounds"
+
+       var s []int
+       _ = s[-1]  // ERROR "invalid slice index -1|index out of bounds"
+       _ = s[-1:] // ERROR "invalid slice index -1|index out of bounds"
+       _ = s[:-1] // ERROR "invalid slice index -1|index out of bounds"
+       _ = s[10]
+
+       const c = "foo"
+       _ = c[-1]  // ERROR "invalid string index -1|index out of bounds"
+       _ = c[-1:] // ERROR "invalid slice index -1|index out of bounds"
+       _ = c[:-1] // ERROR "invalid slice index -1|index out of bounds"
+       _ = c[3]   // ERROR "invalid string index 3|index out of bounds"
+
+       var t string
+       _ = t[-1]  // ERROR "invalid string index -1|index out of bounds"
+       _ = t[-1:] // ERROR "invalid slice index -1|index out of bounds"
+       _ = t[:-1] // ERROR "invalid slice index -1|index out of bounds"
+       _ = t[3]
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4251.go b/gcc/testsuite/go.test/test/fixedbugs/issue4251.go
new file mode 100644 (file)
index 0000000..a14e089
--- /dev/null
@@ -0,0 +1,21 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4251: slice with inverted range is an error.
+
+package p
+
+func F1(s []byte) []byte {
+       return s[2:1]           // ERROR "inverted"
+}
+
+func F2(a [10]byte) []byte {
+       return a[2:1]           // ERROR "inverted"
+}
+
+func F3(s string) string {
+       return s[2:1]           // ERROR "inverted"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/a.go
new file mode 100644 (file)
index 0000000..089b6f2
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// A package that redeclares common builtin names.
+package a
+
+var true = 0 == 1
+var false = 0 == 0
+var nil = 1
+
+const append = 42
+
+type error bool
+type int interface{}
+
+func len(interface{}) int32 { return 42 }
+
+func Test() {
+       var array [append]int
+       if true {
+               panic("unexpected builtin true instead of redeclared one")
+       }
+       if !false {
+               panic("unexpected builtin false instead of redeclared one")
+       }
+       if len(array) != 42 {
+               println(len(array))
+               panic("unexpected call of builtin len")
+       }
+}
+
+func InlinedFakeTrue() error  { return error(true) }
+func InlinedFakeFalse() error { return error(false) }
+func InlinedFakeNil() int     { return nil }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/issue4252.dir/main.go
new file mode 100644 (file)
index 0000000..28e4342
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func main() {
+       if a.InlinedFakeTrue() {
+               panic("returned true was the real one")
+       }
+       if !a.InlinedFakeFalse() {
+               panic("returned false was the real one")
+       }
+       if a.InlinedFakeNil() == nil {
+               panic("returned nil was the real one")
+       }
+       a.Test()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4252.go b/gcc/testsuite/go.test/test/fixedbugs/issue4252.go
new file mode 100644 (file)
index 0000000..1b0e5b2
--- /dev/null
@@ -0,0 +1,11 @@
+// rundir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4252: tests that fixing the issue still allow
+// builtins to be redeclared and are not corrupted
+// in export data.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4264.go b/gcc/testsuite/go.test/test/fixedbugs/issue4264.go
new file mode 100644 (file)
index 0000000..6273932
--- /dev/null
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 4264: reject int division by const 0
+
+package main
+
+func main() {
+       var x int
+       var y float64
+       var z complex128
+
+       println(x/0) // ERROR "division by zero"
+       println(y/0)
+       println(z/0)
+}
\ No newline at end of file
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4283.go b/gcc/testsuite/go.test/test/fixedbugs/issue4283.go
new file mode 100644 (file)
index 0000000..128c872
--- /dev/null
@@ -0,0 +1,17 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4283: nil == nil can't be done as the type is unknown.
+
+package p
+
+func F1() bool {
+       return nil == nil       // ERROR "invalid"
+}
+
+func F2() bool {
+       return nil != nil       // ERROR "invalid"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4313.go b/gcc/testsuite/go.test/test/fixedbugs/issue4313.go
new file mode 100644 (file)
index 0000000..b2f69db
--- /dev/null
@@ -0,0 +1,28 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Order of operations in select.
+
+package main
+
+func main() {
+       c := make(chan int, 1)
+       x := 0
+       select {
+       case c <- x: // should see x = 0, not x = 42 (after makec)
+       case <-makec(&x): // should be evaluated only after c and x on previous line
+       }
+       y := <-c
+       if y != 0 {
+               panic(y)
+       }
+}
+
+func makec(px *int) chan bool {
+       if false { for {} }
+       *px = 42
+       return make(chan bool, 0)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4316.go b/gcc/testsuite/go.test/test/fixedbugs/issue4316.go
new file mode 100644 (file)
index 0000000..bb18a08
--- /dev/null
@@ -0,0 +1,64 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4316: the stack overflow check in the linker
+// is confused when it encounters a split-stack function
+// that needs 0 bytes of stack space.
+
+package main
+
+type Peano *Peano
+
+func makePeano(n int) *Peano {
+       if n == 0 {
+               return nil
+       }
+       p := Peano(makePeano(n - 1))
+       return &p
+}
+
+var countArg Peano
+var countResult int
+
+func countPeano() {
+       if countArg == nil {
+               countResult = 0
+               return
+       }
+       countArg = *countArg
+       countPeano()
+       countResult++
+}
+
+var s = "(())"
+var pT = 0
+
+func p() {
+       if pT >= len(s) {
+               return
+       }
+       if s[pT] == '(' {
+               pT += 1
+               p()
+               if pT < len(s) && s[pT] == ')' {
+                       pT += 1
+               } else {
+                       return
+               }
+               p()
+       }
+}
+
+func main() {
+       countArg = makePeano(4096)
+       countPeano()
+       if countResult != 4096 {
+               println("countResult =", countResult)
+               panic("countResult != 4096")
+       }
+
+       p()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4323.go b/gcc/testsuite/go.test/test/fixedbugs/issue4323.go
new file mode 100644 (file)
index 0000000..6bb78f4
--- /dev/null
@@ -0,0 +1,31 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4323: inlining of functions with local variables
+// forgets to typecheck the declarations in the inlined copy.
+
+package main
+
+type reader struct {
+       C chan T
+}
+
+type T struct{ C chan []byte }
+
+var r = newReader()
+
+func newReader() *reader { return new(reader) }
+
+func (r *reader) Read(n int) ([]byte, error) {
+       req := T{C: make(chan []byte)}
+       r.C <- req
+       return <-req.C, nil
+}
+
+func main() {
+       s, err := r.Read(1)
+       _, _ = s, err
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p1.go
new file mode 100644 (file)
index 0000000..ab214be
--- /dev/null
@@ -0,0 +1,12 @@
+package p1
+
+type O map[string]map[string]string
+
+func (opts O) RemoveOption(sect, opt string) bool {
+       if _, ok := opts[sect]; !ok {
+               return false
+       }
+       _, ok := opts[sect][opt]
+       delete(opts[sect], opt)
+       return ok
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/p2.go
new file mode 100644 (file)
index 0000000..8e86266
--- /dev/null
@@ -0,0 +1,5 @@
+package p2
+
+import "./p1"
+
+func NewO() p1.O { return nil }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q1.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q1.go
new file mode 100644 (file)
index 0000000..f118eb0
--- /dev/null
@@ -0,0 +1,8 @@
+package q1
+
+func Deref(typ interface{}) interface{} {
+      if typ, ok := typ.(*int); ok {
+            return *typ
+      }
+      return typ
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/q2.go
new file mode 100644 (file)
index 0000000..075e2b2
--- /dev/null
@@ -0,0 +1,11 @@
+package main
+
+import "./q1"
+
+func main() {
+      x := 1
+      y := q1.Deref(&x)
+      if y != 1 {
+            panic("y != 1")
+      }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/z.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.dir/z.go
new file mode 100644 (file)
index 0000000..9b222e8
--- /dev/null
@@ -0,0 +1,7 @@
+package z
+
+import "./p2"
+
+func main() {
+       p2.NewO().RemoveOption("hello", "world")
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4326.go b/gcc/testsuite/go.test/test/fixedbugs/issue4326.go
new file mode 100644 (file)
index 0000000..5ce2eea
--- /dev/null
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Printing local variables in inliner shadows global names.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4348.go b/gcc/testsuite/go.test/test/fixedbugs/issue4348.go
new file mode 100644 (file)
index 0000000..3dac8f7
--- /dev/null
@@ -0,0 +1,29 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4348. After switch to 64-bit ints the compiler generates
+// illegal instructions when using large array bounds or indexes.
+
+package main
+
+// 1<<32 on a 64-bit machine, 1 otherwise.
+const LARGE = ^uint(0)>>32 + 1
+
+func A() int {
+       var a []int
+       return a[LARGE]
+}
+
+var b [LARGE]int
+
+func B(i int) int {
+       return b[i]
+}
+
+func main() {
+       n := A()
+       B(n)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4353.go b/gcc/testsuite/go.test/test/fixedbugs/issue4353.go
new file mode 100644 (file)
index 0000000..defe7c3
--- /dev/null
@@ -0,0 +1,19 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4353. An optimizer bug in 8g triggers a runtime fault
+// instead of an out of bounds panic.
+
+package main
+
+var aib [100000]int
+var paib *[100000]int = &aib
+var i64 int64 = 100023
+
+func main() {
+       defer func() { recover() }()
+       _ = paib[i64]
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4359.go b/gcc/testsuite/go.test/test/fixedbugs/issue4359.go
new file mode 100644 (file)
index 0000000..b5adb40
--- /dev/null
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4359: wrong handling of broken struct fields
+// causes "internal compiler error: lookdot badwidth".
+
+package main
+
+type T struct {
+       x T1 // ERROR "undefined"
+}
+
+func f() {
+       var t *T
+       _ = t.x
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p1.go b/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p1.go
new file mode 100644 (file)
index 0000000..d732c8b
--- /dev/null
@@ -0,0 +1,20 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p1
+
+type Magic int
+
+type T struct {
+       x interface{}
+}
+
+func (t *T) M() bool {
+       _, ok := t.x.(Magic)
+       return ok
+}
+
+func F(t *T) {
+       println(t)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p2.go
new file mode 100644 (file)
index 0000000..33370d0
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p2
+
+import "./p1"
+
+type T struct {
+       p1.T
+}
+
+func F() {
+       var t T
+       p1.F(&t.T)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p3.go b/gcc/testsuite/go.test/test/fixedbugs/issue4370.dir/p3.go
new file mode 100644 (file)
index 0000000..13c996b
--- /dev/null
@@ -0,0 +1,13 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p3
+
+import "./p2"
+
+func F() {
+       p2.F()
+       var t p2.T
+       println(t.T.M())
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4370.go b/gcc/testsuite/go.test/test/fixedbugs/issue4370.go
new file mode 100644 (file)
index 0000000..76b47e1
--- /dev/null
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Re-exporting inlined function bodies missed types in x, ok := v.(Type)
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4396a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4396a.go
new file mode 100644 (file)
index 0000000..11ae1f7
--- /dev/null
@@ -0,0 +1,27 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4396. Arrays of bytes are not required to be
+// word aligned. 5g should use MOVB to load the address
+// of s.g[0] for its nil check.
+//
+// This test _may_ fail on arm, but requires the host to 
+// trap unaligned loads. This is generally done with
+//
+// echo "4" > /proc/cpu/alignment
+
+package main
+
+var s = struct {
+       // based on lzw.decoder
+       a, b, c, d, e uint16
+       f             [4096]uint8
+       g             [4096]uint8
+}{}
+
+func main() {
+       s.g[0] = 1
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4396b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4396b.go
new file mode 100644 (file)
index 0000000..d0bf28f
--- /dev/null
@@ -0,0 +1,29 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This test _may_ fail on arm, but requires the host to
+// trap unaligned loads. This is generally done with
+//
+// echo "4" > /proc/cpu/alignment
+
+package main
+
+type T struct {
+       U uint16
+       V T2
+}
+
+type T2 struct {
+       pad    [4096]byte
+       A, B byte
+}
+
+var s, t = new(T), new(T)
+
+func main() {
+       var u, v *T2 = &s.V, &t.V
+       u.B = v.B
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4399.go b/gcc/testsuite/go.test/test/fixedbugs/issue4399.go
new file mode 100644 (file)
index 0000000..6674db9
--- /dev/null
@@ -0,0 +1,15 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4399: 8g would print "gins LEAQ nil *A".
+
+package main
+
+type A struct{ a int }
+
+func main() {
+       println(((*A)(nil)).a)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4405.go b/gcc/testsuite/go.test/test/fixedbugs/issue4405.go
new file mode 100644 (file)
index 0000000..b8458d7
--- /dev/null
@@ -0,0 +1,15 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+const (
+       _ = iota
+       _\a // ERROR "illegal character|invalid character"
+       _\b  // ERROR "illegal character|invalid character"
+       _\v  // ERROR "illegal character|invalid character"
+       _\f  // ERROR "illegal character|invalid character"
+)
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4429.go b/gcc/testsuite/go.test/test/fixedbugs/issue4429.go
new file mode 100644 (file)
index 0000000..6822760
--- /dev/null
@@ -0,0 +1,16 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+type a struct {
+  a int
+}
+
+func main() {
+  av := a{};
+  _ = *a(av); // ERROR "invalid indirect|expected pointer"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4448.go b/gcc/testsuite/go.test/test/fixedbugs/issue4448.go
new file mode 100644 (file)
index 0000000..fa1d9fe
--- /dev/null
@@ -0,0 +1,37 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4448: 64-bit indices that are statically known
+// to be bounded make 5g and 8g generate a dangling branch.
+
+package main
+
+const b26 uint64 = 0x022fdd63cc95386d
+
+var bitPos [64]int
+
+func init() {
+       for p := uint(0); p < 64; p++ {
+               bitPos[b26<<p>>58] = int(p)
+       }
+}
+
+func MinPos(w uint64) int {
+       if w == 0 {
+               panic("bit: MinPos(0) undefined")
+       }
+       return bitPos[((w&-w)*b26)>>58]
+}
+
+func main() {
+       const one = uint64(1)
+       for i := 0; i < 64; i++ {
+               if MinPos(1<<uint(i)) != i {
+                       println("i =", i)
+                       panic("MinPos(1<<uint(i)) != i")
+               }
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4452.go b/gcc/testsuite/go.test/test/fixedbugs/issue4452.go
new file mode 100644 (file)
index 0000000..54dd214
--- /dev/null
@@ -0,0 +1,13 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4452. Used to print many errors, now just one.
+
+package main
+
+func main() {
+       _ = [...]int(4) // ERROR "\[\.\.\.\].*outside of array literal"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4458.go b/gcc/testsuite/go.test/test/fixedbugs/issue4458.go
new file mode 100644 (file)
index 0000000..820f18c
--- /dev/null
@@ -0,0 +1,20 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4458: gc accepts invalid method expressions
+// like (**T).Method.
+
+package main
+
+type T struct{}
+
+func (T) foo() {}
+
+func main() {
+       av := T{}
+       pav := &av
+       (**T).foo(&pav) // ERROR "no method foo|requires named type or pointer to named"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4463.go b/gcc/testsuite/go.test/test/fixedbugs/issue4463.go
new file mode 100644 (file)
index 0000000..70977ce
--- /dev/null
@@ -0,0 +1,87 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4463: test builtin functions in statement context and in
+// go/defer functions.
+
+package p
+
+import "unsafe"
+
+func F() {
+       var a []int
+       var c chan int
+       var m map[int]int
+       var s struct{ f int }
+
+       append(a, 0)                    // ERROR "not used"
+       cap(a)                          // ERROR "not used"
+       complex(1, 2)                   // ERROR "not used"
+       imag(1i)                        // ERROR "not used"
+       len(a)                          // ERROR "not used"
+       make([]int, 10)                 // ERROR "not used"
+       new(int)                        // ERROR "not used"
+       real(1i)                        // ERROR "not used"
+       unsafe.Alignof(a)               // ERROR "not used"
+       unsafe.Offsetof(s.f)            // ERROR "not used"
+       unsafe.Sizeof(a)                // ERROR "not used"
+
+       close(c)
+       copy(a, a)
+       delete(m, 0)
+       panic(0)
+       print("foo")
+       println("bar")
+       recover()
+
+       (close(c))
+       (copy(a, a))
+       (delete(m, 0))
+       (panic(0))
+       (print("foo"))
+       (println("bar"))
+       (recover())
+
+       go append(a, 0)                 // ERROR "not used|discards result"
+       go cap(a)                       // ERROR "not used|discards result"
+       go complex(1, 2)                // ERROR "not used|discards result"
+       go imag(1i)                     // ERROR "not used|discards result"
+       go len(a)                       // ERROR "not used|discards result"
+       go make([]int, 10)              // ERROR "not used|discards result"
+       go new(int)                     // ERROR "not used|discards result"
+       go real(1i)                     // ERROR "not used|discards result"
+       go unsafe.Alignof(a)            // ERROR "not used|discards result"
+       go unsafe.Offsetof(s.f)         // ERROR "not used|discards result"
+       go unsafe.Sizeof(a)             // ERROR "not used|discards result"
+
+       go close(c)
+       go copy(a, a)
+       go delete(m, 0)
+       go panic(0)
+       go print("foo")
+       go println("bar")
+       go recover()
+
+       defer append(a, 0)              // ERROR "not used|discards result"
+       defer cap(a)                    // ERROR "not used|discards result"
+       defer complex(1, 2)             // ERROR "not used|discards result"
+       defer imag(1i)                  // ERROR "not used|discards result"
+       defer len(a)                    // ERROR "not used|discards result"
+       defer make([]int, 10)           // ERROR "not used|discards result"
+       defer new(int)                  // ERROR "not used|discards result"
+       defer real(1i)                  // ERROR "not used|discards result"
+       defer unsafe.Alignof(a)         // ERROR "not used|discards result"
+       defer unsafe.Offsetof(s.f)      // ERROR "not used|discards result"
+       defer unsafe.Sizeof(a)          // ERROR "not used|discards result"
+
+       defer close(c)
+       defer copy(a, a)
+       defer delete(m, 0)
+       defer panic(0)
+       defer print("foo")
+       defer println("bar")
+       defer recover()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4468.go b/gcc/testsuite/go.test/test/fixedbugs/issue4468.go
new file mode 100644 (file)
index 0000000..ef0b46b
--- /dev/null
@@ -0,0 +1,28 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4468: go/defer calls may not be parenthesized.
+
+package p
+
+type T int
+
+func (t *T) F() T {
+       return *t
+}
+
+type S struct {
+       t T
+}
+
+func F() {
+       go (F())        // ERROR "must be function call"
+       defer (F())     // ERROR "must be function call"
+       var s S
+       (&s.t).F()
+       go (&s.t).F()
+       defer (&s.t).F()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4470.go b/gcc/testsuite/go.test/test/fixedbugs/issue4470.go
new file mode 100644 (file)
index 0000000..5ed09ca
--- /dev/null
@@ -0,0 +1,16 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4470: parens are not allowed around .(type) "expressions"
+
+package main
+
+func main() {
+       var i interface{}
+       switch (i.(type)) { // ERROR "outside type switch"
+       default:
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4495.go b/gcc/testsuite/go.test/test/fixedbugs/issue4495.go
new file mode 100644 (file)
index 0000000..7ec1134
--- /dev/null
@@ -0,0 +1,29 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+type I interface {
+       m() int
+}
+
+type T struct{}
+
+func (T) m() int {
+       return 3
+}
+
+var t T
+
+var ret = I.m(t)
+
+func main() {
+       if ret != 3 {
+               println("ret = ", ret)
+               panic("ret != 3")
+       }
+}
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f1.go b/gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f1.go
new file mode 100644 (file)
index 0000000..7e2cffa
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+import "fmt" // ERROR "fmt redeclared|imported"
+
+var _ = fmt.Printf
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4510.dir/f2.go
new file mode 100644 (file)
index 0000000..895fc34
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+func fmt() {}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4510.go b/gcc/testsuite/go.test/test/fixedbugs/issue4510.go
new file mode 100644 (file)
index 0000000..003f9e8
--- /dev/null
@@ -0,0 +1,7 @@
+// errorcheckdir
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4517a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4517a.go
new file mode 100644 (file)
index 0000000..a1b6b57
--- /dev/null
@@ -0,0 +1,9 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+var init = 1 // ERROR "cannot declare init - must be func"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4517b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4517b.go
new file mode 100644 (file)
index 0000000..f04103f
--- /dev/null
@@ -0,0 +1,9 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+const init = 1 // ERROR "cannot declare init - must be func"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4517c.go b/gcc/testsuite/go.test/test/fixedbugs/issue4517c.go
new file mode 100644 (file)
index 0000000..47b21cf
--- /dev/null
@@ -0,0 +1,9 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+type init byte // ERROR "cannot declare init - must be func"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4518.go b/gcc/testsuite/go.test/test/fixedbugs/issue4518.go
new file mode 100644 (file)
index 0000000..e64b069
--- /dev/null
@@ -0,0 +1,67 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4518. In some circumstances "return F(...)"
+// where F has multiple returns is miscompiled by 6g due to
+// bold assumptions in componentgen.
+
+package main
+
+func DontInline() {}
+
+func F(e interface{}) (int, int) {
+       DontInline()
+       return 3, 7
+}
+
+func G() (int, int) {
+       DontInline()
+       return 3, 7
+}
+
+func bogus1(d interface{}) (int, int) {
+       switch {
+       default:
+               return F(d)
+       }
+       return 0, 0
+}
+
+func bogus2() (int, int) {
+       switch {
+       default:
+               return F(3)
+       }
+       return 0, 0
+}
+
+func bogus3(d interface{}) (int, int) {
+       switch {
+       default:
+               return G()
+       }
+       return 0, 0
+}
+
+func bogus4() (int, int) {
+       switch {
+       default:
+               return G()
+       }
+       return 0, 0
+}
+
+func check(a, b int) {
+       if a != 3 || b != 7 {
+               println(a, b)
+               panic("a != 3 || b != 7")
+       }
+}
+
+func main() {
+       check(bogus1(42))
+       check(bogus2())
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4529.go b/gcc/testsuite/go.test/test/fixedbugs/issue4529.go
new file mode 100644 (file)
index 0000000..4f37e7c
--- /dev/null
@@ -0,0 +1,33 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4529: escape analysis crashes on "go f(g())"
+// when g has multiple returns.
+
+package main
+
+type M interface{}
+
+type A struct {
+       a string
+       b chan M
+}
+
+func (a *A) I() (b <-chan M, c chan<- M) {
+       a.b, c = make(chan M), make(chan M)
+       b = a.b
+
+       return
+}
+
+func Init(a string, b *A, c interface {
+       I() (<-chan M, chan<- M)
+}) {
+       b.a = a
+       go b.c(c.I())
+}
+
+func (a *A) c(b <-chan M, _ chan<- M) {}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4545.go b/gcc/testsuite/go.test/test/fixedbugs/issue4545.go
new file mode 100644 (file)
index 0000000..c37ccef
--- /dev/null
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4545: untyped constants are incorrectly coerced
+// to concrete types when used in interface{} context.
+
+package main
+
+import "fmt"
+
+func main() {
+       var s uint
+       fmt.Println(1.0 + 1<<s) // ERROR "invalid operation|non-integer type|incompatible type"
+       x := 1.0 + 1<<s         // ERROR "invalid operation|non-integer type"
+       _ = x
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4562.go b/gcc/testsuite/go.test/test/fixedbugs/issue4562.go
new file mode 100644 (file)
index 0000000..29d98b0
--- /dev/null
@@ -0,0 +1,49 @@
+// run
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "fmt"
+       "runtime"
+       "strings"
+)
+
+type T struct {
+       val int
+}
+
+func main() {
+       defer expectError(22)
+       var pT *T
+       switch pT.val { // error should be here - line 22
+       case 0:
+               fmt.Println("0")
+       case 1: // used to show up here instead
+               fmt.Println("1")
+       case 2:
+               fmt.Println("2")
+       }
+       fmt.Println("finished")
+}
+
+func expectError(expectLine int) {
+       if recover() == nil {
+               panic("did not crash")
+       }
+       for i := 1;; i++ {
+               _, file, line, ok := runtime.Caller(i)
+               if !ok {
+                       panic("cannot find issue4562.go on stack")
+               }
+               if strings.HasSuffix(file, "issue4562.go") {
+                       if line != expectLine {
+                               panic(fmt.Sprintf("crashed at line %d, wanted line %d", line, expectLine))
+                       }
+                       break
+               }
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4585.go b/gcc/testsuite/go.test/test/fixedbugs/issue4585.go
new file mode 100644 (file)
index 0000000..ad1242d
--- /dev/null
@@ -0,0 +1,151 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4585: comparisons and hashes process blank
+// fields and padding in structs.
+
+package main
+
+import "unsafe"
+
+// T is a structure with padding.
+type T struct {
+       A     int16
+       B     int64
+       C     int16
+       D     int64
+       Dummy [64]byte
+}
+
+// U is a structure with a blank field
+type U struct {
+       A, _, B int
+       Dummy   [64]byte
+}
+
+// USmall is like U but the frontend will inline comparison
+// instead of calling the generated eq function.
+type USmall struct {
+       A, _, B int32
+}
+
+// V has padding but not on the first field.
+type V struct {
+       A1, A2, A3 int32
+       B          int16
+       C          int32
+}
+
+// W has padding at the end.
+type W struct {
+       A1, A2, A3 int32
+       B          int32
+       C          int8
+}
+
+func test1() {
+       var a, b U
+       m := make(map[U]int)
+       copy((*[16]byte)(unsafe.Pointer(&a))[:], "hello world!")
+       a.A, a.B = 1, 2
+       b.A, b.B = 1, 2
+       if a != b {
+               panic("broken equality: a != b")
+       }
+
+       m[a] = 1
+       m[b] = 2
+       if len(m) == 2 {
+               panic("broken hash: len(m) == 2")
+       }
+       if m[a] != 2 {
+               panic("m[a] != 2")
+       }
+}
+
+func test2() {
+       var a, b T
+       m := make(map[T]int)
+
+       copy((*[16]byte)(unsafe.Pointer(&a))[:], "hello world!")
+       a.A, a.B, a.C, a.D = 1, 2, 3, 4
+       b.A, b.B, b.C, b.D = 1, 2, 3, 4
+
+       if a != b {
+               panic("broken equality: a != b")
+       }
+
+       m[a] = 1
+       m[b] = 2
+       if len(m) == 2 {
+               panic("broken hash: len(m) == 2")
+       }
+       if m[a] != 2 {
+               panic("m[a] != 2")
+       }
+}
+
+func test3() {
+       var a, b USmall
+       copy((*[12]byte)(unsafe.Pointer(&a))[:], "hello world!")
+       a.A, a.B = 1, 2
+       b.A, b.B = 1, 2
+       if a != b {
+               panic("broken equality: a != b")
+       }
+}
+
+func test4() {
+       var a, b V
+       m := make(map[V]int)
+
+       copy((*[20]byte)(unsafe.Pointer(&a))[:], "Hello World, Gopher!")
+       a.A1, a.A2, a.A3, a.B, a.C = 1, 2, 3, 4, 5
+       b.A1, b.A2, b.A3, b.B, b.C = 1, 2, 3, 4, 5
+
+       if a != b {
+               panic("broken equality: a != b")
+       }
+
+       m[a] = 1
+       m[b] = 2
+       if len(m) == 2 {
+               panic("broken hash: len(m) == 2")
+       }
+       if m[a] != 2 {
+               panic("m[a] != 2")
+       }
+}
+
+func test5() {
+       var a, b W
+       m := make(map[W]int)
+
+       copy((*[20]byte)(unsafe.Pointer(&a))[:], "Hello World, Gopher!")
+       a.A1, a.A2, a.A3, a.B, a.C = 1, 2, 3, 4, 5
+       b.A1, b.A2, b.A3, b.B, b.C = 1, 2, 3, 4, 5
+
+       if a != b {
+               panic("broken equality: a != b")
+       }
+
+       m[a] = 1
+       m[b] = 2
+       if len(m) == 2 {
+               panic("broken hash: len(m) == 2")
+       }
+       if m[a] != 2 {
+               panic("m[a] != 2")
+       }
+}
+
+func main() {
+       test1()
+       test2()
+       test3()
+       test4()
+       test5()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg1.go b/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg1.go
new file mode 100644 (file)
index 0000000..c447371
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkg1
+
+type A interface {
+       Write() error
+}
+
+type B interface {
+       Hello()
+       world()
+}
+
+type C struct{}
+
+func (c C) Write() error { return nil }
+
+var T = struct{ A }{nil}
+var U = struct{ B }{nil}
+var V A = struct{ *C }{nil}
+var W = interface {
+       Write() error
+       Hello()
+}(nil)
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/pkg2.go
new file mode 100644 (file)
index 0000000..61c01d7
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkg2
+
+import "./pkg1"
+
+var T = struct{ pkg1.A }{nil}
+var U = struct{ pkg1.B }{nil}
+var V pkg1.A = struct{ *pkg1.C }{nil}
+var W = interface {
+       Write() error
+       Hello()
+}(nil)
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/prog.go b/gcc/testsuite/go.test/test/fixedbugs/issue4590.dir/prog.go
new file mode 100644 (file)
index 0000000..3220e85
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "./pkg1"
+       "./pkg2"
+)
+
+func main() {
+       if pkg1.T != pkg2.T {
+               panic("pkg1.T != pkg2.T")
+       }
+       if pkg1.U != pkg2.U {
+               panic("pkg1.U != pkg2.U")
+       }
+       if pkg1.V != pkg2.V {
+               panic("pkg1.V != pkg2.V")
+       }
+       if pkg1.W != pkg2.W {
+               panic("pkg1.W != pkg2.W")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4590.go b/gcc/testsuite/go.test/test/fixedbugs/issue4590.go
new file mode 100644 (file)
index 0000000..faeb1ad
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4590: linker fails on multiple imports of
+// an anonymous struct with methods.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4610.go b/gcc/testsuite/go.test/test/fixedbugs/issue4610.go
new file mode 100644 (file)
index 0000000..d56c6d3
--- /dev/null
@@ -0,0 +1,17 @@
+// errorcheck
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+type bar struct {
+       x int
+}
+
+func main() {
+       var foo bar
+       _ = &foo{} // ERROR "is not a type|expected .;."
+} // GCCGO_ERROR "expected declaration"
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4614.go b/gcc/testsuite/go.test/test/fixedbugs/issue4614.go
new file mode 100644 (file)
index 0000000..1aa318c
--- /dev/null
@@ -0,0 +1,20 @@
+// compile
+
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4614: slicing of nil slices confuses the compiler
+// with a uintptr(nil) node.
+
+package p
+
+import "unsafe"
+
+var n int
+
+var _ = []int(nil)[1:]
+var _ = []int(nil)[n:]
+
+var _ = uintptr(unsafe.Pointer(nil))
+var _ = unsafe.Pointer(uintptr(0))
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4618.go b/gcc/testsuite/go.test/test/fixedbugs/issue4618.go
new file mode 100644 (file)
index 0000000..ff91ae7
--- /dev/null
@@ -0,0 +1,41 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "fmt"
+       "os"
+       "runtime"
+       "testing"
+)
+
+type T struct { int }
+
+var globl *T
+
+func F() {
+       t := &T{}
+       globl = t
+}
+
+func G() {
+       t := &T{}
+       _ = t
+}
+
+func main() {
+       nf := testing.AllocsPerRun(100, F)
+       ng := testing.AllocsPerRun(100, G)
+       if int(nf) != 1 {
+               fmt.Printf("AllocsPerRun(100, F) = %v, want 1\n", nf)
+               os.Exit(1)
+       }
+       if int(ng) != 0 && (runtime.Compiler != "gccgo" || int(ng) != 1) {
+               fmt.Printf("AllocsPerRun(100, G) = %v, want 0\n", ng)
+               os.Exit(1)
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4620.go b/gcc/testsuite/go.test/test/fixedbugs/issue4620.go
new file mode 100644 (file)
index 0000000..7b4ebf9
--- /dev/null
@@ -0,0 +1,21 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4620: map indexes are not evaluated before assignment of other elements
+
+package main
+
+import "fmt"
+
+func main() {
+       m := map[int]int{0:1}
+       i := 0
+       i, m[i] = 1, 2
+       if m[0] != 2 {
+               fmt.Println(m)
+               panic("m[i] != 2")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4654.go b/gcc/testsuite/go.test/test/fixedbugs/issue4654.go
new file mode 100644 (file)
index 0000000..d3f582b
--- /dev/null
@@ -0,0 +1,71 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4654.
+// Check error for conversion and 'not used' in defer/go.
+
+package p
+
+import "unsafe"
+
+func f() {
+       defer int(0) // ERROR "defer requires function call, not conversion|is not used"
+       go string([]byte("abc")) // ERROR "go requires function call, not conversion|is not used"
+       
+       var c complex128
+       var f float64
+       var t struct {X int}
+
+       var x []int
+       defer append(x, 1) // ERROR "defer discards result of append|is not used"
+       defer cap(x) // ERROR "defer discards result of cap|is not used"
+       defer complex(1, 2) // ERROR "defer discards result of complex|is not used"
+       defer complex(f, 1) // ERROR "defer discards result of complex|is not used"
+       defer imag(1i) // ERROR "defer discards result of imag|is not used"
+       defer imag(c) // ERROR "defer discards result of imag|is not used"
+       defer len(x) // ERROR "defer discards result of len|is not used"
+       defer make([]int, 1) // ERROR "defer discards result of make|is not used"
+       defer make(chan bool) // ERROR "defer discards result of make|is not used"
+       defer make(map[string]int) // ERROR "defer discards result of make|is not used"
+       defer new(int) // ERROR "defer discards result of new|is not used"
+       defer real(1i) // ERROR "defer discards result of real|is not used"
+       defer real(c) // ERROR "defer discards result of real|is not used"
+       defer append(x, 1) // ERROR "defer discards result of append|is not used"
+       defer append(x, 1) // ERROR "defer discards result of append|is not used"
+       defer unsafe.Alignof(t.X) // ERROR "defer discards result of unsafe.Alignof|is not used"
+       defer unsafe.Offsetof(t.X) // ERROR "defer discards result of unsafe.Offsetof|is not used"
+       defer unsafe.Sizeof(t) // ERROR "defer discards result of unsafe.Sizeof|is not used"
+       
+       defer copy(x, x) // ok
+       m := make(map[int]int)
+       defer delete(m, 1) // ok
+       defer panic(1) // ok
+       defer print(1) // ok
+       defer println(1) // ok
+       defer recover() // ok
+
+       int(0) // ERROR "int\(0\) evaluated but not used|is not used"
+       string([]byte("abc")) // ERROR "string\(.*\) evaluated but not used|is not used"
+
+       append(x, 1) // ERROR "not used"
+       cap(x) // ERROR "not used"
+       complex(1, 2) // ERROR "not used"
+       complex(f, 1) // ERROR "not used"
+       imag(1i) // ERROR "not used"
+       imag(c) // ERROR "not used"
+       len(x) // ERROR "not used"
+       make([]int, 1) // ERROR "not used"
+       make(chan bool) // ERROR "not used"
+       make(map[string]int) // ERROR "not used"
+       new(int) // ERROR "not used"
+       real(1i) // ERROR "not used"
+       real(c) // ERROR "not used"
+       append(x, 1) // ERROR "not used"
+       append(x, 1) // ERROR "not used"
+       unsafe.Alignof(t.X) // ERROR "not used"
+       unsafe.Offsetof(t.X) // ERROR "not used"
+       unsafe.Sizeof(t) // ERROR "not used"
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4663.go b/gcc/testsuite/go.test/test/fixedbugs/issue4663.go
new file mode 100644 (file)
index 0000000..edaee93
--- /dev/null
@@ -0,0 +1,15 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4663.
+// Make sure 'not used' message is placed correctly.
+
+package main
+
+func a(b int) int64 {
+  b // ERROR "not used"
+  return 0
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4667.go b/gcc/testsuite/go.test/test/fixedbugs/issue4667.go
new file mode 100644 (file)
index 0000000..3a00a31
--- /dev/null
@@ -0,0 +1,37 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "fmt"
+       "os"
+       "testing"
+)
+
+var globl *int
+
+func G() {
+       F()
+}
+
+func F() {
+       var x int
+       globl = &x
+}
+
+func main() {
+       nf := testing.AllocsPerRun(100, F)
+       ng := testing.AllocsPerRun(100, G)
+       if int(nf) != 1 {
+               fmt.Printf("AllocsPerRun(100, F) = %v, want 1\n", nf)
+               os.Exit(1)
+       }
+       if int(ng) != 1 {
+               fmt.Printf("AllocsPerRun(100, G) = %v, want 1\n", ng)
+               os.Exit(1)
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4734.go b/gcc/testsuite/go.test/test/fixedbugs/issue4734.go
new file mode 100644 (file)
index 0000000..69f66f2
--- /dev/null
@@ -0,0 +1,21 @@
+// compile
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Caused gccgo to emit multiple definitions of the same symbol.
+
+package p
+
+type S1 struct{}
+
+func (s *S1) M() {}
+
+type S2 struct {
+       F struct{ *S1 }
+}
+
+func F() {
+       _ = struct{ *S1 }{}
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4748.go b/gcc/testsuite/go.test/test/fixedbugs/issue4748.go
new file mode 100644 (file)
index 0000000..73c7539
--- /dev/null
@@ -0,0 +1,20 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4748.
+// This program used to complain because inlining created two exit labels.
+
+package main
+
+func jump() {
+        goto exit
+exit:
+        return
+}
+func main() {
+        jump()
+        jump()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4752.go b/gcc/testsuite/go.test/test/fixedbugs/issue4752.go
new file mode 100644 (file)
index 0000000..d6781e3
--- /dev/null
@@ -0,0 +1,26 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func F(xi, yi interface{}) uint64 {
+       x, y := xi.(uint64), yi.(uint64)
+       return x &^ y
+}
+
+func G(xi, yi interface{}) uint64 {
+       return xi.(uint64) &^ yi.(uint64) // generates incorrect code
+}
+
+func main() {
+       var x, y uint64 = 0, 1 << 63
+       f := F(x, y)
+       g := G(x, y)
+       if f != 0 || g != 0 {
+               println("F", f, "G", g)
+               panic("bad")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4785.go b/gcc/testsuite/go.test/test/fixedbugs/issue4785.go
new file mode 100644 (file)
index 0000000..c3dd629
--- /dev/null
@@ -0,0 +1,20 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 4785: used to fail to compile
+
+package main
+
+func t(x, y interface{}) interface{} {
+       return x.(float64) > y.(float64)
+}
+
+func main() {
+       v := t(1.0, 2.0)
+       if v != false {
+               panic("bad comparison")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4813.go b/gcc/testsuite/go.test/test/fixedbugs/issue4813.go
new file mode 100644 (file)
index 0000000..f560b2f
--- /dev/null
@@ -0,0 +1,52 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4813: use of constant floats as indices.
+
+package main
+
+var A [3]int
+var S []int
+var T string
+
+const (
+       i  = 1
+       f  = 2.0
+       f2 = 2.1
+       c  = complex(2, 0)
+       c2 = complex(2, 1)
+)
+
+var (
+       vf = f
+       vc = c
+)
+
+var (
+       a1 = A[i]
+       a2 = A[f]
+       a3 = A[f2] // ERROR "truncated|must be integer"
+       a4 = A[c]
+       a5 = A[c2] // ERROR "truncated|must be integer"
+       a6 = A[vf] // ERROR "non-integer|must be integer"
+       a7 = A[vc] // ERROR "non-integer|must be integer"
+
+       s1 = S[i]
+       s2 = S[f]
+       s3 = S[f2] // ERROR "truncated|must be integer"
+       s4 = S[c]
+       s5 = S[c2] // ERROR "truncated|must be integer"
+       s6 = S[vf] // ERROR "non-integer|must be integer"
+       s7 = S[vc] // ERROR "non-integer|must be integer"
+
+       t1 = T[i]
+       t2 = T[f]
+       t3 = T[f2] // ERROR "truncated|must be integer"
+       t4 = T[c]
+       t5 = T[c2] // ERROR "truncated|must be integer"
+       t6 = T[vf] // ERROR "non-integer|must be integer"
+       t7 = T[vc] // ERROR "non-integer|must be integer"
+)
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/a.go
new file mode 100644 (file)
index 0000000..7ee7c48
--- /dev/null
@@ -0,0 +1,33 @@
+package a
+
+import (
+       "unsafe"
+)
+
+type Collection struct {
+       root unsafe.Pointer
+}
+
+type nodeLoc struct{}
+
+type slice []int
+
+type maptype map[int]int
+
+func MakePrivateCollection() *Collection {
+       return &Collection{
+               root: unsafe.Pointer(&nodeLoc{}),
+       }
+}
+
+func MakePrivateCollection2() *Collection {
+       return &Collection{
+               root: unsafe.Pointer(&slice{}),
+       }
+}
+func MakePrivateCollection3() *Collection {
+       return &Collection{
+               root: unsafe.Pointer(&maptype{}),
+       }
+}
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4879.dir/b.go
new file mode 100644 (file)
index 0000000..d8fb569
--- /dev/null
@@ -0,0 +1,9 @@
+package b
+
+import "./a"
+
+func F() {
+      a.MakePrivateCollection()
+      a.MakePrivateCollection2()
+      a.MakePrivateCollection3()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4879.go b/gcc/testsuite/go.test/test/fixedbugs/issue4879.go
new file mode 100644 (file)
index 0000000..842c811
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4879: export data misses the '&' for some
+// composite literals in inlined bodies.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4909a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4909a.go
new file mode 100644 (file)
index 0000000..aefe2d6
--- /dev/null
@@ -0,0 +1,35 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4909: compiler incorrectly accepts unsafe.Offsetof(t.x)
+// where x is a field of an embedded pointer field.
+
+package p
+
+import (
+       "unsafe"
+)
+
+type T struct {
+       A int
+       *B
+}
+
+func (t T) Method() {}
+
+type B struct {
+       X, Y int
+}
+
+var t T
+var p *T
+
+const N1 = unsafe.Offsetof(t.X)      // ERROR "indirection"
+const N2 = unsafe.Offsetof(p.X)      // ERROR "indirection"
+const N3 = unsafe.Offsetof(t.B.X)    // valid
+const N4 = unsafe.Offsetof(p.B.X)    // valid
+const N5 = unsafe.Offsetof(t.Method) // ERROR "method value"
+const N6 = unsafe.Offsetof(p.Method) // ERROR "method value"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4909b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4909b.go
new file mode 100644 (file)
index 0000000..0f594e3
--- /dev/null
@@ -0,0 +1,80 @@
+// errorcheckoutput
+
+package main
+
+import "fmt"
+
+// We are going to define 256 types T(n),
+// such that T(n) embeds T(2n) and *T(2n+1).
+
+func main() {
+       fmt.Printf("// errorcheck\n\n")
+       fmt.Printf("package p\n\n")
+       fmt.Println(`import "unsafe"`)
+
+       // Dump types.
+       for n := 1; n < 256; n++ {
+               writeStruct(n)
+       }
+       // Dump leaves
+       for n := 256; n < 512; n++ {
+               fmt.Printf("type T%d int\n", n)
+       }
+
+       fmt.Printf("var t T1\n")
+       fmt.Printf("var p *T1\n")
+
+       // Simple selectors
+       for n := 2; n < 256; n++ {
+               writeDot(n)
+       }
+
+       // Double selectors
+       for n := 128; n < 256; n++ {
+               writeDot(n/16, n)
+       }
+
+       // Triple selectors
+       for n := 128; n < 256; n++ {
+               writeDot(n/64, n/8, n)
+       }
+}
+
+const structTpl = `
+type T%d struct {
+       A%d int
+       T%d
+       *T%d
+}
+`
+
+func writeStruct(n int) {
+       fmt.Printf(structTpl, n, n, 2*n, 2*n+1)
+}
+
+func writeDot(ns ...int) {
+       for _, root := range []string{"t", "p"} {
+               fmt.Printf("const _ = unsafe.Offsetof(%s", root)
+               for _, n := range ns {
+                       fmt.Printf(".T%d", n)
+               }
+               // Does it involve an indirection?
+               nlast := ns[len(ns)-1]
+               nprev := 1
+               if len(ns) > 1 {
+                       nprev = ns[len(ns)-2]
+               }
+               isIndirect := false
+               for n := nlast / 2; n > nprev; n /= 2 {
+                       if n%2 == 1 {
+                               isIndirect = true
+                               break
+                       }
+               }
+               fmt.Print(")")
+               if isIndirect {
+                       fmt.Print(` // ERROR "indirection"`)
+               }
+               fmt.Print("\n")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/foo.go b/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/foo.go
new file mode 100644 (file)
index 0000000..19b73a0
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package foo
+
+type Op struct{}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state.go b/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state.go
new file mode 100644 (file)
index 0000000..c017b96
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package state
+
+import "./foo"
+
+func Public() {
+       var s Settings
+       s.op()
+}
+
+type State struct{}
+
+func (s *State) x(*Settings) {}
+
+type Settings struct{}
+
+func (c *Settings) x() {
+       run([]foo.Op{{}})
+}
+
+func run([]foo.Op) {}
+
+func (s *Settings) op() foo.Op {
+       return foo.Op{}
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state2.go b/gcc/testsuite/go.test/test/fixedbugs/issue4932.dir/state2.go
new file mode 100644 (file)
index 0000000..50f75db
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package state2
+
+import "./state"
+
+type Foo *state.State
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4932.go b/gcc/testsuite/go.test/test/fixedbugs/issue4932.go
new file mode 100644 (file)
index 0000000..2a6bc69
--- /dev/null
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4932: regression in export of composite literals.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/a.go
new file mode 100644 (file)
index 0000000..2b9e44e
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+var global, global2 *int
+
+type T struct {
+       Pointer *int
+}
+
+func dontinline() {}
+
+func Store(t *T) {
+       global = t.Pointer
+       dontinline()
+}
+
+func Store2(t *T) {
+       global2 = t.Pointer
+       dontinline()
+}
+
+func Get() *int {
+       return global
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/issue4964.dir/b.go
new file mode 100644 (file)
index 0000000..42a6f1d
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func F() {
+       // store 1 in a.global
+       x, y := 1, 2
+       t := a.T{Pointer: &x}
+       a.Store(&t)
+       _ = y
+}
+
+func G() {
+       // store 4 in a.global2
+       x, y := 3, 4
+       t := a.T{Pointer: &y}
+       a.Store2(&t)
+       _ = x
+}
+
+func main() {
+       F()
+       G()
+       p := a.Get()
+       n := *p
+       if n != 1 {
+               println(n, "!= 1")
+               panic("n != 1")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue4964.go b/gcc/testsuite/go.test/test/fixedbugs/issue4964.go
new file mode 100644 (file)
index 0000000..8291d1b
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 4964: exported escape analysis result is not enough
+// for cross package analysis.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5002.go b/gcc/testsuite/go.test/test/fixedbugs/issue5002.go
new file mode 100644 (file)
index 0000000..1e74fa1
--- /dev/null
@@ -0,0 +1,16 @@
+// build
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5002: 8g produces invalid CMPL $0, $0.
+// Used to fail at link time.
+
+package main
+
+func main() {
+       var y int64
+       if y%1 == 0 {
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5056.go b/gcc/testsuite/go.test/test/fixedbugs/issue5056.go
new file mode 100644 (file)
index 0000000..a2cde2a
--- /dev/null
@@ -0,0 +1,34 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5056: escape analysis not applied to wrapper functions
+
+package main
+
+type Foo int16
+
+func (f Foo) Esc() *int{
+       x := int(f)
+       return &x
+}
+
+type iface interface {
+       Esc() *int
+}
+
+var bar, foobar *int
+
+func main() {
+       var quux iface
+       var x Foo
+       
+       quux = x
+       bar = quux.Esc()
+       foobar = quux.Esc()
+       if bar == foobar {
+               panic("bar == foobar")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5089.go b/gcc/testsuite/go.test/test/fixedbugs/issue5089.go
new file mode 100644 (file)
index 0000000..81b9f05
--- /dev/null
@@ -0,0 +1,15 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5089: gc allows methods on non-locals if symbol already exists
+
+package p
+
+import "bufio" // GCCGO_ERROR "previous"
+
+func (b *bufio.Reader) Buffered() int { // ERROR "non-local|redefinition"
+       return -1
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/a.go
new file mode 100644 (file)
index 0000000..f20abb9
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+var A = [2]string{"hello", "world"}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/issue5105.dir/b.go
new file mode 100644 (file)
index 0000000..b12e739
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+var B = [2]string{"world", "hello"}
+
+func main() {
+       if a.A[0] != B[1] {
+               panic("bad hello")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5105.go b/gcc/testsuite/go.test/test/fixedbugs/issue5105.go
new file mode 100644 (file)
index 0000000..e3e5e5c
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5105: linker segfaults on duplicate definition
+// of a type..hash.* function.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/bug.go b/gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/bug.go
new file mode 100644 (file)
index 0000000..2fdf0f9
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bug
+
+type Node interface {
+       Eval(s *Scene)
+}
+
+type plug struct {
+       node Node
+}
+
+type Scene struct {
+       changed map[plug]bool
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/issue5125.dir/main.go
new file mode 100644 (file)
index 0000000..47acdeb
--- /dev/null
@@ -0,0 +1,10 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import _ "./bug"
+
+func main() {
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5125.go b/gcc/testsuite/go.test/test/fixedbugs/issue5125.go
new file mode 100644 (file)
index 0000000..c049df3
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5125: cyclic dependencies between types confuse
+// the hashability test during import.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5162.go b/gcc/testsuite/go.test/test/fixedbugs/issue5162.go
new file mode 100644 (file)
index 0000000..b14eae7
--- /dev/null
@@ -0,0 +1,88 @@
+// runoutput
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5162: bad array equality when multiple comparisons
+// happen in the same expression.
+
+package main
+
+import (
+       "fmt"
+       "strings"
+)
+
+const template = `
+func CheckEqNNN_TTT() {
+       onesA := [NNN]ttt{ONES}
+       onesB := [NNN]ttt{ONES}
+       twos := [NNN]ttt{TWOS}
+       if onesA != onesB {
+               println("onesA != onesB in CheckEqNNN_TTT")
+       }
+       if onesA == twos {
+               println("onesA == twos in CheckEqNNN_TTT")
+       }
+       if onesB == twos {
+               println("onesB == twos in CheckEqNNN_TTT")
+       }
+       if s := fmt.Sprint(onesA == onesB, onesA != twos, onesB != twos); s != "true true true" {
+               println("fail in CheckEqNNN_TTT:", s)
+       }
+}
+
+func CheckEqNNN_TTTExtraVar() {
+       onesA := [NNN]ttt{ONES}
+       onesB := [NNN]ttt{ONES}
+       twos := [NNN]ttt{TWOS}
+       onesX := onesA
+       if onesA != onesB {
+               println("onesA != onesB in CheckEqNNN_TTTExtraVar")
+       }
+       if onesA == twos {
+               println("onesA == twos in CheckEqNNN_TTTExtraVar")
+       }
+       if onesB == twos {
+               println("onesB == twos in CheckEqNNN_TTTExtraVar")
+       }
+       if s := fmt.Sprint(onesA == onesB, onesA != twos, onesB != twos); s != "true true true" {
+               println("fail in CheckEqNNN_TTTExtraVar:", s)
+       }
+       if s := fmt.Sprint(onesB == onesX); s != "true" {
+               println("extra var fail in CheckEqNNN_TTTExtraVar")
+       }
+}
+`
+
+func main() {
+       fmt.Print("// run\n\n")
+       fmt.Print("// THIS FILE IS AUTO-GENERATED\n\n")
+       fmt.Print("package main\n\n")
+       fmt.Println(`import "fmt"`)
+
+       types := []string{
+               "int", "int8", "int16", "int32", "int64",
+               "uint", "uint8", "uint16", "uint32", "uint64",
+               "float32", "float64"}
+       tocall := make([]string, 0, 32*len(types))
+       for i := 1; i <= 32; i++ {
+               for _, typ := range types {
+                       src := template
+                       src = strings.Replace(src, "NNN", fmt.Sprint(i), -1)
+                       src = strings.Replace(src, "TTT", strings.Title(typ), -1)
+                       src = strings.Replace(src, "ttt", typ, -1)
+                       src = strings.Replace(src, "ONES", "1"+strings.Repeat(", 1", i-1), -1)
+                       src = strings.Replace(src, "TWOS", "2"+strings.Repeat(", 2", i-1), -1)
+                       fmt.Print(src)
+                       tocall = append(tocall, fmt.Sprintf("CheckEq%d_%s", i, strings.Title(typ)))
+               }
+       }
+       fmt.Println("func main() {")
+       for _, fun := range tocall {
+               fmt.Printf("\t%s()\n", fun)
+               fmt.Printf("\t%sExtraVar()\n", fun)
+       }
+       fmt.Println("}")
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5231.go b/gcc/testsuite/go.test/test/fixedbugs/issue5231.go
new file mode 100644 (file)
index 0000000..4039913
--- /dev/null
@@ -0,0 +1,45 @@
+// compile
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5231: method values lose their variadic property.
+
+package p
+
+type T int
+
+func (t T) NotVariadic(s []int) int {
+       return int(t) + s[0]
+}
+
+func (t T) Variadic(s ...int) int {
+       return int(t) + s[0]
+}
+
+type I interface {
+       NotVariadic(s []int) int
+       Variadic(s ...int) int
+}
+
+func F() {
+       var t T
+       var p *T = &t
+       var i I = p
+
+       nv := t.NotVariadic
+       nv = p.NotVariadic
+       nv = i.NotVariadic
+       var s int = nv([]int{1, 2, 3})
+
+       v := t.Variadic
+       v = p.Variadic
+       v = i.Variadic
+       s = v(1, 2, 3)
+
+       var f1 func([]int) int = nv
+       var f2 func(...int) int = v
+
+       _, _, _ = f1, f2, s
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5244.go b/gcc/testsuite/go.test/test/fixedbugs/issue5244.go
new file mode 100644 (file)
index 0000000..e26c7b8
--- /dev/null
@@ -0,0 +1,18 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5244: the init order computation uses the wrong
+// order for top-level blank identifier assignments.
+// The example used to panic because it tries calling a
+// nil function instead of assigning to f before.
+
+package main
+
+var f = func() int { return 1 }
+var _ = f() + g()
+var g = func() int { return 2 }
+
+func main() {}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/bug.go b/gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/bug.go
new file mode 100644 (file)
index 0000000..8512461
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bug
+
+type S struct {
+       F func()
+}
+
+type X interface {
+       Bar()
+}
+
+func Foo(x X) *S {
+       return &S{F: x.Bar}
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/issue5259.dir/main.go
new file mode 100644 (file)
index 0000000..ad1da78
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./bug"
+
+type foo int
+
+func (f *foo) Bar() {
+}
+
+func main() {
+       bug.Foo(new(foo))
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5259.go b/gcc/testsuite/go.test/test/fixedbugs/issue5259.go
new file mode 100644 (file)
index 0000000..00fe19f
--- /dev/null
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5259: Inlining of method value causes internal compiler error
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/a.go
new file mode 100644 (file)
index 0000000..5a2c99f
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+const BOM = "\uFEFF"
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/issue5260.dir/b.go
new file mode 100644 (file)
index 0000000..299b75e
--- /dev/null
@@ -0,0 +1,11 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func main() {
+       _ = a.BOM
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5260.go b/gcc/testsuite/go.test/test/fixedbugs/issue5260.go
new file mode 100644 (file)
index 0000000..11fd5d0
--- /dev/null
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5260: Unicode BOM in exported string constant
+// cannot be read back during package import.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/pkg1.go b/gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/pkg1.go
new file mode 100644 (file)
index 0000000..b1c893a
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkg1
+
+import (
+       "runtime"
+)
+
+type T2 *[]string
+
+type Data struct {
+       T1 *[]T2
+}
+
+func CrashCall() (err error) {
+       var d Data
+
+       for count := 0; count < 10; count++ {
+               runtime.GC()
+
+               len := 2 // crash when >=2
+               x := make([]T2, len)
+
+               d = Data{T1: &x}
+
+               for j := 0; j < len; j++ {
+                       y := make([]string, 1)
+                       (*d.T1)[j] = &y
+               }
+       }
+       return nil
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/prog.go b/gcc/testsuite/go.test/test/fixedbugs/issue5291.dir/prog.go
new file mode 100644 (file)
index 0000000..8301091
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "./pkg1"
+)
+
+type message struct { // Presence of this creates a crash
+       data pkg1.Data
+}
+
+func main() {
+       pkg1.CrashCall()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5291.go b/gcc/testsuite/go.test/test/fixedbugs/issue5291.go
new file mode 100644 (file)
index 0000000..00d2ada
--- /dev/null
@@ -0,0 +1,9 @@
+// rundir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5291: GC crash
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/a.go
new file mode 100644 (file)
index 0000000..302822d
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+type Foo interface {
+       Hi() string
+}
+
+func Test1() Foo { return make(tst1) }
+
+type tst1 map[string]bool
+
+func (r tst1) Hi() string { return "Hi!" }
+
+func Test2() Foo { return make(tst2, 0) }
+
+type tst2 []string
+
+func (r tst2) Hi() string { return "Hi!" }
+
+func Test3() Foo { return make(tst3) }
+
+type tst3 chan string
+
+func (r tst3) Hi() string { return "Hi!" }
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/b.go b/gcc/testsuite/go.test/test/fixedbugs/issue5470.dir/b.go
new file mode 100644 (file)
index 0000000..0801c14
--- /dev/null
@@ -0,0 +1,13 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package b
+
+import "./a"
+
+func main() {
+       a.Test1()
+       a.Test2()
+       a.Test3()
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5470.go b/gcc/testsuite/go.test/test/fixedbugs/issue5470.go
new file mode 100644 (file)
index 0000000..6123c09
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5470: exported data for inlining may miss
+// the type argument of make.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5493.go b/gcc/testsuite/go.test/test/fixedbugs/issue5493.go
new file mode 100644 (file)
index 0000000..bbc62ff
--- /dev/null
@@ -0,0 +1,59 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "runtime"
+       "sync"
+       "sync/atomic"
+       "time"
+)
+
+const N = 10
+var count int64
+
+func run() error {
+       f1 := func() {}
+       f2 := func() {
+               func() {
+                       f1()
+               }()
+       }
+       runtime.SetFinalizer(&f1, func(f *func()) {
+               atomic.AddInt64(&count, -1)
+       })
+       go f2()
+       return nil
+}
+
+func main() {
+       // Does not work on 32-bits, or with gccgo, due to partially
+       // conservative GC.
+       // Try to enable when we have fully precise GC.
+       if runtime.GOARCH != "amd64" || runtime.Compiler == "gccgo" {
+               return
+       }
+       count = N
+       var wg sync.WaitGroup
+       wg.Add(N)
+       for i := 0; i < N; i++ {
+               go func() {
+                       run()
+                       wg.Done()
+               }()
+       }
+       wg.Wait()
+       for i := 0; i < 2*N; i++ {
+               time.Sleep(10 * time.Millisecond)
+               runtime.GC()
+       }
+       if count != 0 {
+               println(count, "out of", N, "finalizer are called")
+               panic("not all finalizers are called")
+       }
+}
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5515.go b/gcc/testsuite/go.test/test/fixedbugs/issue5515.go
new file mode 100644 (file)
index 0000000..053abf6
--- /dev/null
@@ -0,0 +1,34 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5515: miscompilation doing inlining in generated method wrapper
+
+package main
+
+type T uint32
+
+func main() {
+        b := make([]T, 8)
+        b[0] = 0xdeadbeef
+        rs := Slice(b)
+        sort(rs)
+}
+
+type Slice []T
+
+func (s Slice) Swap(i, j int) {
+        tmp := s[i]
+        s[i] = s[j]
+        s[j] = tmp
+}
+
+type Interface interface {
+        Swap(i, j int)
+}
+
+func sort(data Interface) {
+        data.Swap(0, 4)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5607.go b/gcc/testsuite/go.test/test/fixedbugs/issue5607.go
new file mode 100644 (file)
index 0000000..785be7a
--- /dev/null
@@ -0,0 +1,36 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5607: generation of init() function incorrectly
+// uses initializers of blank variables inside closures.
+
+package main
+
+var Test = func() {
+       var mymap = map[string]string{"a": "b"}
+
+       var innerTest = func() {
+               // Used to crash trying to compile this line as
+               // part of init() (funcdepth mismatch).
+               var _, x = mymap["a"]
+               println(x)
+       }
+       innerTest()
+}
+
+var Test2 = func() {
+       // The following initializer should not be part of init()
+       // The compiler used to generate a call to Panic() in init().
+       var _, x = Panic()
+       _ = x
+}
+
+func Panic() (int, int) {
+       panic("omg")
+       return 1, 2
+}
+
+func main() {}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/rethinkgo.go b/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/rethinkgo.go
new file mode 100644 (file)
index 0000000..4ae66d6
--- /dev/null
@@ -0,0 +1,16 @@
+package rethinkgo
+
+type Session struct {
+}
+
+func (s *Session) Run(query Exp) *int { return nil }
+
+type List []interface{}
+
+type Exp struct {
+       args []interface{}
+}
+
+func (e Exp) UseOutdated(useOutdated bool) Exp {
+       return Exp{args: List{e, useOutdated}}
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/x.go b/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/x.go
new file mode 100644 (file)
index 0000000..7e4f3a7
--- /dev/null
@@ -0,0 +1,7 @@
+package x
+
+import "./rethinkgo"
+
+var S *rethinkgo.Session
+
+
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/y.go b/gcc/testsuite/go.test/test/fixedbugs/issue5614.dir/y.go
new file mode 100644 (file)
index 0000000..97cc93a
--- /dev/null
@@ -0,0 +1,5 @@
+package y
+
+import "./x"
+
+var T = x.S
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5614.go b/gcc/testsuite/go.test/test/fixedbugs/issue5614.go
new file mode 100644 (file)
index 0000000..f2518d2
--- /dev/null
@@ -0,0 +1,11 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5614: exported data for inlining may miss
+// named types when used in implicit conversion to
+// their underlying type.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5753.go b/gcc/testsuite/go.test/test/fixedbugs/issue5753.go
new file mode 100644 (file)
index 0000000..230a1e8
--- /dev/null
@@ -0,0 +1,29 @@
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5753: bad typecheck info causes escape analysis to
+// not run on method thunks.
+
+package main
+
+type Thing struct{}
+
+func (t *Thing) broken(s string) []string {
+       foo := [1]string{s}
+       return foo[:]
+}
+
+func main() {
+       t := &Thing{}
+
+       f := t.broken
+       s := f("foo")
+       _ = f("bar")
+       if s[0] != "foo" {
+               panic(`s[0] != "foo"`)
+       }
+       
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/a.go b/gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/a.go
new file mode 100644 (file)
index 0000000..aa398e8
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+type I interface {
+       F()
+}
+
+type foo1 []byte
+type foo2 []rune
+type foo3 []uint8
+type foo4 []int32
+type foo5 string
+type foo6 string
+type foo7 string
+type foo8 string
+type foo9 string
+
+func (f foo1) F() { return }
+func (f foo2) F() { return }
+func (f foo3) F() { return }
+func (f foo4) F() { return }
+func (f foo5) F() { return }
+func (f foo6) F() { return }
+func (f foo7) F() { return }
+func (f foo8) F() { return }
+func (f foo9) F() { return }
+
+func Test1(s string) I  { return foo1(s) }
+func Test2(s string) I  { return foo2(s) }
+func Test3(s string) I  { return foo3(s) }
+func Test4(s string) I  { return foo4(s) }
+func Test5(s []byte) I  { return foo5(s) }
+func Test6(s []rune) I  { return foo6(s) }
+func Test7(s []uint8) I { return foo7(s) }
+func Test8(s []int32) I { return foo8(s) }
+func Test9(s int) I     { return foo9(s) }
+
+type bar map[int]int
+
+func (b bar) F() { return }
+
+func TestBar() I { return bar{1: 2} }
+
+type baz int
+
+func IsBaz(x interface{}) bool { _, ok := x.(baz); return ok }
+
+type baz2 int
+
+func IsBaz2(x interface{}) bool {
+       switch x.(type) {
+       case baz2:
+               return true
+       default:
+               return false
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/main.go b/gcc/testsuite/go.test/test/fixedbugs/issue5755.dir/main.go
new file mode 100644 (file)
index 0000000..6d515f2
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "./a"
+
+func main() {
+       a.Test1("frumious")
+       a.Test2("frumious")
+       a.Test3("frumious")
+       a.Test4("frumious")
+
+       a.Test5(nil)
+       a.Test6(nil)
+       a.Test7(nil)
+       a.Test8(nil)
+       a.Test9(0)
+
+       a.TestBar()
+       a.IsBaz(nil)
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5755.go b/gcc/testsuite/go.test/test/fixedbugs/issue5755.go
new file mode 100644 (file)
index 0000000..fa7ea4d
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5755: exported data for inlining may miss
+// named types when used in string conversions.
+
+package ignored
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5809.go b/gcc/testsuite/go.test/test/fixedbugs/issue5809.go
new file mode 100644 (file)
index 0000000..ca060b5
--- /dev/null
@@ -0,0 +1,27 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5809: 6g and 8g attempted to constant propagate indexed LEA
+
+package main
+
+import "fmt"
+
+func main() {
+       const d16 = "0123456789ABCDEF"
+       k := 0x1234
+       var x [4]byte
+       
+       x[0] = d16[k>>12&0xf]
+       x[1] = d16[k>>8&0xf]
+       x[2] = d16[k>>4&0xf]
+       x[3] = d16[k&0xf]
+       
+       if x != [4]byte{'1','2','3','4'} {
+               fmt.Println(x)
+               panic("x != [4]byte{'1','2','3','4'}")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5820.go b/gcc/testsuite/go.test/test/fixedbugs/issue5820.go
new file mode 100644 (file)
index 0000000..94de06d
--- /dev/null
@@ -0,0 +1,18 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 5820: register clobber when clearfat and 64 bit arithmetic is interleaved.
+
+package main
+
+func main() {
+       array := make([][]int, 2)
+       index := uint64(1)
+       array[index] = nil
+       if array[1] != nil {
+               panic("array[1] != nil")
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue5841.go b/gcc/testsuite/go.test/test/fixedbugs/issue5841.go
new file mode 100644 (file)
index 0000000..cfc4a50
--- /dev/null
@@ -0,0 +1,16 @@
+// build
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 5841: 8g produces invalid CMPL $0, $0.
+// Similar to issue 5002, used to fail at link time.
+
+package main
+
+func main() {
+       var y int
+       if y%1 == 0 {
+       }
+}
diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue887.go b/gcc/testsuite/go.test/test/fixedbugs/issue887.go
new file mode 100644 (file)
index 0000000..5bc193b
--- /dev/null
@@ -0,0 +1,36 @@
+// compile
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Used to leak registers on 8g.
+
+package p
+
+func f(x byte, y uint64) {
+       var r byte
+       switch y {
+       case 1:
+               r = x << y // '>>' triggers it too
+       case 2:
+               r = x << y
+       case 3:
+               r = x << y
+       case 4:
+               r = x << y
+       case 5:
+               r = x << y
+       case 6:
+               r = x << y
+       case 7:
+               r = x << y
+       case 8:
+               r = x << y
+       case 9:
+               r = x << y
+       case 10:
+               r = x << y
+       }
+       _ = r
+}
index 2912c37..4efae23 100644 (file)
@@ -196,4 +196,8 @@ func main() {
        if !close(-210.012e19, -210012, 1000, 19) {
                print("-210.012e19 is ", -210.012e19, "\n")
        }
+
+       if bad {
+               panic("float_lit")
+       }
 }
index f9f59a9..6c424cc 100644 (file)
@@ -87,4 +87,7 @@ func main() {
                        println(t.name, "=", t.expr, "want", t.want)
                }
        }
+       if bad {
+               panic("floatcmp failed")
+       }
 }
index c89f7ff..fb6f561 100644 (file)
@@ -14,6 +14,6 @@ func f1(a int) (int, float32) {
 }
 
 
-func f2(a int) (a int, b float32) { // ERROR "redeclared|definition"
+func f2(a int) (a int, b float32) { // ERROR "duplicate argument a|definition"
        return 8, 8.0
 }
index 6f6766f..2d646b6 100644 (file)
@@ -17,7 +17,7 @@ func f() int {
 
 func g() int {
        if !calledf {
-               println("BUG: func7 - called g before f")
+               panic("BUG: func7 - called g before f")
        }
        return 0
 }
@@ -28,4 +28,3 @@ func main() {
                panic("wrong answer")
        }
 }
-
index 7defe26..1305180 100644 (file)
@@ -37,13 +37,13 @@ func y() string {
 
 func main() {
        if f() == g() {
-               println("wrong f,g order")
+               panic("wrong f,g order")
        }
 
        if x() == (y() == "abc") {
                panic("wrong compare")
        }
        if xy != "xy" {
-               println("wrong x,y order")
+               panic("wrong x,y order")
        }
 }
diff --git a/gcc/testsuite/go.test/test/funcdup.go b/gcc/testsuite/go.test/test/funcdup.go
new file mode 100644 (file)
index 0000000..d15d685
--- /dev/null
@@ -0,0 +1,27 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+type T interface {
+       F1(i int) (i int) // ERROR "duplicate argument i|redefinition|previous"
+       F2(i, i int) // ERROR "duplicate argument i|redefinition|previous"
+       F3() (i, i int) // ERROR "duplicate argument i|redefinition|previous"
+}
+
+type T1 func(i, i int) // ERROR "duplicate argument i|redefinition|previous"
+type T2 func(i int) (i int) // ERROR "duplicate argument i|redefinition|previous"
+type T3 func() (i, i int) // ERROR "duplicate argument i|redefinition|previous"
+
+type R struct{}
+
+func (i *R) F1(i int)         {} // ERROR "duplicate argument i|redefinition|previous"
+func (i *R) F2() (i int)      {return 0} // ERROR "duplicate argument i|redefinition|previous"
+func (i *R) F3(j int) (j int) {return 0} // ERROR "duplicate argument j|redefinition|previous"
+
+func F1(i, i int)      {} // ERROR "duplicate argument i|redefinition|previous"
+func F2(i int) (i int) {return 0} // ERROR "duplicate argument i|redefinition|previous"
+func F3() (i, i int)   {return 0, 0} // ERROR "duplicate argument i|redefinition|previous"
diff --git a/gcc/testsuite/go.test/test/funcdup2.go b/gcc/testsuite/go.test/test/funcdup2.go
new file mode 100644 (file)
index 0000000..1db1a39
--- /dev/null
@@ -0,0 +1,17 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package p
+
+var T interface {
+       F1(i int) (i int) // ERROR "duplicate argument i|redefinition|previous"
+       F2(i, i int) // ERROR "duplicate argument i|redefinition|previous"
+       F3() (i, i int) // ERROR "duplicate argument i|redefinition|previous"
+}
+
+var T1 func(i, i int) // ERROR "duplicate argument i|redefinition|previous"
+var T2 func(i int) (i int) // ERROR "duplicate argument i|redefinition|previous"
+var T3 func() (i, i int) // ERROR "duplicate argument i|redefinition|previous"
index 3e44e04..742a5d3 100644 (file)
 == fixedbugs/
 
 =========== fixedbugs/bug429.go
-throw: all goroutines are asleep - deadlock!
+fatal error: all goroutines are asleep - deadlock!
 
 == bugs/
 
 =========== bugs/bug395.go
 bug395 is broken
-
-=========== bugs/bug434.go
-bugs/bug434.dir/two.go:10: one.t.int undefined (cannot refer to unexported field or method one.int)
-BUG:bug434
index 2f0d3c3..cdaccf4 100644 (file)
@@ -12,5 +12,5 @@ import "time"
 
 func main() {
        go println(42, true, false, true, 1.5, "world", (chan int)(nil), []int(nil), (map[string]int)(nil), (func())(nil), byte(255))
-       time.Sleep(1e6)
+       time.Sleep(100*time.Millisecond)
 }
diff --git a/gcc/testsuite/go.test/test/import2.dir/import2.go b/gcc/testsuite/go.test/test/import2.dir/import2.go
new file mode 100644 (file)
index 0000000..8bb1eb9
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2010 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Various declarations of exported variables and functions.
+
+package p
+
+var C1 chan <- chan int = (chan<- (chan int))(nil)
+var C2 chan (<- chan int) = (chan (<-chan int))(nil)
+var C3 <- chan chan int = (<-chan (chan int))(nil)
+var C4 chan chan <- int = (chan (chan<- int))(nil)
+
+var C5 <- chan <- chan int = (<-chan (<-chan int))(nil)
+var C6 chan <- <- chan int = (chan<- (<-chan int))(nil)
+var C7 chan <- chan <- int = (chan<- (chan<- int))(nil)
+
+var C8 <- chan <- chan chan int = (<-chan (<-chan (chan int)))(nil)
+var C9 <- chan chan <- chan int = (<-chan (chan<- (chan int)))(nil)
+var C10 chan <- <- chan chan int = (chan<- (<-chan (chan int)))(nil)
+var C11 chan <- chan <- chan int = (chan<- (chan<- (chan int)))(nil)
+var C12 chan chan <- <- chan int = (chan (chan<- (<-chan int)))(nil)
+var C13 chan chan <- chan <- int = (chan (chan<- (chan<- int)))(nil)
+
+var R1 chan<- (chan int) = (chan <- chan int)(nil)
+var R3 <-chan (chan int) = (<- chan chan int)(nil)
+var R4 chan (chan<- int) = (chan chan <- int)(nil)
+
+var R5 <-chan (<-chan int) = (<- chan <- chan int)(nil)
+var R6 chan<- (<-chan int) = (chan <- <- chan int)(nil)
+var R7 chan<- (chan<- int) = (chan <- chan <- int)(nil)
+
+var R8 <-chan (<-chan (chan int)) = (<- chan <- chan chan int)(nil)
+var R9 <-chan (chan<- (chan int)) = (<- chan chan <- chan int)(nil)
+var R10 chan<- (<-chan (chan int)) = (chan <- <- chan chan int)(nil)
+var R11 chan<- (chan<- (chan int)) = (chan <- chan <- chan int)(nil)
+var R12 chan (chan<- (<-chan int)) = (chan chan <- <- chan int)(nil)
+var R13 chan (chan<- (chan<- int)) = (chan chan <- chan <- int)(nil)
+
+var F1 func() func() int
+func F2() func() func() int
+func F3(func() func() int)
similarity index 89%
rename from gcc/testsuite/go.test/test/import3.go
rename to gcc/testsuite/go.test/test/import2.dir/import3.go
index 0a5ba1d..d7fe37b 100644 (file)
@@ -1,8 +1,3 @@
-// $G $D/import2.go && $G $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
-
 // Copyright 2010 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
index 5c275f3..f8d0b0a 100644 (file)
@@ -1,45 +1,8 @@
-// skip # used by import3
+// compiledir
 
 // Copyright 2010 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Various declarations of exported variables and functions.
-// Imported by import3.go.
-
-package p
-
-var C1 chan <- chan int = (chan<- (chan int))(nil)
-var C2 chan (<- chan int) = (chan (<-chan int))(nil)
-var C3 <- chan chan int = (<-chan (chan int))(nil)
-var C4 chan chan <- int = (chan (chan<- int))(nil)
-
-var C5 <- chan <- chan int = (<-chan (<-chan int))(nil)
-var C6 chan <- <- chan int = (chan<- (<-chan int))(nil)
-var C7 chan <- chan <- int = (chan<- (chan<- int))(nil)
-
-var C8 <- chan <- chan chan int = (<-chan (<-chan (chan int)))(nil)
-var C9 <- chan chan <- chan int = (<-chan (chan<- (chan int)))(nil)
-var C10 chan <- <- chan chan int = (chan<- (<-chan (chan int)))(nil)
-var C11 chan <- chan <- chan int = (chan<- (chan<- (chan int)))(nil)
-var C12 chan chan <- <- chan int = (chan (chan<- (<-chan int)))(nil)
-var C13 chan chan <- chan <- int = (chan (chan<- (chan<- int)))(nil)
-
-var R1 chan<- (chan int) = (chan <- chan int)(nil)
-var R3 <-chan (chan int) = (<- chan chan int)(nil)
-var R4 chan (chan<- int) = (chan chan <- int)(nil)
-
-var R5 <-chan (<-chan int) = (<- chan <- chan int)(nil)
-var R6 chan<- (<-chan int) = (chan <- <- chan int)(nil)
-var R7 chan<- (chan<- int) = (chan <- chan <- int)(nil)
-
-var R8 <-chan (<-chan (chan int)) = (<- chan <- chan chan int)(nil)
-var R9 <-chan (chan<- (chan int)) = (<- chan chan <- chan int)(nil)
-var R10 chan<- (<-chan (chan int)) = (chan <- <- chan chan int)(nil)
-var R11 chan<- (chan<- (chan int)) = (chan <- chan <- chan int)(nil)
-var R12 chan (chan<- (<-chan int)) = (chan chan <- <- chan int)(nil)
-var R13 chan (chan<- (chan<- int)) = (chan chan <- chan <- int)(nil)
-
-var F1 func() func() int
-func F2() func() func() int
-func F3(func() func() int)
+// Tests that export data does not corrupt type syntax.
+package ignored
diff --git a/gcc/testsuite/go.test/test/import4.dir/empty.go b/gcc/testsuite/go.test/test/import4.dir/empty.go
new file mode 100644 (file)
index 0000000..1dffa17
--- /dev/null
@@ -0,0 +1,10 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package empty
+
+import ( )
+const ( )
+var ( )
+type ( )
diff --git a/gcc/testsuite/go.test/test/import4.dir/import4.go b/gcc/testsuite/go.test/test/import4.dir/import4.go
new file mode 100644 (file)
index 0000000..f92c663
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify that various kinds of "imported and not used"
+// errors are caught by the compiler.
+// Does not compile.
+
+package main
+
+// standard
+import "fmt"   // ERROR "imported and not used.*fmt"
+
+// renamed
+import X "math"        // ERROR "imported and not used.*math"
+
+// import dot
+import . "bufio"       // ERROR "imported and not used.*bufio"
+
+// again, package without anything in it
+import "./empty"       // GC_ERROR "imported and not used.*empty"
+import Z "./empty"     // GC_ERROR "imported and not used.*empty"
+import . "./empty"     // ERROR "imported and not used.*empty"
+
index f35f567..875bf89 100644 (file)
@@ -1,7 +1,4 @@
-// $G $D/empty.go && errchk $G $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckdir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -11,19 +8,4 @@
 // errors are caught by the compiler.
 // Does not compile.
 
-package main
-
-// standard
-import "fmt"   // ERROR "imported and not used.*fmt"
-
-// renamed
-import X "math"        // ERROR "imported and not used.*math"
-
-// import dot
-import . "bufio"       // ERROR "imported and not used.*bufio"
-
-// again, package without anything in it
-import "./empty"       // ERROR "imported and not used.*empty"
-import Z "./empty"     // ERROR "imported and not used.*empty"
-import . "./empty"     // ERROR "imported and not used.*empty"
-
+package ignored
index daab45f..a8c471b 100644 (file)
@@ -36,6 +36,8 @@ const (
        ci64big int64 = 1<<31
        ci64bigger int64 = 1<<32
        chuge = 1<<100
+       cfgood = 2.0
+       cfbad = 2.1
 
        cnj = -2
        cni int = -3
@@ -46,6 +48,8 @@ const (
        cni64big int64 = -1<<31
        cni64bigger int64 = -1<<32
        cnhuge = -1<<100
+       cnfgood = -2.0
+       cnfbad = -2.1
 )
 
 var j int = 100020
@@ -57,6 +61,8 @@ var i64 int64 = 100023
 var i64big int64 = 1<<31
 var i64bigger int64 = 1<<32
 var huge uint64 = 1<<64 - 1
+var fgood float64 = 2.0
+var fbad float64 = 2.1
 
 var nj int = -10
 var ni int = -11
@@ -67,6 +73,8 @@ var ni64 int64 = -13
 var ni64big int64 = -1<<31
 var ni64bigger int64 = -1<<32
 var nhuge int64 = -1<<63
+var nfgood float64 = -2.0
+var nfbad float64 = -2.1
 
 var si []int = make([]int, 10)
 var ai [10]int
@@ -156,7 +164,7 @@ func testExpr(b *bufio.Writer, expr string) {
        if pass == 0 {
                fmt.Fprintf(b, "\ttest(func(){use(%s)}, %q)\n", expr, expr)
        } else {
-               fmt.Fprintf(b, "\tuse(%s)  // ERROR \"index|overflow\"\n", expr)
+               fmt.Fprintf(b, "\tuse(%s)  // ERROR \"index|overflow|truncated|must be integer\"\n", expr)
        }
 }
 
@@ -169,15 +177,15 @@ func main() {
                fmt.Fprint(b, "// errorcheck\n\n")
        }
        fmt.Fprint(b, prolog)
-       
+
        var choices = [][]string{
                // Direct value, fetch from struct, fetch from struct pointer.
                // The last two cases get us to oindex_const_sudo in gsubr.c.
                []string{"", "t.", "pt."},
-               
+
                // Array, pointer to array, slice.
                []string{"a", "pa", "s"},
-               
+
                // Element is int, element is quad (struct).
                // This controls whether we end up in gsubr.c (i) or cgen.c (q).
                []string{"i", "q"},
@@ -192,9 +200,9 @@ func main() {
                []string{"", "n"},
 
                // Size of index.
-               []string{"j", "i", "i8", "i16", "i32", "i64", "i64big", "i64bigger", "huge"},
+               []string{"j", "i", "i8", "i16", "i32", "i64", "i64big", "i64bigger", "huge", "fgood", "fbad"},
        }
-       
+
        forall(choices, func(x []string) {
                p, a, e, big, c, n, i := x[0], x[1], x[2], x[3], x[4], x[5], x[6]
 
@@ -206,7 +214,7 @@ func main() {
                //      negative constant
                //      large constant
                thisPass := 0
-               if c == "c" && (a == "a" || a == "pa" || n == "n" || i == "i64big" || i == "i64bigger" || i == "huge") {
+               if c == "c" && (a == "a" || a == "pa" || n == "n" || i == "i64big" || i == "i64bigger" || i == "huge" || i == "fbad") {
                        if i == "huge" {
                                // Due to a detail of 6g's internals,
                                // the huge constant errors happen in an
@@ -223,27 +231,50 @@ func main() {
                                thisPass = 2
                        }
                }
-               
+
+               pae := p + a + e + big
+               cni := c + n + i
+
                // If we're using the big-len data, positive int8 and int16 cannot overflow.
                if big == "b" && n == "" && (i == "i8" || i == "i16") {
+                       if pass == 0 {
+                               fmt.Fprintf(b, "\tuse(%s[%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[0:%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[1:%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[%s:])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[%s:%s])\n", pae, cni, cni)
+                       }
+                       return
+               }
+
+               // Float variables cannot be used as indices.
+               if c == "" && (i == "fgood" || i == "fbad") {
+                       return
+               }
+               // Integral float constat is ok.
+               if c == "c" && n == "" && i == "fgood" {
+                       if pass == 0 {
+                               fmt.Fprintf(b, "\tuse(%s[%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[0:%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[1:%s])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[%s:])\n", pae, cni)
+                               fmt.Fprintf(b, "\tuse(%s[%s:%s])\n", pae, cni, cni)
+                       }
                        return
                }
 
                // Only print the test case if it is appropriate for this pass.
                if thisPass == pass {
-                       pae := p+a+e+big
-                       cni := c+n+i
-                       
                        // Index operation
-                       testExpr(b, pae + "[" + cni + "]")
-                       
+                       testExpr(b, pae+"["+cni+"]")
+
                        // Slice operation.
                        // Low index 0 is a special case in ggen.c
                        // so test both 0 and 1.
-                       testExpr(b, pae + "[0:" + cni + "]")
-                       testExpr(b, pae + "[1:" + cni + "]")
-                       testExpr(b, pae + "[" + cni + ":]")
-                       testExpr(b, pae + "[" + cni + ":" + cni + "]")
+                       testExpr(b, pae+"[0:"+cni+"]")
+                       testExpr(b, pae+"[1:"+cni+"]")
+                       testExpr(b, pae+"["+cni+":]")
+                       testExpr(b, pae+"["+cni+":"+cni+"]")
                }
        })
 
@@ -253,7 +284,7 @@ func main() {
 
 func forall(choices [][]string, f func([]string)) {
        x := make([]string, len(choices))
-       
+
        var recurse func(d int)
        recurse = func(d int) {
                if d >= len(choices) {
@@ -261,7 +292,7 @@ func forall(choices [][]string, f func([]string)) {
                        return
                }
                for _, x[d] = range choices[d] {
-                       recurse(d+1)
+                       recurse(d + 1)
                }
        }
        recurse(0)
index a888ad7..f6eda6e 100644 (file)
@@ -33,6 +33,7 @@ func init() {
        sys1 := memstats.Sys
        if sys1-sys > chunk*50 {
                println("allocated 1000 chunks of", chunk, "and used ", sys1-sys, "memory")
+               panic("init1")
        }
 }
 
index 48908c3..ca05414 100644 (file)
@@ -26,3 +26,15 @@ var a5 = []byte { x: 2 }     // ERROR "index"
 
 var ok1 = S { }        // should be ok
 var ok2 = T { S: ok1 } // should be ok
+
+// These keys can be computed at compile time but they are
+// not constants as defined by the spec, so they do not trigger
+// compile-time errors about duplicate key values.
+// See issue 4555.
+
+type Key struct {X, Y int}
+
+var _ = map[Key]string{
+       Key{1,2}: "hello",
+       Key{1,2}: "world",
+}
@@ -1,5 +1,3 @@
-// skip # used by embed1.go
-
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
diff --git a/gcc/testsuite/go.test/test/interface/embed1.dir/embed1.go b/gcc/testsuite/go.test/test/interface/embed1.dir/embed1.go
new file mode 100644 (file)
index 0000000..7dfb1db
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test that embedded interface types can have local methods.
+
+package main
+
+import "./embed0"
+
+type T int
+func (t T) m() {}
+
+type I interface { m() }
+type J interface { I }
+
+type PI interface { p.I }
+type PJ interface { p.J }
+
+func main() {
+       var i I
+       var j J
+       var t T
+       i = t
+       j = t
+       _ = i
+       _ = j
+       i = j
+       _ = i
+       j = i
+       _ = j
+       var pi PI
+       var pj PJ
+       var pt p.T
+       pi = pt
+       pj = pt
+       _ = pi
+       _ = pj
+       pi = pj
+       _ = pi
+       pj = pi
+       _ = pj
+}
index 07b873a..784b82b 100644 (file)
@@ -1,7 +1,4 @@
-// $G $D/embed0.go && $G $D/$F.go && $L $F.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -9,40 +6,4 @@
 
 // Test that embedded interface types can have local methods.
 
-package main
-
-import "./embed0"
-
-type T int
-func (t T) m() {}
-
-type I interface { m() }
-type J interface { I }
-
-type PI interface { p.I }
-type PJ interface { p.J }
-
-func main() {
-       var i I
-       var j J
-       var t T
-       i = t
-       j = t
-       _ = i
-       _ = j
-       i = j
-       _ = i
-       j = i
-       _ = j
-       var pi PI
-       var pj PJ
-       var pt p.T
-       pi = pt
-       pj = pt
-       _ = pi
-       _ = pj
-       pi = pj
-       _ = pi
-       pj = pi
-       _ = pj
-}
+package ignored
@@ -1,5 +1,3 @@
-// skip # used by private.go
-
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
diff --git a/gcc/testsuite/go.test/test/interface/private.dir/prog.go b/gcc/testsuite/go.test/test/interface/private.dir/prog.go
new file mode 100644 (file)
index 0000000..abea7d6
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test that unexported methods are not visible outside the package.
+// Does not compile.
+
+package main
+
+import "./private1"
+
+type Exported interface {
+       private()
+}
+
+type Implementation struct{}
+
+func (p *Implementation) private() {}
+
+func main() {
+       var x Exported
+       x = new(Implementation)
+       x.private()
+
+       var px p.Exported
+       px = p.X
+
+       px.private()                    // ERROR "private"
+
+       px = new(Implementation)        // ERROR "private"
+
+       x = px                          // ERROR "private"
+}
index 0a42385..a0da249 100644 (file)
@@ -1,7 +1,4 @@
-// $G $D/${F}1.go && errchk $G $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckdir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -10,29 +7,4 @@
 // Test that unexported methods are not visible outside the package.
 // Does not compile.
 
-package main
-
-import "./private1"
-
-type Exported interface {
-       private()
-}
-
-type Implementation struct{}
-
-func (p *Implementation) private() {}
-
-func main() {
-       var x Exported
-       x = new(Implementation)
-       x.private()
-
-       var px p.Exported
-       px = p.X
-
-       px.private()                    // ERROR "private"
-
-       px = new(Implementation)        // ERROR "private"
-
-       x = px                          // ERROR "private"
-}
+package ignored
diff --git a/gcc/testsuite/go.test/test/interface/recursive1.dir/recursive1.go b/gcc/testsuite/go.test/test/interface/recursive1.dir/recursive1.go
new file mode 100644 (file)
index 0000000..441f0ec
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Mutually recursive type definitions imported and used by recursive1.go.
+
+package p
+
+type I1 interface {
+       F() I2
+}
+
+type I2 interface {
+       I1
+}
@@ -1,8 +1,3 @@
-// $G $D/recursive1.go && $G $D/$F.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
-
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
index cc3cdc3..62f6108 100644 (file)
@@ -1,4 +1,4 @@
-// skip # used by recursive2
+// compiledir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -6,12 +6,4 @@
 
 // Mutually recursive type definitions imported and used by recursive1.go.
 
-package p
-
-type I1 interface {
-       F() I2
-}
-
-type I2 interface {
-       I1
-}
+package ignored
index ba185fc..c3d6bc1 100644 (file)
@@ -24,7 +24,6 @@ func equal(a, b float32) bool {
        return a == b
 }
 
-
 func main() {
        // bool
        var t bool = true
@@ -225,6 +224,6 @@ func main() {
        assert(sj0 == sj3, "sj3")
 
        if nbad > 0 {
-               println()
+               panic("literal failed")
        }
 }
index 6dec0df..485e743 100644 (file)
@@ -5,6 +5,7 @@
 // license that can be found in the LICENSE file.
 
 // Test maps, almost exhaustively.
+// NaN complexity test is in mapnan.go.
 
 package main
 
@@ -12,7 +13,6 @@ import (
        "fmt"
        "math"
        "strconv"
-       "time"
 )
 
 const count = 100
@@ -41,7 +41,7 @@ func testbasic() {
        for i := 0; i < len(mlit); i++ {
                s := string([]byte{byte(i) + '0'})
                if mlit[s] != i {
-                       fmt.Printf("mlit[%s] = %d\n", s, mlit[s])
+                       panic(fmt.Sprintf("mlit[%s] = %d\n", s, mlit[s]))
                }
        }
 
@@ -102,46 +102,46 @@ func testbasic() {
 
        // test len
        if len(mib) != count {
-               fmt.Printf("len(mib) = %d\n", len(mib))
+               panic(fmt.Sprintf("len(mib) = %d\n", len(mib)))
        }
        if len(mii) != count {
-               fmt.Printf("len(mii) = %d\n", len(mii))
+               panic(fmt.Sprintf("len(mii) = %d\n", len(mii)))
        }
        if len(mfi) != count {
-               fmt.Printf("len(mfi) = %d\n", len(mfi))
+               panic(fmt.Sprintf("len(mfi) = %d\n", len(mfi)))
        }
        if len(mif) != count {
-               fmt.Printf("len(mif) = %d\n", len(mif))
+               panic(fmt.Sprintf("len(mif) = %d\n", len(mif)))
        }
        if len(msi) != count {
-               fmt.Printf("len(msi) = %d\n", len(msi))
+               panic(fmt.Sprintf("len(msi) = %d\n", len(msi)))
        }
        if len(mis) != count {
-               fmt.Printf("len(mis) = %d\n", len(mis))
+               panic(fmt.Sprintf("len(mis) = %d\n", len(mis)))
        }
        if len(mss) != count {
-               fmt.Printf("len(mss) = %d\n", len(mss))
+               panic(fmt.Sprintf("len(mss) = %d\n", len(mss)))
        }
        if len(mspa) != count {
-               fmt.Printf("len(mspa) = %d\n", len(mspa))
+               panic(fmt.Sprintf("len(mspa) = %d\n", len(mspa)))
        }
        if len(mipT) != count {
-               fmt.Printf("len(mipT) = %d\n", len(mipT))
+               panic(fmt.Sprintf("len(mipT) = %d\n", len(mipT)))
        }
        if len(mpTi) != count {
-               fmt.Printf("len(mpTi) = %d\n", len(mpTi))
+               panic(fmt.Sprintf("len(mpTi) = %d\n", len(mpTi)))
        }
        //      if len(mti) != count {
-       //              fmt.Printf("len(mti) = %d\n", len(mti))
+       //              panic(fmt.Sprintf("len(mti) = %d\n", len(mti)))
        //      }
        if len(mipM) != count {
-               fmt.Printf("len(mipM) = %d\n", len(mipM))
+               panic(fmt.Sprintf("len(mipM) = %d\n", len(mipM)))
        }
        //      if len(mti) != count {
-       //              fmt.Printf("len(mti) = %d\n", len(mti))
+       //              panic(fmt.Sprintf("len(mti) = %d\n", len(mti)))
        //      }
        if len(mit) != count {
-               fmt.Printf("len(mit) = %d\n", len(mit))
+               panic(fmt.Sprintf("len(mit) = %d\n", len(mit)))
        }
 
        // test construction directly
@@ -151,48 +151,48 @@ func testbasic() {
                f := float32(i)
                // BUG m := M(i, i+1)
                if mib[i] != (i != 0) {
-                       fmt.Printf("mib[%d] = %t\n", i, mib[i])
+                       panic(fmt.Sprintf("mib[%d] = %t\n", i, mib[i]))
                }
                if mii[i] != 10*i {
-                       fmt.Printf("mii[%d] = %d\n", i, mii[i])
+                       panic(fmt.Sprintf("mii[%d] = %d\n", i, mii[i]))
                }
                if mfi[f] != 10*i {
-                       fmt.Printf("mfi[%d] = %d\n", i, mfi[f])
+                       panic(fmt.Sprintf("mfi[%d] = %d\n", i, mfi[f]))
                }
                if mif[i] != 10.0*f {
-                       fmt.Printf("mif[%d] = %g\n", i, mif[i])
+                       panic(fmt.Sprintf("mif[%d] = %g\n", i, mif[i]))
                }
                if mis[i] != s {
-                       fmt.Printf("mis[%d] = %s\n", i, mis[i])
+                       panic(fmt.Sprintf("mis[%d] = %s\n", i, mis[i]))
                }
                if msi[s] != i {
-                       fmt.Printf("msi[%s] = %d\n", s, msi[s])
+                       panic(fmt.Sprintf("msi[%s] = %d\n", s, msi[s]))
                }
                if mss[s] != s10 {
-                       fmt.Printf("mss[%s] = %g\n", s, mss[s])
+                       panic(fmt.Sprintf("mss[%s] = %g\n", s, mss[s]))
                }
                for j := 0; j < len(mspa[s]); j++ {
                        if mspa[s][j] != s10 {
-                               fmt.Printf("mspa[%s][%d] = %s\n", s, j, mspa[s][j])
+                               panic(fmt.Sprintf("mspa[%s][%d] = %s\n", s, j, mspa[s][j]))
                        }
                }
                if mipT[i].i != int64(i) || mipT[i].f != f {
-                       fmt.Printf("mipT[%d] = %v\n", i, mipT[i])
+                       panic(fmt.Sprintf("mipT[%d] = %v\n", i, mipT[i]))
                }
                if mpTi[apT[i]] != i {
-                       fmt.Printf("mpTi[apT[%d]] = %d\n", i, mpTi[apT[i]])
+                       panic(fmt.Sprintf("mpTi[apT[%d]] = %d\n", i, mpTi[apT[i]]))
                }
                //      if(mti[t] != i) {
-               //              fmt.Printf("mti[%s] = %s\n", s, mti[t])
+               //              panic(fmt.Sprintf("mti[%s] = %s\n", s, mti[t]))
                //      }
                if mipM[i][i] != i+1 {
-                       fmt.Printf("mipM[%d][%d] = %d\n", i, i, mipM[i][i])
+                       panic(fmt.Sprintf("mipM[%d][%d] = %d\n", i, i, mipM[i][i]))
                }
                //      if(mti[t] != i) {
-               //              fmt.Printf("mti[%v] = %d\n", t, mti[t])
+               //              panic(fmt.Sprintf("mti[%v] = %d\n", t, mti[t]))
                //      }
                if mit[i].i != int64(i) || mit[i].f != f {
-                       fmt.Printf("mit[%d] = {%d %g}\n", i, mit[i].i, mit[i].f)
+                       panic(fmt.Sprintf("mit[%d] = {%d %g}\n", i, mit[i].i, mit[i].f))
                }
        }
 
@@ -204,131 +204,131 @@ func testbasic() {
                {
                        _, b := mib[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mib[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mib[%d]\n", i))
                        }
                        _, b = mib[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mib[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mib[%d]\n", i))
                        }
                }
                {
                        _, b := mii[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mii[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mii[%d]\n", i))
                        }
                        _, b = mii[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mii[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mii[%d]\n", i))
                        }
                }
                {
                        _, b := mfi[f]
                        if !b {
-                               fmt.Printf("tuple existence decl: mfi[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mfi[%d]\n", i))
                        }
                        _, b = mfi[f]
                        if !b {
-                               fmt.Printf("tuple existence assign: mfi[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mfi[%d]\n", i))
                        }
                }
                {
                        _, b := mif[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mif[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mif[%d]\n", i))
                        }
                        _, b = mif[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mif[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mif[%d]\n", i))
                        }
                }
                {
                        _, b := mis[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mis[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mis[%d]\n", i))
                        }
                        _, b = mis[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mis[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mis[%d]\n", i))
                        }
                }
                {
                        _, b := msi[s]
                        if !b {
-                               fmt.Printf("tuple existence decl: msi[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: msi[%d]\n", i))
                        }
                        _, b = msi[s]
                        if !b {
-                               fmt.Printf("tuple existence assign: msi[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: msi[%d]\n", i))
                        }
                }
                {
                        _, b := mss[s]
                        if !b {
-                               fmt.Printf("tuple existence decl: mss[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mss[%d]\n", i))
                        }
                        _, b = mss[s]
                        if !b {
-                               fmt.Printf("tuple existence assign: mss[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mss[%d]\n", i))
                        }
                }
                {
                        _, b := mspa[s]
                        if !b {
-                               fmt.Printf("tuple existence decl: mspa[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mspa[%d]\n", i))
                        }
                        _, b = mspa[s]
                        if !b {
-                               fmt.Printf("tuple existence assign: mspa[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mspa[%d]\n", i))
                        }
                }
                {
                        _, b := mipT[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mipT[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mipT[%d]\n", i))
                        }
                        _, b = mipT[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mipT[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mipT[%d]\n", i))
                        }
                }
                {
                        _, b := mpTi[apT[i]]
                        if !b {
-                               fmt.Printf("tuple existence decl: mpTi[apT[%d]]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mpTi[apT[%d]]\n", i))
                        }
                        _, b = mpTi[apT[i]]
                        if !b {
-                               fmt.Printf("tuple existence assign: mpTi[apT[%d]]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mpTi[apT[%d]]\n", i))
                        }
                }
                {
                        _, b := mipM[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mipM[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mipM[%d]\n", i))
                        }
                        _, b = mipM[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mipM[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mipM[%d]\n", i))
                        }
                }
                {
                        _, b := mit[i]
                        if !b {
-                               fmt.Printf("tuple existence decl: mit[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence decl: mit[%d]\n", i))
                        }
                        _, b = mit[i]
                        if !b {
-                               fmt.Printf("tuple existence assign: mit[%d]\n", i)
+                               panic(fmt.Sprintf("tuple existence assign: mit[%d]\n", i))
                        }
                }
                //              {
                //                      _, b := mti[t]
                //                      if !b {
-               //                              fmt.Printf("tuple existence decl: mti[%d]\n", i)
+               //                              panic(fmt.Sprintf("tuple existence decl: mti[%d]\n", i))
                //                      }
                //                      _, b = mti[t]
                //                      if !b {
-               //                              fmt.Printf("tuple existence assign: mti[%d]\n", i)
+               //                              panic(fmt.Sprintf("tuple existence assign: mti[%d]\n", i))
                //                      }
                //              }
        }
@@ -341,131 +341,131 @@ func testbasic() {
                {
                        _, b := mib[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mib[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mib[%d]", i))
                        }
                        _, b = mib[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mib[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mib[%d]", i))
                        }
                }
                {
                        _, b := mii[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mii[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mii[%d]", i))
                        }
                        _, b = mii[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mii[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mii[%d]", i))
                        }
                }
                {
                        _, b := mfi[f]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mfi[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mfi[%d]", i))
                        }
                        _, b = mfi[f]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mfi[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mfi[%d]", i))
                        }
                }
                {
                        _, b := mif[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mif[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mif[%d]", i))
                        }
                        _, b = mif[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mif[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mif[%d]", i))
                        }
                }
                {
                        _, b := mis[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mis[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mis[%d]", i))
                        }
                        _, b = mis[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mis[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mis[%d]", i))
                        }
                }
                {
                        _, b := msi[s]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: msi[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: msi[%d]", i))
                        }
                        _, b = msi[s]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: msi[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: msi[%d]", i))
                        }
                }
                {
                        _, b := mss[s]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mss[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mss[%d]", i))
                        }
                        _, b = mss[s]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mss[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mss[%d]", i))
                        }
                }
                {
                        _, b := mspa[s]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mspa[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mspa[%d]", i))
                        }
                        _, b = mspa[s]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mspa[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mspa[%d]", i))
                        }
                }
                {
                        _, b := mipT[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mipT[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mipT[%d]", i))
                        }
                        _, b = mipT[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mipT[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mipT[%d]", i))
                        }
                }
                {
                        _, b := mpTi[apT[i]]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mpTi[apt[%d]]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mpTi[apt[%d]]", i))
                        }
                        _, b = mpTi[apT[i]]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mpTi[apT[%d]]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mpTi[apT[%d]]", i))
                        }
                }
                {
                        _, b := mipM[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mipM[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mipM[%d]", i))
                        }
                        _, b = mipM[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mipM[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mipM[%d]", i))
                        }
                }
                //              {
                //                      _, b := mti[t]
                //                      if b {
-               //                              fmt.Printf("tuple nonexistence decl: mti[%d]", i)
+               //                              panic(fmt.Sprintf("tuple nonexistence decl: mti[%d]", i))
                //                      }
                //                      _, b = mti[t]
                //                      if b {
-               //                              fmt.Printf("tuple nonexistence assign: mti[%d]", i)
+               //                              panic(fmt.Sprintf("tuple nonexistence assign: mti[%d]", i))
                //                      }
                //              }
                {
                        _, b := mit[i]
                        if b {
-                               fmt.Printf("tuple nonexistence decl: mit[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence decl: mit[%d]", i))
                        }
                        _, b = mit[i]
                        if b {
-                               fmt.Printf("tuple nonexistence assign: mit[%d]", i)
+                               panic(fmt.Sprintf("tuple nonexistence assign: mit[%d]", i))
                        }
                }
        }
@@ -475,21 +475,25 @@ func testbasic() {
                s := strconv.Itoa(i)
                mspa[s][i%2] = "deleted"
                if mspa[s][i%2] != "deleted" {
-                       fmt.Printf("update mspa[%s][%d] = %s\n", s, i%2, mspa[s][i%2])
+                       panic(fmt.Sprintf("update mspa[%s][%d] = %s\n", s, i%2, mspa[s][i%2]))
+
                }
 
                mipT[i].i += 1
                if mipT[i].i != int64(i)+1 {
-                       fmt.Printf("update mipT[%d].i = %d\n", i, mipT[i].i)
+                       panic(fmt.Sprintf("update mipT[%d].i = %d\n", i, mipT[i].i))
+
                }
                mipT[i].f = float32(i + 1)
                if mipT[i].f != float32(i+1) {
-                       fmt.Printf("update mipT[%d].f = %g\n", i, mipT[i].f)
+                       panic(fmt.Sprintf("update mipT[%d].f = %g\n", i, mipT[i].f))
+
                }
 
                mipM[i][i]++
                if mipM[i][i] != (i+1)+1 {
-                       fmt.Printf("update mipM[%d][%d] = %d\n", i, i, mipM[i][i])
+                       panic(fmt.Sprintf("update mipM[%d][%d] = %d\n", i, i, mipM[i][i]))
+
                }
        }
 
@@ -519,29 +523,29 @@ func testfloat() {
                        nanb: "NaN",
                }
                if m[pz] != "+0" {
-                       fmt.Println("float32 map cannot read back m[+0]:", m[pz])
+                       panic(fmt.Sprintln("float32 map cannot read back m[+0]:", m[pz]))
                }
                if m[nz] != "+0" {
-                       fmt.Println("float32 map does not treat", pz, "and", nz, "as equal for read")
-                       fmt.Println("float32 map does not treat -0 and +0 as equal for read")
+                       fmt.Sprintln("float32 map does not treat", pz, "and", nz, "as equal for read")
+                       panic(fmt.Sprintln("float32 map does not treat -0 and +0 as equal for read"))
                }
                m[nz] = "-0"
                if m[pz] != "-0" {
-                       fmt.Println("float32 map does not treat -0 and +0 as equal for write")
+                       panic(fmt.Sprintln("float32 map does not treat -0 and +0 as equal for write"))
                }
                if _, ok := m[nana]; ok {
-                       fmt.Println("float32 map allows NaN lookup (a)")
+                       panic(fmt.Sprintln("float32 map allows NaN lookup (a)"))
                }
                if _, ok := m[nanb]; ok {
-                       fmt.Println("float32 map allows NaN lookup (b)")
+                       panic(fmt.Sprintln("float32 map allows NaN lookup (b)"))
                }
                if len(m) != 3 {
-                       fmt.Println("float32 map should have 3 entries:", m)
+                       panic(fmt.Sprintln("float32 map should have 3 entries:", m))
                }
                m[nana] = "NaN"
                m[nanb] = "NaN"
                if len(m) != 5 {
-                       fmt.Println("float32 map should have 5 entries:", m)
+                       panic(fmt.Sprintln("float32 map should have 5 entries:", m))
                }
        }
 
@@ -559,25 +563,25 @@ func testfloat() {
                        nanb: "NaN",
                }
                if m[nz] != "+0" {
-                       fmt.Println("float64 map does not treat -0 and +0 as equal for read")
+                       panic(fmt.Sprintln("float64 map does not treat -0 and +0 as equal for read"))
                }
                m[nz] = "-0"
                if m[pz] != "-0" {
-                       fmt.Println("float64 map does not treat -0 and +0 as equal for write")
+                       panic(fmt.Sprintln("float64 map does not treat -0 and +0 as equal for write"))
                }
                if _, ok := m[nana]; ok {
-                       fmt.Println("float64 map allows NaN lookup (a)")
+                       panic(fmt.Sprintln("float64 map allows NaN lookup (a)"))
                }
                if _, ok := m[nanb]; ok {
-                       fmt.Println("float64 map allows NaN lookup (b)")
+                       panic(fmt.Sprintln("float64 map allows NaN lookup (b)"))
                }
                if len(m) != 3 {
-                       fmt.Println("float64 map should have 3 entries:", m)
+                       panic(fmt.Sprintln("float64 map should have 3 entries:", m))
                }
                m[nana] = "NaN"
                m[nanb] = "NaN"
                if len(m) != 5 {
-                       fmt.Println("float64 map should have 5 entries:", m)
+                       panic(fmt.Sprintln("float64 map should have 5 entries:", m))
                }
        }
 
@@ -595,25 +599,25 @@ func testfloat() {
                        nanb: "NaN",
                }
                if m[nz] != "+0" {
-                       fmt.Println("complex64 map does not treat -0 and +0 as equal for read")
+                       panic(fmt.Sprintln("complex64 map does not treat -0 and +0 as equal for read"))
                }
                m[nz] = "-0"
                if m[pz] != "-0" {
-                       fmt.Println("complex64 map does not treat -0 and +0 as equal for write")
+                       panic(fmt.Sprintln("complex64 map does not treat -0 and +0 as equal for write"))
                }
                if _, ok := m[nana]; ok {
-                       fmt.Println("complex64 map allows NaN lookup (a)")
+                       panic(fmt.Sprintln("complex64 map allows NaN lookup (a)"))
                }
                if _, ok := m[nanb]; ok {
-                       fmt.Println("complex64 map allows NaN lookup (b)")
+                       panic(fmt.Sprintln("complex64 map allows NaN lookup (b)"))
                }
                if len(m) != 3 {
-                       fmt.Println("complex64 map should have 3 entries:", m)
+                       panic(fmt.Sprintln("complex64 map should have 3 entries:", m))
                }
                m[nana] = "NaN"
                m[nanb] = "NaN"
                if len(m) != 5 {
-                       fmt.Println("complex64 map should have 5 entries:", m)
+                       panic(fmt.Sprintln("complex64 map should have 5 entries:", m))
                }
        }
 
@@ -631,63 +635,50 @@ func testfloat() {
                        nanb: "NaN",
                }
                if m[nz] != "+0" {
-                       fmt.Println("complex128 map does not treat -0 and +0 as equal for read")
+                       panic(fmt.Sprintln("complex128 map does not treat -0 and +0 as equal for read"))
                }
                m[nz] = "-0"
                if m[pz] != "-0" {
-                       fmt.Println("complex128 map does not treat -0 and +0 as equal for write")
+                       panic(fmt.Sprintln("complex128 map does not treat -0 and +0 as equal for write"))
                }
                if _, ok := m[nana]; ok {
-                       fmt.Println("complex128 map allows NaN lookup (a)")
+                       panic(fmt.Sprintln("complex128 map allows NaN lookup (a)"))
                }
                if _, ok := m[nanb]; ok {
-                       fmt.Println("complex128 map allows NaN lookup (b)")
+                       panic(fmt.Sprintln("complex128 map allows NaN lookup (b)"))
                }
                if len(m) != 3 {
-                       fmt.Println("complex128 map should have 3 entries:", m)
+                       panic(fmt.Sprintln("complex128 map should have 3 entries:", m))
                }
                m[nana] = "NaN"
                m[nanb] = "NaN"
                if len(m) != 5 {
-                       fmt.Println("complex128 map should have 5 entries:", m)
+                       panic(fmt.Sprintln("complex128 map should have 5 entries:", m))
                }
        }
 }
 
 func testnan() {
-       // Test that NaNs in maps don't go quadratic.
-       t := func(n int) time.Duration {
-               t0 := time.Now()
-               m := map[float64]int{}
-               nan := math.NaN()
-               for i := 0; i < n; i++ {
-                       m[nan] = 1
-               }
-               if len(m) != n {
-                       panic("wrong size map after nan insertion")
-               }
-               return time.Since(t0)
+       n := 500
+       m := map[float64]int{}
+       nan := math.NaN()
+       for i := 0; i < n; i++ {
+               m[nan] = 1
        }
-
-       // Depending on the machine and OS, this test might be too fast
-       // to measure with accurate enough granularity. On failure,
-       // make it run longer, hoping that the timing granularity
-       // is eventually sufficient.
-
-       n := 30000 // 0.02 seconds on a MacBook Air
-       fails := 0
-       for {
-               t1 := t(n)
-               t2 := t(2 * n)
-               // should be 2x (linear); allow up to 3x
-               if t2 < 3*t1 {
-                       return
-               }
-               fails++
-               if fails == 4 {
-                       fmt.Printf("too slow: %d inserts: %v; %d inserts: %v\n", n, t1, 2*n, t2)
-                       return
-               }
-               n *= 2
+       if len(m) != n {
+               panic("wrong size map after nan insertion")
+       }
+       iters := 0
+       for k, v := range m {
+               iters++
+               if !math.IsNaN(k) {
+                       panic("not NaN")
+               }
+               if v != 1 {
+                       panic("wrong value")
+               }
+       }
+       if iters != n {
+               panic("wrong number of nan range iters")
        }
 }
diff --git a/gcc/testsuite/go.test/test/mapnan.go b/gcc/testsuite/go.test/test/mapnan.go
new file mode 100644 (file)
index 0000000..60b35fb
--- /dev/null
@@ -0,0 +1,64 @@
+// +build darwin linux
+// run
+
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test that NaNs in maps don't go quadratic.
+
+package main
+
+import (
+       "fmt"
+       "math"
+       "time"
+       "syscall"
+)
+
+func main() {
+
+       // Test that NaNs in maps don't go quadratic.
+       t := func(n int) time.Duration {
+               var u0 syscall.Rusage
+               if err := syscall.Getrusage(0,  &u0); err != nil {
+                       panic(err)
+               }
+               m := map[float64]int{}
+               nan := math.NaN()
+               for i := 0; i < n; i++ {
+                       m[nan] = 1
+               }
+               if len(m) != n {
+                       panic("wrong size map after nan insertion")
+               }
+               var u1 syscall.Rusage
+               if err := syscall.Getrusage(0,  &u1); err != nil {
+                       panic(err)
+               }
+               return time.Duration(u1.Utime.Nano() - u0.Utime.Nano())
+       }
+
+       // Depending on the machine and OS, this test might be too fast
+       // to measure with accurate enough granularity. On failure,
+       // make it run longer, hoping that the timing granularity
+       // is eventually sufficient.
+
+       n := 30000 // ~8ms user time on a Mid 2011 MacBook Air (1.8 GHz Core i7)
+       fails := 0
+       for {
+               t1 := t(n)
+               t2 := t(2 * n)
+               // should be 2x (linear); allow up to 3x
+               if t2 < 3*t1 {
+                       return
+               }
+               fails++
+               if fails == 6 {
+                       panic(fmt.Sprintf("too slow: %d inserts: %v; %d inserts: %v\n", n, t1, 2*n, t2))
+               }
+               if fails < 4 {
+                       n *= 2
+               }
+       }
+}
index 0c239af..d97bc4a 100644 (file)
@@ -128,13 +128,13 @@ func main() {
                panic("fail")
        }
 
-       var zs struct { S }
-       var zps struct { *S1 }
-       var zi struct { I }
-       var zpi struct { *I1 }
-       var zpt struct { *T1 }
-       var zt struct { T }
-       var zv struct { Val }
+       var zs struct{ S }
+       var zps struct{ *S1 }
+       var zi struct{ I }
+       var zpi struct{ *I1 }
+       var zpt struct{ *T1 }
+       var zt struct{ T }
+       var zv struct{ Val }
 
        if zs.val() != 1 {
                println("zs.val:", zs.val())
@@ -247,4 +247,61 @@ func main() {
                println("zv.val():", zv.val())
                panic("fail")
        }
+
+       promotion()
+}
+
+type A struct{ B }
+type B struct {
+       C
+       *D
+}
+type C int
+
+func (C) f()  {} // value receiver, direct field of A
+func (*C) g() {} // pointer receiver
+
+type D int
+
+func (D) h()  {} // value receiver, indirect field of A
+func (*D) i() {} // pointer receiver
+
+func expectPanic() {
+       if r := recover(); r == nil {
+               panic("expected nil dereference")
+       }
+}
+
+func promotion() {
+       var a A
+       // Addressable value receiver.
+       a.f()
+       a.g()
+       func() {
+               defer expectPanic()
+               a.h() // dynamic error: nil dereference in a.B.D->f()
+       }()
+       a.i()
+
+       // Non-addressable value receiver.
+       A(a).f()
+       // A(a).g() // static error: cannot call pointer method on A literal.B.C
+       func() {
+               defer expectPanic()
+               A(a).h() // dynamic error: nil dereference in A().B.D->f()
+       }()
+       A(a).i()
+
+       // Pointer receiver.
+       (&a).f()
+       (&a).g()
+       func() {
+               defer expectPanic()
+               (&a).h() // dynamic error: nil deref: nil dereference in (&a).B.D->f()
+       }()
+       (&a).i()
+
+       c := new(C)
+       c.f() // makes a copy
+       c.g()
 }
similarity index 87%
rename from gcc/testsuite/go.test/test/method4a.go
rename to gcc/testsuite/go.test/test/method4.dir/method4a.go
index d23039b..a7df04c 100644 (file)
@@ -1,11 +1,8 @@
-// skip
-
 // Copyright 2012 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
 // Test method expressions with arguments.
-// This file is not tested by itself; it is imported by method4.go.
 
 package method4a
 
diff --git a/gcc/testsuite/go.test/test/method4.dir/prog.go b/gcc/testsuite/go.test/test/method4.dir/prog.go
new file mode 100644 (file)
index 0000000..77d580c
--- /dev/null
@@ -0,0 +1,104 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test method expressions with arguments.
+
+package main
+
+import "./method4a"
+
+type T1 int
+
+type T2 struct {
+       f int
+}
+
+type I1 interface {
+       Sum([]int, int) int
+}
+
+type I2 interface {
+       Sum(a []int, b int) int
+}
+
+func (i T1) Sum(a []int, b int) int {
+       r := int(i) + b
+       for _, v := range a {
+               r += v
+       }
+       return r
+}
+
+func (p *T2) Sum(a []int, b int) int {
+       r := p.f + b
+       for _, v := range a {
+               r += v
+       }
+       return r
+}
+
+func eq(v1, v2 int) {
+       if v1 != v2 {
+               panic(0)
+       }
+}
+
+func main() {
+       a := []int{1, 2, 3}
+       t1 := T1(4)
+       t2 := &T2{4}
+
+       eq(t1.Sum(a, 5), 15)
+       eq(t2.Sum(a, 6), 16)
+
+       eq(T1.Sum(t1, a, 7), 17)
+       eq((*T2).Sum(t2, a, 8), 18)
+
+       f1 := T1.Sum
+       eq(f1(t1, a, 9), 19)
+       f2 := (*T2).Sum
+       eq(f2(t2, a, 10), 20)
+
+       eq(I1.Sum(t1, a, 11), 21)
+       eq(I1.Sum(t2, a, 12), 22)
+
+       f3 := I1.Sum
+       eq(f3(t1, a, 13), 23)
+       eq(f3(t2, a, 14), 24)
+
+       eq(I2.Sum(t1, a, 15), 25)
+       eq(I2.Sum(t2, a, 16), 26)
+
+       f4 := I2.Sum
+       eq(f4(t1, a, 17), 27)
+       eq(f4(t2, a, 18), 28)
+       
+       mt1 := method4a.T1(4)
+       mt2 := &method4a.T2{4}
+
+       eq(mt1.Sum(a, 30), 40)
+       eq(mt2.Sum(a, 31), 41)
+
+       eq(method4a.T1.Sum(mt1, a, 32), 42)
+       eq((*method4a.T2).Sum(mt2, a, 33), 43)
+
+       g1 := method4a.T1.Sum
+       eq(g1(mt1, a, 34), 44)
+       g2 := (*method4a.T2).Sum
+       eq(g2(mt2, a, 35), 45)
+
+       eq(method4a.I1.Sum(mt1, a, 36), 46)
+       eq(method4a.I1.Sum(mt2, a, 37), 47)
+
+       g3 := method4a.I1.Sum
+       eq(g3(mt1, a, 38), 48)
+       eq(g3(mt2, a, 39), 49)
+
+       eq(method4a.I2.Sum(mt1, a, 40), 50)
+       eq(method4a.I2.Sum(mt2, a, 41), 51)
+
+       g4 := method4a.I2.Sum
+       eq(g4(mt1, a, 42), 52)
+       eq(g4(mt2, a, 43), 53)
+}
index 7e7b1ff..813892b 100644 (file)
@@ -1,109 +1,8 @@
-// $G $D/method4a.go && $G $D/$F.go && $L $F.$A && ./$A.out
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// rundir
 
 // Copyright 2012 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
 // Test method expressions with arguments.
-
-package main
-
-import "./method4a"
-
-type T1 int
-
-type T2 struct {
-       f int
-}
-
-type I1 interface {
-       Sum([]int, int) int
-}
-
-type I2 interface {
-       Sum(a []int, b int) int
-}
-
-func (i T1) Sum(a []int, b int) int {
-       r := int(i) + b
-       for _, v := range a {
-               r += v
-       }
-       return r
-}
-
-func (p *T2) Sum(a []int, b int) int {
-       r := p.f + b
-       for _, v := range a {
-               r += v
-       }
-       return r
-}
-
-func eq(v1, v2 int) {
-       if v1 != v2 {
-               panic(0)
-       }
-}
-
-func main() {
-       a := []int{1, 2, 3}
-       t1 := T1(4)
-       t2 := &T2{4}
-
-       eq(t1.Sum(a, 5), 15)
-       eq(t2.Sum(a, 6), 16)
-
-       eq(T1.Sum(t1, a, 7), 17)
-       eq((*T2).Sum(t2, a, 8), 18)
-
-       f1 := T1.Sum
-       eq(f1(t1, a, 9), 19)
-       f2 := (*T2).Sum
-       eq(f2(t2, a, 10), 20)
-
-       eq(I1.Sum(t1, a, 11), 21)
-       eq(I1.Sum(t2, a, 12), 22)
-
-       f3 := I1.Sum
-       eq(f3(t1, a, 13), 23)
-       eq(f3(t2, a, 14), 24)
-
-       eq(I2.Sum(t1, a, 15), 25)
-       eq(I2.Sum(t2, a, 16), 26)
-
-       f4 := I2.Sum
-       eq(f4(t1, a, 17), 27)
-       eq(f4(t2, a, 18), 28)
-       
-       mt1 := method4a.T1(4)
-       mt2 := &method4a.T2{4}
-
-       eq(mt1.Sum(a, 30), 40)
-       eq(mt2.Sum(a, 31), 41)
-
-       eq(method4a.T1.Sum(mt1, a, 32), 42)
-       eq((*method4a.T2).Sum(mt2, a, 33), 43)
-
-       g1 := method4a.T1.Sum
-       eq(g1(mt1, a, 34), 44)
-       g2 := (*method4a.T2).Sum
-       eq(g2(mt2, a, 35), 45)
-
-       eq(method4a.I1.Sum(mt1, a, 36), 46)
-       eq(method4a.I1.Sum(mt2, a, 37), 47)
-
-       g3 := method4a.I1.Sum
-       eq(g3(mt1, a, 38), 48)
-       eq(g3(mt2, a, 39), 49)
-
-       eq(method4a.I2.Sum(mt1, a, 40), 50)
-       eq(method4a.I2.Sum(mt2, a, 41), 51)
-
-       g4 := method4a.I2.Sum
-       eq(g4(mt1, a, 42), 52)
-       eq(g4(mt2, a, 43), 53)
-}
+package ignored
diff --git a/gcc/testsuite/go.test/test/method5.go b/gcc/testsuite/go.test/test/method5.go
new file mode 100644 (file)
index 0000000..36508f2
--- /dev/null
@@ -0,0 +1,297 @@
+// run
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+// Concrete types implementing M method.
+// Smaller than a word, word-sized, larger than a word.
+// Value and pointer receivers.
+
+type Tinter interface {
+       M(int, byte) (byte, int)
+}
+
+type Tsmallv byte
+
+func (v Tsmallv) M(x int, b byte) (byte, int) { return b, x+int(v) }
+
+type Tsmallp byte
+
+func (p *Tsmallp) M(x int, b byte) (byte, int) { return b, x+int(*p) }
+
+type Twordv uintptr
+
+func (v Twordv) M(x int, b byte) (byte, int) { return b, x+int(v) }
+
+type Twordp uintptr
+
+func (p *Twordp) M(x int, b byte) (byte, int) { return b, x+int(*p) }
+
+type Tbigv [2]uintptr
+
+func (v Tbigv) M(x int, b byte) (byte, int) { return b, x+int(v[0])+int(v[1]) }
+
+type Tbigp [2]uintptr
+
+func (p *Tbigp) M(x int, b byte) (byte, int) { return b, x+int(p[0])+int(p[1]) }
+
+// Again, with an unexported method.
+
+type tsmallv byte
+
+func (v tsmallv) m(x int, b byte) (byte, int) { return b, x+int(v) }
+
+type tsmallp byte
+
+func (p *tsmallp) m(x int, b byte) (byte, int) { return b, x+int(*p) }
+
+type twordv uintptr
+
+func (v twordv) m(x int, b byte) (byte, int) { return b, x+int(v) }
+
+type twordp uintptr
+
+func (p *twordp) m(x int, b byte) (byte, int) { return b, x+int(*p) }
+
+type tbigv [2]uintptr
+
+func (v tbigv) m(x int, b byte) (byte, int) { return b, x+int(v[0])+int(v[1]) }
+
+type tbigp [2]uintptr
+
+func (p *tbigp) m(x int, b byte) (byte, int) { return b, x+int(p[0])+int(p[1]) }
+
+type tinter interface {
+       m(int, byte) (byte, int)
+}
+
+// Embedding via pointer.
+
+type T1 struct {
+       T2
+}
+
+type T2 struct {
+       *T3
+}
+
+type T3 struct {
+       *T4
+}
+
+type T4 struct {
+}
+
+func (t4 T4) M(x int, b byte) (byte, int) { return b, x+40 }
+
+var failed = false
+
+func CheckI(name string, i Tinter, inc int) {
+       b, x := i.M(1000, 99)
+       if b != 99 || x != 1000+inc {
+               failed = true
+               print(name, ".M(1000, 99) = ", b, ", ", x, " want 99, ", 1000+inc, "\n")
+       }
+       
+       CheckF("(i="+name+")", i.M, inc)
+}
+
+func CheckF(name string, f func(int, byte) (byte, int), inc int) {
+       b, x := f(1000, 99)
+       if b != 99 || x != 1000+inc {
+               failed = true
+               print(name, "(1000, 99) = ", b, ", ", x, " want 99, ", 1000+inc, "\n")
+       }
+}
+
+func checkI(name string, i tinter, inc int) {
+       b, x := i.m(1000, 99)
+       if b != 99 || x != 1000+inc {
+               failed = true
+               print(name, ".m(1000, 99) = ", b, ", ", x, " want 99, ", 1000+inc, "\n")
+       }
+       
+       checkF("(i="+name+")", i.m, inc)
+}
+
+func checkF(name string, f func(int, byte) (byte, int), inc int) {
+       b, x := f(1000, 99)
+       if b != 99 || x != 1000+inc {
+               failed = true
+               print(name, "(1000, 99) = ", b, ", ", x, " want 99, ", 1000+inc, "\n")
+       }
+}
+
+func shouldPanic(f func()) {
+       defer func() {
+               if recover() == nil {
+                       panic("not panicking")
+               }
+       }()
+       f()
+}
+
+func shouldNotPanic(f func()) {
+       f()
+}
+
+func main() {
+       sv := Tsmallv(1)
+       CheckI("sv", sv, 1)
+       CheckF("sv.M", sv.M, 1)
+       CheckF("(&sv).M", (&sv).M, 1)
+       psv := &sv
+       CheckI("psv", psv, 1)
+       CheckF("psv.M", psv.M, 1)
+       CheckF("(*psv).M", (*psv).M, 1)
+
+       sp := Tsmallp(2)
+       CheckI("&sp", &sp, 2)
+       CheckF("sp.M", sp.M, 2)
+       CheckF("(&sp).M", (&sp).M, 2)
+       psp := &sp
+       CheckI("psp", psp, 2)
+       CheckF("psp.M", psp.M, 2)
+       CheckF("(*psp).M", (*psp).M, 2)
+
+       wv := Twordv(3)
+       CheckI("wv", wv, 3)
+       CheckF("wv.M", wv.M, 3)
+       CheckF("(&wv).M", (&wv).M, 3)
+       pwv := &wv
+       CheckI("pwv", pwv, 3)
+       CheckF("pwv.M", pwv.M, 3)
+       CheckF("(*pwv).M", (*pwv).M, 3)
+
+       wp := Twordp(4)
+       CheckI("&wp", &wp, 4)
+       CheckF("wp.M", wp.M, 4)
+       CheckF("(&wp).M", (&wp).M, 4)
+       pwp := &wp
+       CheckI("pwp", pwp, 4)
+       CheckF("pwp.M", pwp.M, 4)
+       CheckF("(*pwp).M", (*pwp).M, 4)
+
+       bv := Tbigv([2]uintptr{5, 6})
+       pbv := &bv
+       CheckI("bv", bv, 11)
+       CheckF("bv.M", bv.M, 11)
+       CheckF("(&bv).M", (&bv).M, 11)
+       CheckI("pbv", pbv, 11)
+       CheckF("pbv.M", pbv.M, 11)
+       CheckF("(*pbv).M", (*pbv).M, 11)
+       
+       bp := Tbigp([2]uintptr{7,8})
+       CheckI("&bp", &bp, 15)
+       CheckF("bp.M", bp.M, 15)
+       CheckF("(&bp).M", (&bp).M, 15)
+       pbp := &bp
+       CheckI("pbp", pbp, 15)
+       CheckF("pbp.M", pbp.M, 15)
+       CheckF("(*pbp).M", (*pbp).M, 15)
+
+       _sv := tsmallv(1)
+       checkI("_sv", _sv, 1)
+       checkF("_sv.m", _sv.m, 1)
+       checkF("(&_sv).m", (&_sv).m, 1)
+       _psv := &_sv
+       checkI("_psv", _psv, 1)
+       checkF("_psv.m", _psv.m, 1)
+       checkF("(*_psv).m", (*_psv).m, 1)
+
+       _sp := tsmallp(2)
+       checkI("&_sp", &_sp, 2)
+       checkF("_sp.m", _sp.m, 2)
+       checkF("(&_sp).m", (&_sp).m, 2)
+       _psp := &_sp
+       checkI("_psp", _psp, 2)
+       checkF("_psp.m", _psp.m, 2)
+       checkF("(*_psp).m", (*_psp).m, 2)
+
+       _wv := twordv(3)
+       checkI("_wv", _wv, 3)
+       checkF("_wv.m", _wv.m, 3)
+       checkF("(&_wv).m", (&_wv).m, 3)
+       _pwv := &_wv
+       checkI("_pwv", _pwv, 3)
+       checkF("_pwv.m", _pwv.m, 3)
+       checkF("(*_pwv).m", (*_pwv).m, 3)
+
+       _wp := twordp(4)
+       checkI("&_wp", &_wp, 4)
+       checkF("_wp.m", _wp.m, 4)
+       checkF("(&_wp).m", (&_wp).m, 4)
+       _pwp := &_wp
+       checkI("_pwp", _pwp, 4)
+       checkF("_pwp.m", _pwp.m, 4)
+       checkF("(*_pwp).m", (*_pwp).m, 4)
+
+       _bv := tbigv([2]uintptr{5, 6})
+       _pbv := &_bv
+       checkI("_bv", _bv, 11)
+       checkF("_bv.m", _bv.m, 11)
+       checkF("(&_bv).m", (&_bv).m, 11)
+       checkI("_pbv", _pbv, 11)
+       checkF("_pbv.m", _pbv.m, 11)
+       checkF("(*_pbv).m", (*_pbv).m, 11)
+       
+       _bp := tbigp([2]uintptr{7,8})
+       checkI("&_bp", &_bp, 15)
+       checkF("_bp.m", _bp.m, 15)
+       checkF("(&_bp).m", (&_bp).m, 15)
+       _pbp := &_bp
+       checkI("_pbp", _pbp, 15)
+       checkF("_pbp.m", _pbp.m, 15)
+       checkF("(*_pbp).m", (*_pbp).m, 15)
+       
+       t4 := T4{}
+       t3 := T3{&t4}
+       t2 := T2{&t3}
+       t1 := T1{t2}
+       CheckI("t4", t4, 40)
+       CheckI("&t4", &t4, 40)
+       CheckI("t3", t3, 40)
+       CheckI("&t3", &t3, 40)
+       CheckI("t2", t2, 40)
+       CheckI("&t2", &t2, 40)
+       CheckI("t1", t1, 40)
+       CheckI("&t1", &t1, 40)
+       
+       // x.M panics if x is an interface type and is nil,
+       // or if x.M expands to (*x).M where x is nil,
+       // or if x.M expands to x.y.z.w.M where something
+       // along the evaluation of x.y.z.w is nil.
+       var f func(int, byte) (byte, int)
+       shouldPanic(func() { psv = nil; f = psv.M })
+       shouldPanic(func() { pwv = nil; f = pwv.M })
+       shouldPanic(func() { pbv = nil; f = pbv.M })
+       shouldPanic(func() { var i Tinter; f = i.M })
+       shouldPanic(func() { _psv = nil; f = _psv.m })
+       shouldPanic(func() { _pwv = nil; f = _pwv.m })
+       shouldPanic(func() { _pbv = nil; f = _pbv.m })
+       shouldPanic(func() { var _i tinter; f = _i.m })
+       shouldPanic(func() { var t1 T1; f = t1.M })
+       shouldPanic(func() { var t2 T2; f = t2.M })
+       shouldPanic(func() { var t3 *T3; f = t3.M })
+       shouldPanic(func() { var t3 T3; f = t3.M })
+
+       if f != nil {
+               panic("something set f")
+       }
+       
+       // x.M does not panic if x is a nil pointer and
+       // M is a method with a pointer receiver.
+       shouldNotPanic(func() { psp = nil; f = psp.M })
+       shouldNotPanic(func() { pwp = nil; f = pwp.M })
+       shouldNotPanic(func() { pbp = nil; f = pbp.M })
+       shouldNotPanic(func() { _psp = nil; f = _psp.m })
+       shouldNotPanic(func() { _pwp = nil; f = _pwp.m })
+       shouldNotPanic(func() { _pbp = nil; f = _pbp.m })
+       shouldNotPanic(func() { var t4 T4; f = t4.M })
+       if f == nil {
+               panic("nothing set f")
+       }
+}
index aa558fa..f8300bf 100644 (file)
@@ -115,7 +115,7 @@ func chantest() {
        })
        shouldBlock(func() {
                x, ok := <-ch
-               println(x, ok)
+               println(x, ok) // unreachable
        })
 
        if len(ch) != 0 {
@@ -147,12 +147,13 @@ func maptest() {
                panic(v)
        }
 
+       // can delete (non-existent) entries
+       delete(m, 2)
+
        // but cannot be written to
        shouldPanic(func() {
                m[2] = 3
        })
-       // can delete (non-existent) entries
-       delete(m, 2)
 }
 
 // nil slice
index b784914..793e996 100644 (file)
@@ -38,6 +38,8 @@ func main() {
        shouldPanic(p8)
        shouldPanic(p9)
        shouldPanic(p10)
+       shouldPanic(p11)
+       shouldPanic(p12)
 }
 
 func shouldPanic(f func()) {
@@ -130,3 +132,23 @@ func p10() {
        var t *T
        println(t.i) // should crash
 }
+
+type T1 struct {
+       T
+}
+
+type T2 struct {
+       *T1
+}
+
+func p11() {
+       t := &T2{}
+       p := &t.i
+       println(*p)
+}
+
+// ADDR(DOT(IND(p))) needs a check also
+func p12() {
+       var p *T = nil
+       println(*(&((*p).i)))
+}
index 968c952..20426b4 100644 (file)
@@ -1,10 +1,4 @@
-// [ "$GORUN" == "" ] || exit 0  # Android runner gets confused by the NUL output 
-// $G $D/$F.go && $L $F.$A && ./$A.out >tmp.go &&
-// errchk $G -e tmp.go
-// rm -f tmp.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// errorcheckoutput
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 68b0c9a..8effbe9 100644 (file)
@@ -55,10 +55,10 @@ func testslice() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makeslice")
+               println("wrong sum ranging over makeslice", s)
                panic("fail")
        }
-       
+
        x := []int{10, 20}
        y := []int{99}
        i := 1
@@ -82,7 +82,7 @@ func testslice1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makeslice")
+               println("wrong sum ranging over makeslice", s)
                panic("fail")
        }
 }
@@ -106,7 +106,7 @@ func testarray() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makearray")
+               println("wrong sum ranging over makearray", s)
                panic("fail")
        }
 }
@@ -122,7 +122,7 @@ func testarray1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makearray")
+               println("wrong sum ranging over makearray", s)
                panic("fail")
        }
 }
@@ -155,7 +155,7 @@ func testarrayptr() {
                panic("fail")
        }
        if s != 15 {
-               println("wrong sum ranging over makearrayptr")
+               println("wrong sum ranging over makearrayptr", s)
                panic("fail")
        }
 }
@@ -171,7 +171,7 @@ func testarrayptr1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makearrayptr")
+               println("wrong sum ranging over makearrayptr", s)
                panic("fail")
        }
 }
@@ -195,7 +195,7 @@ func teststring() {
                panic("fail")
        }
        if s != 'a'+'b'+'c'+'d'+'☺' {
-               println("wrong sum ranging over makestring")
+               println("wrong sum ranging over makestring", s)
                panic("fail")
        }
 }
@@ -211,7 +211,7 @@ func teststring1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makestring")
+               println("wrong sum ranging over makestring", s)
                panic("fail")
        }
 }
@@ -235,7 +235,7 @@ func testmap() {
                panic("fail")
        }
        if s != 'a'+'b'+'c'+'d'+'☺' {
-               println("wrong sum ranging over makemap")
+               println("wrong sum ranging over makemap", s)
                panic("fail")
        }
 }
@@ -251,7 +251,7 @@ func testmap1() {
                panic("fail")
        }
        if s != 10 {
-               println("wrong sum ranging over makemap")
+               println("wrong sum ranging over makemap", s)
                panic("fail")
        }
 }
index eea655e..7c27d7c 100644 (file)
@@ -8,15 +8,21 @@
 
 package main
 
-import "runtime"
+import (
+       "os"
+       "runtime"
+)
 
 func main() {
        test1()
        test1WithClosures()
        test2()
        test3()
-       test4()
-       test5()
+       // exp/ssa/interp still has some bugs in recover().
+       if os.Getenv("GOSSAINTERP") == "" {
+               test4()
+               test5()
+       }
        test6()
        test6WithClosures()
        test7()
index 9870023..ebfa0a3 100644 (file)
@@ -71,6 +71,10 @@ func main() {
        inter = 1
        check("type-concrete", func() { println(inter.(string)) }, "int, not string")
        check("type-interface", func() { println(inter.(m)) }, "missing method m")
+
+       if didbug {
+               panic("recover3")
+       }
 }
 
 type m interface {
index e544274..dc43417 100644 (file)
@@ -8,7 +8,10 @@
 
 package main
 
-import "fmt"
+import (
+       "fmt"
+       "runtime"
+)
 
 func main() {
        n :=
@@ -52,6 +55,7 @@ func main() {
                        iota
        if n != NUM*(NUM-1)/2 {
                fmt.Println("BUG: wrong n", n, NUM*(NUM-1)/2)
+               runtime.Breakpoint() // panic is inaccessible
        }
 }
 
index 0cdeebd..8fd623c 100644 (file)
@@ -19,7 +19,6 @@ func main() {
        p6()
        p7()
        p8()
-       p9()
 }
 
 var gx []int
@@ -43,7 +42,7 @@ func check3(x, y, z, xx, yy, zz int) {
 }
 
 func p1() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        i, x[i] = 1, 100
        _ = i
@@ -51,7 +50,7 @@ func p1() {
 }
 
 func p2() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        x[i], i = 100, 1
        _ = i
@@ -59,7 +58,7 @@ func p2() {
 }
 
 func p3() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = f(0), f(1)
@@ -67,7 +66,7 @@ func p3() {
 }
 
 func p4() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = gx[0], gx[1]
@@ -75,7 +74,7 @@ func p4() {
 }
 
 func p5() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        p := &x[0]
        q := &x[1]
@@ -90,7 +89,7 @@ func p6() {
        px := &x
        py := &y
        *px, *py = y, x
-       check3(x, y, z, 2, 1, 3)        
+       check3(x, y, z, 2, 1, 3)
 }
 
 func f1(x, y, z int) (xx, yy, zz int) {
@@ -107,21 +106,6 @@ func p7() {
 }
 
 func p8() {
-       x := []int{1,2,3}
-
-       defer func() {
-               err := recover()
-               if err == nil {
-                       panic("not panicking")
-               }
-               check(x, 100, 2, 3)
-       }()
-
-       i := 0
-       i, x[i], x[5] = 1, 100, 500
-}
-
-func p9() {
        m := make(map[int]int)
        m[0] = len(m)
        if m[0] != 0 {
diff --git a/gcc/testsuite/go.test/test/return.go b/gcc/testsuite/go.test/test/return.go
new file mode 100644 (file)
index 0000000..482f22b
--- /dev/null
@@ -0,0 +1,2821 @@
+// errorcheck
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Test compiler diagnosis of function missing return statements.
+// See issue 65 and golang.org/s/go11return.
+
+package p
+
+type T int
+
+var x interface{}
+var c chan int
+
+func external() int // ok
+
+func _() int {
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+} // ERROR "missing return"
+
+// return is okay
+func _() int {
+       print(1)
+       return 2
+}
+
+// goto is okay
+func _() int {
+L:
+       print(1)
+       goto L
+}
+
+// panic is okay
+func _() int {
+       print(1)
+       panic(2)
+}
+
+// but only builtin panic
+func _() int {
+       var panic = func(int) {}
+       print(1)
+       panic(2)
+} // ERROR "missing return"
+
+// block ending in terminating statement is okay
+func _() int {
+       {
+               print(1)
+               return 2
+       }
+}
+
+// block ending in terminating statement is okay
+func _() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+}
+
+// block ending in terminating statement is okay
+func _() int {
+       print(1)
+       {
+               panic(2)
+       }
+}
+
+// adding more code - even though it is dead - now requires a return
+
+func _() int {
+       print(1)
+       return 2
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+L:
+       print(1)
+       goto L
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       panic(2)
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       {
+               print(1)
+               return 2
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               print(1)
+               goto L
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       {
+               panic(2)
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               print(1)
+               return 2
+       }
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       {
+               panic(2)
+       }
+       print(3)
+} // ERROR "missing return"
+
+// even an empty dead block triggers the message, because it
+// becomes the final statement.
+
+func _() int {
+       print(1)
+       return 2
+       {}
+} // ERROR "missing return"
+
+func _() int {
+L:
+       print(1)
+       goto L
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       panic(2)
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       {
+               print(1)
+               return 2
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               print(1)
+               goto L
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       {
+               panic(2)
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               print(1)
+               return 2
+       }
+       {}
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       {
+               panic(2)
+       }
+       {}
+} // ERROR "missing return"
+
+// if-else chain with final else and all terminating is okay
+
+func _() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else {
+               panic(3)
+       }
+}
+
+func _() int {
+L:
+       print(1)
+       if x == nil {
+               panic(2)
+       } else {
+               goto L
+       }
+}
+
+func _() int {
+L:
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 2 {
+               panic(3)
+       } else {
+               goto L
+       }
+}
+
+// if-else chain missing final else is not okay, even if the
+// conditions cover every possible case.
+
+func _() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x != nil {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 1 {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+
+// for { loops that never break are okay.
+
+func _() int {
+       print(1)
+       for {}
+}
+
+func _() int {
+       for {
+               for {
+                       break
+               }
+       }
+}
+
+func _() int {
+       for {
+               L:
+               for {
+                       break L
+               }
+       }
+}
+
+// for { loops that break are not okay.
+
+func _() int {
+       print(1)
+       for { break }
+} // ERROR "missing return"
+
+func _() int {
+       for {
+               for {
+               }
+               break
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       for {
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// if there's a condition - even "true" - the loops are no longer syntactically terminating
+
+func _() int {
+       print(1)
+       for x == nil {}
+} // ERROR "missing return"
+
+func _() int {
+       for x == nil {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+func _() int {
+       for x == nil {
+               L:
+               for {
+                       break L
+               }
+       }       
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       for true {}
+} // ERROR "missing return"
+
+func _() int {
+       for true {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+func _() int {
+       for true {
+               L:
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// select in which all cases terminate and none break are okay.
+
+func _() int {
+       print(1)
+       select{}
+}
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       }
+}
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               for{}
+       }
+}
+
+func _() int {
+L:
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               goto L
+       }
+}
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               select{}
+       }
+}
+
+// if any cases don't terminate, the select isn't okay anymore
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               goto L
+       case c <- 1:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+// if any breaks refer to the select, the select isn't okay anymore, even if they're dead
+
+func _() int {
+       print(1)
+       select{ default: break }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               break
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+L:
+       select {
+       case <-c:
+               print(2)
+               for{ break L }
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               break L
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       select {
+       case <-c:
+               print(1)
+               panic("abc")
+       default:
+               select{}
+               break
+       }
+} // ERROR "missing return"
+
+// switch with default in which all cases terminate is okay
+
+func _() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+func _() int {
+       print(1)
+       switch x {
+       default:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+}
+
+func _() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       default:
+               return 4
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+func _() int {
+       print(1)
+       switch {
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x {
+       case 2:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+func _() int {
+       print(1)
+L:
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x {
+       default:
+               return 4
+               break
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+L:
+       switch x {
+       case 1:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// type switch with default in which all cases terminate is okay
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       default:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+func _() int {
+       print(1)
+       switch {
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       case float64:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       case float64:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+func _() int {
+       print(1)
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+       switch x.(type) {
+       default:
+               return 4
+               break
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       print(1)
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// again, but without the leading print(1).
+// testing that everything works when the terminating statement is first.
+
+func _() int {
+} // ERROR "missing return"
+
+// return is okay
+func _() int {
+       return 2
+}
+
+// goto is okay
+func _() int {
+L:
+       goto L
+}
+
+// panic is okay
+func _() int {
+       panic(2)
+}
+
+// but only builtin panic
+func _() int {
+       var panic = func(int) {}
+       panic(2)
+} // ERROR "missing return"
+
+// block ending in terminating statement is okay
+func _() int {
+       {
+               return 2
+       }
+}
+
+// block ending in terminating statement is okay
+func _() int {
+L:
+       {
+               goto L
+       }
+}
+
+// block ending in terminating statement is okay
+func _() int {
+       {
+               panic(2)
+       }
+}
+
+// adding more code - even though it is dead - now requires a return
+
+func _() int {
+       return 2
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+L:
+       goto L
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       panic(2)
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       {
+               return 2
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               goto L
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               panic(2)
+               print(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               return 2
+       }
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               goto L
+       }
+       print(3)
+} // ERROR "missing return"
+
+func _() int {
+       {
+               panic(2)
+       }
+       print(3)
+} // ERROR "missing return"
+
+// even an empty dead block triggers the message, because it
+// becomes the final statement.
+
+func _() int {
+       return 2
+       {}
+} // ERROR "missing return"
+
+func _() int {
+L:
+       goto L
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       panic(2)
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       {
+               return 2
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               goto L
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               panic(2)
+               {}
+       }
+} // ERROR "missing return"
+
+func _() int {
+       {
+               return 2
+       }
+       {}
+} // ERROR "missing return"
+
+func _() int {
+L:
+       {
+               goto L
+       }
+       {}
+} // ERROR "missing return"
+
+func _() int {
+       {
+               panic(2)
+       }
+       {}
+} // ERROR "missing return"
+
+// if-else chain with final else and all terminating is okay
+
+func _() int {
+       if x == nil {
+               panic(2)
+       } else {
+               panic(3)
+       }
+}
+
+func _() int {
+L:
+       if x == nil {
+               panic(2)
+       } else {
+               goto L
+       }
+}
+
+func _() int {
+L:
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 2 {
+               panic(3)
+       } else {
+               goto L
+       }
+}
+
+// if-else chain missing final else is not okay, even if the
+// conditions cover every possible case.
+
+func _() int {
+       if x == nil {
+               panic(2)
+       } else if x != nil {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       if x == nil {
+               panic(2)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 1 {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+
+// for { loops that never break are okay.
+
+func _() int {
+       for {}
+}
+
+func _() int {
+       for {
+               for {
+                       break
+               }
+       }
+}
+
+func _() int {
+       for {
+               L:
+               for {
+                       break L
+               }
+       }
+}
+
+// for { loops that break are not okay.
+
+func _() int {
+       for { break }
+} // ERROR "missing return"
+
+func _() int {
+       for {
+               for {
+               }
+               break
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       for {
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// if there's a condition - even "true" - the loops are no longer syntactically terminating
+
+func _() int {
+       for x == nil {}
+} // ERROR "missing return"
+
+func _() int {
+       for x == nil {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+func _() int {
+       for x == nil {
+               L:
+               for {
+                       break L
+               }
+       }       
+} // ERROR "missing return"
+
+func _() int {
+       for true {}
+} // ERROR "missing return"
+
+func _() int {
+       for true {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+func _() int {
+       for true {
+               L:
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// select in which all cases terminate and none break are okay.
+
+func _() int {
+       select{}
+}
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       }
+}
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+               for{}
+       }
+}
+
+func _() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               goto L
+       }
+}
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               select{}
+       }
+}
+
+// if any cases don't terminate, the select isn't okay anymore
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               goto L
+       case c <- 1:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+// if any breaks refer to the select, the select isn't okay anymore, even if they're dead
+
+func _() int {
+       select{ default: break }
+} // ERROR "missing return"
+
+func _() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               break
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               for{ break L }
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               break L
+       }
+} // ERROR "missing return"
+
+func _() int {
+       select {
+       case <-c:
+               panic("abc")
+       default:
+               select{}
+               break
+       }
+} // ERROR "missing return"
+
+// switch with default in which all cases terminate is okay
+
+func _() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+func _() int {
+       switch x {
+       default:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+}
+
+func _() int {
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       default:
+               return 4
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+func _() int {
+       switch {
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x {
+       case 2:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+func _() int {
+L:
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x {
+       default:
+               return 4
+               break
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       switch x {
+       case 1:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// type switch with default in which all cases terminate is okay
+
+func _() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+func _() int {
+       switch x.(type) {
+       default:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+func _() int {
+       switch {
+       }
+} // ERROR "missing return"
+
+
+func _() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       case float64:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x.(type) {
+       case float64:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+func _() int {
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x.(type) {
+       default:
+               return 4
+               break
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+func _() int {
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+func _() int {
+       switch x.(type) {
+       default:
+               return 4
+       case int, float64:
+               print(2)
+               panic(3)
+       }
+}
+
+// again, with func literals
+
+var _ = func() int {
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+} // ERROR "missing return"
+
+// return is okay
+var _ = func() int {
+       print(1)
+       return 2
+}
+
+// goto is okay
+var _ = func() int {
+L:
+       print(1)
+       goto L
+}
+
+// panic is okay
+var _ = func() int {
+       print(1)
+       panic(2)
+}
+
+// but only builtin panic
+var _ = func() int {
+       var panic = func(int) {}
+       print(1)
+       panic(2)
+} // ERROR "missing return"
+
+// block ending in terminating statement is okay
+var _ = func() int {
+       {
+               print(1)
+               return 2
+       }
+}
+
+// block ending in terminating statement is okay
+var _ = func() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+}
+
+// block ending in terminating statement is okay
+var _ = func() int {
+       print(1)
+       {
+               panic(2)
+       }
+}
+
+// adding more code - even though it is dead - now requires a return
+
+var _ = func() int {
+       print(1)
+       return 2
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       print(1)
+       goto L
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       panic(2)
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               print(1)
+               return 2
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               print(1)
+               goto L
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       {
+               panic(2)
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               print(1)
+               return 2
+       }
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       {
+               panic(2)
+       }
+       print(3)
+} // ERROR "missing return"
+
+// even an empty dead block triggers the message, because it
+// becomes the final statement.
+
+var _ = func() int {
+       print(1)
+       return 2
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       print(1)
+       goto L
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       panic(2)
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               print(1)
+               return 2
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               print(1)
+               goto L
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       {
+               panic(2)
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               print(1)
+               return 2
+       }
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               print(1)
+               goto L
+       }
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       {
+               panic(2)
+       }
+       {}
+} // ERROR "missing return"
+
+// if-else chain with final else and all terminating is okay
+
+var _ = func() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else {
+               panic(3)
+       }
+}
+
+var _ = func() int {
+L:
+       print(1)
+       if x == nil {
+               panic(2)
+       } else {
+               goto L
+       }
+}
+
+var _ = func() int {
+L:
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 2 {
+               panic(3)
+       } else {
+               goto L
+       }
+}
+
+// if-else chain missing final else is not okay, even if the
+// conditions cover every possible case.
+
+var _ = func() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x != nil {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 1 {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+
+// for { loops that never break are okay.
+
+var _ = func() int {
+       print(1)
+       for {}
+}
+
+var _ = func() int {
+       for {
+               for {
+                       break
+               }
+       }
+}
+
+var _ = func() int {
+       for {
+               L:
+               for {
+                       break L
+               }
+       }
+}
+
+// for { loops that break are not okay.
+
+var _ = func() int {
+       print(1)
+       for { break }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for {
+               for {
+               }
+               break
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       for {
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// if there's a condition - even "true" - the loops are no longer syntactically terminating
+
+var _ = func() int {
+       print(1)
+       for x == nil {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       for x == nil {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for x == nil {
+               L:
+               for {
+                       break L
+               }
+       }       
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       for true {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       for true {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for true {
+               L:
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// select in which all cases terminate and none break are okay.
+
+var _ = func() int {
+       print(1)
+       select{}
+}
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       }
+}
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               for{}
+       }
+}
+
+var _ = func() int {
+L:
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               goto L
+       }
+}
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               select{}
+       }
+}
+
+// if any cases don't terminate, the select isn't okay anymore
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               goto L
+       case c <- 1:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+// if any breaks refer to the select, the select isn't okay anymore, even if they're dead
+
+var _ = func() int {
+       print(1)
+       select{ default: break }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               break
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+L:
+       select {
+       case <-c:
+               print(2)
+               for{ break L }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               break L
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       select {
+       case <-c:
+               print(1)
+               panic("abc")
+       default:
+               select{}
+               break
+       }
+} // ERROR "missing return"
+
+// switch with default in which all cases terminate is okay
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+var _ = func() int {
+       print(1)
+       switch x {
+       default:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+}
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       default:
+               return 4
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+var _ = func() int {
+       print(1)
+       switch {
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 2:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+var _ = func() int {
+       print(1)
+L:
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x {
+       default:
+               return 4
+               break
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+L:
+       switch x {
+       case 1:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// type switch with default in which all cases terminate is okay
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       default:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+var _ = func() int {
+       print(1)
+       switch {
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       case float64:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       case float64:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+var _ = func() int {
+       print(1)
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+       switch x.(type) {
+       default:
+               return 4
+               break
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       print(1)
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// again, but without the leading print(1).
+// testing that everything works when the terminating statement is first.
+
+var _ = func() int {
+} // ERROR "missing return"
+
+// return is okay
+var _ = func() int {
+       return 2
+}
+
+// goto is okay
+var _ = func() int {
+L:
+       goto L
+}
+
+// panic is okay
+var _ = func() int {
+       panic(2)
+}
+
+// but only builtin panic
+var _ = func() int {
+       var panic = func(int) {}
+       panic(2)
+} // ERROR "missing return"
+
+// block ending in terminating statement is okay
+var _ = func() int {
+       {
+               return 2
+       }
+}
+
+// block ending in terminating statement is okay
+var _ = func() int {
+L:
+       {
+               goto L
+       }
+}
+
+// block ending in terminating statement is okay
+var _ = func() int {
+       {
+               panic(2)
+       }
+}
+
+// adding more code - even though it is dead - now requires a return
+
+var _ = func() int {
+       return 2
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       goto L
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       panic(2)
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               return 2
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               goto L
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               panic(2)
+               print(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               return 2
+       }
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               goto L
+       }
+       print(3)
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               panic(2)
+       }
+       print(3)
+} // ERROR "missing return"
+
+// even an empty dead block triggers the message, because it
+// becomes the final statement.
+
+var _ = func() int {
+       return 2
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       goto L
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       panic(2)
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               return 2
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               goto L
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               panic(2)
+               {}
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               return 2
+       }
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       {
+               goto L
+       }
+       {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       {
+               panic(2)
+       }
+       {}
+} // ERROR "missing return"
+
+// if-else chain with final else and all terminating is okay
+
+var _ = func() int {
+       if x == nil {
+               panic(2)
+       } else {
+               panic(3)
+       }
+}
+
+var _ = func() int {
+L:
+       if x == nil {
+               panic(2)
+       } else {
+               goto L
+       }
+}
+
+var _ = func() int {
+L:
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 2 {
+               panic(3)
+       } else {
+               goto L
+       }
+}
+
+// if-else chain missing final else is not okay, even if the
+// conditions cover every possible case.
+
+var _ = func() int {
+       if x == nil {
+               panic(2)
+       } else if x != nil {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       if x == nil {
+               panic(2)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       if x == nil {
+               panic(2)
+       } else if x == 1 {
+               return 0
+       } else if x != 1 {
+               panic(3)
+       }
+} // ERROR "missing return"
+
+
+// for { loops that never break are okay.
+
+var _ = func() int {
+       for {}
+}
+
+var _ = func() int {
+       for {
+               for {
+                       break
+               }
+       }
+}
+
+var _ = func() int {
+       for {
+               L:
+               for {
+                       break L
+               }
+       }
+}
+
+// for { loops that break are not okay.
+
+var _ = func() int {
+       for { break }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for {
+               for {
+               }
+               break
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       for {
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// if there's a condition - even "true" - the loops are no longer syntactically terminating
+
+var _ = func() int {
+       for x == nil {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       for x == nil {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for x == nil {
+               L:
+               for {
+                       break L
+               }
+       }       
+} // ERROR "missing return"
+
+var _ = func() int {
+       for true {}
+} // ERROR "missing return"
+
+var _ = func() int {
+       for true {
+               for {
+                       break
+               }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       for true {
+               L:
+               for {
+                       break L
+               }
+       }
+} // ERROR "missing return"
+
+// select in which all cases terminate and none break are okay.
+
+var _ = func() int {
+       select{}
+}
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       }
+}
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+               for{}
+       }
+}
+
+var _ = func() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               goto L
+       }
+}
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               select{}
+       }
+}
+
+// if any cases don't terminate, the select isn't okay anymore
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               goto L
+       case c <- 1:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       default:
+               print(2)
+       }
+} // ERROR "missing return"
+
+
+// if any breaks refer to the select, the select isn't okay anymore, even if they're dead
+
+var _ = func() int {
+       select{ default: break }
+} // ERROR "missing return"
+
+var _ = func() int {
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+               break
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               for{ break L }
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       select {
+       case <-c:
+               print(2)
+               panic("abc")
+       case c <- 1:
+               print(2)
+               break L
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       select {
+       case <-c:
+               panic("abc")
+       default:
+               select{}
+               break
+       }
+} // ERROR "missing return"
+
+// switch with default in which all cases terminate is okay
+
+var _ = func() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+var _ = func() int {
+       switch x {
+       default:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+}
+
+var _ = func() int {
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       default:
+               return 4
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+var _ = func() int {
+       switch {
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x {
+       case 2:
+               return 4
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x {
+       case 1:
+               print(2)
+               fallthrough
+       case 2:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+var _ = func() int {
+L:
+       switch x {
+       case 1:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x {
+       default:
+               return 4
+               break
+       case 1:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       switch x {
+       case 1:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+// type switch with default in which all cases terminate is okay
+
+var _ = func() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       default:
+               return 4
+       }
+}
+
+var _ = func() int {
+       switch x.(type) {
+       default:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+}
+
+// if no default or some case doesn't terminate, switch is no longer okay
+
+var _ = func() int {
+       switch {
+       }
+} // ERROR "missing return"
+
+
+var _ = func() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       case float64:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x.(type) {
+       case float64:
+               return 4
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+// if any breaks refer to the switch, switch is no longer okay
+
+var _ = func() int {
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               panic(3)
+               break L
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x.(type) {
+       default:
+               return 4
+               break
+       case int:
+               print(2)
+               panic(3)
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+L:
+       switch x.(type) {
+       case int:
+               print(2)
+               for {
+                       break L
+               }
+       default:
+               return 4
+       }
+} // ERROR "missing return"
+
+var _ = func() int {
+       switch x.(type) {
+       default:
+               return 4
+       case int, float64:
+               print(2)
+               panic(3)
+       }
+}
+
+/**/
index aa334b4..1d71497 100644 (file)
@@ -1,9 +1,6 @@
-// $G $D/$F.go && $L $F.$A &&
-// ./$A.out >tmp.go && $G tmp.go && $L -o $A.out1 tmp.$A && ./$A.out1
-// rm -f tmp.go $A.out1
+// skip
 
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// NOTE: the actual tests to run are rotate[0123].go
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -12,8 +9,8 @@
 // Generate test of shift and rotate by constants.
 // The output is compiled and run.
 //
-// The output takes around a gigabyte of memory to compile, link, and run
-// but it is only done during ./run, not in normal builds using run.go.
+// The integer type depends on the value of mode (rotate direction,
+// signedness).
 
 package main
 
@@ -37,9 +34,7 @@ func main() {
                typ := fmt.Sprintf("int%d", 1<<logBits)
                fmt.Fprint(b, strings.Replace(checkFunc, "XXX", typ, -1))
                fmt.Fprint(b, strings.Replace(checkFunc, "XXX", "u"+typ, -1))
-               for mode := 0; mode < 1<<2; mode++ {
-                       gentest(b, 1<<logBits, mode&1 != 0, mode&2 != 0)
-               }
+               gentest(b, 1<<logBits, mode&1 != 0, mode&2 != 0)
        }
 }
 
diff --git a/gcc/testsuite/go.test/test/rotate0.go b/gcc/testsuite/go.test/test/rotate0.go
new file mode 100644 (file)
index 0000000..400b225
--- /dev/null
@@ -0,0 +1,12 @@
+// runoutput ./rotate.go
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Generate test of bit rotations.
+// The output is compiled and run.
+
+package main
+
+const mode = 0
diff --git a/gcc/testsuite/go.test/test/rotate1.go b/gcc/testsuite/go.test/test/rotate1.go
new file mode 100644 (file)
index 0000000..98b0b1c
--- /dev/null
@@ -0,0 +1,12 @@
+// runoutput ./rotate.go
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Generate test of bit rotations.
+// The output is compiled and run.
+
+package main
+
+const mode = 1
diff --git a/gcc/testsuite/go.test/test/rotate2.go b/gcc/testsuite/go.test/test/rotate2.go
new file mode 100644 (file)
index 0000000..c50f8ce
--- /dev/null
@@ -0,0 +1,12 @@
+// runoutput ./rotate.go
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Generate test of bit rotations.
+// The output is compiled and run.
+
+package main
+
+const mode = 2
diff --git a/gcc/testsuite/go.test/test/rotate3.go b/gcc/testsuite/go.test/test/rotate3.go
new file mode 100644 (file)
index 0000000..73d47d8
--- /dev/null
@@ -0,0 +1,12 @@
+// runoutput ./rotate.go
+
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Generate test of bit rotations.
+// The output is compiled and run.
+
+package main
+
+const mode = 3
index 10dbcef..5e167d6 100644 (file)
@@ -5,7 +5,7 @@
 // license that can be found in the LICENSE file.
 
 // Run runs tests in the test directory.
-// 
+//
 // TODO(bradfitz): docs of some sort, once we figure out how we're changing
 // headers of files
 package main
@@ -30,10 +30,11 @@ import (
 )
 
 var (
-       verbose     = flag.Bool("v", false, "verbose. if set, parallelism is set to 1.")
-       numParallel = flag.Int("n", runtime.NumCPU(), "number of parallel tests to run")
-       summary     = flag.Bool("summary", false, "show summary of results")
-       showSkips   = flag.Bool("show_skips", false, "show skipped tests")
+       verbose        = flag.Bool("v", false, "verbose. if set, parallelism is set to 1.")
+       numParallel    = flag.Int("n", runtime.NumCPU(), "number of parallel tests to run")
+       summary        = flag.Bool("summary", false, "show summary of results")
+       showSkips      = flag.Bool("show_skips", false, "show skipped tests")
+       runoutputLimit = flag.Int("l", defaultRunOutputLimit(), "number of parallel runoutput tests to run")
 )
 
 var (
@@ -53,6 +54,10 @@ var (
        // toRun is the channel of tests to run.
        // It is nil until the first test is started.
        toRun chan *test
+
+       // rungatec controls the max number of runoutput tests
+       // executed in parallel as they can each consume a lot of memory.
+       rungatec chan bool
 )
 
 // maxTests is an upper bound on the total number of tests.
@@ -68,6 +73,7 @@ func main() {
        }
 
        ratec = make(chan bool, *numParallel)
+       rungatec = make(chan bool, *runoutputLimit)
        var err error
        letter, err = build.ArchChar(build.Default.GOARCH)
        check(err)
@@ -128,7 +134,7 @@ func main() {
                if !*verbose && test.err == nil {
                        continue
                }
-               fmt.Printf("%-10s %-20s: %s\n", test.action, test.goFileName(), errStr)
+               fmt.Printf("%-20s %-20s: %s\n", test.action, test.goFileName(), errStr)
        }
 
        if *summary {
@@ -165,6 +171,26 @@ func goFiles(dir string) []string {
        return names
 }
 
+type runCmd func(...string) ([]byte, error)
+
+func compileFile(runcmd runCmd, longname string) (out []byte, err error) {
+       return runcmd("go", "tool", gc, "-e", longname)
+}
+
+func compileInDir(runcmd runCmd, dir string, names ...string) (out []byte, err error) {
+       cmd := []string{"go", "tool", gc, "-e", "-D", ".", "-I", "."}
+       for _, name := range names {
+               cmd = append(cmd, filepath.Join(dir, name))
+       }
+       return runcmd(cmd...)
+}
+
+func linkFile(runcmd runCmd, goname string) (err error) {
+       pfile := strings.Replace(goname, ".go", "."+letter, -1)
+       _, err = runcmd("go", "tool", ld, "-o", "a.exe", "-L", ".", pfile)
+       return
+}
+
 // skipError describes why a test was skipped.
 type skipError string
 
@@ -182,13 +208,13 @@ type test struct {
        donec       chan bool // closed when done
 
        src    string
-       action string // "compile", "build", "run", "errorcheck", "skip", "runoutput", "compiledir"
+       action string // "compile", "build", etc.
 
        tempDir string
        err     error
 }
 
-// startTest 
+// startTest
 func startTest(dir, gofile string) *test {
        t := &test{
                dir:    dir,
@@ -230,6 +256,93 @@ func (t *test) goDirName() string {
        return filepath.Join(t.dir, strings.Replace(t.gofile, ".go", ".dir", -1))
 }
 
+func goDirFiles(longdir string) (filter []os.FileInfo, err error) {
+       files, dirErr := ioutil.ReadDir(longdir)
+       if dirErr != nil {
+               return nil, dirErr
+       }
+       for _, gofile := range files {
+               if filepath.Ext(gofile.Name()) == ".go" {
+                       filter = append(filter, gofile)
+               }
+       }
+       return
+}
+
+var packageRE = regexp.MustCompile(`(?m)^package (\w+)`)
+
+func goDirPackages(longdir string) ([][]string, error) {
+       files, err := goDirFiles(longdir)
+       if err != nil {
+               return nil, err
+       }
+       var pkgs [][]string
+       m := make(map[string]int)
+       for _, file := range files {
+               name := file.Name()
+               data, err := ioutil.ReadFile(filepath.Join(longdir, name))
+               if err != nil {
+                       return nil, err
+               }
+               pkgname := packageRE.FindStringSubmatch(string(data))
+               if pkgname == nil {
+                       return nil, fmt.Errorf("cannot find package name in %s", name)
+               }
+               i, ok := m[pkgname[1]]
+               if !ok {
+                       i = len(pkgs)
+                       pkgs = append(pkgs, nil)
+                       m[pkgname[1]] = i
+               }
+               pkgs[i] = append(pkgs[i], name)
+       }
+       return pkgs, nil
+}
+
+// shouldTest looks for build tags in a source file and returns
+// whether the file should be used according to the tags.
+func shouldTest(src string, goos, goarch string) (ok bool, whyNot string) {
+       if idx := strings.Index(src, "\npackage"); idx >= 0 {
+               src = src[:idx]
+       }
+       notgoos := "!" + goos
+       notgoarch := "!" + goarch
+       for _, line := range strings.Split(src, "\n") {
+               line = strings.TrimSpace(line)
+               if strings.HasPrefix(line, "//") {
+                       line = line[2:]
+               } else {
+                       continue
+               }
+               line = strings.TrimSpace(line)
+               if len(line) == 0 || line[0] != '+' {
+                       continue
+               }
+               words := strings.Fields(line)
+               if words[0] == "+build" {
+                       for _, word := range words {
+                               switch word {
+                               case goos, goarch:
+                                       return true, ""
+                               case notgoos, notgoarch:
+                                       continue
+                               default:
+                                       if word[0] == '!' {
+                                               // NOT something-else
+                                               return true, ""
+                                       }
+                               }
+                       }
+                       // no matching tag found.
+                       return false, line
+               }
+       }
+       // no build tags.
+       return true, ""
+}
+
+func init() { checkShouldTest() }
+
 // run runs a test.
 func (t *test) run() {
        defer close(t.donec)
@@ -249,7 +362,18 @@ func (t *test) run() {
                t.err = errors.New("double newline not found")
                return
        }
+       if ok, why := shouldTest(t.src, runtime.GOOS, runtime.GOARCH); !ok {
+               t.action = "skip"
+               if *showSkips {
+                       fmt.Printf("%-20s %-20s: %s\n", t.action, t.goFileName(), why)
+               }
+               return
+       }
        action := t.src[:pos]
+       if nl := strings.Index(action, "\n"); nl >= 0 && strings.Contains(action[:nl], "+build") {
+               // skip first line
+               action = action[nl+1:]
+       }
        if strings.HasPrefix(action, "//") {
                action = action[2:]
        }
@@ -263,12 +387,15 @@ func (t *test) run() {
        }
 
        switch action {
+       case "rundircmpout":
+               action = "rundir"
+               t.action = "rundir"
        case "cmpout":
                action = "run" // the run case already looks for <dir>/<test>.out files
                fallthrough
-       case "compile", "compiledir", "build", "run", "runoutput":
+       case "compile", "compiledir", "build", "run", "runoutput", "rundir":
                t.action = action
-       case "errorcheck":
+       case "errorcheck", "errorcheckdir", "errorcheckoutput":
                t.action = action
                wantError = true
                for len(args) > 0 && strings.HasPrefix(args[0], "-") {
@@ -306,8 +433,12 @@ func (t *test) run() {
                cmd.Stderr = &buf
                if useTmp {
                        cmd.Dir = t.tempDir
+                       cmd.Env = envForDir(cmd.Dir)
                }
                err := cmd.Run()
+               if err != nil {
+                       err = fmt.Errorf("%s\n%s", err, buf.Bytes())
+               }
                return buf.Bytes(), err
        }
 
@@ -328,7 +459,7 @@ func (t *test) run() {
                        }
                } else {
                        if err != nil {
-                               t.err = fmt.Errorf("%s\n%s", err, out)
+                               t.err = err
                                return
                        }
                }
@@ -336,66 +467,156 @@ func (t *test) run() {
                return
 
        case "compile":
-               out, err := runcmd("go", "tool", gc, "-e", "-o", "a."+letter, long)
-               if err != nil {
-                       t.err = fmt.Errorf("%s\n%s", err, out)
-               }
+               _, t.err = compileFile(runcmd, long)
 
        case "compiledir":
                // Compile all files in the directory in lexicographic order.
                longdir := filepath.Join(cwd, t.goDirName())
-               files, dirErr := ioutil.ReadDir(longdir)
-               if dirErr != nil {
-                       t.err = dirErr
+               pkgs, err := goDirPackages(longdir)
+               if err != nil {
+                       t.err = err
                        return
                }
-               for _, gofile := range files {
-                       if filepath.Ext(gofile.Name()) != ".go" {
-                               continue
+               for _, gofiles := range pkgs {
+                       _, t.err = compileInDir(runcmd, longdir, gofiles...)
+                       if t.err != nil {
+                               return
                        }
-                       afile := strings.Replace(gofile.Name(), ".go", "."+letter, -1)
-                       out, err := runcmd("go", "tool", gc, "-e", "-D.", "-I.", "-o", afile, filepath.Join(longdir, gofile.Name()))
-                       if err != nil {
-                               t.err = fmt.Errorf("%s\n%s", err, out)
+               }
+
+       case "errorcheckdir":
+               // errorcheck all files in lexicographic order
+               // useful for finding importing errors
+               longdir := filepath.Join(cwd, t.goDirName())
+               pkgs, err := goDirPackages(longdir)
+               if err != nil {
+                       t.err = err
+                       return
+               }
+               for i, gofiles := range pkgs {
+                       out, err := compileInDir(runcmd, longdir, gofiles...)
+                       if i == len(pkgs)-1 {
+                               if wantError && err == nil {
+                                       t.err = fmt.Errorf("compilation succeeded unexpectedly\n%s", out)
+                                       return
+                               } else if !wantError && err != nil {
+                                       t.err = err
+                                       return
+                               }
+                       } else if err != nil {
+                               t.err = err
+                               return
+                       }
+                       var fullshort []string
+                       for _, name := range gofiles {
+                               fullshort = append(fullshort, filepath.Join(longdir, name), name)
+                       }
+                       t.err = t.errorCheck(string(out), fullshort...)
+                       if t.err != nil {
                                break
                        }
                }
 
+       case "rundir":
+               // Compile all files in the directory in lexicographic order.
+               // then link as if the last file is the main package and run it
+               longdir := filepath.Join(cwd, t.goDirName())
+               pkgs, err := goDirPackages(longdir)
+               if err != nil {
+                       t.err = err
+                       return
+               }
+               for i, gofiles := range pkgs {
+                       _, err := compileInDir(runcmd, longdir, gofiles...)
+                       if err != nil {
+                               t.err = err
+                               return
+                       }
+                       if i == len(pkgs)-1 {
+                               err = linkFile(runcmd, gofiles[0])
+                               if err != nil {
+                                       t.err = err
+                                       return
+                               }
+                               out, err := runcmd(append([]string{filepath.Join(t.tempDir, "a.exe")}, args...)...)
+                               if err != nil {
+                                       t.err = err
+                                       return
+                               }
+                               if strings.Replace(string(out), "\r\n", "\n", -1) != t.expectedOutput() {
+                                       t.err = fmt.Errorf("incorrect output\n%s", out)
+                               }
+                       }
+               }
+
        case "build":
-               out, err := runcmd("go", "build", "-o", "a.exe", long)
+               _, err := runcmd("go", "build", "-o", "a.exe", long)
                if err != nil {
-                       t.err = fmt.Errorf("%s\n%s", err, out)
+                       t.err = err
                }
 
        case "run":
                useTmp = false
                out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
                if err != nil {
-                       t.err = fmt.Errorf("%s\n%s", err, out)
+                       t.err = err
                }
                if strings.Replace(string(out), "\r\n", "\n", -1) != t.expectedOutput() {
                        t.err = fmt.Errorf("incorrect output\n%s", out)
                }
 
        case "runoutput":
+               rungatec <- true
+               defer func() {
+                       <-rungatec
+               }()
                useTmp = false
-               out, err := runcmd("go", "run", t.goFileName())
+               out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
                if err != nil {
-                       t.err = fmt.Errorf("%s\n%s", err, out)
+                       t.err = err
                }
                tfile := filepath.Join(t.tempDir, "tmp__.go")
-               err = ioutil.WriteFile(tfile, out, 0666)
-               if err != nil {
+               if err := ioutil.WriteFile(tfile, out, 0666); err != nil {
                        t.err = fmt.Errorf("write tempfile:%s", err)
                        return
                }
                out, err = runcmd("go", "run", tfile)
                if err != nil {
-                       t.err = fmt.Errorf("%s\n%s", err, out)
+                       t.err = err
                }
                if string(out) != t.expectedOutput() {
                        t.err = fmt.Errorf("incorrect output\n%s", out)
                }
+
+       case "errorcheckoutput":
+               useTmp = false
+               out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
+               if err != nil {
+                       t.err = err
+               }
+               tfile := filepath.Join(t.tempDir, "tmp__.go")
+               err = ioutil.WriteFile(tfile, out, 0666)
+               if err != nil {
+                       t.err = fmt.Errorf("write tempfile:%s", err)
+                       return
+               }
+               cmdline := []string{"go", "tool", gc, "-e", "-o", "a." + letter}
+               cmdline = append(cmdline, flags...)
+               cmdline = append(cmdline, tfile)
+               out, err = runcmd(cmdline...)
+               if wantError {
+                       if err == nil {
+                               t.err = fmt.Errorf("compilation succeeded unexpectedly\n%s", out)
+                               return
+                       }
+               } else {
+                       if err != nil {
+                               t.err = err
+                               return
+                       }
+               }
+               t.err = t.errorCheck(string(out), tfile, "tmp__.go")
+               return
        }
 }
 
@@ -417,7 +638,7 @@ func (t *test) expectedOutput() string {
        return string(b)
 }
 
-func (t *test) errorCheck(outStr string, full, short string) (err error) {
+func (t *test) errorCheck(outStr string, fullshort ...string) (err error) {
        defer func() {
                if *verbose && err != nil {
                        log.Printf("%s gc output:\n%s", t, outStr)
@@ -434,17 +655,28 @@ func (t *test) errorCheck(outStr string, full, short string) (err error) {
                }
                if strings.HasPrefix(line, "\t") {
                        out[len(out)-1] += "\n" + line
-               } else {
+               } else if strings.HasPrefix(line, "go tool") {
+                       continue
+               } else if strings.TrimSpace(line) != "" {
                        out = append(out, line)
                }
        }
 
        // Cut directory name.
        for i := range out {
-               out[i] = strings.Replace(out[i], full, short, -1)
+               for j := 0; j < len(fullshort); j += 2 {
+                       full, short := fullshort[j], fullshort[j+1]
+                       out[i] = strings.Replace(out[i], full, short, -1)
+               }
        }
 
-       for _, we := range t.wantedErrors() {
+       var want []wantedError
+       for j := 0; j < len(fullshort); j += 2 {
+               full, short := fullshort[j], fullshort[j+1]
+               want = append(want, t.wantedErrors(full, short)...)
+       }
+
+       for _, we := range want {
                var errmsgs []string
                errmsgs, out = partitionStrings(we.filterRe, out)
                if len(errmsgs) == 0 {
@@ -452,6 +684,7 @@ func (t *test) errorCheck(outStr string, full, short string) (err error) {
                        continue
                }
                matched := false
+               n := len(out)
                for _, errmsg := range errmsgs {
                        if we.re.MatchString(errmsg) {
                                matched = true
@@ -460,11 +693,18 @@ func (t *test) errorCheck(outStr string, full, short string) (err error) {
                        }
                }
                if !matched {
-                       errs = append(errs, fmt.Errorf("%s:%d: no match for %q in%s", we.file, we.lineNum, we.reStr, strings.Join(out, "\n")))
+                       errs = append(errs, fmt.Errorf("%s:%d: no match for %#q in:\n\t%s", we.file, we.lineNum, we.reStr, strings.Join(out[n:], "\n\t")))
                        continue
                }
        }
 
+       if len(out) > 0 {
+               errs = append(errs, fmt.Errorf("Unmatched Errors:"))
+               for _, errLine := range out {
+                       errs = append(errs, fmt.Errorf("%s", errLine))
+               }
+       }
+
        if len(errs) == 0 {
                return nil
        }
@@ -505,8 +745,9 @@ var (
        lineRx      = regexp.MustCompile(`LINE(([+-])([0-9]+))?`)
 )
 
-func (t *test) wantedErrors() (errs []wantedError) {
-       for i, line := range strings.Split(t.src, "\n") {
+func (t *test) wantedErrors(file, short string) (errs []wantedError) {
+       src, _ := ioutil.ReadFile(file)
+       for i, line := range strings.Split(string(src), "\n") {
                lineNum := i + 1
                if strings.Contains(line, "////") {
                        // double comment disables ERROR
@@ -519,7 +760,7 @@ func (t *test) wantedErrors() (errs []wantedError) {
                all := m[1]
                mm := errQuotesRx.FindAllStringSubmatch(all, -1)
                if mm == nil {
-                       log.Fatalf("invalid errchk line in %s: %s", t.goFileName(), line)
+                       log.Fatalf("%s:%d: invalid errchk line: %s", t.goFileName(), lineNum, line)
                }
                for _, m := range mm {
                        rx := lineRx.ReplaceAllStringFunc(m[1], func(m string) string {
@@ -531,15 +772,19 @@ func (t *test) wantedErrors() (errs []wantedError) {
                                        delta, _ := strconv.Atoi(m[5:])
                                        n -= delta
                                }
-                               return fmt.Sprintf("%s:%d", t.gofile, n)
+                               return fmt.Sprintf("%s:%d", short, n)
                        })
-                       filterPattern := fmt.Sprintf(`^(\w+/)?%s:%d[:[]`, t.gofile, lineNum)
+                       re, err := regexp.Compile(rx)
+                       if err != nil {
+                               log.Fatalf("%s:%d: invalid regexp in ERROR line: %v", t.goFileName(), lineNum, err)
+                       }
+                       filterPattern := fmt.Sprintf(`^(\w+/)?%s:%d[:[]`, regexp.QuoteMeta(short), lineNum)
                        errs = append(errs, wantedError{
                                reStr:    rx,
-                               re:       regexp.MustCompile(rx),
+                               re:       re,
                                filterRe: regexp.MustCompile(filterPattern),
                                lineNum:  lineNum,
-                               file:     t.gofile,
+                               file:     short,
                        })
                }
        }
@@ -548,60 +793,56 @@ func (t *test) wantedErrors() (errs []wantedError) {
 }
 
 var skipOkay = map[string]bool{
-       "args.go":                 true,
-       "ddd3.go":                 true,
-       "import3.go":              true,
-       "import4.go":              true,
-       "index.go":                true,
-       "linkx.go":                true,
-       "method4.go":              true,
-       "nul1.go":                 true,
-       "rotate.go":               true,
-       "sigchld.go":              true,
-       "sinit.go":                true,
-       "interface/embed1.go":     true,
-       "interface/private.go":    true,
-       "interface/recursive2.go": true,
-       "dwarf/main.go":           true,
-       "dwarf/z1.go":             true,
-       "dwarf/z10.go":            true,
-       "dwarf/z11.go":            true,
-       "dwarf/z12.go":            true,
-       "dwarf/z13.go":            true,
-       "dwarf/z14.go":            true,
-       "dwarf/z15.go":            true,
-       "dwarf/z16.go":            true,
-       "dwarf/z17.go":            true,
-       "dwarf/z18.go":            true,
-       "dwarf/z19.go":            true,
-       "dwarf/z2.go":             true,
-       "dwarf/z20.go":            true,
-       "dwarf/z3.go":             true,
-       "dwarf/z4.go":             true,
-       "dwarf/z5.go":             true,
-       "dwarf/z6.go":             true,
-       "dwarf/z7.go":             true,
-       "dwarf/z8.go":             true,
-       "dwarf/z9.go":             true,
-       "fixedbugs/bug083.go":     true,
-       "fixedbugs/bug133.go":     true,
-       "fixedbugs/bug160.go":     true,
-       "fixedbugs/bug191.go":     true,
-       "fixedbugs/bug248.go":     true,
-       "fixedbugs/bug302.go":     true,
-       "fixedbugs/bug313.go":     true,
-       "fixedbugs/bug322.go":     true,
-       "fixedbugs/bug324.go":     true,
-       "fixedbugs/bug345.go":     true,
-       "fixedbugs/bug367.go":     true,
-       "fixedbugs/bug369.go":     true,
-       "fixedbugs/bug382.go":     true,
-       "fixedbugs/bug385_32.go":  true,
-       "fixedbugs/bug385_64.go":  true,
-       "fixedbugs/bug414.go":     true,
-       "fixedbugs/bug424.go":     true,
-       "fixedbugs/bug429.go":     true,
-       "fixedbugs/bug437.go":     true,
-       "bugs/bug395.go":          true,
-       "bugs/bug434.go":          true,
+       "linkx.go":            true, // like "run" but wants linker flags
+       "sinit.go":            true,
+       "fixedbugs/bug248.go": true, // combines errorcheckdir and rundir in the same dir.
+       "fixedbugs/bug302.go": true, // tests both .$O and .a imports.
+       "fixedbugs/bug345.go": true, // needs the appropriate flags in gc invocation.
+       "fixedbugs/bug369.go": true, // needs compiler flags.
+       "fixedbugs/bug429.go": true, // like "run" but program should fail
+       "bugs/bug395.go":      true,
+}
+
+// defaultRunOutputLimit returns the number of runoutput tests that
+// can be executed in parallel.
+func defaultRunOutputLimit() int {
+       const maxArmCPU = 2
+
+       cpu := runtime.NumCPU()
+       if runtime.GOARCH == "arm" && cpu > maxArmCPU {
+               cpu = maxArmCPU
+       }
+       return cpu
+}
+
+// checkShouldTest runs canity checks on the shouldTest function.
+func checkShouldTest() {
+       assert := func(ok bool, _ string) {
+               if !ok {
+                       panic("fail")
+               }
+       }
+       assertNot := func(ok bool, _ string) { assert(!ok, "") }
+       assert(shouldTest("// +build linux", "linux", "arm"))
+       assert(shouldTest("// +build !windows", "linux", "arm"))
+       assertNot(shouldTest("// +build !windows", "windows", "amd64"))
+       assertNot(shouldTest("// +build arm 386", "linux", "amd64"))
+       assert(shouldTest("// This is a test.", "os", "arch"))
+}
+
+// envForDir returns a copy of the environment
+// suitable for running in the given directory.
+// The environment is the current process's environment
+// but with an updated $PWD, so that an os.Getwd in the
+// child will be faster.
+func envForDir(dir string) []string {
+       env := os.Environ()
+       for i, kv := range env {
+               if strings.HasPrefix(kv, "PWD=") {
+                       env[i] = "PWD=" + dir
+                       return env
+               }
+       }
+       env = append(env, "PWD="+dir)
+       return env
 }
index f61e7fe..fcd25af 100644 (file)
@@ -1,4 +1,4 @@
-// $G $D/pkg.go && pack grc pkg.a pkg.$A 2> /dev/null && rm pkg.$A && errchk $G -I. -u $D/main.go
+// $G $D/pkg.go && pack grc pkg.a pkg.$A 2> /dev/null && rm pkg.$A && errchk $G -I . -u $D/main.go
 // rm -f pkg.a
 
 // Copyright 2012 The Go Authors. All rights reserved.
index 07c13c1..5d0829e 100644 (file)
@@ -1,4 +1,4 @@
-// $G $D/pkg.go && pack grcS pkg.a pkg.$A 2> /dev/null && rm pkg.$A && $G -I. -u $D/main.go
+// $G $D/pkg.go && pack grcS pkg.a pkg.$A 2> /dev/null && rm pkg.$A && $G -I . -u $D/main.go
 // rm -f pkg.a
 
 // Copyright 2012 The Go Authors. All rights reserved.
index c1cfc2a..a60d28d 100644 (file)
@@ -1,8 +1,5 @@
-// [ "$GOOS" == windows ] ||
-// ($G $D/$F.go && $L $F.$A && ./$A.out 2>&1 | cmp - $D/$F.out)
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// +build !windows
+// cmpout
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index ffb8ef7..5e50e11 100644 (file)
@@ -259,3 +259,13 @@ var copy_pt0a = pt0a
 var copy_pt0b = pt0b
 var copy_pt1 = pt1
 var copy_pt1a = pt1a
+
+var _ interface{} = 1
+
+type T1 int
+
+func (t *T1) M() {}
+
+type Mer interface { M() }
+
+var _ Mer = (*T1)(nil)
index a6abdd5..9aa9567 100644 (file)
@@ -4,8 +4,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Test unsafe.Sizeof, unsafe.Alignof, and unsafe.Offsetof all return uintptr.
-
 package main
 
 import "unsafe"
@@ -18,8 +16,143 @@ var t T
 
 func isUintptr(uintptr) {}
 
+type T2 struct {
+       A int32
+       U2
+}
+
+type U2 struct {
+       B int32
+       C int32
+}
+
+var t2 T2
+var p2 *T2
+
 func main() {
+       // Test unsafe.Sizeof, unsafe.Alignof, and unsafe.Offsetof all return uintptr.
        isUintptr(unsafe.Sizeof(t))
        isUintptr(unsafe.Alignof(t))
        isUintptr(unsafe.Offsetof(t.X))
+
+       // Test correctness of Offsetof with respect to embedded fields (issue 4909).
+       if unsafe.Offsetof(t2.C) != 8 {
+               println(unsafe.Offsetof(t2.C), "!= 8")
+               panic("unsafe.Offsetof(t2.C) != 8")
+       }
+       if unsafe.Offsetof(p2.C) != 8 {
+               println(unsafe.Offsetof(p2.C), "!= 8")
+               panic("unsafe.Offsetof(p2.C) != 8")
+       }
+       if unsafe.Offsetof(t2.U2.C) != 4 {
+               println(unsafe.Offsetof(t2.U2.C), "!= 4")
+               panic("unsafe.Offsetof(t2.U2.C) != 4")
+       }
+       if unsafe.Offsetof(p2.U2.C) != 4 {
+               println(unsafe.Offsetof(p2.U2.C), "!= 4")
+               panic("unsafe.Offsetof(p2.U2.C) != 4")
+       }
+       testDeep()
+       testNotEmbedded()
+}
+
+type (
+       S1 struct {
+               A int32
+               S2
+       }
+       S2 struct {
+               B int32
+               S3
+       }
+       S3 struct {
+               C int32
+               S4
+       }
+       S4 struct {
+               D int32
+               S5
+       }
+       S5 struct {
+               E int32
+               S6
+       }
+       S6 struct {
+               F int32
+               S7
+       }
+       S7 struct {
+               G int32
+               S8
+       }
+       S8 struct {
+               H int32
+               *S1
+       }
+)
+
+func testDeep() {
+       var s1 S1
+       switch {
+       case unsafe.Offsetof(s1.A) != 0:
+               panic("unsafe.Offsetof(s1.A) != 0")
+       case unsafe.Offsetof(s1.B) != 4:
+               panic("unsafe.Offsetof(s1.B) != 4")
+       case unsafe.Offsetof(s1.C) != 8:
+               panic("unsafe.Offsetof(s1.C) != 8")
+       case unsafe.Offsetof(s1.D) != 12:
+               panic("unsafe.Offsetof(s1.D) != 12")
+       case unsafe.Offsetof(s1.E) != 16:
+               panic("unsafe.Offsetof(s1.E) != 16")
+       case unsafe.Offsetof(s1.F) != 20:
+               panic("unsafe.Offsetof(s1.F) != 20")
+       case unsafe.Offsetof(s1.G) != 24:
+               panic("unsafe.Offsetof(s1.G) != 24")
+       case unsafe.Offsetof(s1.H) != 28:
+               panic("unsafe.Offsetof(s1.H) != 28")
+       case unsafe.Offsetof(s1.S1) != 32:
+               panic("unsafe.Offsetof(s1.S1) != 32")
+       case unsafe.Offsetof(s1.S1.S2.S3.S4.S5.S6.S7.S8.S1.S2) != 4:
+               panic("unsafe.Offsetof(s1.S1.S2.S3.S4.S5.S6.S7.S8.S1.S2) != 4")
+       }
+}
+
+func testNotEmbedded() {
+       type T2 struct {
+               B int32
+               C int32
+       }
+       type T1 struct {
+               A int32
+               T2
+       }
+       type T struct {
+               Dummy int32
+               F     T1
+               P     *T1
+       }
+
+       var t T
+       var p *T
+       switch {
+       case unsafe.Offsetof(t.F.B) != 4:
+               panic("unsafe.Offsetof(t.F.B) != 4")
+       case unsafe.Offsetof(t.F.C) != 8:
+               panic("unsafe.Offsetof(t.F.C) != 8")
+
+       case unsafe.Offsetof(t.P.B) != 4:
+               panic("unsafe.Offsetof(t.P.B) != 4")
+       case unsafe.Offsetof(t.P.C) != 8:
+               panic("unsafe.Offsetof(t.P.C) != 8")
+
+       case unsafe.Offsetof(p.F.B) != 4:
+               panic("unsafe.Offsetof(p.F.B) != 4")
+       case unsafe.Offsetof(p.F.C) != 8:
+               panic("unsafe.Offsetof(p.F.C) != 8")
+
+       case unsafe.Offsetof(p.P.B) != 4:
+               panic("unsafe.Offsetof(p.P.B) != 4")
+       case unsafe.Offsetof(p.P.C) != 8:
+               panic("unsafe.Offsetof(p.P.C) != 8")
+       }
 }
diff --git a/gcc/testsuite/go.test/test/stress/maps.go b/gcc/testsuite/go.test/test/stress/maps.go
new file mode 100644 (file)
index 0000000..d022e19
--- /dev/null
@@ -0,0 +1,111 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "math/rand"
+       "runtime"
+       "sync"
+)
+
+func mapTypes() []MapType {
+       // TODO(bradfitz): bunch more map types of all different key and value types.
+       // Use reflect.MapOf and a program to generate lots of types & struct types.
+       // For now, just one:
+       return []MapType{intMapType{}}
+}
+
+type MapType interface {
+       NewMap() Map
+}
+
+type Map interface {
+       AddItem()
+       DelItem()
+       Len() int
+       GetItem()
+       RangeAll()
+}
+
+func stressMapType(mt MapType, done func()) {
+       defer done()
+       m := mt.NewMap()
+       for m.Len() < 10000 {
+               Println("map at ", m.Len())
+               if m.Len()%100 == 0 {
+                       runtime.Gosched()
+               }
+               m.AddItem()
+               m.AddItem()
+               m.DelItem()
+               var wg sync.WaitGroup
+               const numGets = 10
+               wg.Add(numGets)
+               for i := 0; i < numGets; i++ {
+                       go func(i int) {
+                               if i&1 == 0 {
+                                       m.GetItem()
+                               } else {
+                                       m.RangeAll()
+                               }
+                               wg.Done()
+                       }(i)
+               }
+               wg.Wait()
+       }
+       for m.Len() > 0 {
+               m.DelItem()
+       }
+}
+
+type intMapType struct{}
+
+func (intMapType) NewMap() Map {
+       return make(intMap)
+}
+
+var deadcafe = []byte("\xDE\xAD\xCA\xFE")
+
+type intMap map[int][]byte
+
+func (m intMap) AddItem() {
+       s0 := len(m)
+       for len(m) == s0 {
+               key := rand.Intn(s0 + 1)
+               m[key] = make([]byte, rand.Intn(64<<10))
+       }
+}
+
+func (m intMap) DelItem() {
+       for k := range m {
+               delete(m, k)
+               return
+       }
+}
+
+func (m intMap) GetItem() {
+       key := rand.Intn(len(m))
+       if s, ok := m[key]; ok {
+               copy(s, deadcafe)
+       }
+}
+
+func (m intMap) Len() int { return len(m) }
+
+func (m intMap) RangeAll() {
+       for _ = range m {
+       }
+}
+
+func stressMaps() {
+       for {
+               var wg sync.WaitGroup
+               for _, mt := range mapTypes() {
+                       wg.Add(1)
+                       go stressMapType(mt, wg.Done)
+               }
+               wg.Wait()
+       }
+}
diff --git a/gcc/testsuite/go.test/test/stress/parsego.go b/gcc/testsuite/go.test/test/stress/parsego.go
new file mode 100644 (file)
index 0000000..a781f19
--- /dev/null
@@ -0,0 +1,220 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "go/ast"
+       "go/parser"
+       "go/token"
+       "os"
+       "path"
+       "runtime"
+       "strings"
+)
+
+func isGoFile(dir os.FileInfo) bool {
+       return !dir.IsDir() &&
+               !strings.HasPrefix(dir.Name(), ".") && // ignore .files
+               path.Ext(dir.Name()) == ".go"
+}
+
+func isPkgFile(dir os.FileInfo) bool {
+       return isGoFile(dir) &&
+               !strings.HasSuffix(dir.Name(), "_test.go") // ignore test files
+}
+
+func pkgName(filename string) string {
+       file, err := parser.ParseFile(token.NewFileSet(), filename, nil, parser.PackageClauseOnly)
+       if err != nil || file == nil {
+               return ""
+       }
+       return file.Name.Name
+}
+
+func parseDir(dirpath string) map[string]*ast.Package {
+       // the package name is the directory name within its parent.
+       // (use dirname instead of path because dirname is clean; it
+       // has no trailing '/')
+       _, pkgname := path.Split(dirpath)
+
+       // filter function to select the desired .go files
+       filter := func(d os.FileInfo) bool {
+               if isPkgFile(d) {
+                       // Some directories contain main packages: Only accept
+                       // files that belong to the expected package so that
+                       // parser.ParsePackage doesn't return "multiple packages
+                       // found" errors.
+                       // Additionally, accept the special package name
+                       // fakePkgName if we are looking at cmd documentation.
+                       name := pkgName(dirpath + "/" + d.Name())
+                       return name == pkgname
+               }
+               return false
+       }
+
+       // get package AST
+       pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments)
+       if err != nil {
+               println("parse", dirpath, err.Error())
+               panic("go ParseDir fail: " + err.Error())
+       }
+       return pkgs
+}
+
+func stressParseGo() {
+       pkgroot := runtime.GOROOT() + "/src/pkg/"
+       for {
+               m := make(map[string]map[string]*ast.Package)
+               for _, pkg := range packages {
+                       m[pkg] = parseDir(pkgroot + pkg)
+                       Println("parsed go package", pkg)
+               }
+       }
+}
+
+// find . -type d -not -path "./exp" -not -path "./exp/*" -printf "\t\"%p\",\n" | sort | sed "s/\.\///" | grep -v testdata
+var packages = []string{
+       "archive",
+       "archive/tar",
+       "archive/zip",
+       "bufio",
+       "builtin",
+       "bytes",
+       "compress",
+       "compress/bzip2",
+       "compress/flate",
+       "compress/gzip",
+       "compress/lzw",
+       "compress/zlib",
+       "container",
+       "container/heap",
+       "container/list",
+       "container/ring",
+       "crypto",
+       "crypto/aes",
+       "crypto/cipher",
+       "crypto/des",
+       "crypto/dsa",
+       "crypto/ecdsa",
+       "crypto/elliptic",
+       "crypto/hmac",
+       "crypto/md5",
+       "crypto/rand",
+       "crypto/rc4",
+       "crypto/rsa",
+       "crypto/sha1",
+       "crypto/sha256",
+       "crypto/sha512",
+       "crypto/subtle",
+       "crypto/tls",
+       "crypto/x509",
+       "crypto/x509/pkix",
+       "database",
+       "database/sql",
+       "database/sql/driver",
+       "debug",
+       "debug/dwarf",
+       "debug/elf",
+       "debug/gosym",
+       "debug/macho",
+       "debug/pe",
+       "encoding",
+       "encoding/ascii85",
+       "encoding/asn1",
+       "encoding/base32",
+       "encoding/base64",
+       "encoding/binary",
+       "encoding/csv",
+       "encoding/gob",
+       "encoding/hex",
+       "encoding/json",
+       "encoding/pem",
+       "encoding/xml",
+       "errors",
+       "expvar",
+       "flag",
+       "fmt",
+       "go",
+       "go/ast",
+       "go/build",
+       "go/doc",
+       "go/format",
+       "go/parser",
+       "go/printer",
+       "go/scanner",
+       "go/token",
+       "hash",
+       "hash/adler32",
+       "hash/crc32",
+       "hash/crc64",
+       "hash/fnv",
+       "html",
+       "html/template",
+       "image",
+       "image/color",
+       "image/draw",
+       "image/gif",
+       "image/jpeg",
+       "image/png",
+       "index",
+       "index/suffixarray",
+       "io",
+       "io/ioutil",
+       "log",
+       "log/syslog",
+       "math",
+       "math/big",
+       "math/cmplx",
+       "math/rand",
+       "mime",
+       "mime/multipart",
+       "net",
+       "net/http",
+       "net/http/cgi",
+       "net/http/cookiejar",
+       "net/http/fcgi",
+       "net/http/httptest",
+       "net/http/httputil",
+       "net/http/pprof",
+       "net/mail",
+       "net/rpc",
+       "net/rpc/jsonrpc",
+       "net/smtp",
+       "net/textproto",
+       "net/url",
+       "os",
+       "os/exec",
+       "os/signal",
+       "os/user",
+       "path",
+       "path/filepath",
+       "reflect",
+       "regexp",
+       "regexp/syntax",
+       "runtime",
+       "runtime/cgo",
+       "runtime/debug",
+       "runtime/pprof",
+       "runtime/race",
+       "sort",
+       "strconv",
+       "strings",
+       "sync",
+       "sync/atomic",
+       "syscall",
+       "testing",
+       "testing/iotest",
+       "testing/quick",
+       "text",
+       "text/scanner",
+       "text/tabwriter",
+       "text/template",
+       "text/template/parse",
+       "time",
+       "unicode",
+       "unicode/utf16",
+       "unicode/utf8",
+       "unsafe",
+}
diff --git a/gcc/testsuite/go.test/test/stress/runstress.go b/gcc/testsuite/go.test/test/stress/runstress.go
new file mode 100644 (file)
index 0000000..b5adf6a
--- /dev/null
@@ -0,0 +1,164 @@
+// Copyright 2013 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// The runstress tool stresses the runtime.
+//
+// It runs forever and should never fail. It tries to stress the garbage collector,
+// maps, channels, the network, and everything else provided by the runtime.
+package main
+
+import (
+       "flag"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "log"
+       "math/rand"
+       "net"
+       "net/http"
+       "net/http/httptest"
+       "os/exec"
+       "strconv"
+       "time"
+)
+
+var (
+       v         = flag.Bool("v", false, "verbose")
+       doMaps    = flag.Bool("maps", true, "stress maps")
+       doExec    = flag.Bool("exec", true, "stress exec")
+       doChan    = flag.Bool("chan", true, "stress channels")
+       doNet     = flag.Bool("net", true, "stress networking")
+       doParseGo = flag.Bool("parsego", true, "stress parsing Go (generates garbage)")
+)
+
+func Println(a ...interface{}) {
+       if *v {
+               log.Println(a...)
+       }
+}
+
+func dialStress(a net.Addr) {
+       for {
+               d := net.Dialer{Timeout: time.Duration(rand.Intn(1e9))}
+               c, err := d.Dial("tcp", a.String())
+               if err == nil {
+                       Println("did dial")
+                       go func() {
+                               time.Sleep(time.Duration(rand.Intn(500)) * time.Millisecond)
+                               c.Close()
+                               Println("closed dial")
+                       }()
+               }
+               // Don't run out of ephermeral ports too quickly:
+               time.Sleep(250 * time.Millisecond)
+       }
+}
+
+func stressNet() {
+       ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+               size, _ := strconv.Atoi(r.FormValue("size"))
+               w.Write(make([]byte, size))
+       }))
+       go dialStress(ts.Listener.Addr())
+       for {
+               size := rand.Intn(128 << 10)
+               res, err := http.Get(fmt.Sprintf("%s/?size=%d", ts.URL, size))
+               if err != nil {
+                       log.Fatalf("stressNet: http Get error: %v", err)
+               }
+               if res.StatusCode != 200 {
+                       log.Fatalf("stressNet: Status code = %d", res.StatusCode)
+               }
+               n, err := io.Copy(ioutil.Discard, res.Body)
+               if err != nil {
+                       log.Fatalf("stressNet: io.Copy: %v", err)
+               }
+               if n != int64(size) {
+                       log.Fatalf("stressNet: copied = %d; want %d", n, size)
+               }
+               res.Body.Close()
+               Println("did http", size)
+       }
+}
+
+func doAnExec() {
+       exit := rand.Intn(2)
+       wantOutput := fmt.Sprintf("output-%d", rand.Intn(1e9))
+       cmd := exec.Command("/bin/sh", "-c", fmt.Sprintf("echo %s; exit %d", wantOutput, exit))
+       out, err := cmd.CombinedOutput()
+       if exit == 1 {
+               if err == nil {
+                       log.Fatal("stressExec: unexpected exec success")
+               }
+               return
+       }
+       if err != nil {
+               log.Fatalf("stressExec: exec failure: %v: %s", err, out)
+       }
+       wantOutput += "\n"
+       if string(out) != wantOutput {
+               log.Fatalf("stressExec: exec output = %q; want %q", out, wantOutput)
+       }
+       Println("did exec")
+}
+
+func stressExec() {
+       gate := make(chan bool, 10) // max execs at once
+       for {
+               gate <- true
+               go func() {
+                       doAnExec()
+                       <-gate
+               }()
+       }
+}
+
+func ringf(in <-chan int, out chan<- int, donec chan<- bool) {
+       for {
+               n := <-in
+               if n == 0 {
+                       donec <- true
+                       return
+               }
+               out <- n - 1
+       }
+}
+
+func threadRing(bufsize int) {
+       const N = 100
+       donec := make(chan bool)
+       one := make(chan int, bufsize) // will be input to thread 1
+       var in, out chan int = nil, one
+       for i := 1; i <= N-1; i++ {
+               in, out = out, make(chan int, bufsize)
+               go ringf(in, out, donec)
+       }
+       go ringf(out, one, donec)
+       one <- N
+       <-donec
+       Println("did threadring of", bufsize)
+}
+
+func stressChannels() {
+       for {
+               threadRing(0)
+               threadRing(1)
+       }
+}
+
+func main() {
+       flag.Parse()
+       for want, f := range map[*bool]func(){
+               doMaps:    stressMaps,
+               doNet:     stressNet,
+               doExec:    stressExec,
+               doChan:    stressChannels,
+               doParseGo: stressParseGo,
+       } {
+               if *want {
+                       go f()
+               }
+       }
+       select {}
+}
index 457faaa..fea6f55 100644 (file)
@@ -33,6 +33,7 @@ func assert(a, b, c string) {
                                print("\ta[", i, "] = ", ac, "; b[", i, "] =", bc, "\n")
                        }
                }
+               panic("string_lit")
        }
 }
 
@@ -110,7 +111,7 @@ func main() {
        r = -1
        s = string(r)
        assert(s, "\xef\xbf\xbd", "negative rune")
-       
+
        // the large rune tests again, this time using constants instead of a variable.
        // these conversions will be done at compile time.
        s = string(0x10ffff) // largest rune value
index fd8748b..5e1d85b 100644 (file)
@@ -305,11 +305,40 @@ func main() {
                assert(false, "i should be true")
        }
 
+       // switch on interface with constant cases differing by type.
+       // was rejected by compiler: see issue 4781
+       type T int
+       type B bool
+       type F float64
+       type S string
+       switch i := interface{}(float64(1.0)); i {
+       case nil:
+               assert(false, "i should be float64(1.0)")
+       case (*int)(nil):
+               assert(false, "i should be float64(1.0)")
+       case 1:
+               assert(false, "i should be float64(1.0)")
+       case T(1):
+               assert(false, "i should be float64(1.0)")
+       case F(1.0):
+               assert(false, "i should be float64(1.0)")
+       case 1.0:
+               assert(true, "true")
+       case "hello":
+               assert(false, "i should be float64(1.0)")
+       case S("hello"):
+               assert(false, "i should be float64(1.0)")
+       case true, B(false):
+               assert(false, "i should be float64(1.0)")
+       case false, B(true):
+               assert(false, "i should be float64(1.0)")
+       }
+
        // switch on array.
        switch ar := [3]int{1, 2, 3}; ar {
-       case [3]int{1,2,3}:
+       case [3]int{1, 2, 3}:
                assert(true, "[1 2 3]")
-       case [3]int{4,5,6}:
+       case [3]int{4, 5, 6}:
                assert(false, "ar should be [1 2 3]")
        default:
                assert(false, "ar should be [1 2 3]")
@@ -327,12 +356,48 @@ func main() {
                assert(false, "c1 did not match itself")
        }
 
+       // empty switch
+       switch {
+       }
+
+       // empty switch with default case.
+       fired = false
+       switch {
+       default:
+               fired = true
+       }
+       assert(fired, "fail")
+
+       // Default and fallthrough.
+       count = 0
+       switch {
+       default:
+               count++
+               fallthrough
+       case false:
+               count++
+       }
+       assert(count == 2, "fail")
+
+       // fallthrough to default, which is not at end.
+       count = 0
+       switch i5 {
+       case 5:
+               count++
+               fallthrough
+       default:
+               count++
+       case 6:
+               count++
+       }
+       assert(count == 2, "fail")
+
        i := 0
        switch x := 5; {
-               case i < x:
-                       os.Exit(0)
-               case i == x:
-               case i > x:
-                       os.Exit(1)
+       case i < x:
+               os.Exit(0)
+       case i == x:
+       case i > x:
+               os.Exit(1)
        }
 }
diff --git a/gcc/testsuite/go.test/test/switch4.go b/gcc/testsuite/go.test/test/switch4.go
new file mode 100644 (file)
index 0000000..f38efe6
--- /dev/null
@@ -0,0 +1,36 @@
+// errorcheck
+
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify that erroneous switch statements are detected by the compiler.
+// Does not compile.
+
+package main
+
+type I interface {
+       M()
+}
+
+func bad() {
+
+       i5 := 5
+       switch i5 {
+       case 5:
+               fallthrough // ERROR "cannot fallthrough final case in switch"
+       }
+}
+
+func good() {
+       var i interface{}
+       var s string
+
+       switch i {
+       case s:
+       }
+
+       switch s {
+       case i:
+       }
+}
index 29de767..de138b1 100644 (file)
 # These function names are also known to
 # (and are the plan for transitioning to) run.go.
 
+# helper (not known to run.go)
+# group file list by packages and return list of packages
+# each package is a comma-separated list of go files.
+pkgs() {
+       pkglist=$(grep -h '^package ' $* | awk '{print $2}' | sort -u)
+       for p in $pkglist
+       do
+               echo $(grep -l "^package $p\$" $*) | tr ' ' ,
+       done | sort
+}
+
+# +build aborts execution if the supplied tags don't match,
+# i.e. none of the tags (x or !x) matches GOARCH or GOOS.
++build() {
+       if (( $# == 0 )); then
+               return
+       fi
+       for tag; do
+               case $tag in
+               $GOARCH|$GOOS)
+                       #echo >&2 "match $tag in $1"
+                       return # don't exclude.
+                       ;;
+               '!'$GOARCH|'!'$GOOS)
+                       ;;
+               '!'*)
+                       # not x where x is neither GOOS nor GOARCH.
+                       #echo >&2 "match $tag in $1"
+                       return # don't exclude
+                       ;;
+               esac
+       done
+       # no match.
+       exit 0
+}
+
 compile() {
        $G $D/$F.go
 }
 
 compiledir() {
-       for gofile in $D/$F.dir/*.go
+       for pkg in $(pkgs $D/$F.dir/*.go)
+       do
+               $G -I . $(echo $pkg | tr , ' ') || return 1
+       done
+}
+
+errorcheckdir() {
+       lastzero=""
+       if [ "$1" = "-0" ]; then
+               lastzero="-0"
+       fi
+       pkgs=$(pkgs $D/$F.dir/*.go)
+       for pkg in $pkgs.last
        do
-               $G -I. "$gofile" || return 1
+               zero="-0"
+               case $pkg in
+               *.last)
+                       pkg=$(echo $pkg |sed 's/\.last$//')
+                       zero=$lastzero
+               esac
+               errchk $zero $G -D . -I . -e $(echo $pkg | tr , ' ')
        done
 }
 
+rundir() {
+       lastfile=""
+       for pkg in $(pkgs $D/$F.dir/*.go)
+       do
+               name=$(echo $pkg | sed 's/\.go.*//; s/.*\///')
+               $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1
+               lastfile=$name
+       done
+       $L -o $A.out -L . $lastfile.$A
+       ./$A.out
+}
+
+rundircmpout() {
+       lastfile=""
+       for pkg in $(pkgs $D/$F.dir/*.go)
+       do
+               name=$(echo $pkg | sed 's/\.go.*//; s/.*\///')
+               $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1
+               lastfile=$name
+       done
+       $L -o $A.out -L . $lastfile.$A
+       ./$A.out 2>&1 | cmp - $D/$F.out
+}
+
 build() {
        $G $D/$F.go && $L $F.$A
 }
 
 runoutput() {
-       go run "$D/$F.go" > tmp.go
+       go run "$D/$F.go" "$@" > tmp.go
        go run tmp.go
 }
 
@@ -56,6 +134,16 @@ errorcheck() {
        errchk $zero $G -e $* $D/$F.go
 }
 
+errorcheckoutput() {
+       zero=""
+       if [ "$1" = "-0" ]; then
+               zero="-0"
+               shift
+       fi
+       go run "$D/$F.go" "$@" > tmp.go
+       errchk $zero $G -e tmp.go
+}
+
 skip() {
        true
 }
diff --git a/gcc/testsuite/go.test/test/torture.go b/gcc/testsuite/go.test/test/torture.go
new file mode 100644 (file)
index 0000000..bbf6d34
--- /dev/null
@@ -0,0 +1,339 @@
+// compile
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Various tests for expressions with high complexity.
+
+package main
+
+// Concatenate 16 4-bit integers into a 64-bit number.
+func concat(s *[16]byte) uint64 {
+       r := (((((((((((((((uint64(s[0])<<4|
+               uint64(s[1]))<<4|
+               uint64(s[2]))<<4|
+               uint64(s[3]))<<4|
+               uint64(s[4]))<<4|
+               uint64(s[5]))<<4|
+               uint64(s[6]))<<4|
+               uint64(s[7]))<<4|
+               uint64(s[8]))<<4|
+               uint64(s[9]))<<4|
+               uint64(s[10]))<<4|
+               uint64(s[11]))<<4|
+               uint64(s[12]))<<4|
+               uint64(s[13]))<<4|
+               uint64(s[14]))<<4 |
+               uint64(s[15]))
+       return r
+}
+
+// Compute the determinant of a 4x4-matrix by the sum
+// over all index permutations.
+func determinant(m [4][4]float64) float64 {
+       return m[0][0]*m[1][1]*m[2][2]*m[3][3] -
+               m[0][0]*m[1][1]*m[2][3]*m[3][2] -
+               m[0][0]*m[1][2]*m[2][1]*m[3][3] +
+               m[0][0]*m[1][2]*m[2][3]*m[3][1] +
+               m[0][0]*m[1][3]*m[2][1]*m[3][2] -
+               m[0][0]*m[1][3]*m[2][2]*m[3][1] -
+               m[0][1]*m[1][0]*m[2][2]*m[3][3] +
+               m[0][1]*m[1][0]*m[2][3]*m[3][2] +
+               m[0][1]*m[1][2]*m[2][0]*m[3][3] -
+               m[0][1]*m[1][2]*m[2][3]*m[3][0] -
+               m[0][1]*m[1][3]*m[2][0]*m[3][2] +
+               m[0][1]*m[1][3]*m[2][2]*m[3][0] +
+               m[0][2]*m[1][0]*m[2][1]*m[3][3] -
+               m[0][2]*m[1][0]*m[2][3]*m[3][1] -
+               m[0][2]*m[1][1]*m[2][0]*m[3][3] +
+               m[0][2]*m[1][1]*m[2][3]*m[3][0] +
+               m[0][2]*m[1][3]*m[2][0]*m[3][1] -
+               m[0][2]*m[1][3]*m[2][1]*m[3][0] -
+               m[0][3]*m[1][0]*m[2][1]*m[3][2] +
+               m[0][3]*m[1][0]*m[2][2]*m[3][1] +
+               m[0][3]*m[1][1]*m[2][0]*m[3][2] -
+               m[0][3]*m[1][1]*m[2][2]*m[3][0] -
+               m[0][3]*m[1][2]*m[2][0]*m[3][1] +
+               m[0][3]*m[1][2]*m[2][1]*m[3][0]
+}
+
+// Compute the determinant of a 4x4-matrix by the sum
+// over all index permutations.
+func determinantInt(m [4][4]int) int {
+       return m[0][0]*m[1][1]*m[2][2]*m[3][3] -
+               m[0][0]*m[1][1]*m[2][3]*m[3][2] -
+               m[0][0]*m[1][2]*m[2][1]*m[3][3] +
+               m[0][0]*m[1][2]*m[2][3]*m[3][1] +
+               m[0][0]*m[1][3]*m[2][1]*m[3][2] -
+               m[0][0]*m[1][3]*m[2][2]*m[3][1] -
+               m[0][1]*m[1][0]*m[2][2]*m[3][3] +
+               m[0][1]*m[1][0]*m[2][3]*m[3][2] +
+               m[0][1]*m[1][2]*m[2][0]*m[3][3] -
+               m[0][1]*m[1][2]*m[2][3]*m[3][0] -
+               m[0][1]*m[1][3]*m[2][0]*m[3][2] +
+               m[0][1]*m[1][3]*m[2][2]*m[3][0] +
+               m[0][2]*m[1][0]*m[2][1]*m[3][3] -
+               m[0][2]*m[1][0]*m[2][3]*m[3][1] -
+               m[0][2]*m[1][1]*m[2][0]*m[3][3] +
+               m[0][2]*m[1][1]*m[2][3]*m[3][0] +
+               m[0][2]*m[1][3]*m[2][0]*m[3][1] -
+               m[0][2]*m[1][3]*m[2][1]*m[3][0] -
+               m[0][3]*m[1][0]*m[2][1]*m[3][2] +
+               m[0][3]*m[1][0]*m[2][2]*m[3][1] +
+               m[0][3]*m[1][1]*m[2][0]*m[3][2] -
+               m[0][3]*m[1][1]*m[2][2]*m[3][0] -
+               m[0][3]*m[1][2]*m[2][0]*m[3][1] +
+               m[0][3]*m[1][2]*m[2][1]*m[3][0]
+}
+
+// Compute the determinant of a 4x4-matrix by the sum
+// over all index permutations.
+func determinantByte(m [4][4]byte) byte {
+       return m[0][0]*m[1][1]*m[2][2]*m[3][3] -
+               m[0][0]*m[1][1]*m[2][3]*m[3][2] -
+               m[0][0]*m[1][2]*m[2][1]*m[3][3] +
+               m[0][0]*m[1][2]*m[2][3]*m[3][1] +
+               m[0][0]*m[1][3]*m[2][1]*m[3][2] -
+               m[0][0]*m[1][3]*m[2][2]*m[3][1] -
+               m[0][1]*m[1][0]*m[2][2]*m[3][3] +
+               m[0][1]*m[1][0]*m[2][3]*m[3][2] +
+               m[0][1]*m[1][2]*m[2][0]*m[3][3] -
+               m[0][1]*m[1][2]*m[2][3]*m[3][0] -
+               m[0][1]*m[1][3]*m[2][0]*m[3][2] +
+               m[0][1]*m[1][3]*m[2][2]*m[3][0] +
+               m[0][2]*m[1][0]*m[2][1]*m[3][3] -
+               m[0][2]*m[1][0]*m[2][3]*m[3][1] -
+               m[0][2]*m[1][1]*m[2][0]*m[3][3] +
+               m[0][2]*m[1][1]*m[2][3]*m[3][0] +
+               m[0][2]*m[1][3]*m[2][0]*m[3][1] -
+               m[0][2]*m[1][3]*m[2][1]*m[3][0] -
+               m[0][3]*m[1][0]*m[2][1]*m[3][2] +
+               m[0][3]*m[1][0]*m[2][2]*m[3][1] +
+               m[0][3]*m[1][1]*m[2][0]*m[3][2] -
+               m[0][3]*m[1][1]*m[2][2]*m[3][0] -
+               m[0][3]*m[1][2]*m[2][0]*m[3][1] +
+               m[0][3]*m[1][2]*m[2][1]*m[3][0]
+}
+
+type A []A
+
+// A sequence of constant indexings.
+func IndexChain1(s A) A {
+       return s[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
+}
+
+// A sequence of non-constant indexings.
+func IndexChain2(s A, i int) A {
+       return s[i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i]
+}
+
+// Another sequence of indexings.
+func IndexChain3(s []int) int {
+       return s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[0]]]]]]]]]]]]]]]]]]]]]
+}
+
+// A right-leaning tree of byte multiplications.
+func righttree(a, b, c, d uint8) uint8 {
+       return a * (b * (c * (d *
+               (a * (b * (c * (d *
+                       (a * (b * (c * (d *
+                               (a * (b * (c * (d *
+                                       (a * (b * (c * (d *
+                                               a * (b * (c * d)))))))))))))))))))))
+
+}
+
+// A left-leaning tree of byte multiplications.
+func lefttree(a, b, c, d uint8) uint8 {
+       return ((((((((((((((((((a * b) * c) * d *
+               a) * b) * c) * d *
+               a) * b) * c) * d *
+               a) * b) * c) * d *
+               a) * b) * c) * d *
+               a) * b) * c) * d)
+}
+
+type T struct {
+       Next I
+}
+
+type I interface{}
+
+// A chains of type assertions.
+func ChainT(t *T) *T {
+       return t.
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T).
+               Next.(*T)
+}
+
+type U struct {
+       Children []J
+}
+
+func (u *U) Child(n int) J { return u.Children[n] }
+
+type J interface {
+       Child(n int) J
+}
+
+func ChainUAssert(u *U) *U {
+       return u.Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U).
+               Child(0).(*U)
+}
+
+func ChainUNoAssert(u *U) *U {
+       return u.Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).
+               Child(0).(*U)
+}
+
+// Type assertions and slice indexing. See issue 4207.
+func ChainAssertIndex(u *U) J {
+       return u.
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0]
+}
+
+type UArr struct {
+       Children [2]J
+}
+
+func (u *UArr) Child(n int) J { return u.Children[n] }
+
+func ChainAssertArrayIndex(u *UArr) J {
+       return u.
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0]
+}
+
+type UArrPtr struct {
+       Children *[2]J
+}
+
+func (u *UArrPtr) Child(n int) J { return u.Children[n] }
+
+func ChainAssertArrayptrIndex(u *UArrPtr) J {
+       return u.
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0]
+}
+
+// Chains of divisions. See issue 4201.
+
+func ChainDiv(a, b int) int {
+       return a / b / a / b / a / b / a / b /
+               a / b / a / b / a / b / a / b /
+               a / b / a / b / a / b / a / b
+}
+
+func ChainDivRight(a, b int) int {
+       return a / (b / (a / (b /
+               (a / (b / (a / (b /
+                       (a / (b / (a / (b /
+                               (a / (b / (a / (b /
+                                       (a / (b / (a / b))))))))))))))))))
+}
+
+func ChainDivConst(a int) int {
+       return a / 17 / 17 / 17 /
+               17 / 17 / 17 / 17 /
+               17 / 17 / 17 / 17
+}
+
+func ChainMulBytes(a, b, c byte) byte {
+       return a*(a*(a*(a*(a*(a*(a*(a*(a*b+c)+c)+c)+c)+c)+c)+c)+c) + c
+}
diff --git a/gcc/testsuite/go.test/test/typecheck.go b/gcc/testsuite/go.test/test/typecheck.go
new file mode 100644 (file)
index 0000000..a2ad91f
--- /dev/null
@@ -0,0 +1,18 @@
+// errorcheck
+
+// Verify that the Go compiler will not
+// die after running into an undefined
+// type in the argument list for a
+// function.
+// Does not compile.
+
+package main
+
+func mine(int b) int { // ERROR "undefined.*b"
+       return b + 2    // ERROR "undefined.*b"
+}
+
+func main() {
+       mine()          // GCCGO_ERROR "not enough arguments"
+       c = mine()      // ERROR "undefined.*c|not enough arguments" "cannot assign to c"
+}
index 673d1d1..9ab2713 100644 (file)
@@ -237,4 +237,7 @@ func main() {
                        fmt.Printf("%v/%v: expected %g error; got %g\n", t.f, t.g, t.out, x)
                }
        }
+       if bad {
+               panic("zerodivide")
+       }
 }