]> Cypherpunks repositories - gostls13.git/commitdiff
exp/ssa/interp: uncomment tests now passing thanks to recent typechecker fixes.
authorAlan Donovan <adonovan@google.com>
Fri, 1 Mar 2013 17:51:34 +0000 (12:51 -0500)
committerAlan Donovan <adonovan@google.com>
Fri, 1 Mar 2013 17:51:34 +0000 (12:51 -0500)
Also: add support for pointer conversions, covered by one new test.

R=gri, bradfitz, dave
CC=golang-dev
https://golang.org/cl/7435047

src/pkg/exp/ssa/interp/interp_test.go
src/pkg/exp/ssa/interp/ops.go

index e5c44703d8e238a2c6bedc638a03f77898fb24c2..80c0526016c3b6aeda7b78a9110a11038644500f 100644 (file)
@@ -71,43 +71,41 @@ var gorootTests = []string{
        "bigmap.go",
        "func.go",
        "reorder2.go",
-       // The following tests are disabled until the typechecker supports shifts correctly.
-       // They can be enabled if you patch workaround https://codereview.appspot.com/7312068.
-       // "closure.go",
-       // "gc.go",
-       // "goprint.go",  // doesn't actually assert anything
-       // "utf.go",
+       "closure.go",
+       "gc.go",
+       "goprint.go", // doesn't actually assert anything
+       "utf.go",
        "method.go",
-       // "char_lit.go",
-       //"env.go",
-       // "int_lit.go",
-       // "string_lit.go",
-       // "defer.go",
-       // "typeswitch.go",
-       // "stringrange.go",
-       // "reorder.go",
+       "char_lit.go",
+       "env.go",
+       "int_lit.go",
+       "string_lit.go",
+       "defer.go",
+       "typeswitch.go",
+       "stringrange.go",
+       "reorder.go",
        "literal.go",
-       // "nul1.go",
-       // "zerodivide.go",
-       // "convert.go",
+       "nul1.go",
+       "zerodivide.go",
+       "convert.go",
        "convT2X.go",
-       // "switch.go",
-       // "initialize.go",
-       // "blank.go", // partly disabled; TODO(adonovan): skip blank fields in struct{_} equivalence.
-       // "map.go",
-       // "bom.go",
-       // "closedchan.go",
-       // "divide.go",
-       // "rename.go",
-       // "const3.go",
-       // "nil.go",
-       // "recover.go", // partly disabled; TODO(adonovan): fix.
+       "initialize.go",
+       "ddd.go",
+       "blank.go", // partly disabled; TODO(adonovan): skip blank fields in struct{_} equivalence.
+       "map.go",
+       "bom.go",
+       "closedchan.go",
+       "divide.go",
+       "rename.go",
+       "const3.go",
+       "nil.go",
+       "recover.go", // partly disabled; TODO(adonovan): fix.
        // Slow tests follow.
-       // "cmplxdivide.go cmplxdivide1.go",
-       // "append.go",
-       // "crlf.go", // doesn't actually assert anything
-       //"typeswitch1.go",
-       // "floatcmp.go",
+       "cmplxdivide.go cmplxdivide1.go",
+       "append.go",
+       "crlf.go", // doesn't actually assert anything
+       "typeswitch1.go",
+       "floatcmp.go",
        "gc1.go",
 
        // Working, but not worth enabling:
@@ -119,22 +117,26 @@ var gorootTests = []string{
        // "const.go",     // works but for but one bug: constant folder doesn't consider representations.
        // "init1.go",     // too slow (80s) and not that interesting. Cheats on ReadMemStats check too.
 
+       // Typechecker failures:
+       // "switch.go",    // bug re: switch ... { case 1.0:... case 1:... }
+       // "iota.go",      // crash
+       // "rune.go",      // error re: rune as index
+       // "64bit.go",     // error re: comparison
+       // "cmp.go",       // error re: comparison
+       // "rotate.go rotate0.go", // error re: shifts
+       // "rotate.go rotate1.go", // error re: shifts
+       // "rotate.go rotate2.go", // error re: shifts
+       // "rotate.go rotate3.go", // error re: shifts
+       // "run.go",       // produces wrong constant for bufio.runeError; also, not really a test.
+
        // Broken.  TODO(adonovan): fix.
-       // ddd.go          // builder: variadic methods
        // copy.go         // very slow; but with N=4 quickly crashes, slice index out of range.
        // nilptr.go       // interp: V > uintptr not implemented. Slow test, lots of mem
-       // iota.go         // typechecker: crash
-       // rotate.go       // typechecker: shifts
-       // rune.go         // typechecker: shifts
-       // 64bit.go        // typechecker: shifts
-       // cmp.go          // typechecker: comparison
        // recover1.go     // error: "spurious recover"
        // recover2.go     // panic: interface conversion: string is not error: missing method Error
        // recover3.go     // logic errors: panicked with wrong Error.
        // simassign.go    // requires support for f(f(x,y)).
        // method3.go      // Fails dynamically; (*T).f vs (T).f are distinct methods.
-       // ddd2.go         // fails
-       // run.go          // rtype.NumOut not yet implemented.  Not really a test though.
        // args.go         // works, but requires specific os.Args from the driver.
        // index.go        // a template, not a real test.
        // mallocfin.go    // SetFinalizer not implemented.
@@ -145,7 +147,7 @@ var gorootTests = []string{
 
 // These are files in exp/ssa/interp/testdata/.
 var testdataTests = []string{
-// "coverage.go",  // shifts
+       "coverage.go",
 }
 
 func run(t *testing.T, dir, input string) bool {
index 55cbf357325cb37b38a82fce60b9cfb0f56d6a03..f267ccfdaf17b9c905b9e6fef349ec2f968a12fc 100644 (file)
@@ -226,7 +226,6 @@ func zero(t types.Type) value {
                        return map[value]value(nil)
                }
                return (*hashmap)(nil)
-
        case *types.Signature:
                return (*ssa.Function)(nil)
        }
@@ -1136,11 +1135,14 @@ func conv(t_dst, t_src types.Type, x value) value {
                return x
 
        case *types.Pointer:
-               // *value to unsafe.Pointer?
-               if ut_dst, ok := ut_dst.(*types.Basic); ok {
+               switch ut_dst := ut_dst.(type) {
+               case *types.Basic:
+                       // *value to unsafe.Pointer?
                        if ut_dst.Kind == types.UnsafePointer {
                                return unsafe.Pointer(x.(*value))
                        }
+               case *types.Pointer:
+                       return x
                }
 
        case *types.Slice: