compiler: make escape analysis more strict about runtime calls

Following the previous CL, in the escape analysis list all the
expected runtime calls, and fail if an unexpected one is seen.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/340397
This commit is contained in:
Cherry Mui 2021-08-06 11:03:47 -04:00 committed by Ian Lance Taylor
parent aff75af3b5
commit 629b5699fb
2 changed files with 47 additions and 2 deletions

View File

@ -1,4 +1,4 @@
32590102c464679f845667b5554e1dcce2549ad2
747f3a2d78c073e9b03dd81914d0edb7ddc5be14
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -1646,6 +1646,7 @@ Escape_analysis_assign::expression(Expression** pexpr)
case Runtime::MAKECHAN:
case Runtime::MAKECHAN64:
case Runtime::MAKEMAP:
case Runtime::MAKEMAP64:
case Runtime::MAKESLICE:
case Runtime::MAKESLICE64:
this->context_->track(n);
@ -1705,8 +1706,52 @@ Escape_analysis_assign::expression(Expression** pexpr)
}
break;
case Runtime::MEMCMP:
case Runtime::DECODERUNE:
case Runtime::INTSTRING:
case Runtime::MAKEMAP_SMALL:
case Runtime::MAPACCESS1:
case Runtime::MAPACCESS1_FAST32:
case Runtime::MAPACCESS1_FAST64:
case Runtime::MAPACCESS1_FASTSTR:
case Runtime::MAPACCESS1_FAT:
case Runtime::MAPACCESS2:
case Runtime::MAPACCESS2_FAST32:
case Runtime::MAPACCESS2_FAST64:
case Runtime::MAPACCESS2_FASTSTR:
case Runtime::MAPACCESS2_FAT:
case Runtime::MAPASSIGN_FAST32:
case Runtime::MAPASSIGN_FAST64:
case Runtime::MAPITERINIT:
case Runtime::MAPITERNEXT:
case Runtime::MAPCLEAR:
case Runtime::CHANRECV2:
case Runtime::SELECTGO:
case Runtime::SELECTNBSEND:
case Runtime::SELECTNBRECV:
case Runtime::BLOCK:
case Runtime::IFACET2IP:
case Runtime::EQTYPE:
case Runtime::MEMCLRHASPTR:
case Runtime::FIELDTRACK:
case Runtime::BUILTIN_MEMSET:
case Runtime::PANIC_SLICE_CONVERT:
// these do not escape.
break;
case Runtime::IFACEE2E2:
case Runtime::IFACEI2E2:
case Runtime::IFACEE2I2:
case Runtime::IFACEI2I2:
case Runtime::IFACEE2T2P:
case Runtime::IFACEI2T2P:
// handled in ::assign.
break;
default:
break;
// should not see other runtime calls. they are not yet
// lowered to runtime calls at this point.
go_unreachable();
}
}
else