aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-08-06 11:03:47 -0400
committerIan Lance Taylor <iant@golang.org>2021-08-06 12:37:48 -0700
commit629b5699fb555b30c25ebc0b503e87b470bed076 (patch)
treec01805b416d7e3e00edd29a4b08a5ee6a5ebf4dc /gcc
parentaff75af3b50f8c039ed6fbfa3f313ba45d44f6e6 (diff)
downloadgcc-629b5699fb555b30c25ebc0b503e87b470bed076.zip
gcc-629b5699fb555b30c25ebc0b503e87b470bed076.tar.gz
gcc-629b5699fb555b30c25ebc0b503e87b470bed076.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/escape.cc47
2 files changed, 47 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 19ab2de..9ed527f 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -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.
diff --git a/gcc/go/gofrontend/escape.cc b/gcc/go/gofrontend/escape.cc
index c8978ac..6da29ed 100644
--- a/gcc/go/gofrontend/escape.cc
+++ b/gcc/go/gofrontend/escape.cc
@@ -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