This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Go patch committed: Update index.go in testsuite


This patch to the Go testsuite updates index.go to the version currently
in mainline.  This required adding some new support to the Go testsuite
driver.  This fixes PR go/55228.  Ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian

Index: go.test/test/index0.go
===================================================================
--- go.test/test/index0.go	(revision 0)
+++ go.test/test/index0.go	(revision 0)
@@ -0,0 +1,12 @@
+// runoutput ./index.go
+
+// 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.
+
+// Generate test of index and slice bounds checks.
+// The output is compiled and run.
+
+package main
+
+const pass = 0
Index: go.test/test/index1.go
===================================================================
--- go.test/test/index1.go	(revision 0)
+++ go.test/test/index1.go	(revision 0)
@@ -0,0 +1,12 @@
+// errorcheckoutput ./index.go
+
+// 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.
+
+// Generate test of index and slice bounds checks.
+// The output is error checked.
+
+package main
+
+const pass = 1
Index: go.test/test/index2.go
===================================================================
--- go.test/test/index2.go	(revision 0)
+++ go.test/test/index2.go	(revision 0)
@@ -0,0 +1,12 @@
+// errorcheckoutput ./index.go
+
+// 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.
+
+// Generate test of index and slice bounds checks.
+// The output is error checked.
+
+package main
+
+const pass = 2
Index: go.test/test/index.go
===================================================================
--- go.test/test/index.go	(revision 193259)
+++ go.test/test/index.go	(working copy)
@@ -1,27 +1,19 @@
-// $G $D/$F.go && $L $F.$A &&
-// ./$A.out -pass 0 >tmp.go && $G tmp.go && $L -o $A.out1 tmp.$A && ./$A.out1 &&
-// ./$A.out -pass 1 >tmp.go && errchk $G -e tmp.go &&
-// ./$A.out -pass 2 >tmp.go && errchk $G -e tmp.go
-// rm -f tmp.go $A.out1
-
-// 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.
+// skip
 
 // 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.
 
 // Generate test of index and slice bounds checks.
-// The output is compiled and run.
+// The actual tests are index0.go, index1.go, index2.go.
 
 package main
 
 import (
 	"bufio"
-	"flag"
 	"fmt"
 	"os"
-	"runtime"
+	"unsafe"
 )
 
 const prolog = `
@@ -155,14 +147,13 @@ func bug() {
 func main() {
 `
 
-// Passes:
+// pass variable set in index[012].go
 //	0 - dynamic checks
 //	1 - static checks of invalid constants (cannot assign to types)
 //	2 - static checks of array bounds
-var pass = flag.Int("pass", 0, "which test (0,1,2)")
 
 func testExpr(b *bufio.Writer, expr string) {
-	if *pass == 0 {
+	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)
@@ -172,12 +163,10 @@ func testExpr(b *bufio.Writer, expr stri
 func main() {
 	b := bufio.NewWriter(os.Stdout)
 
-	flag.Parse()
-	
-	if *pass == 0 {
-		fmt.Fprint(b, "// $G $D/$F.go && $L $F.$A && ./$A.out\n\n")
+	if pass == 0 {
+		fmt.Fprint(b, "// run\n\n")
 	} else {
-		fmt.Fprint(b, "// errchk $G -e $D/$F.go\n\n")
+		fmt.Fprint(b, "// errorcheck\n\n")
 	}
 	fmt.Fprint(b, prolog)
 	
@@ -225,9 +214,10 @@ func main() {
 				// the next pass from running.
 				// So run it as a separate check.
 				thisPass = 1
-			} else if a == "s" && n == "" && (i == "i64big" || i == "i64bigger") && runtime.GOARCH == "amd64" {
-				// On amd64, these huge numbers do fit in an int, so they are not
-				// rejected at compile time.
+			} else if a == "s" && n == "" && (i == "i64big" || i == "i64bigger") && unsafe.Sizeof(int(0)) > 4 {
+				// If int is 64 bits, these huge
+				// numbers do fit in an int, so they
+				// are not rejected at compile time.
 				thisPass = 0
 			} else {
 				thisPass = 2
@@ -240,7 +230,7 @@ func main() {
 		}
 
 		// Only print the test case if it is appropriate for this pass.
-		if thisPass == *pass {
+		if thisPass == pass {
 			pae := p+a+e+big
 			cni := c+n+i
 			
Index: go.test/go-test.exp
===================================================================
--- go.test/go-test.exp	(revision 193259)
+++ go.test/go-test.exp	(working copy)
@@ -449,15 +449,23 @@ proc go-gc-tests { } {
 	    # This is a vanilla compile and link test.
 	    set dg-do-what-default "link"
 	    go-dg-runtest $test "-w $DEFAULT_GOCFLAGS"
-	} elseif { $test_line == "// runoutput" \
+	} elseif { [string match "// runoutput*" $test_line] \
 		       || ($test_line == "// \$G \$D/\$F.go && \$L \$F.\$A &&"
 			   && $test_line2 == "// ./\$A.out >tmp.go && \$G tmp.go && \$L -o \$A.out1 tmp.\$A && ./\$A.out1") } {
 	    # Run the test to get a .go program to run.
 	    set go_execute_args ""
 	    set hold_runtests $runtests
 	    set runtests "go-test.exp"
+	    set files [list]
+	    if { [string match "// runoutput*" $test_line] } {
+		set args ""
+		regsub "// runoutput\(.*\)" $test_line "\\1" args
+		foreach f $args {
+		    lappend files "[file dirname $test]/$f"
+		}
+	    }
 	    set dg-do-what-default "link"
-	    dg-test -keep-output $test "-O" "-w $DEFAULT_GOCFLAGS"
+	    dg-test -keep-output $test "-O" "$files -w $DEFAULT_GOCFLAGS"
 	    set output_file "./[file rootname [file tail $test]].exe"
 	    set base "[file rootname [file tail $test]]"
 	    if [isnative] {
@@ -507,6 +515,31 @@ proc go-gc-tests { } {
 	    go-execute-xfail $test
 	} elseif { $test_line == "// errorcheck" } {
 	    errchk $test ""
+	} elseif { [string match "// errorcheckoutput*" $test_line] } {
+	    # Run the test to get a .go program to error check.
+	    set go_execute_args ""
+	    set hold_runtests $runtests
+	    set runtests "go-test.exp"
+	    set files [list]
+	    regsub "// errorcheckoutput\(.*\)" $test_line "\\1" args
+	    foreach f $args {
+		lappend files "[file dirname $test]/$f"
+	    }
+	    set dg-do-what-default "link"
+	    dg-test -keep-output $test "-O" "$files -w $DEFAULT_GOCFLAGS"
+	    set output_file "./[file rootname [file tail $test]].exe"
+	    set base "[file rootname [file tail $test]]"
+	    if [isnative] {
+		if { [catch "exec $output_file >$base-out.go"] != 0 } {
+		    fail "$name execution"
+		} else {
+		    pass "$name execution"
+		    errchk "$base-out.go" ""
+		}
+		file delete $base-out.go
+	    }
+	    file delete $output_file
+	    set runtests $hold_runtests
 	} elseif { $test_line == "// compiledir" } {
 	    set hold_runtests $runtests
 	    set runtests "go-test.exp"
@@ -521,6 +554,26 @@ proc go-gc-tests { } {
 		file delete $f
 	    }
 	    set runtests $hold_runtests
+	} 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 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" == ""
 		   || [string match "// true*" $test_line]
 		   || [string match "// skip*" $test_line] } {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]