gcc/libgo/go/runtime
Ian Lance Taylor 39c0aa5f74 compiler, runtime, reflect: generate unique type descriptors
Currently, the compiler already generates common symbols for type
    descriptors, so the type descriptors are unique. However, when a
    type is created through reflection, it is not deduplicated with
    compiler-generated types. As a consequence, we cannot assume type
    descriptors are unique, and cannot use pointer equality to
    compare them. Also, when constructing a reflect.Type, it has to
    go through a canonicalization map, which introduces overhead to
    reflect.TypeOf, and lock contentions in concurrent programs.
    
    In order for the reflect package to deduplicate types with
    compiler-created types, we register all the compiler-created type
    descriptors at startup time. The reflect package, when it needs
    to create a type, looks up the registry of compiler-created types
    before creates a new one. There is no lock contention since the
    registry is read-only after initialization.
    
    This lets us get rid of the canonicalization map, and also makes
    it possible to compare type descriptors with pointer equality.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/179598

From-SVN: r271894
2019-06-03 23:37:04 +00:00
..
debug libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
internal libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
msan libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
pprof compiler,runtime: do more direct interfaces 2019-05-01 21:34:16 +00:00
testdata libgo: update to Go 1.12.1 2019-03-18 20:27:59 +00:00
trace libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
alg.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
atomic_pointer.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
auxv_none.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
callers_test.go libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
cgo_gccgo.go runtime: abort stack scan in cases that we cannot unwind the stack 2019-02-19 15:32:34 +00:00
cgocall.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
cgocheck.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
chan_test.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
chan.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
chanbarrier_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
closure_test.go
compiler.go libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
complex_test.go
cpuprof.go compiler: improve name mangling for packpaths 2018-10-25 22:18:08 +00:00
cputicks.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
crash_cgo_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
crash_gccgo_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
crash_nonunix_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
crash_test.go libgo: update to Go 1.12 release 2019-02-26 15:38:12 +00:00
crash_unix_test.go libgo: add hurd build tags to test files 2019-02-01 22:11:50 +00:00
debug_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
debug.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
env_posix.go libgo: add hurd build tags 2019-02-01 21:57:36 +00:00
env_test.go runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
error.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
example_test.go re PR go/89168 (FAIL: cmd/go/internal/load) 2019-02-15 00:36:50 +00:00
export_debug_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
export_linux_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
export_mmap_test.go libgo: update to Go 1.8 release candidate 1 2017-01-14 00:05:42 +00:00
export_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
export_unix_test.go libgo: add hurd build tags to test files 2019-02-01 22:11:50 +00:00
export_windows_test.go libgo: update to go1.7rc3 2016-07-22 18:15:38 +00:00
extern.go libgo: update to Go 1.12 release 2019-02-26 15:38:12 +00:00
fastlog2_test.go Big merge of changes to gofrontend repo that were postponed due to the 2017-05-10 17:26:09 +00:00
fastlog2.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
fastlog2table.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
ffi.go runtime: add padding to FFI type of struct ending with zero-sized field 2019-01-15 23:21:24 +00:00
float.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
gc_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
gcinfo_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
hash32.go libgo: add support for the Nios II architecture 2018-05-02 22:28:46 +00:00
hash64.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
hash_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
heapdump.go libgo: reduce overhead for memory/block/mutex profiling 2019-05-14 14:59:42 +00:00
iface_test.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
iface.go compiler,runtime: do more direct interfaces 2019-05-01 21:34:16 +00:00
lfstack_32bit.go libgo: support x32 as GOARCH=amd64p32 GOOS=linux 2018-10-01 20:17:11 +00:00
lfstack_64bit.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
lfstack_test.go runtime: Remove now unnecessary pad field from ParFor. 2015-10-31 00:59:47 +00:00
lfstack.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
lock_futex.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
lock_js.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
lock_sema.go libgo: add hurd build tags 2019-02-01 21:57:36 +00:00
malloc_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
malloc.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
map_benchmark_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
map_fast32.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
map_fast64.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
map_faststr.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
map_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
map.go compiler: recognize and optimize map range clear 2019-05-01 21:37:00 +00:00
mbarrier.go compiler: recognize and optimize array range clear 2019-05-03 21:45:35 +00:00
mbitmap.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mcache.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mcentral.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mem_gccgo.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
memmove_linux_amd64_test.go Big merge of changes to gofrontend repo that were postponed due to the 2017-05-10 17:26:09 +00:00
memmove_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
mfinal_test.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
mfinal.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mfixalloc.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mgc_gccgo.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mgc.go compiler, runtime: harmonize types referenced by both C and Go 2019-02-15 01:57:51 +00:00
mgclarge.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mgcmark.go libgo: reduce overhead for memory/block/mutex profiling 2019-05-14 14:59:42 +00:00
mgcsweep.go runtime: enable precise GC checks when using stack maps 2019-03-05 23:05:38 +00:00
mgcsweepbuf.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mgcwork.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mheap.go libgo: update to Go1.12rc1 2019-02-26 01:00:39 +00:00
mkfastlog2table.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mksizeclasses.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
mprof.go libgo: delay applying profile stack-frame skip until fixup 2019-06-03 23:07:54 +00:00
msan0.go compiler, runtime: replace hashmap code with Go 1.7 hashmap 2016-09-21 20:58:51 +00:00
msize.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
mstats.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
mwbbuf.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
net_plan9.go compiler: improve name mangling for packpaths 2018-10-25 22:18:08 +00:00
netpoll_aix.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
netpoll_epoll.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll_fake.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll_hurd.go runtime: add hurd netpoll and semaphore support 2019-02-01 23:57:08 +00:00
netpoll_kqueue.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll_solaris.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll_stub.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll_windows.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
netpoll.go compiler, runtime: harmonize types referenced by both C and Go 2019-02-15 01:57:51 +00:00
norace_test.go runtime: remove the dummy arg of getcallersp 2018-08-24 18:15:04 +00:00
numcpu_freebsd_test.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
os3_solaris.go runtime: call execname and getpagesize on Solaris 2019-03-01 14:21:24 +00:00
os_aix.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
os_darwin.go libgo: update to Go 1.11.1 release 2018-10-08 14:21:30 +00:00
os_dragonfly.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_freebsd.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
os_gccgo.go runtime: add precise stack scan support 2018-12-05 23:09:51 +00:00
os_hurd.go runtime: add hurd netpoll and semaphore support 2019-02-01 23:57:08 +00:00
os_js.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_linux_arm64.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
os_linux_arm.go re PR go/88927 (Bootstrap failure on arm in libgo starting with r268084) 2019-01-22 00:06:44 +00:00
os_linux_mips64x.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_linux_mipsx.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_linux_noauxv.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_linux_ppc64x.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_linux_s390x.go re PR go/89123 (Too many go test failures on s390x-linux) 2019-02-15 14:51:10 +00:00
os_linux.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_netbsd.go libgo: update to Go 1.11.1 release 2018-10-08 14:21:30 +00:00
os_openbsd.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
os_solaris.go runtime: copy internal locking code from Go 1.7 runtime 2016-09-30 13:45:08 +00:00
os_windows_arm.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
panic.go libgo: reduce overhead for memory/block/mutex profiling 2019-05-14 14:59:42 +00:00
print.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
proc_runtime_test.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
proc_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
proc.go runtime: set up g early 2019-05-11 01:12:37 +00:00
profbuf_test.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
profbuf.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
proflabel.go compiler: improve name mangling for packpaths 2018-10-25 22:18:08 +00:00
race0.go compiler, runtime: replace hashmap code with Go 1.7 hashmap 2016-09-21 20:58:51 +00:00
rand_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
rdebug.go compiler: improve name mangling for packpaths 2018-10-25 22:18:08 +00:00
relax_stub.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
runtime1.go runtime: enable precise GC checks when using stack maps 2019-03-05 23:05:38 +00:00
runtime2.go runtime: abort stack scan in cases that we cannot unwind the stack 2019-02-19 15:32:34 +00:00
runtime_mmap_test.go runtime: fix TestPhysPageSize on AIX 2019-04-26 17:20:55 +00:00
runtime_test.go runtime: skip testSetPanicOnFault for gollvm 2018-10-09 16:51:10 +00:00
runtime_unix_test.go libgo: add hurd build tags to test files 2019-02-01 22:11:50 +00:00
runtime-lldb_test.go libgo: update to Go 1.12.2 2019-04-08 18:36:25 +00:00
runtime.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
rwmutex_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
rwmutex.go libgo: update to Go1.10rc1 2018-01-27 23:44:29 +00:00
select.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
sema.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
semasleep_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
signal_gccgo.go libgo: drop Solaris 10 support 2019-05-13 20:26:24 +00:00
signal_sighandler.go libgo: add hurd build tags 2019-02-01 21:57:36 +00:00
signal_unix.go libgo: add hurd build tags 2019-02-01 21:57:36 +00:00
sigqueue.go compiler: improve name mangling for packpaths 2018-10-25 22:18:08 +00:00
sizeclasses.go libgo: update to Go1.10beta1 2018-01-09 01:23:08 +00:00
sizeof_test.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
slice_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
slice.go compiler,runtime: pass old slice's ptr/len/cap by value to growslice 2019-03-19 18:42:43 +00:00
string_test.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
string.go libgo: reduce overhead for memory/block/mutex profiling 2019-05-14 14:59:42 +00:00
stubs2.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
stubs3.go re PR go/86535 (FreeBSD/PowerPC64 - Building Go Frontend support for gcc 7.3.0 fails) 2019-02-26 14:46:56 +00:00
stubs_linux.go runtime: add precise stack scan support 2018-12-05 23:09:51 +00:00
stubs_nonlinux.go runtime: add missing return for non-GNU/Linux version of tgkill 2018-12-07 14:22:55 +00:00
stubs.go runtime: remove unnecessary functions calling between C and Go 2019-06-03 23:02:43 +00:00
symtab_test.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
symtab.go libgo: reduce overhead for memory/block/mutex profiling 2019-05-14 14:59:42 +00:00
sys_darwin_32.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
sys_darwin_64.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
sys_darwin.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
sys_wasm.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
time.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
timeasm.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
timestub2.go libgo: fix build on AIX 2019-03-19 14:00:59 +00:00
timestub.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
trace.go libgo: update to Go1.12beta2 2019-01-18 19:04:36 +00:00
traceback_gccgo.go libgo: delay applying profile stack-frame skip until fixup 2019-06-03 23:07:54 +00:00
type.go compiler, runtime, reflect: generate unique type descriptors 2019-06-03 23:37:04 +00:00
typekind.go compiler, runtime: replace hashmap code with Go 1.7 hashmap 2016-09-21 20:58:51 +00:00
unaligned1.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
unaligned2.go libgo: add support for the Nios II architecture 2018-05-02 22:28:46 +00:00
utf8.go libgo: update to Go 1.11 2018-09-24 21:46:21 +00:00
write_err_android.go libgo: update to go1.9 2017-09-14 17:11:35 +00:00
write_err.go Accidentally failed to commit these earlier, as part of: 2016-10-11 00:08:35 +00:00