1
0
mirror of https://github.com/golang/go synced 2024-11-24 23:37:56 -07:00
go/test
Russ Cox d03611f628 allow copy of struct containing unexported fields
An experiment: allow structs to be copied even if they
contain unexported fields.  This gives packages the
ability to return opaque values in their APIs, like reflect
does for reflect.Value but without the kludgy hacks reflect
resorts to.

In general, we trust programmers not to do silly things
like *x = *y on a package's struct pointers, just as we trust
programmers not to do unicode.Letter = unicode.Digit,
but packages that want a harder guarantee can introduce
an extra level of indirection, like in the changes to os.File
in this CL or by using an interface type.

All in one CL so that it can be rolled back more easily if
we decide this is a bad idea.

Originally discussed in March 2011.
https://groups.google.com/group/golang-dev/t/3f5d30938c7c45ef

R=golang-dev, adg, dvyukov, r, bradfitz, jan.mercl, gri
CC=golang-dev
https://golang.org/cl/5372095
2011-11-15 12:20:59 -05:00
..
bench renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
bugs test: Add test for inheriting private method from anonymous field. 2011-09-14 10:31:51 -07:00
chan renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
dwarf test: clear execute bit from source file 2011-11-03 10:26:33 +09:00
fixedbugs allow copy of struct containing unexported fields 2011-11-15 12:20:59 -05:00
garbage renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
interface reflect: disallow Interface method on Value obtained via unexported name 2011-10-17 18:48:45 -04:00
ken renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
syntax gc: clean up if grammar 2011-09-12 15:52:29 -04:00
64bit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
235.go single argument panic 2010-03-30 10:34:57 -07:00
alias1.go test/alias.go: additional tests 2011-10-26 15:27:47 -07:00
alias.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
append.go runtime: append([]byte, string...) 2011-10-12 15:59:23 +02:00
args.go move things out of sys into os and runtime 2009-05-08 15:21:41 -07:00
assign1.go test: Match gccgo error messages. 2010-09-10 19:12:10 -07:00
assign.go allow copy of struct containing unexported fields 2011-11-15 12:20:59 -05:00
bigalg.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
bigmap.go runtime: allow large map values 2010-05-19 12:57:47 -07:00
blank1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
blank.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
chancap.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
char_lit1.go test: Match gccgo error messages. 2010-08-31 11:43:52 -07:00
char_lit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
closedchan.go test: make closedchan.go exit with failure if something fails 2011-11-04 14:12:35 -07:00
closure.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
cmp6.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
cmp.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
cmplx.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.c delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
complit.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
compos.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
const1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
const2.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
const3.go gc: another shift bug 2010-12-13 13:42:51 -05:00
const.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
convert3.go test: don't assign address of array to slice. 2010-08-31 07:34:01 -07:00
convert.go fix tree for reflect rename 2011-04-25 13:39:36 -04:00
convlit1.go more 6g reorg; checkpoint. 2009-08-03 11:58:52 -07:00
convlit.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
copy.go test copy([]byte, string) 2010-10-26 08:36:23 -07:00
ddd1.go gc: clean up printing. 2011-10-31 18:09:40 +01:00
ddd2.go gc: add ... T, rework plain ... 2010-02-01 00:25:59 -08:00
ddd3.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
ddd.go gc: ... bug 2010-10-06 11:12:30 -04:00
decl.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
declbad.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
defer.go ... changes 2010-09-24 11:55:48 -04:00
deferprint.go gc: implement defer print/println/panic/panicln 2010-01-27 15:37:08 -08:00
divide.go 6g, 8g: divide corner case 2011-07-28 14:18:22 -04:00
empty.go test of new empty productions 2008-10-08 15:33:18 -07:00
env.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
eof1.go gc: line comments may end in EOF 2010-11-04 16:04:04 -04:00
eof.go gc: insert semicolon at EOF if needed 2010-09-28 10:35:02 -04:00
errchk errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
escape2.go gc: small fixes for printing. 2011-11-02 15:36:33 +01:00
escape3.go gc: zero stack-allocated slice backing arrays 2011-09-02 15:11:28 -04:00
escape.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
float_lit.go arm: enable all tests 2010-10-25 21:25:13 -07:00
floatcmp.go more soft float support. passes several basic tests 2010-07-20 15:53:16 +03:00
for.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
func2.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
func3.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func4.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
func5.go single argument panic 2010-03-30 10:34:57 -07:00
func6.go gc: fix func syntax error 2011-04-13 22:48:21 -04:00
func7.go gc: fix order of operations for f() < g(). 2011-04-26 00:57:03 -04:00
func.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
gc1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
gc2.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
gc.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
golden.out test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
goprint.go gc: handle go print() and go println() 2011-06-13 22:50:51 +10:00
goto.go test: match gccgo error messages for goto.go and bug344.go 2011-09-20 14:45:54 -07:00
hashmap.go build: clear execute bit from Go files 2011-09-05 07:48:42 -04:00
helloworld.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
if.go go: require { } around else block 2011-07-14 17:15:52 -04:00
import1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
import2.go gc: fix chan <- chan precedence. 2010-01-26 10:40:28 -08:00
import3.go gc: fix chan <- chan precedence. 2010-01-26 10:40:28 -08:00
import4.go gc: fix imported and not used message - show path 2010-03-03 17:23:47 -08:00
import.go test: error-related fixes 2011-10-27 19:41:39 -07:00
index.go test: fix NaCl build 2010-09-19 23:28:32 -04:00
indirect1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
indirect.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
init1.go runtime: run goroutines during init 2011-10-13 15:54:23 -04:00
init.go test: match gccgo error messages for init.go 2011-03-26 11:24:02 -07:00
initcomma.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
initialize.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
initializerr.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
initsyscall.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
int_lit.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
intcvt.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
iota.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
label1.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
label.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
literal.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
malloc1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocfin.go runtime: faster finalizers 2011-10-06 18:42:51 +03:00
mallocrand.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
mallocrep1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocrep.go runtime: faster finalizers 2011-10-06 18:42:51 +03:00
map1.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
map.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
method1.go test: s/float/float64/ 2011-01-21 08:37:58 -08:00
method2.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
method3.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
method.go gc, spec, tests: no auto-indirect of pointer to interface value 2010-09-30 14:59:41 -04:00
named1.go gc: remove m[k] = x, false 2011-11-11 16:48:25 -05:00
named.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
nil.go gofix -r mapdelete 2011-10-18 09:56:34 -04:00
nilptr.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
nul1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
parentype.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
peano.go test/peano: use directly recursive type def 2010-08-06 15:07:54 -07:00
printbig.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
range.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
recover1.go test for panic and recover 2010-03-31 11:47:09 -07:00
recover2.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
recover3.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
recover.go runtime: turn run time errors checks into panics 2010-04-01 22:31:27 -07:00
rename1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
rename.go delete all uses of panicln by rewriting them using panic or, 2010-03-24 16:46:53 -07:00
reorder.go gc: stricter multiple assignment + test 2011-10-13 15:46:39 -04:00
run build: pass $GCFLAGS to compiler 2011-10-18 14:55:10 -04:00
runtime.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
shift1.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
shift2.go gc: implement new shift rules 2011-05-31 15:05:40 -04:00
sieve.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
sigchld.go test: fix windows build 2011-09-27 09:13:00 -04:00
simassign.go single argument panic 2010-03-30 10:34:57 -07:00
sinit.go gc: make static initialization more static 2011-08-31 07:37:14 -04:00
sizeof.go gc: unsafe.Alignof, unsafe.Offsetof, unsafe.Sizeof now return uintptr 2011-06-17 16:12:14 -04:00
solitaire.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
stack.go 5l, 8l: pass stack frame size to morestack when needed 2011-02-01 18:34:41 -05:00
string_lit.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
stringrange.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
struct0.go gc: fix zero-length struct eval 2011-09-05 15:31:22 -04:00
switch1.go test: remove semiocolons. 2010-09-04 10:36:13 +10:00
switch3.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
switch.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
test0.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
turing.go test/turing: refactor 2010-09-04 10:40:00 +10:00
typeswitch1.go single argument panic 2010-03-30 10:34:57 -07:00
typeswitch2.go type switches: test for pathological case 2011-08-19 09:31:50 -07:00
typeswitch3.go gc: Better typechecks and errors in switches. 2011-11-09 10:58:53 +01:00
typeswitch.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
undef.go test: Match gccgo error messages. 2010-09-10 12:44:37 -07:00
utf.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
varerr.go test: Match gccgo error messages. 2010-09-10 12:45:46 -07:00
varinit.go single argument panic 2010-03-30 10:34:57 -07:00
zerodivide.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00