In Array_type::do_export, when emitting a concrete array length,
evaluate the length expression to an integer constant and emit that
constant, instead of calling the more general method for emitting
expressions. This is to avoid the possibility that we will need
to emit a conversion, which could confuse the gccgoimporter.
Fixes golang/go#30628.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/165741
From-SVN: r269443
-13c98c3477647888fc7a186e9055793b0961e806
+959260238817af3205fb9907dd92319291e6a893
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
exp->write_c_string("[");
if (this->length_ != NULL)
{
- Export_function_body efb(exp, 0);
- efb.set_type_context(this->length_->type());
- this->length_->export_expression(&efb);
- exp->write_string(efb.body());
+ Numeric_constant nc;
+ mpz_t val;
+ if (!this->length_->numeric_constant_value(&nc) || !nc.to_int(&val))
+ {
+ go_assert(saw_errors());
+ return;
+ }
+ char* s = mpz_get_str(NULL, 10, val);
+ exp->write_string(s);
+ exp->write_string(" ");
+ mpz_clear(val);
}
exp->write_c_string("] ");
exp->write_type(this->element_type_);