diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-01-22 04:09:04 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-01-22 04:09:04 +0000 |
commit | d4290ecad0b522bbe2850005215df7140d9a3bcc (patch) | |
tree | e74687ac05ead0fd2cff7c9955ddd16a4dfc124c /gcc/go | |
parent | fad513aa8881cc181c6a5601c3de9fac3a84e05e (diff) | |
download | gcc-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.cc | 11 |
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)); |