-
Notifications
You must be signed in to change notification settings - Fork 17.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[dev.typeparams] cmd/compile/internal/types2: adjust tests, enable Te…
…stdata tests Types2 uses a different test runner and has fewer/better errors in some cases (error messages match the compiler). Adjust the tests and enable them. Change-Id: I74877f54a81a3918a80774452cef5bcaad8a98e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/263631 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
- Loading branch information
Showing
17 changed files
with
381 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
111 changes: 111 additions & 0 deletions
111
src/cmd/compile/internal/types2/testdata/decls2/decls2a.src
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
// 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. | ||
|
||
// method declarations | ||
|
||
package decls2 | ||
|
||
import "time" | ||
import "unsafe" | ||
|
||
// T1 declared before its methods. | ||
type T1 struct{ | ||
f int | ||
} | ||
|
||
func (T1) m() {} | ||
func (T1) m /* ERROR "already declared" */ () {} | ||
func (x *T1) f /* ERROR "field and method" */ () {} | ||
|
||
// Conflict between embedded field and method name, | ||
// with the embedded field being a basic type. | ||
type T1b struct { | ||
int | ||
} | ||
|
||
func (T1b) int /* ERROR "field and method" */ () {} | ||
|
||
type T1c struct { | ||
time.Time | ||
} | ||
|
||
func (T1c) Time /* ERROR "field and method" */ () int { return 0 } | ||
|
||
// Disabled for now: LookupFieldOrMethod will find Pointer even though | ||
// it's double-declared (it would cost extra in the common case to verify | ||
// this). But the MethodSet computation will not find it due to the name | ||
// collision caused by the double-declaration, leading to an internal | ||
// inconsistency while we are verifying one computation against the other. | ||
// var _ = T1c{}.Pointer | ||
|
||
// T2's method declared before the type. | ||
func (*T2) f /* ERROR "field and method" */ () {} | ||
|
||
type T2 struct { | ||
f int | ||
} | ||
|
||
// Methods declared without a declared type. | ||
func (undeclared /* ERROR "undeclared" */) m() {} | ||
func (x *undeclared /* ERROR "undeclared" */) m() {} | ||
|
||
func (pi /* ERROR "not a type" */) m1() {} | ||
func (x pi /* ERROR "not a type" */) m2() {} | ||
func (x *pi /* ERROR "not a type" */ ) m3() {} | ||
|
||
// Blank types. | ||
type _ struct { m int } | ||
type _ struct { m int } | ||
|
||
func (_ /* ERROR "cannot use _" */) m() {} | ||
func m(_ /* ERROR "cannot use _" */) {} | ||
|
||
// Methods with receiver base type declared in another file. | ||
func (T3) m1() {} | ||
func (*T3) m2() {} | ||
func (x T3) m3() {} | ||
func (x *T3) f /* ERROR "field and method" */ () {} | ||
|
||
// Methods of non-struct type. | ||
type T4 func() | ||
|
||
func (self T4) m() func() { return self } | ||
|
||
// Methods associated with an interface. | ||
type T5 interface { | ||
m() int | ||
} | ||
|
||
func (T5 /* ERROR "invalid receiver" */ ) m1() {} | ||
func (T5 /* ERROR "invalid receiver" */ ) m2() {} | ||
|
||
// Methods associated with a named pointer type. | ||
type ptr *int | ||
func (ptr /* ERROR "invalid receiver" */ ) _() {} | ||
func (* /* ERROR "invalid receiver" */ ptr) _() {} | ||
|
||
// Methods with zero or multiple receivers. | ||
func ( /* ERROR "no receiver" */ ) _() {} | ||
func (T3, * /* ERROR "multiple receivers" */ T3) _() {} | ||
func (T3, T3, T3 /* ERROR "multiple receivers" */ ) _() {} | ||
func (a, b /* ERROR "multiple receivers" */ T3) _() {} | ||
func (a, b, c /* ERROR "multiple receivers" */ T3) _() {} | ||
|
||
// Methods associated with non-local or unnamed types. | ||
func (int /* ERROR "invalid receiver" */ ) m() {} | ||
func ([ /* ERROR "invalid receiver" */ ]int) m() {} | ||
func (time /* ERROR "invalid receiver" */ .Time) m() {} | ||
func (* /* ERROR "invalid receiver" */ time.Time) m() {} | ||
func (x /* ERROR "invalid receiver" */ interface{}) m() {} | ||
|
||
// Unsafe.Pointer is treated like a pointer when used as receiver type. | ||
type UP unsafe.Pointer | ||
func (UP /* ERROR "invalid" */ ) m1() {} | ||
func (* /* ERROR "invalid" */ UP) m2() {} | ||
|
||
// Double declarations across package files | ||
const c_double = 0 | ||
type t_double int | ||
var v_double int | ||
func f_double() {} |
75 changes: 75 additions & 0 deletions
75
src/cmd/compile/internal/types2/testdata/decls2/decls2b.src
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
// 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. | ||
|
||
// method declarations | ||
|
||
package decls2 | ||
|
||
import "io" | ||
|
||
const pi = 3.1415 | ||
|
||
func (T1) m /* ERROR "already declared" */ () {} | ||
func (T2) m(io.Writer) {} | ||
|
||
type T3 struct { | ||
f *T3 | ||
} | ||
|
||
type T6 struct { | ||
x int | ||
} | ||
|
||
func (t *T6) m1() int { | ||
return t.x | ||
} | ||
|
||
func f() { | ||
var t *T6 | ||
t.m1() | ||
} | ||
|
||
// Double declarations across package files | ||
const c_double /* ERROR "redeclared" */ = 0 | ||
type t_double /* ERROR "redeclared" */ int | ||
var v_double /* ERROR "redeclared" */ int | ||
func f_double /* ERROR "redeclared" */ () {} | ||
|
||
// Blank methods need to be type-checked. | ||
// Verify by checking that errors are reported. | ||
func (T /* ERROR "undeclared" */ ) _() {} | ||
func (T1) _(undeclared /* ERROR "undeclared" */ ) {} | ||
func (T1) _() int { return "foo" /* ERROR "cannot convert" */ } | ||
|
||
// Methods with undeclared receiver type can still be checked. | ||
// Verify by checking that errors are reported. | ||
func (Foo /* ERROR "undeclared" */ ) m() {} | ||
func (Foo /* ERROR "undeclared" */ ) m(undeclared /* ERROR "undeclared" */ ) {} | ||
func (Foo /* ERROR "undeclared" */ ) m() int { return "foo" /* ERROR "cannot convert" */ } | ||
|
||
func (Foo /* ERROR "undeclared" */ ) _() {} | ||
func (Foo /* ERROR "undeclared" */ ) _(undeclared /* ERROR "undeclared" */ ) {} | ||
func (Foo /* ERROR "undeclared" */ ) _() int { return "foo" /* ERROR "cannot convert" */ } | ||
|
||
// Receiver declarations are regular parameter lists; | ||
// receiver types may use parentheses, and the list | ||
// may have a trailing comma. | ||
type T7 struct {} | ||
|
||
func (T7) m1() {} | ||
func ((T7)) m2() {} | ||
func ((*T7)) m3() {} | ||
func (x *(T7),) m4() {} | ||
func (x (*(T7)),) m5() {} | ||
func (x ((*((T7)))),) m6() {} | ||
|
||
// Check that methods with parenthesized receiver are actually present (issue #23130). | ||
var ( | ||
_ = T7.m1 | ||
_ = T7.m2 | ||
_ = (*T7).m3 | ||
_ = (*T7).m4 | ||
_ = (*T7).m5 | ||
_ = (*T7).m6 | ||
) |
Oops, something went wrong.