diff options
| -rw-r--r-- | src/test/compile-fail/generic-no-mangle.rs | 18 | ||||
| -rw-r--r-- | src/test/run-make/extern-fn-mangle/Makefile | 7 | ||||
| -rw-r--r-- | src/test/run-make/extern-fn-mangle/test.c | 8 | ||||
| -rw-r--r-- | src/test/run-make/extern-fn-mangle/test.rs | 25 |
4 files changed, 58 insertions, 0 deletions
diff --git a/src/test/compile-fail/generic-no-mangle.rs b/src/test/compile-fail/generic-no-mangle.rs new file mode 100644 index 00000000000..f4ead18ee16 --- /dev/null +++ b/src/test/compile-fail/generic-no-mangle.rs @@ -0,0 +1,18 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-test this should fail to compile (#15844) + +#[no_mangle] +fn foo<T>() {} //~ ERROR generic functions must be mangled + +#[no_mangle] +extern fn foo<T>() {} //~ ERROR generic functions must be mangled + diff --git a/src/test/run-make/extern-fn-mangle/Makefile b/src/test/run-make/extern-fn-mangle/Makefile new file mode 100644 index 00000000000..ea6971853fe --- /dev/null +++ b/src/test/run-make/extern-fn-mangle/Makefile @@ -0,0 +1,7 @@ +-include ../tools.mk + +all: + $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o + $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o + $(RUSTC) test.rs -L $(TMPDIR) + $(call RUN,test) || exit 1 diff --git a/src/test/run-make/extern-fn-mangle/test.c b/src/test/run-make/extern-fn-mangle/test.c new file mode 100644 index 00000000000..8d93917ade0 --- /dev/null +++ b/src/test/run-make/extern-fn-mangle/test.c @@ -0,0 +1,8 @@ +#include <stdint.h> + +uint32_t foo(); +uint32_t bar(); + +uint32_t add() { + return foo() + bar(); +} diff --git a/src/test/run-make/extern-fn-mangle/test.rs b/src/test/run-make/extern-fn-mangle/test.rs new file mode 100644 index 00000000000..35b5a9278a4 --- /dev/null +++ b/src/test/run-make/extern-fn-mangle/test.rs @@ -0,0 +1,25 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[no_mangle] +pub extern "C" fn foo() -> i32 { 3 } + +#[no_mangle] +pub extern "C" fn bar() -> i32 { 5 } + +#[link(name = "test", kind = "static")] +extern { + fn add() -> i32; +} + +fn main() { + let back = unsafe { add() }; + assert_eq!(8, back); +} |
