work around bug when calling c-stack-cdecl fns from outside crate
In the main test, I call the wrapper instead of the native fn, as intended. I also added an xfail-test that exercises the broken code path. Will file a bug. Description of the broken code path: The code path is that when we look up the external identifier we go through trans_external_path() -> type_of_ty_param_kinds_and_ty() -> type_of_fn_from_ty() -> type_of_fn(), and type_of_fn() adds a lot of external parameters. Problem is, I guess, that we don't pass the native ABI (or even the fact that it's a native function!), just the types and kinds of the parameters.
This commit is contained in:
parent
02d7a1e781
commit
fb48817ade
2 changed files with 14 additions and 1 deletions
11
src/test/run-pass/invoke-external-native.rs
Normal file
11
src/test/run-pass/invoke-external-native.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
// xfail-test
|
||||
|
||||
import std::sys;
|
||||
|
||||
// The purpose of this test is to check that we can
|
||||
// successfully (and safely) invoke external, c-stack-cdecl
|
||||
// functions from outside the crate.
|
||||
|
||||
fn main() {
|
||||
let foo = sys::rustrt::last_os_error();
|
||||
}
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
import std::sys;
|
||||
|
||||
#[test]
|
||||
fn last_os_error() unsafe { log sys::rustrt::last_os_error(); }
|
||||
fn last_os_error() {
|
||||
log sys::last_os_error();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue