interface method tests
R=r
DELTA=134 (134 added, 0 deleted, 0 changed)
OCL=28373
CL=28380
diff --git a/test/interface8.go b/test/interface8.go
new file mode 100644
index 0000000..f7dc04d
--- /dev/null
+++ b/test/interface8.go
@@ -0,0 +1,101 @@
+// 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.
+
+// $G $F.go && $L $F.$A && ./$A.out
+
+package main
+
+type T int
+var nv, np int
+
+func (t T) V() {
+ if t != 42 {
+ panic(t)
+ }
+ nv++
+}
+
+func (t *T) P() {
+ if *t != 42 {
+ panic(t, *t)
+ }
+ np++
+}
+
+type V interface { V() }
+type P interface { P(); V() }
+
+type S struct {
+ T;
+}
+
+type SP struct {
+ *T;
+}
+
+func main() {
+ var t T;
+ var v V;
+ var p P;
+
+ t = 42;
+
+ t.P();
+ t.V();
+
+ v = t;
+ v.V();
+
+ p = &t;
+ p.P();
+ p.V();
+
+ v = &t;
+ v.V();
+
+// p = t; // ERROR
+
+// println("--struct--");
+ var s S;
+ s.T = 42;
+ s.P();
+ s.V();
+
+ v = s;
+ s.V();
+
+ p = &s;
+ p.P();
+ p.V();
+
+ v = &s;
+ v.V();
+
+// p = s; // ERROR
+
+// println("--struct pointer--");
+ var sp SP;
+ sp.T = &t;
+ sp.P();
+ sp.V();
+
+ v = sp;
+ sp.V();
+
+ p = &sp;
+ p.P();
+ p.V();
+
+ v = &sp;
+ v.V();
+
+ p = sp; // not error
+ p.P();
+ p.V();
+
+ if nv != 13 || np != 7 {
+ panicln("bad count", nv, np)
+ }
+}
+