compiler: don't double count "." in nested_function_num
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 7 Nov 2017 18:19:19 +0000 (18:19 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 7 Nov 2017 18:19:19 +0000 (18:19 +0000)
    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

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/names.cc

index 79ad326e2c4ab38a37600c02a81e4271259768b5..7be00931af7e44a9dbe07c3683c5c047f92bc66b 100644 (file)
@@ -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.
index 20f7c57ee499cd3465650e0afdcf68e3b7b5e55b..4353a00ef6a29ed3a407e988c8f4d0b1bf350c50 100644 (file)
@@ -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