aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2014-08-11 19:26:26 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2014-08-11 19:26:26 +0000
commit17d9767f79871acc437342147837d842fa52b3de (patch)
tree8616390095dce34a20106bd27437692c9f9ce404 /gcc
parentb2f86285bd25e572ff37c4aac6ae35a14214dadb (diff)
downloadgcc-17d9767f79871acc437342147837d842fa52b3de.zip
gcc-17d9767f79871acc437342147837d842fa52b3de.tar.gz
gcc-17d9767f79871acc437342147837d842fa52b3de.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/runtime.cc4
-rw-r--r--gcc/go/gofrontend/statements.cc11
2 files changed, 10 insertions, 5 deletions
diff --git a/gcc/go/gofrontend/runtime.cc b/gcc/go/gofrontend/runtime.cc
index 3b0f1880..811c8f5 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 c407591..090c193 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)