compiler: avoid copy for string([]byte) conversion used in map keys
authorCherry Zhang <cherryyz@google.com>
Thu, 9 May 2019 21:24:56 +0000 (21:24 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 9 May 2019 21:24:56 +0000 (21:24 +0000)
commit8743680541b8aeefdecba01b1960509a8d184202
tree6e0408b38efa777cfebe66ec1eadb2781cb07cc3
parent08e113f4aea9b3e80ffc1365ebd9db8ceedf8797
compiler: avoid copy for string([]byte) conversion used in map keys

    If a string([]byte) conversion is used immediately as a key for a
    map read, we don't need to copy the backing store of the byte
    slice, as mapaccess does not keep a reference to it.

    The gc compiler does more than this: it also avoids the copy if
    the map key is a composite literal that contains the conversion
    as a field, like, T{ ... { ..., string(b), ... }, ... }. For now,
    we just optimize the simple case, which is probably most common.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/176197

* go.dg/mapstring.go: New test.

From-SVN: r271044
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/statements.cc
gcc/testsuite/ChangeLog
gcc/testsuite/go.dg/mapstring.go [new file with mode: 0644]