From: Ian Lance Taylor Date: Mon, 11 Aug 2014 19:26:26 +0000 (+0000) Subject: compiler: Change return type comma-ok assignments to untyped bools. X-Git-Tag: releases/gcc-5.1.0~5550 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=17d9767f79871acc437342147837d842fa52b3de;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/go/gofrontend/runtime.cc b/gcc/go/gofrontend/runtime.cc index 3b0f1880758c..811c8f5b79f1 100644 --- a/gcc/go/gofrontend/runtime.cc +++ b/gcc/go/gofrontend/runtime.cc @@ -24,7 +24,7 @@ enum Runtime_function_type { // General indicator that value is not used. RFT_VOID, - // Go type bool, C type _Bool. + // Go untyped bool, C type _Bool. RFT_BOOL, // Go type *bool, C type _Bool*. RFT_BOOLPTR, @@ -93,7 +93,7 @@ runtime_function_type(Runtime_function_type bft) go_unreachable(); case RFT_BOOL: - t = Type::lookup_bool_type(); + t = Type::make_boolean_type(); break; case RFT_BOOLPTR: diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index c407591170a3..090c193b8ca4 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -1150,7 +1150,10 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*, // var present_temp bool 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); // present_temp = mapaccess2(DESCRIPTOR, MAP, &key_temp, &val_temp) @@ -1163,7 +1166,6 @@ Tuple_map_assignment_statement::do_lower(Gogo*, Named_object*, Expression* a4 = Expression::make_unary(OPERATOR_AND, ref, loc); Expression* call = Runtime::make_call(Runtime::MAPACCESS2, loc, 4, a1, a2, a3, a4); - ref = Expression::make_temporary_reference(present_temp, loc); ref->set_is_lvalue(); Statement* s = Statement::make_assignment(ref, call, loc); @@ -1426,7 +1428,10 @@ Tuple_receive_assignment_statement::do_lower(Gogo*, Named_object*, // var closed_temp bool 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); // closed_temp = chanrecv2(type, channel, &val_temp)