Commit 17d9767f by Ian Lance Taylor

compiler: Change return type comma-ok assignments to untyped bools.

Fixes https://code.google.com/p/go/issues/detail?id=8476. The test will be submitted once this is fixed in gc and go/types.

From-SVN: r213832
parent b2f86285
...@@ -24,7 +24,7 @@ enum Runtime_function_type ...@@ -24,7 +24,7 @@ enum Runtime_function_type
{ {
// General indicator that value is not used. // General indicator that value is not used.
RFT_VOID, RFT_VOID,
// Go type bool, C type _Bool. // Go untyped bool, C type _Bool.
RFT_BOOL, RFT_BOOL,
// Go type *bool, C type _Bool*. // Go type *bool, C type _Bool*.
RFT_BOOLPTR, RFT_BOOLPTR,
...@@ -93,7 +93,7 @@ runtime_function_type(Runtime_function_type bft) ...@@ -93,7 +93,7 @@ runtime_function_type(Runtime_function_type bft)
go_unreachable(); go_unreachable();
case RFT_BOOL: case RFT_BOOL:
t = Type::lookup_bool_type(); t = Type::make_boolean_type();
break; break;
case RFT_BOOLPTR: case RFT_BOOLPTR:
......
...@@ -1150,7 +1150,10 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*, ...@@ -1150,7 +1150,10 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*,
// var present_temp bool // var present_temp bool
Temporary_statement* present_temp = Temporary_statement* present_temp =
Statement::make_temporary(Type::lookup_bool_type(), NULL, loc); Statement::make_temporary((this->present_->type()->is_sink_type())
? Type::make_boolean_type()
: this->present_->type(),
NULL, loc);
b->add_statement(present_temp); b->add_statement(present_temp);
// present_temp = mapaccess2(DESCRIPTOR, MAP, &key_temp, &val_temp) // present_temp = mapaccess2(DESCRIPTOR, MAP, &key_temp, &val_temp)
...@@ -1163,7 +1166,6 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*, ...@@ -1163,7 +1166,6 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*,
Expression* a4 = Expression::make_unary(OPERATOR_AND, ref, loc); Expression* a4 = Expression::make_unary(OPERATOR_AND, ref, loc);
Expression* call = Runtime::make_call(Runtime::MAPACCESS2, loc, 4, Expression* call = Runtime::make_call(Runtime::MAPACCESS2, loc, 4,
a1, a2, a3, a4); a1, a2, a3, a4);
ref = Expression::make_temporary_reference(present_temp, loc); ref = Expression::make_temporary_reference(present_temp, loc);
ref->set_is_lvalue(); ref->set_is_lvalue();
Statement* s = Statement::make_assignment(ref, call, loc); Statement* s = Statement::make_assignment(ref, call, loc);
...@@ -1426,7 +1428,10 @@ Tuple_receive_assignment_statement::do_lower(Gogo*, Named_object*, ...@@ -1426,7 +1428,10 @@ Tuple_receive_assignment_statement::do_lower(Gogo*, Named_object*,
// var closed_temp bool // var closed_temp bool
Temporary_statement* closed_temp = Temporary_statement* closed_temp =
Statement::make_temporary(Type::lookup_bool_type(), NULL, loc); Statement::make_temporary((this->closed_->type()->is_sink_type())
? Type::make_boolean_type()
: this->closed_->type(),
NULL, loc);
b->add_statement(closed_temp); b->add_statement(closed_temp);
// closed_temp = chanrecv2(type, channel, &val_temp) // closed_temp = chanrecv2(type, channel, &val_temp)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment