]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: generate code that type checks when inlining variadic functions
authorDavid Lazar <lazard@golang.org>
Mon, 28 Nov 2016 22:39:31 +0000 (17:39 -0500)
committerDavid Lazar <lazard@golang.org>
Wed, 30 Nov 2016 19:46:00 +0000 (19:46 +0000)
commit5d1b53a944a415205a945f4ddd89a0af8e9f114f
tree5f380bad916b6ecd619e2c819b7015c76c0b588a
parent01dda422520e05e26ed98629b735038d7f22678c
cmd/compile: generate code that type checks when inlining variadic functions

This fixes a bug in -l=3 or higher.

To inline a variadic function, the compiler generates code that constructs
a slice of arguments for the variadic parameter. Consider the function

  func Foo(xs ...string)

and the call Foo("hello", "world"). To inline the call to Foo, the
compiler used to generate

  xs := [2]string{"hello", "world"}[:]

which doesn't type check:

  invalid operation [2]string literal[:] (slice of unaddressable value).

Now, the compiler generates

  xs := []string{"hello", "world"}

which does type check.

Fixes #18116.

Change-Id: I0ee531ef2e6cc276db6fb12602b25a46d6d5db21
Reviewed-on: https://go-review.googlesource.com/33671
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/inl.go
test/inline_variadic.go [new file with mode: 0644]