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:
Niko Matsakis 2011-10-21 12:14:01 -07:00 committed by Brian Anderson
parent 02d7a1e781
commit fb48817ade
2 changed files with 14 additions and 1 deletions

View 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();
}

View File

@ -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();
}