• David Lazar's avatar
    cmd/compile: generate code that type checks when inlining variadic functions · 5d1b53a9
    David Lazar authored
    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/33671Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    5d1b53a9
Name
Last commit
Last update
..
builtin Loading commit data...
testdata Loading commit data...
alg.go Loading commit data...
align.go Loading commit data...
asm_test.go Loading commit data...
bexport.go Loading commit data...
bimport.go Loading commit data...
builtin.go Loading commit data...
builtin_test.go Loading commit data...
bv.go Loading commit data...
closure.go Loading commit data...
const.go Loading commit data...
constFold_test.go Loading commit data...
dcl.go Loading commit data...
esc.go Loading commit data...
export.go Loading commit data...
fixedbugs_test.go Loading commit data...
float_test.go Loading commit data...
fmt.go Loading commit data...
gen.go Loading commit data...
global_test.go Loading commit data...
go.go Loading commit data...
gsubr.go Loading commit data...
iface_test.go Loading commit data...
init.go Loading commit data...
inl.go Loading commit data...
lex.go Loading commit data...
lex_test.go Loading commit data...
logic_test.go Loading commit data...
magic.go Loading commit data...
main.go Loading commit data...
mkbuiltin.go Loading commit data...
mpfloat.go Loading commit data...
mpint.go Loading commit data...
noder.go Loading commit data...
obj.go Loading commit data...
opnames.go Loading commit data...
order.go Loading commit data...
pgen.go Loading commit data...
pgen_test.go Loading commit data...
phi.go Loading commit data...
plive.go Loading commit data...
racewalk.go Loading commit data...
range.go Loading commit data...
reflect.go Loading commit data...
reflect_test.go Loading commit data...
select.go Loading commit data...
shift_test.go Loading commit data...
sinit.go Loading commit data...
sizeof_test.go Loading commit data...
ssa.go Loading commit data...
ssa_test.go Loading commit data...
subr.go Loading commit data...
swt.go Loading commit data...
swt_test.go Loading commit data...
syntax.go Loading commit data...
timings.go Loading commit data...
trace.go Loading commit data...
type.go Loading commit data...
typecheck.go Loading commit data...
universe.go Loading commit data...
unsafe.go Loading commit data...
util.go Loading commit data...
walk.go Loading commit data...