mirror of
https://github.com/golang/go
synced 2024-11-25 18:57:56 -07:00
cmd/gc: Don't export embedded builtins
Fixes #4124. R=golang-dev, dave, minux.ma, remyoudompheng, rsc CC=golang-dev https://golang.org/cl/6543057
This commit is contained in:
parent
01ddc8bd9a
commit
a45777fe99
@ -607,7 +607,7 @@ typeinit(void)
|
|||||||
fatal("typeinit: %s already defined", s->name);
|
fatal("typeinit: %s already defined", s->name);
|
||||||
|
|
||||||
t = typ(etype);
|
t = typ(etype);
|
||||||
t->sym = s;
|
t->sym = s1;
|
||||||
|
|
||||||
dowidth(t);
|
dowidth(t);
|
||||||
types[etype] = t;
|
types[etype] = t;
|
||||||
|
@ -982,7 +982,7 @@ embedded(Sym *s)
|
|||||||
*utfrune(name, CenterDot) = 0;
|
*utfrune(name, CenterDot) = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(exportname(name) || s->pkg == builtinpkg) // old behaviour, tests pass, but is it correct?
|
if(exportname(name))
|
||||||
n = newname(lookup(name));
|
n = newname(lookup(name));
|
||||||
else
|
else
|
||||||
n = newname(pkglookup(name, s->pkg));
|
n = newname(pkglookup(name, s->pkg));
|
||||||
|
@ -1181,7 +1181,7 @@ exprfmt(Fmt *f, Node *n, int prec)
|
|||||||
t = l->n->left->type->type;
|
t = l->n->left->type->type;
|
||||||
if(t->sym == S)
|
if(t->sym == S)
|
||||||
t = t->type;
|
t = t->type;
|
||||||
fmtprint(f, " %T:%N", t, l->n->right);
|
fmtprint(f, " %hhS:%N", t->sym, l->n->right);
|
||||||
} else
|
} else
|
||||||
fmtprint(f, " %hhS:%N", l->n->left->sym, l->n->right);
|
fmtprint(f, " %hhS:%N", l->n->left->sym, l->n->right);
|
||||||
|
|
||||||
|
@ -1831,16 +1831,16 @@ lexinit(void)
|
|||||||
if(etype != Txxx) {
|
if(etype != Txxx) {
|
||||||
if(etype < 0 || etype >= nelem(types))
|
if(etype < 0 || etype >= nelem(types))
|
||||||
fatal("lexinit: %s bad etype", s->name);
|
fatal("lexinit: %s bad etype", s->name);
|
||||||
|
s1 = pkglookup(syms[i].name, builtinpkg);
|
||||||
t = types[etype];
|
t = types[etype];
|
||||||
if(t == T) {
|
if(t == T) {
|
||||||
t = typ(etype);
|
t = typ(etype);
|
||||||
t->sym = s;
|
t->sym = s1;
|
||||||
|
|
||||||
if(etype != TANY && etype != TSTRING)
|
if(etype != TANY && etype != TSTRING)
|
||||||
dowidth(t);
|
dowidth(t);
|
||||||
types[etype] = t;
|
types[etype] = t;
|
||||||
}
|
}
|
||||||
s1 = pkglookup(syms[i].name, builtinpkg);
|
|
||||||
s1->lexical = LNAME;
|
s1->lexical = LNAME;
|
||||||
s1->def = typenod(t);
|
s1->def = typenod(t);
|
||||||
continue;
|
continue;
|
||||||
|
@ -866,7 +866,10 @@ ok:
|
|||||||
ot = dgopkgpath(s, ot, t1->sym->pkg);
|
ot = dgopkgpath(s, ot, t1->sym->pkg);
|
||||||
} else {
|
} else {
|
||||||
ot = dgostringptr(s, ot, nil);
|
ot = dgostringptr(s, ot, nil);
|
||||||
ot = dgostringptr(s, ot, nil);
|
if(t1->type->sym != S && t1->type->sym->pkg == builtinpkg)
|
||||||
|
ot = dgopkgpath(s, ot, localpkg);
|
||||||
|
else
|
||||||
|
ot = dgostringptr(s, ot, nil);
|
||||||
}
|
}
|
||||||
ot = dsymptr(s, ot, dtypesym(t1->type), 0);
|
ot = dsymptr(s, ot, dtypesym(t1->type), 0);
|
||||||
ot = dgostrlitptr(s, ot, t1->note);
|
ot = dgostrlitptr(s, ot, t1->note);
|
||||||
|
9
test/fixedbugs/bug460.dir/a.go
Normal file
9
test/fixedbugs/bug460.dir/a.go
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package a
|
||||||
|
|
||||||
|
type Foo struct {
|
||||||
|
int
|
||||||
|
}
|
14
test/fixedbugs/bug460.dir/b.go
Normal file
14
test/fixedbugs/bug460.dir/b.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package b
|
||||||
|
|
||||||
|
import "./a"
|
||||||
|
|
||||||
|
var x a.Foo
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
x.int = 20 // ERROR "unexported field"
|
||||||
|
}
|
||||||
|
|
10
test/fixedbugs/bug460.go
Normal file
10
test/fixedbugs/bug460.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// errorcheckdir
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
// part one of issue 4124. Make sure that the compiler rejects access attempts.
|
||||||
|
|
||||||
|
package ignored
|
||||||
|
|
23
test/fixedbugs/bug461.go
Normal file
23
test/fixedbugs/bug461.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// run
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
// part two of issue 4124. Make sure reflect doesn't mark the field as exported.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "reflect"
|
||||||
|
|
||||||
|
var T struct {
|
||||||
|
int
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
v := reflect.ValueOf(&T)
|
||||||
|
v = v.Elem().Field(0)
|
||||||
|
if v.CanSet() {
|
||||||
|
panic("int should be unexported")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user