diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-11-07 18:19:19 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-11-07 18:19:19 +0000 |
commit | 8b36a2501807646182b9b52c8b896f1a1cbd034e (patch) | |
tree | a7c52d0a34feae2fbabbea1016bdc79829bb0833 /gcc | |
parent | 02d7065ff47470c8f5229dafae4a25819aabe523 (diff) | |
download | gcc-8b36a2501807646182b9b52c8b896f1a1cbd034e.zip gcc-8b36a2501807646182b9b52c8b896f1a1cbd034e.tar.gz gcc-8b36a2501807646182b9b52c8b896f1a1cbd034e.tar.bz2 |
compiler: don't double count "." in nested_function_num
Nested functions are named "outerfunc.$nestedN", where N is a
number. nested_function_num extracts that number. The name is
first passed to unpack_hidden_name, which handles the "." and
should result "$nestedN". Don't expect the "." again.
This fixes assertion failure when escape analysis is enabled
and -fgo-debug-escape is on. The failure looks
go1: internal compiler error: in nested_function_num, at go/gofrontend/names.cc:241
0x7bd7d3 Gogo::nested_function_num(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
Reviewed-on: https://go-review.googlesource.com/76213
From-SVN: r254504
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/names.cc | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 79ad326..7be0093 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -1427cedcb0faa627fd89a75e009f7898c25aa86c +7fd845bd9414c348bfa30bd24aa0bb8e4eebf83a 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/names.cc b/gcc/go/gofrontend/names.cc index 20f7c57..4353a00 100644 --- a/gcc/go/gofrontend/names.cc +++ b/gcc/go/gofrontend/names.cc @@ -238,8 +238,8 @@ int Gogo::nested_function_num(const std::string& name) { std::string n(Gogo::unpack_hidden_name(name)); - go_assert(n.compare(0, 8, ".$nested") == 0); - return strtol(n.substr(8).c_str(), NULL, 0); + go_assert(n.compare(0, 7, "$nested") == 0); + return strtol(n.substr(7).c_str(), NULL, 0); } // Return the name to use for a sink function, a function whose name |