re PR go/61255 (gccgo: spurious "error: argument 2 has incompatible type" [GoSmith])
PR go/61255 compiler: Copied variadic calls should copy lowering state of arguments. From-SVN: r218764
This commit is contained in:
parent
b07891da2e
commit
426bcc95cb
@ -6552,13 +6552,7 @@ class Builtin_call_expression : public Call_expression
|
||||
do_check_types(Gogo*);
|
||||
|
||||
Expression*
|
||||
do_copy()
|
||||
{
|
||||
return new Builtin_call_expression(this->gogo_, this->fn()->copy(),
|
||||
this->args()->copy(),
|
||||
this->is_varargs(),
|
||||
this->location());
|
||||
}
|
||||
do_copy();
|
||||
|
||||
Bexpression*
|
||||
do_get_backend(Translate_context*);
|
||||
@ -7986,6 +7980,20 @@ Builtin_call_expression::do_check_types(Gogo*)
|
||||
}
|
||||
}
|
||||
|
||||
Expression*
|
||||
Builtin_call_expression::do_copy()
|
||||
{
|
||||
Call_expression* bce =
|
||||
new Builtin_call_expression(this->gogo_, this->fn()->copy(),
|
||||
this->args()->copy(),
|
||||
this->is_varargs(),
|
||||
this->location());
|
||||
|
||||
if (this->varargs_are_lowered())
|
||||
bce->set_varargs_are_lowered();
|
||||
return bce;
|
||||
}
|
||||
|
||||
// Return the backend representation for a builtin function.
|
||||
|
||||
Bexpression*
|
||||
@ -9126,6 +9134,21 @@ Call_expression::do_check_types(Gogo*)
|
||||
}
|
||||
}
|
||||
|
||||
Expression*
|
||||
Call_expression::do_copy()
|
||||
{
|
||||
Call_expression* call =
|
||||
Expression::make_call(this->fn_->copy(),
|
||||
(this->args_ == NULL
|
||||
? NULL
|
||||
: this->args_->copy()),
|
||||
this->is_varargs_, this->location());
|
||||
|
||||
if (this->varargs_are_lowered_)
|
||||
call->set_varargs_are_lowered();
|
||||
return call;
|
||||
}
|
||||
|
||||
// Return whether we have to use a temporary variable to ensure that
|
||||
// we evaluate this call expression in order. If the call returns no
|
||||
// results then it will inevitably be executed last.
|
||||
|
@ -1683,6 +1683,11 @@ class Call_expression : public Expression
|
||||
is_varargs() const
|
||||
{ return this->is_varargs_; }
|
||||
|
||||
// Return whether varargs have already been lowered.
|
||||
bool
|
||||
varargs_are_lowered() const
|
||||
{ return this->varargs_are_lowered_; }
|
||||
|
||||
// Note that varargs have already been lowered.
|
||||
void
|
||||
set_varargs_are_lowered()
|
||||
@ -1738,14 +1743,7 @@ class Call_expression : public Expression
|
||||
do_check_types(Gogo*);
|
||||
|
||||
Expression*
|
||||
do_copy()
|
||||
{
|
||||
return Expression::make_call(this->fn_->copy(),
|
||||
(this->args_ == NULL
|
||||
? NULL
|
||||
: this->args_->copy()),
|
||||
this->is_varargs_, this->location());
|
||||
}
|
||||
do_copy();
|
||||
|
||||
bool
|
||||
do_must_eval_in_order() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user