If we lower a constant string operation in a Binary_expression,
delete the strings. This is safe because constant strings are always
newly allocated.
This is a hack to use much less memory when compiling the new
time/tzdata package, which has a file that contains the sum of over
13,000 constant strings. We don't do this for numeric expressions
because that could cause us to delete an Iota_expression.
We should have a cleaner approach to memory usage some day.
Fixes PR go/96450
-7f0d3834ac40cf3bcbeb9b13926ab5ccb2523537
+f45afedf90ac9af8f03d7d4515e952cbd724953a
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
{
// The child may have marked this expression as having an error.
if (this->classification_ == EXPRESSION_ERROR)
- return context->backend()->error_expression();
+ {
+ go_assert(saw_errors());
+ return context->backend()->error_expression();
+ }
return this->do_get_backend(context);
}
Type* result_type = (left->type()->named_type() != NULL
? left->type()
: right->type());
+ delete left;
+ delete right;
return Expression::make_string_typed(left_string + right_string,
result_type, location);
}
{
int cmp = left_string.compare(right_string);
bool r = Binary_expression::cmp_to_bool(op, cmp);
+ delete left;
+ delete right;
return Expression::make_boolean(r, location);
}
}