diff mbox series

Go patch commited: correct nested_function_num

Message ID CAOyqgcUnTkpZti6eFTCgEKBOUMpbUxtSs7mrpj6wf6t02SkmwQ@mail.gmail.com
State New
Headers show
Series Go patch commited: correct nested_function_num | expand

Commit Message

Ian Lance Taylor Nov. 7, 2017, 6:19 p.m. UTC
This patch by Cherry Zhang avoids double counting "." in
nested_function_num in the Go frontend.  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 an assertion failure when escape analysis is enabled and
-fgo-debug-escape is on. The failure looks like

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&)

Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
to mainline.

Ian
diff mbox series

Patch

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 254476)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -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: gcc/go/gofrontend/names.cc
===================================================================
--- gcc/go/gofrontend/names.cc	(revision 254090)
+++ gcc/go/gofrontend/names.cc	(working copy)
@@ -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