Commit 0b209b36 authored by Anthony Martin's avatar Anthony Martin Committed by Russ Cox

gc: relax assignability of method receivers

The spec was adjusted in commit df410d6a4842 to allow the
implicit assignment of strutures with unexported fields in
method receivers.  This change updates the compiler.

Also moved bug322 into fixedbugs and updated golden.out
to reflect the removal of the last known bug.

Fixes #1402.

R=golang-dev, gri, rsc
CC=golang-dev
https://golang.org/cl/4526069
parent 3857747d
......@@ -822,7 +822,13 @@ reswitch:
case ODOTMETH:
n->op = OCALLMETH;
typecheckaste(OCALL, n->left, 0, getthisx(t), list1(l->left), "method receiver");
// typecheckaste was used here but there wasn't enough
// information further down the call chain to know if we
// were testing a method receiver for unexported fields.
// It isn't necessary, so just do a sanity check.
tp = getthisx(t)->type->type;
if(l->left == N || !eqtype(l->left->type, tp))
fatal("method receiver");
break;
default:
......
......@@ -15,7 +15,7 @@ func f() {
_ = x.T{};
_ = x.T{Y:2};
ok1.M(); // ERROR "assignment.*T"
ok1.M();
bad1 := *ok; // ERROR "assignment.*T"
bad2 := ok1; // ERROR "assignment.*T"
*ok4 = ok1; // ERROR "assignment.*T"
......
......@@ -38,10 +38,3 @@ func main() {
var pi2 PI = pt
pi2.PM()
}
/*
These should not be errors anymore:
bug322.dir/main.go:19: implicit assignment of unexported field 'x' of lib.T in method receiver
bug322.dir/main.go:32: implicit assignment of unexported field 'x' of lib.T in method receiver
*/
......@@ -161,8 +161,3 @@ panic: interface conversion: interface is main.T, not main.T
0x0
== bugs/
=========== bugs/bug322.go
bugs/bug322.dir/main.go:19: implicit assignment of unexported field 'x' of lib.T in method receiver
bugs/bug322.dir/main.go:32: implicit assignment of unexported field 'x' of lib.T in method receiver
BUG: fails incorrectly
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment