Commit 234bdd5b by Ian Lance Taylor

compiler: Error for invalid use of ... in call.

From-SVN: r186739
parent 5e0cea66
...@@ -8641,7 +8641,14 @@ Call_expression::lower_varargs(Gogo* gogo, Named_object* function, ...@@ -8641,7 +8641,14 @@ Call_expression::lower_varargs(Gogo* gogo, Named_object* function,
new_args->push_back(*pa); new_args->push_back(*pa);
else if (this->is_varargs_) else if (this->is_varargs_)
{ {
this->report_error(_("too many arguments")); if ((*pa)->type()->is_slice_type())
this->report_error(_("too many arguments"));
else
{
error_at(this->location(),
_("invalid use of %<...%> with non-slice"));
this->set_is_error();
}
return; return;
} }
else else
...@@ -8886,6 +8893,9 @@ Call_expression::check_argument_type(int i, const Type* parameter_type, ...@@ -8886,6 +8893,9 @@ Call_expression::check_argument_type(int i, const Type* parameter_type,
void void
Call_expression::do_check_types(Gogo*) Call_expression::do_check_types(Gogo*)
{ {
if (this->classification() == EXPRESSION_ERROR)
return;
Function_type* fntype = this->get_function_type(); Function_type* fntype = this->get_function_type();
if (fntype == NULL) if (fntype == NULL)
{ {
...@@ -8921,7 +8931,17 @@ Call_expression::do_check_types(Gogo*) ...@@ -8921,7 +8931,17 @@ Call_expression::do_check_types(Gogo*)
} }
// Note that varargs was handled by the lower_varargs() method, so // Note that varargs was handled by the lower_varargs() method, so
// we don't have to worry about it here. // we don't have to worry about it here unless something is wrong.
if (this->is_varargs_ && !this->varargs_are_lowered_)
{
if (!fntype->is_varargs())
{
error_at(this->location(),
_("invalid use of %<...%> calling non-variadic function"));
this->set_is_error();
return;
}
}
const Typed_identifier_list* parameters = fntype->parameters(); const Typed_identifier_list* parameters = fntype->parameters();
if (this->args_ == NULL) if (this->args_ == NULL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment