• 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
..
errors Loading commit data...
fortran Loading commit data...
gmp Loading commit data...
life Loading commit data...
nocgo Loading commit data...
stdio Loading commit data...
test Loading commit data...
testasan Loading commit data...
testcarchive Loading commit data...
testcshared Loading commit data...
testgodefs Loading commit data...
testplugin Loading commit data...
testsanitizers Loading commit data...
testshared Loading commit data...
testsigfwd Loading commit data...
testso Loading commit data...
testsovar Loading commit data...
testtls Loading commit data...