aboutsummaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-01-22 04:09:04 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-01-22 04:09:04 +0000
commitd4290ecad0b522bbe2850005215df7140d9a3bcc (patch)
treee74687ac05ead0fd2cff7c9955ddd16a4dfc124c /gcc/go
parentfad513aa8881cc181c6a5601c3de9fac3a84e05e (diff)
downloadgcc-d4290ecad0b522bbe2850005215df7140d9a3bcc.zip
gcc-d4290ecad0b522bbe2850005215df7140d9a3bcc.tar.gz
gcc-d4290ecad0b522bbe2850005215df7140d9a3bcc.tar.bz2
compiler: Prohibit use of ellipsis operator on multi-valued calls.
Fixes golang/go#9525. From-SVN: r219984
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/expressions.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index ee8af84..a8bed0b 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -8580,6 +8580,17 @@ Call_expression::do_lower(Gogo* gogo, Named_object* function,
{
Call_expression* call = this->args_->front()->call_expression();
call->set_is_multi_value_arg();
+ if (this->is_varargs_)
+ {
+ // It is not clear which result of a multiple result call
+ // the ellipsis operator should be applied to. If we unpack the
+ // the call into its individual results here, the ellipsis will be
+ // applied to the last result.
+ error_at(call->location(),
+ _("multiple-value argument in single-value context"));
+ return Expression::make_error(call->location());
+ }
+
Expression_list* args = new Expression_list;
for (size_t i = 0; i < rc; ++i)
args->push_back(Expression::make_call_result(call, i));