compiler: don't report runtime escapes if we've seen errors

If we get errors during compilation, we skip the escape analysis pass.
    If we are compiling the runtime package, we report an error if a bound
    method expression escapes.  The effect is that if we get an error
    while compiling the runtime package, we would report confusing and
    meaningless errors about bound method expressions escaping.
    
    This CL stops doing that.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/192720

From-SVN: r275238
This commit is contained in:
Ian Lance Taylor 2019-08-31 02:56:55 +00:00
parent d24c41ef1a
commit e7c8f75569
2 changed files with 4 additions and 2 deletions

View File

@ -1,4 +1,4 @@
2444eb1e8c697531f8beb403679e4ab00b16dbf5
80403eb9e95c9642ebabb4d7c43deedaa763211f
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -7948,7 +7948,9 @@ Bound_method_expression::do_flatten(Gogo* gogo, Named_object*,
Node* n = Node::make_node(this);
if ((n->encoding() & ESCAPE_MASK) == Node::ESCAPE_NONE)
ret->heap_expression()->set_allocate_on_stack();
else if (gogo->compiling_runtime() && gogo->package_name() == "runtime")
else if (gogo->compiling_runtime()
&& gogo->package_name() == "runtime"
&& !saw_errors())
go_error_at(loc, "%s escapes to heap, not allowed in runtime",
n->ast_format(gogo).c_str());