compiler: set varargs correctly for type of method expression

Fixes golang/go#41737

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/258977
This commit is contained in:
Ian Lance Taylor 2020-10-01 15:11:22 -07:00
parent 4c69e61f43
commit 3e52eaab8c
3 changed files with 14 additions and 4 deletions

View File

@ -1,4 +1,4 @@
c9c084bce713e258721e12041a351ec8ad33ad17
801c458a562d22260ff176c26d65639dd32c8a90
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -5350,8 +5350,12 @@ Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
++p)
new_params->push_back(*p);
}
return Type::make_function_type(NULL, new_params, this->results_,
this->location_);
Function_type* ret = Type::make_function_type(NULL, new_params,
this->results_,
this->location_);
if (this->is_varargs_)
ret->set_is_varargs();
return ret;
}
// Make a copy of a function type ignoring any receiver and adding a

View File

@ -2396,8 +2396,14 @@ func TestVariadicMethodValue(t *testing.T) {
points := []Point{{20, 21}, {22, 23}, {24, 25}}
want := int64(p.TotalDist(points[0], points[1], points[2]))
// Variadic method of type.
tfunc := TypeOf((func(Point, ...Point) int)(nil))
if tt := TypeOf(p).Method(4).Type; tt != tfunc {
t.Errorf("Variadic Method Type from TypeOf is %s; want %s", tt, tfunc)
}
// Curried method of value.
tfunc := TypeOf((func(...Point) int)(nil))
tfunc = TypeOf((func(...Point) int)(nil))
v := ValueOf(p).Method(4)
if tt := v.Type(); tt != tfunc {
t.Errorf("Variadic Method Type is %s; want %s", tt, tfunc)