re PR go/83787 (Many 32-bit Solaris/SPARC Go tests FAIL after Go1.10beta1 update)
PR go/83787 compiler: pass int to makechan, call makechan64 when appropriate The update to 1.10beta1 changed makechan to take int instead of int64, and added a makechan64 call for large values. Since the size is the last argument to makechan, the old compiler which always passed a 64-bit int worked fine on 64-bit systems and little-endian 32-bit systems, but broke on big-endian 32-bit systems. This CL fixes the compiler to use the appropriate types. This fixes GCC PR 83787. Reviewed-on: https://go-review.googlesource.com/88077 From-SVN: r256835
This commit is contained in:
parent
b7e60023a2
commit
a9411cce01
5 changed files with 12 additions and 3 deletions
|
@ -1,4 +1,4 @@
|
|||
1072286ca9249bd6f75628aead325a66286bcf5b
|
||||
925635f067d40d30acf565b620cc859ee7cbc990
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -360,6 +360,7 @@ Node::op_format() const
|
|||
break;
|
||||
|
||||
case Runtime::MAKECHAN:
|
||||
case Runtime::MAKECHAN64:
|
||||
case Runtime::MAKEMAP:
|
||||
case Runtime::MAKESLICE:
|
||||
case Runtime::MAKESLICE64:
|
||||
|
@ -1602,6 +1603,7 @@ Escape_analysis_assign::expression(Expression** pexpr)
|
|||
switch (fe->runtime_code())
|
||||
{
|
||||
case Runtime::MAKECHAN:
|
||||
case Runtime::MAKECHAN64:
|
||||
case Runtime::MAKEMAP:
|
||||
case Runtime::MAKESLICE:
|
||||
case Runtime::MAKESLICE64:
|
||||
|
@ -2284,6 +2286,7 @@ Escape_analysis_assign::assign(Node* dst, Node* src)
|
|||
switch (fe->runtime_code())
|
||||
{
|
||||
case Runtime::MAKECHAN:
|
||||
case Runtime::MAKECHAN64:
|
||||
case Runtime::MAKEMAP:
|
||||
case Runtime::MAKESLICE:
|
||||
case Runtime::MAKESLICE64:
|
||||
|
@ -3056,6 +3059,7 @@ Escape_analysis_flood::flood(Level level, Node* dst, Node* src,
|
|||
switch (call->fn()->func_expression()->runtime_code())
|
||||
{
|
||||
case Runtime::MAKECHAN:
|
||||
case Runtime::MAKECHAN64:
|
||||
case Runtime::MAKEMAP:
|
||||
case Runtime::MAKESLICE:
|
||||
case Runtime::MAKESLICE64:
|
||||
|
|
|
@ -7565,7 +7565,10 @@ Builtin_call_expression::lower_make(Statement_inserter* inserter)
|
|||
else if (is_chan)
|
||||
{
|
||||
Expression* type_arg = Expression::make_type_descriptor(type, type_loc);
|
||||
call = Runtime::make_call(Runtime::MAKECHAN, loc, 2, type_arg, len_arg);
|
||||
Runtime::Function code = Runtime::MAKECHAN;
|
||||
if (!len_small)
|
||||
code = Runtime::MAKECHAN64;
|
||||
call = Runtime::make_call(code, loc, 2, type_arg, len_arg);
|
||||
}
|
||||
else
|
||||
go_unreachable();
|
||||
|
|
|
@ -139,7 +139,8 @@ DEF_GO_RUNTIME(MAPITERNEXT, "runtime.mapiternext", P1(POINTER), R0())
|
|||
|
||||
|
||||
// Make a channel.
|
||||
DEF_GO_RUNTIME(MAKECHAN, "runtime.makechan", P2(TYPE, INT64), R1(CHAN))
|
||||
DEF_GO_RUNTIME(MAKECHAN, "runtime.makechan", P2(TYPE, INT), R1(CHAN))
|
||||
DEF_GO_RUNTIME(MAKECHAN64, "runtime.makechan64", P2(TYPE, INT64), R1(CHAN))
|
||||
|
||||
// Send a value on a channel.
|
||||
DEF_GO_RUNTIME(CHANSEND, "runtime.chansend1", P2(CHAN, POINTER), R0())
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
// themselves, so that the compiler will export them.
|
||||
//
|
||||
//go:linkname makechan runtime.makechan
|
||||
//go:linkname makechan64 runtime.makechan64
|
||||
//go:linkname chansend1 runtime.chansend1
|
||||
//go:linkname chanrecv1 runtime.chanrecv1
|
||||
//go:linkname chanrecv2 runtime.chanrecv2
|
||||
|
|
Loading…
Add table
Reference in a new issue