undo CL 66510044 / 6c0339d94123

Broke other things - see issue 7522.

Fixes #7522.
Reopens issue 7363.

««« original CL description
cmd/gc: make embedded, unexported fields read-only.

Fixes #7363.

LGTM=gri
R=gri, rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/66510044
»»»

LGTM=r, mpvl
R=golang-codereviews, r
CC=golang-codereviews, iant, mpvl
https://golang.org/cl/85580046
This commit is contained in:
Russ Cox 2014-04-14 09:48:11 -04:00
parent 72185093f6
commit c48db9a473
2 changed files with 1 additions and 28 deletions

View file

@ -1138,8 +1138,7 @@ ok:
ot = dgopkgpath(s, ot, t1->sym->pkg);
} else {
ot = dgostringptr(s, ot, nil);
if(t1->type->sym != S &&
(t1->type->sym->pkg == builtinpkg || !exportname(t1->type->sym->name)))
if(t1->type->sym != S && t1->type->sym->pkg == builtinpkg)
ot = dgopkgpath(s, ot, localpkg);
else
ot = dgostringptr(s, ot, nil);

View file

@ -1,26 +0,0 @@
// run
// Copyright 2014 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.
// issue 7363: CanSet must return false for unexported embedded struct fields.
package main
import "reflect"
type a struct {
}
type B struct {
a
}
func main() {
b := &B{}
v := reflect.ValueOf(b).Elem().Field(0)
if v.CanSet() {
panic("B.a is an unexported embedded struct field")
}
}