• Ian Lance Taylor's avatar
    cmd/cgo: always use a function literal for pointer checking · a16954b8
    Ian Lance Taylor authored
    The pointer checking code needs to know the exact type of the parameter
    expected by the C function, so that it can use a type assertion to
    convert the empty interface returned by cgoCheckPointer to the correct
    type. Previously this was done by using a type conversion, but that
    meant that the code accepted arguments that were convertible to the
    parameter type, rather than arguments that were assignable as in a
    normal function call. In other words, some code that should not have
    passed type checking was accepted.
    
    This CL changes cgo to always use a function literal for pointer
    checking. Now the argument is passed to the function literal, which has
    the correct argument type, so type checking is performed just as for a
    function call as it should be.
    
    Since we now always use a function literal, simplify the checking code
    to run as a statement by itself. It now no longer needs to return a
    value, and we no longer need a type assertion.
    
    This does have the cost of introducing another function call into any
    call to a C function that requires pointer checking, but the cost of the
    additional call should be minimal compared to the cost of pointer
    checking.
    
    Fixes #16591.
    
    Change-Id: I220165564cf69db9fd5f746532d7f977a5b2c989
    Reviewed-on: https://go-review.googlesource.com/31233
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    a16954b8
Name
Last commit
Last update
..
addr2line Loading commit data...
api Loading commit data...
asm Loading commit data...
cgo Loading commit data...
compile Loading commit data...
cover Loading commit data...
dist Loading commit data...
doc Loading commit data...
fix Loading commit data...
go Loading commit data...
gofmt Loading commit data...
internal Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
pprof Loading commit data...
trace Loading commit data...
vendor Loading commit data...
vet Loading commit data...