]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: fix type of static closure pointer
authorKeith Randall <khr@golang.org>
Tue, 20 Sep 2016 23:34:30 +0000 (16:34 -0700)
committerKeith Randall <khr@golang.org>
Thu, 22 Sep 2016 21:50:32 +0000 (21:50 +0000)
commit88d2f9112a0a8afd3a29ac1479d4f17847f16803
tree1563a1764cef31989892b137baa6b85adf4bf05b
parentd586aae1f44ebdf0e8f92137856b4b62c41cac6a
cmd/compile: fix type of static closure pointer

  var x *X = ...
  defer x.foo()

As part of the defer, we need to calculate &(*X).foo·f.  This expression
is the address of the static closure that will call (*X).foo when a
pointer to that closure is used in a call/defer/go.  This pointer is not
currently properly typed in SSA.  It is a pointer type, but the base
type is nil, not a proper type.

This turns out not to be a problem currently because we never use the
type of these SSA values.  But I'm trying to change that (to be able to
spill them) in CL 28391.  To fix, use uint8 as the fake type of the
closure.

Change-Id: Ieee388089c9af398ed772ee8c815122c347cb633
Reviewed-on: https://go-review.googlesource.com/29444
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/ssa.go
src/cmd/compile/internal/gc/subr.go