From 7dd9c385f6896c7dcb5d76353e52e36c81af2838 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 17 Oct 2016 20:23:51 +0000 Subject: [PATCH] Revert "cmd/compile: inline convI2E" This reverts commit 395d36a67df8d25b35617ec8709f0164ae2f655e. Appears to be responsible for builder failures. Change-Id: Ic6c6307f662767e529060b88704a9f074785d99e Reviewed-on: https://go-review.googlesource.com/31310 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements --- src/cmd/compile/internal/gc/builtin.go | 153 +++++++++--------- .../compile/internal/gc/builtin/runtime.go | 1 + src/cmd/compile/internal/gc/walk.go | 34 +--- src/runtime/iface.go | 10 ++ 4 files changed, 92 insertions(+), 106 deletions(-) diff --git a/src/cmd/compile/internal/gc/builtin.go b/src/cmd/compile/internal/gc/builtin.go index ddf8a247d5..824f1db642 100644 --- a/src/cmd/compile/internal/gc/builtin.go +++ b/src/cmd/compile/internal/gc/builtin.go @@ -26,82 +26,83 @@ const runtimeimport = "" + "ne\x00\x03\x17\x0f@|S\x00 \x00\x01\x11|S\x00\t\x13decoderune\x00\x03 \x00\x02\x00\x04|S\rr" + "etv·1\x00\x00\x02\rretk·2\x00\x00\t\x11slicecopy\x00\x06:\tto·2\x00" + "\x00:\tfr·3\x00\x00\x16\vwid·4\x00\x1bunsafe-uintptr\x01\x02\x00\t\x1ds" + - "licestringcopy\x00\x04:X\x00\x00:Z\x00\x00\x01\x02\x00\t\rconvI2I\x00\x04\x17\"" + - "\x06\x00\x00:\relem·3\x00\x00\x02:\vret·1\x00\x00\t\rconvT2E\x00\x04\x17\"\x06\x00" + - "\x00\x17:d\x00\x00\x02:f\x00\x00\t\rconvT2I\x00\x04\x17\"\vtab·2\x00\x00\x17:d\x00\x00\x02:" + - "f\x00\x00\t\x11assertE2E\x00\x06\x17\"\vtyp·1\x00\x00:\x0fiface·2\x00\x00\x17" + - ":\vret·3\x00\x00\x00\t\x13assertE2E2\x00\x06\x17\"\x06\x00\x00:\x0fiface·3" + - "\x00\x00\x17:\vret·4\x00\x00\x01\x00\x00\t\x11assertE2I\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:" + - "t\x00\x00\x00\t\x13assertE2I2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11ass" + - "ertE2T\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00\t\x13assertE2T2\x00\x06\x17\"\x06" + - "\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11assertI2E\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00" + - "\x00\x00\t\x13assertI2E2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11asser" + - "tI2I\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00\t\x13assertI2I2\x00\x06\x17\"\x06\x00\x00" + - ":x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11assertI2T\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00" + - "\t\x13assertI2T2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x17panicdo" + - "ttype\x00\x06\x17\"\rhave·1\x00\x00\x17\"\rwant·2\x00\x00\x17\"x\x00\x00\x00\t\ri" + - "faceeq\x00\x04:\ti1·2\x00\x00:\ti2·3\x00\x00\x02\x00f\x00\x00\t\refaceeq" + - "\x00\x04:\x98\x01\x00\x00:\x9a\x01\x00\x00\x02\x00f\x00\x00\t\rmakemap\x00\b\x17\"\x13mapType·" + - "2\x00\x00\n\rhint·3\x00\x00\x17:\x11mapbuf·4\x00\x00\x17:\x17bucketbuf" + - "·5\x00\x00\x02\x1d::\rhmap·1\x00\x00\t\x13mapaccess1\x00\x06\x17\"\xa0\x01\x00\x00\x1d" + - "::\rhmap·3\x00\x00\x17:\vkey·4\x00\x00\x02\x17:\vval·1\x00\x00\t!map" + - "access1_fast32\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00" + - "\x00\t!mapaccess1_fast64\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00:\xae\x01\x00\x00" + - "\x02\x17:\xb0\x01\x00\x00\t#mapaccess1_faststr\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01" + - "\x00\x00:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x1bmapaccess1_fat\x00\b\x17\"\xa0\x01\x00\x00\x1d:" + - ":\xac\x01\x00\x00\x17:\xae\x01\x00\x00\x17\"\rzero·5\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x13mapacces" + - "s2\x00\x06\x17\"\x13mapType·3\x00\x00\x1d::\rhmap·4\x00\x00\x17:\vkey·" + - "5\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\rpres·2\x00\x00\t!mapaccess2_fast32" + - "\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t!mapacc" + - "ess2_fast64\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4" + - "\x01\x00\x00\t#mapaccess2_faststr\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2" + - "\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t\x1bmapaccess2_fat\x00\b\x17\"\xbe\x01\x00\x00\x1d" + - "::\xc0\x01\x00\x00\x17:\xc2\x01\x00\x00\x17\"\rzero·6\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t\x11ma" + - "passign\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00\x17:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x15map" + - "iterinit\x00\x06\x17\"\x13mapType·1\x00\x00\x1d::\rhmap·2\x00\x00\x17:" + - "\x0fhiter·3\x00\x00\x00\t\x11mapdelete\x00\x06\x17\"\xd4\x01\x00\x00\x1d::\xd6\x01\x00\x00\x17:" + - "\vkey·3\x00\x00\x00\t\x15mapiternext\x00\x02\x17:\x0fhiter·1\x00\x00\x00\t" + - "\x0fmakechan\x00\x04\x17\"\x15chanType·2\x00\x00\n\xa2\x01\x00\x00\x02\x1f\x06:\x0fhch" + - "an·1\x00\x00\t\x11chanrecv1\x00\x06\x17\"\x15chanType·1\x00\x00\x1f\x02:\x0f" + - "hchan·2\x00\x00\x17:d\x00\x00\x00\t\x11chanrecv2\x00\x06\x17\"\xe4\x01\x00\x00\x1f\x02:\x0fh" + - "chan·3\x00\x00\x17:\relem·4\x00\x00\x01\x00\x00\t\x11chansend1\x00\x06\x17\"\xea" + - "\x01\x00\x00\x1f\x04:\xec\x01\x00\x00\x17:d\x00\x00\x00\t\x11closechan\x00\x02:\xe6\x01\x00\x00\x00\a\x17wri" + - "teBarrier\x00\x15\x06\renabled\x00\x00\x00\vneeded\x00\x00\x00\x05cgo\x00\x00\x00" + - "\t\x1dwritebarrierptr\x00\x04\x17:\vdst·1\x00\x00:\vsrc·2\x00\x00" + - "\x00\t\x17typedmemmove\x00\x06\x17\"p\x00\x00\x17:\vdst·2\x00\x00\x17:\vsrc\xc2" + - "\xb73\x00\x00\x00\t\x1btypedslicecopy\x00\x06\x17\"\x06\x00\x00:\vdst·3\x00\x00:\v" + - "src·4\x00\x00\x01\x02\x00\t\x17selectnbsend\x00\x06\x17\"\xe4\x01\x00\x00\x1f\x04:\xf0\x01\x00\x00" + - "\x17:\xf2\x01\x00\x00\x01\x00\x00\t\x17selectnbrecv\x00\x06\x17\"\xe4\x01\x00\x00\x17:d\x00\x00\x1f\x02:\x0f" + - "hchan·4\x00\x00\x01\x00\x00\t\x19selectnbrecv2\x00\b\x17\"\xe4\x01\x00\x00\x17:d\x00" + - "\x00\x17\x00\x15received·4\x00\x00\x1f\x02:\x0fhchan·5\x00\x00\x01\x00\x00\t\x11news" + - "elect\x00\x06\x17\"\vsel·1\x00\x00\n\x13selsize·2\x00\x00\b\rsize·" + - "3\x00\x00\x00\t\x13selectsend\x00\x06\x17\"\vsel·2\x00\x00\x1f\x04:\xf0\x01\x00\x00\x17:\xf2\x01" + - "\x00\x00\x02\x00\x15selected·1\x00\x00\t\x13selectrecv\x00\x06\x17\"\xa8\x02\x00\x00\x1f\x02" + - ":\xf0\x01\x00\x00\x17:\xf2\x01\x00\x00\x02\x00\xaa\x02\x00\x00\t\x15selectrecv2\x00\b\x17\"\xa8\x02\x00\x00\x1f\x02" + - ":\xf0\x01\x00\x00\x17:\xf2\x01\x00\x00\x17\x00\x15received·5\x00\x00\x02\x00\xaa\x02\x00\x00\t\x19selec" + - "tdefault\x00\x02\x17\"\xa8\x02\x00\x00\x02\x00\xaa\x02\x00\x00\t\x0fselectgo\x00\x02\x17\"\xa0\x02\x00\x00" + - "\x00\t\tblock\x00\x00\x00\t\x11makeslice\x00\x06\x17\"\x06\x00\x00\x02\vlen·3\x00\x00\x02" + - "\vcap·4\x00\x00\x02\x11:\vary·1\x00\x00\t\x15makeslice64\x00\x06\x17\"\x06\x00" + - "\x00\n\xba\x02\x00\x00\n\xbc\x02\x00\x00\x02\x11:\xbe\x02\x00\x00\t\x11growslice\x00\x06\x17\"\x06\x00\x00\x11:\vo" + - "ld·3\x00\x00\x02\xbc\x02\x00\x00\x02\x11:\xbe\x02\x00\x00\t\rmemmove\x00\x06\x17:\tto·1\x00\x00" + - "\x17:\vfrm·2\x00\x00\x16\x11length·3\x00^\x00\t\vmemclr\x00\x04\x17\"\vpt" + - "r·1\x00\x00\x16\x11length·2\x00^\x00\t\x0fmemequal\x00\x06\x17:\ax·2\x00" + - "\x00\x17:\ay·3\x00\x00\x16\rsize·4\x00^\x01\x00\x00\t\x11memequal8\x00\x04\x17:\xd6" + - "\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x13memequal16\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00" + - "\x00\t\x13memequal32\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x13memequal" + - "64\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x15memequal128\x00\x04\x17:\xd6\x02\x00\x00" + - "\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x0fint64div\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64div\x00" + - "\x03\x14\x00\x14\x00\x01\x14\x00\t\x0fint64mod\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64mod\x00\x03" + - "\x14\x00\x14\x00\x01\x14\x00\t\x1bfloat64toint64\x00\x01\x1a\x00\x01\n\x00\t\x1dfloat64t" + - "ouint64\x00\x01\x1a\x00\x01\x14\x00\t\x1dfloat64touint32\x00\x01\x1a\x00\x01\x12\x00\t\x1b" + - "int64tofloat64\x00\x01\n\x00\x01\x1a\x00\t\x1duint64tofloat64\x00\x01" + - "\x14\x00\x01\x1a\x00\t\x1duint32tofloat64\x00\x01\x12\x00\x01\x1a\x00\t\x19complex12" + - "8div\x00\x04\x1e\vnum·2\x00\x00\x1e\vden·3\x00\x00\x02\x1e\vquo·1\x00\x00\t\x19r" + - "acefuncenter\x00\x01\x16^\x00\t\x17racefuncexit\x00\x00\x00\t\x0frace" + - "read\x00\x01\x16^\x00\t\x11racewrite\x00\x01\x16^\x00\t\x19racereadrange" + - "\x00\x04\x16\raddr·1\x00^\x16\rsize·2\x00^\x00\t\x1bracewriterang" + - "e\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\t\x0fmsanread\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\t\x11m" + - "sanwrite\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\v\xf4\x01\v\x00\x01\x00\n$$\n" + "licestringcopy\x00\x04:X\x00\x00:Z\x00\x00\x01\x02\x00\t\rconvI2E\x00\x02:\r" + + "elem·2\x00\x00\x02:\vret·1\x00\x00\t\rconvI2I\x00\x04\x17\"\x06\x00\x00:\rel" + + "em·3\x00\x00\x02:f\x00\x00\t\rconvT2E\x00\x04\x17\"\x06\x00\x00\x17:j\x00\x00\x02:f\x00\x00\t\r" + + "convT2I\x00\x04\x17\"\vtab·2\x00\x00\x17:j\x00\x00\x02:f\x00\x00\t\x11assertE2" + + "E\x00\x06\x17\"\vtyp·1\x00\x00:\x0fiface·2\x00\x00\x17:\vret·3\x00\x00\x00\t\x13" + + "assertE2E2\x00\x06\x17\"\x06\x00\x00:\x0fiface·3\x00\x00\x17:\vret·4\x00\x00" + + "\x01\x00\x00\t\x11assertE2I\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertE" + + "2I2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x11assertE2T\x00\x06\x17\"t\x00" + + "\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertE2T2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00" + + "\x01\x00\x00\t\x11assertI2E\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI" + + "2E2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x11assertI2I\x00\x06\x17\"t\x00" + + "\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI2I2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00" + + "\x01\x00\x00\t\x11assertI2T\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI" + + "2T2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x17panicdottype\x00\x06\x17" + + "\"\rhave·1\x00\x00\x17\"\rwant·2\x00\x00\x17\"||\x00\x00\x00\t\rifaceeq\x00" + + "\x04:\ti1·2\x00\x00:\ti2·3\x00\x00\x02\x00f\x00\x00\t\refaceeq\x00\x04:\x9c\x01\x00\x00" + + ":\x9e\x01\x00\x00\x02\x00f\x00\x00\t\rmakemap\x00\b\x17\"\x13mapType·2\x00\x00\n\rhi" + + "nt·3\x00\x00\x17:\x11mapbuf·4\x00\x00\x17:\x17bucketbuf·5\x00\x00\x02\x1d" + + "::\rhmap·1\x00\x00\t\x13mapaccess1\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\rhmap" + + "·3\x00\x00\x17:\vkey·4\x00\x00\x02\x17:\vval·1\x00\x00\t!mapaccess1" + + "_fast32\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00\t!mapa" + + "ccess1_fast64\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00" + + "\t#mapaccess1_faststr\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00" + + "\x02\x17:\xb4\x01\x00\x00\t\x1bmapaccess1_fat\x00\b\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00\x17:" + + "\xb2\x01\x00\x00\x17\"\rzero·5\x00\x00\x02\x17:\xb4\x01\x00\x00\t\x13mapaccess2\x00\x06\x17\"\x13" + + "mapType·3\x00\x00\x1d::\rhmap·4\x00\x00\x17:\vkey·5\x00\x00\x04\x17:\xb4" + + "\x01\x00\x00\x00\rpres·2\x00\x00\t!mapaccess2_fast32\x00\x06\x17\"\xc2\x01\x00" + + "\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t!mapaccess2_fa" + + "st64\x00\x06\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t#ma" + + "paccess2_faststr\x00\x06\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4" + + "\x01\x00\x00\x00\xc8\x01\x00\x00\t\x1bmapaccess2_fat\x00\b\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00\x17" + + ":\xc6\x01\x00\x00\x17\"\rzero·6\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t\x11mapassign" + + "\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00\x17:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00\t\x15mapiterini" + + "t\x00\x06\x17\"\x13mapType·1\x00\x00\x1d::\rhmap·2\x00\x00\x17:\x0fhiter\xc2" + + "\xb73\x00\x00\x00\t\x11mapdelete\x00\x06\x17\"\xd8\x01\x00\x00\x1d::\xda\x01\x00\x00\x17:\vkey·3" + + "\x00\x00\x00\t\x15mapiternext\x00\x02\x17:\x0fhiter·1\x00\x00\x00\t\x0fmakech" + + "an\x00\x04\x17\"\x15chanType·2\x00\x00\n\xa6\x01\x00\x00\x02\x1f\x06:\x0fhchan·1\x00\x00" + + "\t\x11chanrecv1\x00\x06\x17\"\x15chanType·1\x00\x00\x1f\x02:\x0fhchan·" + + "2\x00\x00\x17:j\x00\x00\x00\t\x11chanrecv2\x00\x06\x17\"\xe8\x01\x00\x00\x1f\x02:\x0fhchan·3" + + "\x00\x00\x17:\relem·4\x00\x00\x01\x00\x00\t\x11chansend1\x00\x06\x17\"\xee\x01\x00\x00\x1f\x04:\xf0" + + "\x01\x00\x00\x17:j\x00\x00\x00\t\x11closechan\x00\x02:\xea\x01\x00\x00\x00\a\x17writeBarri" + + "er\x00\x15\x06\renabled\x00\x00\x00\vneeded\x00\x00\x00\x05cgo\x00\x00\x00\t\x1dwrite" + + "barrierptr\x00\x04\x17:\vdst·1\x00\x00:\vsrc·2\x00\x00\x00\t\x17type" + + "dmemmove\x00\x06\x17\"t\x00\x00\x17:\vdst·2\x00\x00\x17:\vsrc·3\x00\x00\x00\t\x1b" + + "typedslicecopy\x00\x06\x17\"\x06\x00\x00:\vdst·3\x00\x00:\vsrc·4\x00" + + "\x00\x01\x02\x00\t\x17selectnbsend\x00\x06\x17\"\xe8\x01\x00\x00\x1f\x04:\xf4\x01\x00\x00\x17:\xf6\x01\x00\x00\x01" + + "\x00\x00\t\x17selectnbrecv\x00\x06\x17\"\xe8\x01\x00\x00\x17:j\x00\x00\x1f\x02:\x0fhchan·" + + "4\x00\x00\x01\x00\x00\t\x19selectnbrecv2\x00\b\x17\"\xe8\x01\x00\x00\x17:j\x00\x00\x17\x00\x15rec" + + "eived·4\x00\x00\x1f\x02:\x0fhchan·5\x00\x00\x01\x00\x00\t\x11newselect\x00\x06" + + "\x17\"\vsel·1\x00\x00\n\x13selsize·2\x00\x00\b\rsize·3\x00\x00\x00\t\x13s" + + "electsend\x00\x06\x17\"\vsel·2\x00\x00\x1f\x04:\xf4\x01\x00\x00\x17:\xf6\x01\x00\x00\x02\x00\x15se" + + "lected·1\x00\x00\t\x13selectrecv\x00\x06\x17\"\xac\x02\x00\x00\x1f\x02:\xf4\x01\x00\x00\x17:" + + "\xf6\x01\x00\x00\x02\x00\xae\x02\x00\x00\t\x15selectrecv2\x00\b\x17\"\xac\x02\x00\x00\x1f\x02:\xf4\x01\x00\x00\x17:" + + "\xf6\x01\x00\x00\x17\x00\x15received·5\x00\x00\x02\x00\xae\x02\x00\x00\t\x19selectdefaul" + + "t\x00\x02\x17\"\xac\x02\x00\x00\x02\x00\xae\x02\x00\x00\t\x0fselectgo\x00\x02\x17\"\xa4\x02\x00\x00\x00\t\tbloc" + + "k\x00\x00\x00\t\x11makeslice\x00\x06\x17\"\x06\x00\x00\x02\vlen·3\x00\x00\x02\vcap·4" + + "\x00\x00\x02\x11:\vary·1\x00\x00\t\x15makeslice64\x00\x06\x17\"\x06\x00\x00\n\xbe\x02\x00\x00\n" + + "\xc0\x02\x00\x00\x02\x11:\xc2\x02\x00\x00\t\x11growslice\x00\x06\x17\"\x06\x00\x00\x11:\vold·3\x00\x00" + + "\x02\xc0\x02\x00\x00\x02\x11:\xc2\x02\x00\x00\t\rmemmove\x00\x06\x17:\tto·1\x00\x00\x17:\vfrm\xc2" + + "\xb72\x00\x00\x16\x11length·3\x00^\x00\t\vmemclr\x00\x04\x17\"\vptr·1\x00\x00\x16" + + "\x11length·2\x00^\x00\t\x0fmemequal\x00\x06\x17:\ax·2\x00\x00\x17:\ay·" + + "3\x00\x00\x16\rsize·4\x00^\x01\x00\x00\t\x11memequal8\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02" + + "\x00\x00\x01\x00\x00\t\x13memequal16\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x13meme" + + "qual32\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x13memequal64\x00\x04\x17:\xda" + + "\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x15memequal128\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01" + + "\x00\x00\t\x0fint64div\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64div\x00\x03\x14\x00\x14\x00\x01\x14" + + "\x00\t\x0fint64mod\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64mod\x00\x03\x14\x00\x14\x00\x01\x14\x00" + + "\t\x1bfloat64toint64\x00\x01\x1a\x00\x01\n\x00\t\x1dfloat64touint64" + + "\x00\x01\x1a\x00\x01\x14\x00\t\x1dfloat64touint32\x00\x01\x1a\x00\x01\x12\x00\t\x1bint64to" + + "float64\x00\x01\n\x00\x01\x1a\x00\t\x1duint64tofloat64\x00\x01\x14\x00\x01\x1a\x00\t\x1d" + + "uint32tofloat64\x00\x01\x12\x00\x01\x1a\x00\t\x19complex128div\x00\x04\x1e" + + "\vnum·2\x00\x00\x1e\vden·3\x00\x00\x02\x1e\vquo·1\x00\x00\t\x19racefunc" + + "enter\x00\x01\x16^\x00\t\x17racefuncexit\x00\x00\x00\t\x0fraceread\x00\x01\x16" + + "^\x00\t\x11racewrite\x00\x01\x16^\x00\t\x19racereadrange\x00\x04\x16\radd" + + "r·1\x00^\x16\rsize·2\x00^\x00\t\x1bracewriterange\x00\x04\x16\x90\x03\x00" + + "^\x16\x92\x03\x00^\x00\t\x0fmsanread\x00\x04\x16\x90\x03\x00^\x16\x92\x03\x00^\x00\t\x11msanwrit" + + "e\x00\x04\x16\x90\x03\x00^\x16\x92\x03\x00^\x00\v\xf6\x01\v\x00\x01\x00\n$$\n" const unsafeimport = "" + "version 2\n\n\x00\x00\x01\vunsafe\x00\t\x0fOffsetof\x00\x01:\x00\x01\x16\x00\t" + diff --git a/src/cmd/compile/internal/gc/builtin/runtime.go b/src/cmd/compile/internal/gc/builtin/runtime.go index ae7e98693b..4600896af5 100644 --- a/src/cmd/compile/internal/gc/builtin/runtime.go +++ b/src/cmd/compile/internal/gc/builtin/runtime.go @@ -58,6 +58,7 @@ func slicecopy(to any, fr any, wid uintptr) int func slicestringcopy(to any, fr any) int // interface conversions +func convI2E(elem any) (ret any) func convI2I(typ *byte, elem any) (ret any) func convT2E(typ *byte, elem *any) (ret any) func convT2I(tab *byte, elem *any) (ret any) diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index 55d129ef8e..e2699d1f0a 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -410,14 +410,16 @@ func walkexprlistcheap(s []*Node, init *Nodes) { } } -// Build name of function for interface conversion. +// Build name of function: convI2E etc. // Not all names are possible -// (e.g., we'll never generate convE2E or convE2I or convI2E). +// (e.g., we'll never generate convE2E or convE2I). func convFuncName(from, to *Type) string { tkind := to.iet() switch from.iet() { case 'I': switch tkind { + case 'E': + return "convI2E" case 'I': return "convI2I" } @@ -1078,34 +1080,6 @@ opswitch: break } - // Implement interface to empty interface conversion. - // tmp = i.itab - // if tmp != nil { - // tmp = tmp.type - // } - // e = iface{tmp, i.data} - if n.Type.IsEmptyInterface() && n.Left.Type.IsInterface() && !n.Left.Type.IsEmptyInterface() { - // Evaluate the input interface. - c := temp(n.Left.Type) - init.Append(nod(OAS, c, n.Left)) - - // Get the itab out of the interface. - tmp := temp(ptrto(Types[TUINT8])) - init.Append(nod(OAS, tmp, typecheck(nod(OITAB, c, nil), Erv))) - - // Get the type out of the itab. - nif := nod(OIF, typecheck(nod(ONE, tmp, nodnil()), Erv), nil) - nif.Nbody.Set1(nod(OAS, tmp, itabType(tmp))) - init.Append(nif) - - // Build the result. - e := nod(OEFACE, tmp, ifaceData(c, ptrto(Types[TUINT8]))) - e.Type = n.Type // assign type manually, typecheck doesn't understand OEFACE. - e.Typecheck = 1 - n = e - break - } - var ll []*Node if n.Type.IsEmptyInterface() { if !n.Left.Type.IsInterface() { diff --git a/src/runtime/iface.go b/src/runtime/iface.go index b55a9ed893..476ec7e8b2 100644 --- a/src/runtime/iface.go +++ b/src/runtime/iface.go @@ -264,6 +264,16 @@ func assertE2T2(t *_type, e eface, r unsafe.Pointer) bool { return true } +func convI2E(i iface) (r eface) { + tab := i.tab + if tab == nil { + return + } + r._type = tab._type + r.data = i.data + return +} + func assertI2E(inter *interfacetype, i iface, r *eface) { tab := i.tab if tab == nil { -- 2.48.1