]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/blank.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / blank.go
index 7b9d64257e27969efe8e07ef3b673bc21719cd60..0539debb1f25249788954bf0704db109ae1d635b 100644 (file)
@@ -1,17 +1,24 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out
+// run
 
 // 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 behavior of the blank identifier (_).
+
 package main
 
+import (
+       "os"
+       "unsafe"
+)
+
 import _ "fmt"
 
 var call string
 
 type T struct {
-       _, _, _ int;
+       _, _, _ int
 }
 
 func (T) _() {
@@ -20,82 +27,163 @@ func (T) _() {
 func (T) _() {
 }
 
+type U struct {
+       _ struct{ a, b, c int }
+}
+
 const (
-       c0 = iota;
-       _;
-       _;
-       _;
-       c4;
+       c0 = iota
+       _
+       _
+       _
+       c4
 )
 
-var ints = []string {
+var ints = []string{
        "1",
        "2",
-       "3"
+       "3",
 }
 
 func f() (int, int) {
-       call += "f";
-       return 1,2
+       call += "f"
+       return 1, 2
 }
 
-func g() (float, float) {
-       call += "g";
-       return 3,4
+func g() (float64, float64) {
+       call += "g"
+       return 3, 4
 }
 
-func h(_ int, _ float) {
+func h(_ int, _ float64) {
 }
 
 func i() int {
-       call += "i";
-       return 23;
+       call += "i"
+       return 23
 }
 
-var _ = i();
+var _ = i()
 
 func main() {
-       if call != "i" {panic("init did not run")}
-       call = "";
-       _, _ = f();
-       a, _ := f();
-       if a != 1 {panic(a)}
-       b, _ := g();
-       if b != 3 {panic(b)}
-       _, a = f();
-       if a != 2 {panic(a)}
-       _, b = g();
-       if b != 4 {panic(b)}
-       _ = i();
-       if call != "ffgfgi" {panic(call)}
-       if c4 != 4 {panic(c4)}
-
-       out := "";
+       if call != "i" {
+               panic("init did not run")
+       }
+       call = ""
+       _, _ = f()
+       a, _ := f()
+       if a != 1 {
+               panic(a)
+       }
+       b, _ := g()
+       if b != 3 {
+               panic(b)
+       }
+       _, a = f()
+       if a != 2 {
+               panic(a)
+       }
+       _, b = g()
+       if b != 4 {
+               panic(b)
+       }
+       _ = i()
+       if call != "ffgfgi" {
+               panic(call)
+       }
+       if c4 != 4 {
+               panic(c4)
+       }
+
+       out := ""
        for _, s := range ints {
-               out += s;
+               out += s
+       }
+       if out != "123" {
+               panic(out)
        }
-       if out != "123" {panic(out)}
 
-       sum := 0;
-       for s, _ := range ints {
-               sum += s;
+       sum := 0
+       for s := range ints {
+               sum += s
+       }
+       if sum != 3 {
+               panic(sum)
        }
-       if sum != 3 {panic(sum)}
 
-       h(a,b);
+       // go.tools/ssa/interp 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{}")
+               }
+
+               var u1, u2 interface{}
+               u1 = *(*U)(unsafe.Pointer(&T1{1, 2, 3}))
+               u2 = *(*U)(unsafe.Pointer(&T1{4, 5, 6}))
+               if u1 != u2 {
+                       panic("U{} != U{}")
+               }
+       }
+
+       h(a, b)
+
+       m()
+}
+
+type I interface {
+       M(_ int, y int)
+}
+
+type TI struct{}
+
+func (_ TI) M(x int, y int) {
+       if x != y {
+               println("invalid M call:", x, y)
+               panic("bad M")
+       }
+}
+
+var fp = func(_ int, y int) {}
+
+func init() {
+       fp = fp1
+}
+
+func fp1(x, y int) {
+       if x != y {
+               println("invalid fp1 call:", x, y)
+               panic("bad fp1")
+       }
+}
+
+func m() {
+       var i I
+
+       i = TI{}
+       i.M(1, 1)
+       i.M(2, 2)
+
+       fp(1, 1)
+       fp(2, 2)
 }
 
 // useless but legal
-var _ int = 1;
-var _ = 2;
-var _, _ = 3, 4;
-const _ = 3;
-const _, _ = 4, 5;
-type _ int;
+var _ int = 1
+var _ = 2
+var _, _ = 3, 4
+
+const _ = 3
+const _, _ = 4, 5
+
+type _ int
+
 func _() {
        panic("oops")
 }
 
 func ff() {
-       var _ int = 1;
+       var _ int = 1
 }