exp/ssa/interp: (#6 of 5): test interpretation of SSA form of $GOROOT/test/*.go.
The interpreter's os.Exit now triggers a special panic rather
than kill the test process. (It's semantically dubious, since
it will run deferred routines.) Interpret now returns its
exit code rather than calling os.Exit.
Also:
- disabled parts of a few $GOROOT/tests via os.Getenv("GOSSAINTERP").
- remove unnecessary 'slots' param to external functions; they
are never closures.
Most of the tests are disabled until go/types supports shifts.
They can be reenabled if you patch this workaround:
https://golang.org/cl/7312068
R=iant, bradfitz
CC=golang-dev, gri
https://golang.org/cl/7313062
diff --git a/test/blank.go b/test/blank.go
index ad4d6eb..7f7d9f6 100644
--- a/test/blank.go
+++ b/test/blank.go
@@ -8,7 +8,10 @@
package main
-import "unsafe"
+import (
+ "os"
+ "unsafe"
+)
import _ "fmt"
@@ -104,11 +107,15 @@
panic(sum)
}
- 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{}")
+ // 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)