From d4290ecad0b522bbe2850005215df7140d9a3bcc Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 22 Jan 2015 04:09:04 +0000 Subject: [PATCH] compiler: Prohibit use of ellipsis operator on multi-valued calls. Fixes golang/go#9525. From-SVN: r219984 --- gcc/go/gofrontend/expressions.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index ee8af849f50..a8bed0b66e1 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));