Commit f543bdd3 by Ian Lance Taylor

compiler: fix buglet in function inlining related to sink names

    
    When the compiler writes an inlinable function to the export data,
    parameter names are written out (in Export::write_name) using the
    Gogo::message_name as opposed to a raw/encoded name. This means that
    sink parameters (those named "_") get created with the name "_"
    instead of "._" (the name created by the lexer/parser). This confuses
    Gogo::is_sink_name, which looks for the latter sequence and not just
    "_". This can cause issues later on if an inlinable function is
    imported and fed through the rest of the compiler (things that are
    sinks are no recognized as such). To fix these issues, change
    Gogo::is_sink_name to return true for either variants ("_" or "._").
    
    Fixes golang/go#35586.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207259

From-SVN: r278275
parent 942c4b32
1e2d98b27701744cf0ec57b19d7fc8f594184b9a
2d0504236c7236345ee17a0cb43a3bb9ce3acf7f
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
......@@ -222,7 +222,9 @@ class Gogo
{
return (name[0] == '.'
&& name[name.length() - 1] == '_'
&& name[name.length() - 2] == '.');
&& name[name.length() - 2] == '.')
|| (name[0] == '_'
&& name.length() == 1);
}
// Helper used when adding parameters (including receiver param) to the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment