diff --git a/tests/run-make-fulldeps/a-b-a-linker-guard/Makefile b/tests/run-make-fulldeps/a-b-a-linker-guard/Makefile deleted file mode 100644 index adc9e3d091609fa77ece93b94be6b97076b1a55d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/a-b-a-linker-guard/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../tools.mk - -# Test that if we build `b` against a version of `a` that has one set -# of types, it will not run with a dylib that has a different set of -# types. - -# NOTE(eddyb) this test only works with the `legacy` mangling, -# and will probably get removed once `legacy` is gone. - -all: - $(RUSTC) a.rs --cfg x -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy - $(RUSTC) b.rs -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy - $(call RUN,b) - $(RUSTC) a.rs --cfg y -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy - $(call FAIL,b) diff --git a/tests/run-make-fulldeps/a-b-a-linker-guard/a.rs b/tests/run-make-fulldeps/a-b-a-linker-guard/a.rs deleted file mode 100644 index aa07b1e71607cf3bfe417fe97d3d1a0fe99bd865..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/a-b-a-linker-guard/a.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_name = "a"] -#![crate_type = "dylib"] - -#[cfg(x)] -pub fn foo(x: u32) { } - -#[cfg(y)] -pub fn foo(x: i32) { } diff --git a/tests/run-make-fulldeps/a-b-a-linker-guard/b.rs b/tests/run-make-fulldeps/a-b-a-linker-guard/b.rs deleted file mode 100644 index f30df120a3ba7ae4ea5f71a459cc9dbb972a621a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/a-b-a-linker-guard/b.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_name = "b"] - -extern crate a; - -fn main() { - a::foo(22_u32); -} diff --git a/tests/run-make-fulldeps/alloc-no-oom-handling/Makefile b/tests/run-make-fulldeps/alloc-no-oom-handling/Makefile deleted file mode 100644 index 87f74c69c793963b1d8f2d8ee108c277d6965b21..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/alloc-no-oom-handling/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_global_oom_handling diff --git a/tests/run-make-fulldeps/alloc-no-rc/Makefile b/tests/run-make-fulldeps/alloc-no-rc/Makefile deleted file mode 100644 index 9824b17e6c2a7a9d443a27336db0fcc6a6c4d46b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/alloc-no-rc/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_rc diff --git a/tests/run-make-fulldeps/alloc-no-sync/Makefile b/tests/run-make-fulldeps/alloc-no-sync/Makefile deleted file mode 100644 index 04ec4c7d8bc9a1831b7dfe38246fd99d3da25366..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/alloc-no-sync/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_sync diff --git a/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/Makefile b/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/Makefile deleted file mode 100644 index 60d9c7c374590fd83c64ee3a03ee754ff3160cc0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# Test that -A warnings makes the 'empty trait list for derive' warning go away -OUT=$(shell $(RUSTC) foo.rs -A warnings 2>&1 | grep "warning" ) - -all: foo - test -z '$(OUT)' - -# This is just to make sure the above command actually succeeds -foo: - $(RUSTC) foo.rs -A warnings diff --git a/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/foo.rs b/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/foo.rs deleted file mode 100644 index 46e72da2de9f330923f3c03fe7b7bcc07449b1ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/allow-non-lint-warnings-cmdline/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[derive()] -#[derive(Copy, Clone)] -pub struct Foo; - -pub fn main() { } diff --git a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/Makefile b/tests/run-make-fulldeps/allow-warnings-cmdline-stability/Makefile deleted file mode 100644 index 1ce8d0ec28417a47984eda6e08e73abf477956ac..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../tools.mk - -# Test that -A warnings makes the 'empty trait list for derive' warning go away -DEP=$(shell $(RUSTC) bar.rs) -OUT=$(shell $(RUSTC) foo.rs -A warnings 2>&1 | grep "warning" ) - -all: foo bar - test -z '$(OUT)' - -# These are just to ensure that the above commands actually work -bar: - $(RUSTC) bar.rs - -foo: bar - $(RUSTC) foo.rs -A warnings diff --git a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs b/tests/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs deleted file mode 100644 index 3dcfb9dadd804dd6d0e069b30aa8e39ddc6bb252..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "lib"] -#![feature(staged_api)] -#![unstable(feature = "unstable_test_feature", issue = "none")] - -pub fn baz() {} diff --git a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs b/tests/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs deleted file mode 100644 index 869b543541688019298822844b038e4846d8d553..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/allow-warnings-cmdline-stability/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![feature(unstable_test_feature)] - -extern crate bar; - -pub fn main() { bar::baz() } diff --git a/tests/run-make-fulldeps/archive-duplicate-names/Makefile b/tests/run-make-fulldeps/archive-duplicate-names/Makefile deleted file mode 100644 index bbdcd2a34fe04e7e71d4534b61e1abcb9ba724b7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/archive-duplicate-names/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -all: - mkdir $(TMPDIR)/a - mkdir $(TMPDIR)/b - $(call COMPILE_OBJ,$(TMPDIR)/a/foo.o,foo.c) - $(call COMPILE_OBJ,$(TMPDIR)/b/foo.o,bar.c) - $(AR) crus $(TMPDIR)/libfoo.a $(TMPDIR)/a/foo.o $(TMPDIR)/b/foo.o - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/archive-duplicate-names/bar.c b/tests/run-make-fulldeps/archive-duplicate-names/bar.c deleted file mode 100644 index e42599986781fe984a2c1427a3373cf439a34f60..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/archive-duplicate-names/bar.c +++ /dev/null @@ -1 +0,0 @@ -void bar() {} diff --git a/tests/run-make-fulldeps/archive-duplicate-names/bar.rs b/tests/run-make-fulldeps/archive-duplicate-names/bar.rs deleted file mode 100644 index 994a98c2cd8b1e41be828d629bb2cf8b84d65c45..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/archive-duplicate-names/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::baz(); -} diff --git a/tests/run-make-fulldeps/archive-duplicate-names/foo.c b/tests/run-make-fulldeps/archive-duplicate-names/foo.c deleted file mode 100644 index 85e6cd8c3909a7e67c41750f5210b1463dd7a90c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/archive-duplicate-names/foo.c +++ /dev/null @@ -1 +0,0 @@ -void foo() {} diff --git a/tests/run-make-fulldeps/archive-duplicate-names/foo.rs b/tests/run-make-fulldeps/archive-duplicate-names/foo.rs deleted file mode 100644 index 0bf13c406ab53c7b7c9217a4c623bd1c3a1538a8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/archive-duplicate-names/foo.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "foo", kind = "static")] -extern "C" { - fn foo(); - fn bar(); -} - -pub fn baz() { - unsafe { - foo(); - bar(); - } -} diff --git a/tests/run-make-fulldeps/arguments-non-c-like-enum/Makefile b/tests/run-make-fulldeps/arguments-non-c-like-enum/Makefile deleted file mode 100644 index 513311c8289464df4cdc143fe236a1660c08a4c7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/arguments-non-c-like-enum/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --crate-type=staticlib nonclike.rs - $(CC) test.c $(call STATICLIB,nonclike) $(call OUT_EXE,test) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(call RUN,test) diff --git a/tests/run-make-fulldeps/arguments-non-c-like-enum/nonclike.rs b/tests/run-make-fulldeps/arguments-non-c-like-enum/nonclike.rs deleted file mode 100644 index 57c2c6127ed9cc01fa04dd8a9e49eeb6c9db20b0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/arguments-non-c-like-enum/nonclike.rs +++ /dev/null @@ -1,31 +0,0 @@ -#[repr(C, u8)] -pub enum TT { - AA(u64, u64), - BB, -} - -#[no_mangle] -pub extern "C" fn tt_add(a: TT, b: TT) -> u64 { - match (a, b) { - (TT::AA(a1, b1), TT::AA(a2, b2)) => a1 + a2 + b1 + b2, - (TT::AA(a1, b1), TT::BB) => a1 + b1, - (TT::BB, TT::AA(a1, b1)) => a1 + b1, - _ => 0, - } -} - -#[repr(C, u8)] -pub enum T { - A(u64), - B, -} - -#[no_mangle] -pub extern "C" fn t_add(a: T, b: T) -> u64 { - match (a, b) { - (T::A(a), T::A(b)) => a + b, - (T::A(a), T::B) => a, - (T::B, T::A(b)) => b, - _ => 0, - } -} diff --git a/tests/run-make-fulldeps/arguments-non-c-like-enum/test.c b/tests/run-make-fulldeps/arguments-non-c-like-enum/test.c deleted file mode 100644 index 0a1621e49f2eeed5e86a2622355c74c345d74131..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/arguments-non-c-like-enum/test.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include - -#include - -/* This is the code generated by cbindgen 0.12.1 for the `enum TT` - * type in nonclike.rs . */ -enum TT_Tag { - AA, - BB, -}; -typedef uint8_t TT_Tag; - -typedef struct { - uint64_t _0; - uint64_t _1; -} AA_Body; - -typedef struct { - TT_Tag tag; - union { - AA_Body aa; - }; -} TT; - -/* This is the code generated by cbindgen 0.12.1 for the `enum T` type - * in nonclike.rs . */ -enum T_Tag { - A, - B, -}; -typedef uint8_t T_Tag; - -typedef struct { - uint64_t _0; -} A_Body; - -typedef struct { - T_Tag tag; - union { - A_Body a; - }; -} T; - -/* These symbols are defined by the Rust staticlib built from - * nonclike.rs. */ -extern uint64_t t_add(T a, T b); -extern uint64_t tt_add(TT a, TT b); - -int main(int argc, char *argv[]) { - (void)argc; (void)argv; - - /* This example works. */ - TT xx = { .tag = AA, .aa = { ._0 = 1, ._1 = 2 } }; - TT yy = { .tag = AA, .aa = { ._0 = 10, ._1 = 20 } }; - uint64_t rr = tt_add(xx, yy); - assert(33 == rr); - - /* This one used to return an incorrect result (see issue #68190). */ - T x = { .tag = A, .a = { ._0 = 1 } }; - T y = { .tag = A, .a = { ._0 = 10 } }; - uint64_t r = t_add(x, y); - assert(11 == r); - - return 0; -} diff --git a/tests/run-make-fulldeps/atomic-lock-free/Makefile b/tests/run-make-fulldeps/atomic-lock-free/Makefile deleted file mode 100644 index 37e59624a2541744708b052f687e8194a60a1214..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/atomic-lock-free/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -include ../tools.mk - -# This tests ensure that atomic types are never lowered into runtime library calls that are not -# guaranteed to be lock-free. - -all: -ifeq ($(UNAME),Linux) -ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) - $(RUSTC) --target=i686-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=x86_64-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -ifeq ($(filter arm,$(LLVM_COMPONENTS)),arm) - $(RUSTC) --target=arm-unknown-linux-gnueabi atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=arm-unknown-linux-gnueabihf atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=armv7-unknown-linux-gnueabihf atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=thumbv7neon-unknown-linux-gnueabihf atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -ifeq ($(filter aarch64,$(LLVM_COMPONENTS)),aarch64) - $(RUSTC) --target=aarch64-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -ifeq ($(filter mips,$(LLVM_COMPONENTS)),mips) - $(RUSTC) --target=mips-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=mipsel-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -ifeq ($(filter powerpc,$(LLVM_COMPONENTS)),powerpc) - $(RUSTC) --target=powerpc-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=powerpc-unknown-linux-gnuspe atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=powerpc64-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add - $(RUSTC) --target=powerpc64le-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -ifeq ($(filter systemz,$(LLVM_COMPONENTS)),systemz) - $(RUSTC) --target=s390x-unknown-linux-gnu atomic_lock_free.rs - nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add -endif -endif diff --git a/tests/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs b/tests/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs deleted file mode 100644 index 47d90b1856be51ad7701c19df3a798b451cd6083..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/atomic-lock-free/atomic_lock_free.rs +++ /dev/null @@ -1,66 +0,0 @@ -#![feature(no_core, intrinsics, lang_items)] -#![crate_type="rlib"] -#![no_core] - -extern "rust-intrinsic" { - fn atomic_xadd_seqcst(dst: *mut T, src: T) -> T; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} -#[lang = "freeze"] -trait Freeze {} - -impl Copy for *mut T {} - -#[cfg(target_has_atomic = "8")] -pub unsafe fn atomic_u8(x: *mut u8) { - atomic_xadd_seqcst(x, 1); - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "8")] -pub unsafe fn atomic_i8(x: *mut i8) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "16")] -pub unsafe fn atomic_u16(x: *mut u16) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "16")] -pub unsafe fn atomic_i16(x: *mut i16) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "32")] -pub unsafe fn atomic_u32(x: *mut u32) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "32")] -pub unsafe fn atomic_i32(x: *mut i32) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "64")] -pub unsafe fn atomic_u64(x: *mut u64) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "64")] -pub unsafe fn atomic_i64(x: *mut i64) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "128")] -pub unsafe fn atomic_u128(x: *mut u128) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "128")] -pub unsafe fn atomic_i128(x: *mut i128) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "ptr")] -pub unsafe fn atomic_usize(x: *mut usize) { - atomic_xadd_seqcst(x, 1); -} -#[cfg(target_has_atomic = "ptr")] -pub unsafe fn atomic_isize(x: *mut isize) { - atomic_xadd_seqcst(x, 1); -} diff --git a/tests/run-make-fulldeps/bare-outfile/Makefile b/tests/run-make-fulldeps/bare-outfile/Makefile deleted file mode 100644 index 858466e942b1504254a7dd5b34d51dbf1e142cee..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/bare-outfile/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - cp foo.rs $(TMPDIR) - cd $(TMPDIR) && $(RUSTC) -o foo foo.rs - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/bare-outfile/foo.rs b/tests/run-make-fulldeps/bare-outfile/foo.rs deleted file mode 100644 index f79c691f0853c5b08e114041f7c8db43b0452fe0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/bare-outfile/foo.rs +++ /dev/null @@ -1,2 +0,0 @@ -fn main() { -} diff --git a/tests/run-make-fulldeps/c-dynamic-dylib/Makefile b/tests/run-make-fulldeps/c-dynamic-dylib/Makefile deleted file mode 100644 index ac68778922d6df99965dcf6efc2abfcaf04a91e9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-dylib/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -# ignore-macos -# -# This hits an assertion in the linker on older versions of osx apparently - -all: $(call DYLIB,cfoo) - $(RUSTC) foo.rs -C prefer-dynamic - $(RUSTC) bar.rs - $(call RUN,bar) - $(call REMOVE_DYLIBS,cfoo) - $(call FAIL,bar) diff --git a/tests/run-make-fulldeps/c-dynamic-dylib/bar.rs b/tests/run-make-fulldeps/c-dynamic-dylib/bar.rs deleted file mode 100644 index b8c798ffdb4a99bbb9a5df89147fcfa12695a70e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-dylib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::rsfoo(); -} diff --git a/tests/run-make-fulldeps/c-dynamic-dylib/cfoo.c b/tests/run-make-fulldeps/c-dynamic-dylib/cfoo.c deleted file mode 100644 index fea490cf9b45fb6347a8afa71a98636e8845914a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-dylib/cfoo.c +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif -int foo() { return 0; } diff --git a/tests/run-make-fulldeps/c-dynamic-dylib/foo.rs b/tests/run-make-fulldeps/c-dynamic-dylib/foo.rs deleted file mode 100644 index 9f7a9e2213c0927a78b47a2a7edd7f44ffb2e917..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-dylib/foo.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "dylib"] - -#[link(name = "cfoo")] -extern "C" { - fn foo(); -} - -pub fn rsfoo() { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/c-dynamic-rlib/Makefile b/tests/run-make-fulldeps/c-dynamic-rlib/Makefile deleted file mode 100644 index c65d648b929579bdc86c21fdbedfa419b238ca22..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-rlib/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../tools.mk - -# ignore-macos -# -# This hits an assertion in the linker on older versions of osx apparently - -# This overrides the LD_LIBRARY_PATH for RUN -TARGET_RPATH_DIR:=$(TARGET_RPATH_DIR):$(TMPDIR) - -all: $(call DYLIB,cfoo) - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(call RUN,bar) - $(call REMOVE_DYLIBS,cfoo) - $(call FAIL,bar) diff --git a/tests/run-make-fulldeps/c-dynamic-rlib/bar.rs b/tests/run-make-fulldeps/c-dynamic-rlib/bar.rs deleted file mode 100644 index b8c798ffdb4a99bbb9a5df89147fcfa12695a70e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-rlib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::rsfoo(); -} diff --git a/tests/run-make-fulldeps/c-dynamic-rlib/cfoo.c b/tests/run-make-fulldeps/c-dynamic-rlib/cfoo.c deleted file mode 100644 index fea490cf9b45fb6347a8afa71a98636e8845914a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-rlib/cfoo.c +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif -int foo() { return 0; } diff --git a/tests/run-make-fulldeps/c-dynamic-rlib/foo.rs b/tests/run-make-fulldeps/c-dynamic-rlib/foo.rs deleted file mode 100644 index 3dd376f1ff57beae396507485a4aa72527b08cf5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-dynamic-rlib/foo.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "cfoo")] -extern "C" { - fn foo(); -} - -pub fn rsfoo() { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/c-link-to-rust-dylib/Makefile b/tests/run-make-fulldeps/c-link-to-rust-dylib/Makefile deleted file mode 100644 index 2a371b54541e522fcd5a579b29d3f89ff3ff1958..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-dylib/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -include ../tools.mk - -all: $(TMPDIR)/$(call BIN,bar) - $(call RUN,bar) - $(call REMOVE_DYLIBS,foo) - $(call FAIL,bar) - -ifdef IS_MSVC -$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo) - $(CC) bar.c $(TMPDIR)/foo.dll.lib $(call OUT_EXE,bar) -else -$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo) - $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) -L $(TMPDIR) -endif - -$(call DYLIB,foo): foo.rs - $(RUSTC) foo.rs diff --git a/tests/run-make-fulldeps/c-link-to-rust-dylib/bar.c b/tests/run-make-fulldeps/c-link-to-rust-dylib/bar.c deleted file mode 100644 index bb4036b06e13b79a32ec78ae04db97590f54b2cc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-dylib/bar.c +++ /dev/null @@ -1,6 +0,0 @@ -void foo(); - -int main() { - foo(); - return 0; -} diff --git a/tests/run-make-fulldeps/c-link-to-rust-dylib/foo.rs b/tests/run-make-fulldeps/c-link-to-rust-dylib/foo.rs deleted file mode 100644 index f197fa513345d49b3f28f5c75248392ba792283f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-dylib/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "dylib"] - -#[no_mangle] -pub extern "C" fn foo() {} diff --git a/tests/run-make-fulldeps/c-link-to-rust-staticlib/Makefile b/tests/run-make-fulldeps/c-link-to-rust-staticlib/Makefile deleted file mode 100644 index d38bcef309a76df82660fc344e60b0ad6bf54845..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-staticlib/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -# ignore-freebsd -# FIXME - -all: - $(RUSTC) foo.rs - $(CC) bar.c $(call STATICLIB,foo) $(call OUT_EXE,bar) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(call RUN,bar) - rm $(call STATICLIB,foo) - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/c-link-to-rust-staticlib/bar.c b/tests/run-make-fulldeps/c-link-to-rust-staticlib/bar.c deleted file mode 100644 index bb4036b06e13b79a32ec78ae04db97590f54b2cc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-staticlib/bar.c +++ /dev/null @@ -1,6 +0,0 @@ -void foo(); - -int main() { - foo(); - return 0; -} diff --git a/tests/run-make-fulldeps/c-link-to-rust-staticlib/foo.rs b/tests/run-make-fulldeps/c-link-to-rust-staticlib/foo.rs deleted file mode 100644 index 2e59432cdb16feca35d30166b94ab591a1568125..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-staticlib/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "staticlib"] - -#[no_mangle] -pub extern "C" fn foo() {} diff --git a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile b/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile deleted file mode 100644 index 9ce2a34e677b36e992b29a34dae80fb951ae49fe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) checkrust.rs - $(CC) test.c $(call STATICLIB,checkrust) $(call OUT_EXE,test) $(EXTRACFLAGS) - $(call RUN,test) diff --git a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/checkrust.rs b/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/checkrust.rs deleted file mode 100644 index 5830ef033d38990198300d15843d721b42b41d29..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/checkrust.rs +++ /dev/null @@ -1,148 +0,0 @@ -#![crate_type = "staticlib"] -#![feature(c_variadic)] -#![feature(rustc_private)] - -extern crate libc; - -use libc::{c_char, c_double, c_int, c_long, c_longlong}; -use std::ffi::VaList; -use std::ffi::{CString, CStr}; - -macro_rules! continue_if { - ($cond:expr) => { - if !($cond) { - return 0xff; - } - } -} - -unsafe fn compare_c_str(ptr: *const c_char, val: &str) -> bool { - let cstr0 = CStr::from_ptr(ptr); - match CString::new(val) { - Ok(cstr1) => &*cstr1 == cstr0, - Err(_) => false, - } -} - -#[no_mangle] -pub unsafe extern "C" fn check_list_0(mut ap: VaList) -> usize { - continue_if!(ap.arg::() == 1); - continue_if!(ap.arg::() == 2); - continue_if!(ap.arg::() == 3); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_list_1(mut ap: VaList) -> usize { - continue_if!(ap.arg::() == -1); - continue_if!(ap.arg::() == 'A' as c_char); - continue_if!(ap.arg::() == '4' as c_char); - continue_if!(ap.arg::() == ';' as c_char); - continue_if!(ap.arg::() == 0x32); - continue_if!(ap.arg::() == 0x10000001); - continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Valid!")); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_list_2(mut ap: VaList) -> usize { - continue_if!(ap.arg::().floor() == 3.14f64.floor()); - continue_if!(ap.arg::() == 12); - continue_if!(ap.arg::() == 'a' as c_char); - continue_if!(ap.arg::().floor() == 6.18f64.floor()); - continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Hello")); - continue_if!(ap.arg::() == 42); - continue_if!(compare_c_str(ap.arg::<*const c_char>(), "World")); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_list_copy_0(mut ap: VaList) -> usize { - continue_if!(ap.arg::().floor() == 6.28f64.floor()); - continue_if!(ap.arg::() == 16); - continue_if!(ap.arg::() == 'A' as c_char); - continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Skip Me!")); - ap.with_copy(|mut ap| { - if compare_c_str(ap.arg::<*const c_char>(), "Correct") { - 0 - } else { - 0xff - } - }) -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_0(_: c_int, mut ap: ...) -> usize { - continue_if!(ap.arg::() == 42); - continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Hello, World!")); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_1(_: c_int, mut ap: ...) -> usize { - continue_if!(ap.arg::().floor() == 3.14f64.floor()); - continue_if!(ap.arg::() == 12); - continue_if!(ap.arg::() == 'A' as c_char); - continue_if!(ap.arg::() == 1); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_2(_: c_int, _ap: ...) -> usize { - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_3(_: c_int, mut ap: ...) -> usize { - continue_if!(ap.arg::() == 1); - continue_if!(ap.arg::() == 2); - continue_if!(ap.arg::() == 3); - continue_if!(ap.arg::() == 4); - continue_if!(ap.arg::() == 5); - continue_if!(ap.arg::() == 6); - continue_if!(ap.arg::() == 7); - continue_if!(ap.arg::() == 8); - continue_if!(ap.arg::() == 9); - continue_if!(ap.arg::() == 10); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_4(_: c_double, mut ap: ...) -> usize { - continue_if!(ap.arg::() == 1.0); - continue_if!(ap.arg::() == 2.0); - continue_if!(ap.arg::() == 3.0); - continue_if!(ap.arg::() == 4.0); - continue_if!(ap.arg::() == 5.0); - continue_if!(ap.arg::() == 6.0); - continue_if!(ap.arg::() == 7.0); - continue_if!(ap.arg::() == 8.0); - continue_if!(ap.arg::() == 9.0); - continue_if!(ap.arg::() == 10.0); - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn check_varargs_5(_: c_int, mut ap: ...) -> usize { - continue_if!(ap.arg::() == 1.0); - continue_if!(ap.arg::() == 1); - continue_if!(ap.arg::() == 2.0); - continue_if!(ap.arg::() == 2); - continue_if!(ap.arg::() == 3.0); - continue_if!(ap.arg::() == 3); - continue_if!(ap.arg::() == 4.0); - continue_if!(ap.arg::() == 4); - continue_if!(ap.arg::() == 5); - continue_if!(ap.arg::() == 5.0); - continue_if!(ap.arg::() == 6); - continue_if!(ap.arg::() == 6.0); - continue_if!(ap.arg::() == 7); - continue_if!(ap.arg::() == 7.0); - continue_if!(ap.arg::() == 8); - continue_if!(ap.arg::() == 8.0); - continue_if!(ap.arg::() == 9); - continue_if!(ap.arg::() == 9.0); - continue_if!(ap.arg::() == 10); - continue_if!(ap.arg::() == 10.0); - 0 -} diff --git a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/test.c b/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/test.c deleted file mode 100644 index 5bdb51680a6562ec25d03597146de4bdf4cbb417..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-link-to-rust-va-list-fn/test.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include - -extern size_t check_list_0(va_list ap); -extern size_t check_list_1(va_list ap); -extern size_t check_list_2(va_list ap); -extern size_t check_list_copy_0(va_list ap); -extern size_t check_varargs_0(int fixed, ...); -extern size_t check_varargs_1(int fixed, ...); -extern size_t check_varargs_2(int fixed, ...); -extern size_t check_varargs_3(int fixed, ...); -extern size_t check_varargs_4(double fixed, ...); -extern size_t check_varargs_5(int fixed, ...); - -int test_rust(size_t (*fn)(va_list), ...) { - size_t ret = 0; - va_list ap; - va_start(ap, fn); - ret = fn(ap); - va_end(ap); - return ret; -} - -int main(int argc, char* argv[]) { - assert(test_rust(check_list_0, 0x01LL, 0x02, 0x03LL) == 0); - - assert(test_rust(check_list_1, -1, 'A', '4', ';', 0x32, 0x10000001, "Valid!") == 0); - - assert(test_rust(check_list_2, 3.14, 12l, 'a', 6.28, "Hello", 42, "World") == 0); - - assert(test_rust(check_list_copy_0, 6.28, 16, 'A', "Skip Me!", "Correct") == 0); - - assert(check_varargs_0(0, 42, "Hello, World!") == 0); - - assert(check_varargs_1(0, 3.14, 12l, 'A', 0x1LL) == 0); - - assert(check_varargs_2(0, "All", "of", "these", "are", "ignored", ".") == 0); - - assert(check_varargs_3(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) == 0); - - assert(check_varargs_4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0) == 0); - - assert(check_varargs_5(0, 1.0, 1, 2.0, 2, 3.0, 3, 4.0, 4, 5, 5.0, 6, 6.0, 7, 7.0, 8, 8.0, - 9, 9.0, 10, 10.0) == 0); - - return 0; -} diff --git a/tests/run-make-fulldeps/c-static-dylib/Makefile b/tests/run-make-fulldeps/c-static-dylib/Makefile deleted file mode 100644 index 5b78005e3ee35ea62bef352b6659853d7df73da2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-dylib/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,cfoo) - $(RUSTC) foo.rs -C prefer-dynamic - $(RUSTC) bar.rs - rm $(call NATIVE_STATICLIB,cfoo) - $(call RUN,bar) - $(call REMOVE_DYLIBS,foo) - $(call FAIL,bar) diff --git a/tests/run-make-fulldeps/c-static-dylib/bar.rs b/tests/run-make-fulldeps/c-static-dylib/bar.rs deleted file mode 100644 index b8c798ffdb4a99bbb9a5df89147fcfa12695a70e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-dylib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::rsfoo(); -} diff --git a/tests/run-make-fulldeps/c-static-dylib/cfoo.c b/tests/run-make-fulldeps/c-static-dylib/cfoo.c deleted file mode 100644 index 9fe07f82f9ed1495b13e4e4dcd2e092115b01b25..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-dylib/cfoo.c +++ /dev/null @@ -1 +0,0 @@ -int foo() { return 0; } diff --git a/tests/run-make-fulldeps/c-static-dylib/foo.rs b/tests/run-make-fulldeps/c-static-dylib/foo.rs deleted file mode 100644 index 1e8af4d44040b293cdef26346344bc960703329c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-dylib/foo.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "dylib"] - -#[link(name = "cfoo", kind = "static")] -extern "C" { - fn foo(); -} - -pub fn rsfoo() { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/c-static-rlib/Makefile b/tests/run-make-fulldeps/c-static-rlib/Makefile deleted file mode 100644 index 11a3cf1940c641148e9b6902d0fffd2cd2ad884f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-rlib/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,cfoo) - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(call REMOVE_RLIBS,foo) - rm $(call NATIVE_STATICLIB,cfoo) - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/c-static-rlib/bar.rs b/tests/run-make-fulldeps/c-static-rlib/bar.rs deleted file mode 100644 index b8c798ffdb4a99bbb9a5df89147fcfa12695a70e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-rlib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::rsfoo(); -} diff --git a/tests/run-make-fulldeps/c-static-rlib/cfoo.c b/tests/run-make-fulldeps/c-static-rlib/cfoo.c deleted file mode 100644 index 9fe07f82f9ed1495b13e4e4dcd2e092115b01b25..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-rlib/cfoo.c +++ /dev/null @@ -1 +0,0 @@ -int foo() { return 0; } diff --git a/tests/run-make-fulldeps/c-static-rlib/foo.rs b/tests/run-make-fulldeps/c-static-rlib/foo.rs deleted file mode 100644 index 9c6d2080ef4d37c990b060efd425bfed41eb13c9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-static-rlib/foo.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "cfoo", kind = "static")] -extern "C" { - fn foo(); -} - -pub fn rsfoo() { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/Makefile b/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/Makefile deleted file mode 100644 index 134f000d4535b2ca3b0ba3cb40c07b140ba757a0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -include ../tools.mk - -all: archive - # Compile `main.rs`, which will link into our library, and run it. - $(RUSTC) main.rs - $(call RUN,main) - -ifdef IS_MSVC -archive: add.o panic.o - # Now, create an archive using these two objects. - $(AR) crus $(TMPDIR)/add.lib $(TMPDIR)/add.o $(TMPDIR)/panic.o -else -archive: add.o panic.o - # Now, create an archive using these two objects. - $(AR) crus $(TMPDIR)/libadd.a $(TMPDIR)/add.o $(TMPDIR)/panic.o -endif - -# Compile `panic.rs` into an object file. -# -# Note that we invoke `rustc` directly, so we may emit an object rather -# than an archive. We'll do that later. -panic.o: - $(BARE_RUSTC) $(RUSTFLAGS) \ - --out-dir $(TMPDIR) \ - --emit=obj panic.rs - -# Compile `add.c` into an object file. -add.o: - $(call COMPILE_OBJ,$(TMPDIR)/add.o,add.c) - diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/add.c b/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/add.c deleted file mode 100644 index 444359451f6ecd0ff95756a737a0007e30414f53..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/add.c +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif - -// An external function, defined in Rust. -extern void panic_if_greater_than_10(unsigned x); - -unsigned add_small_numbers(unsigned a, unsigned b) { - unsigned c = a + b; - panic_if_greater_than_10(c); - return c; -} diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/main.rs b/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/main.rs deleted file mode 100644 index 78a71219c7811d5d74cd3018bf39387b645cb6f8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/main.rs +++ /dev/null @@ -1,35 +0,0 @@ -//! A test for calling `C-unwind` functions across foreign function boundaries. -//! -//! This test triggers a panic in a Rust library that our foreign function invokes. This shows -//! that we can unwind through the C code in that library, and catch the underlying panic. -#![feature(c_unwind)] - -use std::panic::{catch_unwind, AssertUnwindSafe}; - -fn main() { - // Call `add_small_numbers`, passing arguments that will NOT trigger a panic. - let (a, b) = (9, 1); - let c = unsafe { add_small_numbers(a, b) }; - assert_eq!(c, 10); - - // Call `add_small_numbers`, passing arguments that will trigger a panic, and catch it. - let caught_unwind = catch_unwind(AssertUnwindSafe(|| { - let (a, b) = (10, 1); - let _c = unsafe { add_small_numbers(a, b) }; - unreachable!("should have unwound instead of returned"); - })); - - // Assert that we did indeed panic, then unwrap and downcast the panic into the sum. - assert!(caught_unwind.is_err()); - let panic_obj = caught_unwind.unwrap_err(); - let msg = panic_obj.downcast_ref::().unwrap(); - assert_eq!(msg, "11"); -} - -#[link(name = "add", kind = "static")] -extern "C-unwind" { - /// An external function, defined in C. - /// - /// Returns the sum of two numbers, or panics if the sum is greater than 10. - fn add_small_numbers(a: u32, b: u32) -> u32; -} diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/panic.rs b/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/panic.rs deleted file mode 100644 index a99a04d5c6f4b1df2866279648bd87e709b68875..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-lib-panic/panic.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type = "staticlib"] -#![feature(c_unwind)] - -/// This function will panic if `x` is greater than 10. -/// -/// This function is called by `add_small_numbers`. -#[no_mangle] -pub extern "C-unwind" fn panic_if_greater_than_10(x: u32) { - if x > 10 { - panic!("{}", x); // That is too big! - } -} diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/Makefile b/tests/run-make-fulldeps/c-unwind-abi-catch-panic/Makefile deleted file mode 100644 index e93ec99da2a57fe0415d47ed0835d48c36201ae8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,add) - $(RUSTC) main.rs - $(call RUN,main) || exit 1 diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/add.c b/tests/run-make-fulldeps/c-unwind-abi-catch-panic/add.c deleted file mode 100644 index 444359451f6ecd0ff95756a737a0007e30414f53..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/add.c +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif - -// An external function, defined in Rust. -extern void panic_if_greater_than_10(unsigned x); - -unsigned add_small_numbers(unsigned a, unsigned b) { - unsigned c = a + b; - panic_if_greater_than_10(c); - return c; -} diff --git a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/main.rs b/tests/run-make-fulldeps/c-unwind-abi-catch-panic/main.rs deleted file mode 100644 index 15d38d72160583c407c2b82547021a1ed3585068..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/c-unwind-abi-catch-panic/main.rs +++ /dev/null @@ -1,44 +0,0 @@ -//! A test for calling `C-unwind` functions across foreign function boundaries. -//! -//! This test triggers a panic when calling a foreign function that calls *back* into Rust. -#![feature(c_unwind)] - -use std::panic::{catch_unwind, AssertUnwindSafe}; - -fn main() { - // Call `add_small_numbers`, passing arguments that will NOT trigger a panic. - let (a, b) = (9, 1); - let c = unsafe { add_small_numbers(a, b) }; - assert_eq!(c, 10); - - // Call `add_small_numbers`, passing arguments that will trigger a panic, and catch it. - let caught_unwind = catch_unwind(AssertUnwindSafe(|| { - let (a, b) = (10, 1); - let _c = unsafe { add_small_numbers(a, b) }; - unreachable!("should have unwound instead of returned"); - })); - - // Assert that we did indeed panic, then unwrap and downcast the panic into the sum. - assert!(caught_unwind.is_err()); - let panic_obj = caught_unwind.unwrap_err(); - let msg = panic_obj.downcast_ref::().unwrap(); - assert_eq!(msg, "11"); -} - -#[link(name = "add", kind = "static")] -extern "C-unwind" { - /// An external function, defined in C. - /// - /// Returns the sum of two numbers, or panics if the sum is greater than 10. - fn add_small_numbers(a: u32, b: u32) -> u32; -} - -/// This function will panic if `x` is greater than 10. -/// -/// This function is called by `add_small_numbers`. -#[no_mangle] -pub extern "C-unwind" fn panic_if_greater_than_10(x: u32) { - if x > 10 { - panic!("{}", x); // That is too big! - } -} diff --git a/tests/run-make-fulldeps/cat-and-grep-sanity-check/Makefile b/tests/run-make-fulldeps/cat-and-grep-sanity-check/Makefile deleted file mode 100644 index 82351e22009b2fdcb761171e606592927be6975c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cat-and-grep-sanity-check/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -include ../tools.mk - -all: - echo a | $(CGREP) a - ! echo b | $(CGREP) a - echo xyz | $(CGREP) x y z - ! echo abc | $(CGREP) b c d - printf "x\ny\nz" | $(CGREP) x y z - - echo AbCd | $(CGREP) -i a b C D - ! echo AbCd | $(CGREP) a b C D - - true | $(CGREP) -v nothing - ! echo nothing | $(CGREP) -v nothing - ! echo xyz | $(CGREP) -v w x y - ! echo xyz | $(CGREP) -v x y z - echo xyz | $(CGREP) -v a b c - - ! echo 'foo bar baz' | $(CGREP) 'foo baz' - echo 'foo bar baz' | $(CGREP) foo baz - echo 'x a `b` c y z' | $(CGREP) 'a `b` c' - - echo baaac | $(CGREP) -e 'ba*c' - echo bc | $(CGREP) -e 'ba*c' - ! echo aaac | $(CGREP) -e 'ba*c' - - echo aaa | $(CGREP) -e 'a+' - ! echo bbb | $(CGREP) -e 'a+' - - echo abc | $(CGREP) -e 'a|e|i|o|u' - ! echo fgh | $(CGREP) -e 'a|e|i|o|u' - echo abc | $(CGREP) -e '[aeiou]' - ! echo fgh | $(CGREP) -e '[aeiou]' - ! echo abc | $(CGREP) -e '[^aeiou]{3}' - echo fgh | $(CGREP) -e '[^aeiou]{3}' - echo ab cd ef gh | $(CGREP) -e '\bcd\b' - ! echo abcdefgh | $(CGREP) -e '\bcd\b' - echo xyz | $(CGREP) -e '...' - ! echo xy | $(CGREP) -e '...' - ! echo xyz | $(CGREP) -e '\.\.\.' - echo ... | $(CGREP) -e '\.\.\.' - - echo foo bar baz | $(CGREP) -e 'foo.*baz' - ! echo foo bar baz | $(CGREP) -ve 'foo.*baz' - ! echo foo bar baz | $(CGREP) -e 'baz.*foo' - echo foo bar baz | $(CGREP) -ve 'baz.*foo' diff --git a/tests/run-make-fulldeps/cdylib-dylib-linkage/Makefile b/tests/run-make-fulldeps/cdylib-dylib-linkage/Makefile deleted file mode 100644 index 5c9b2d1bb2f1e7fa2dd1647ded0cb9011850113b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-dylib-linkage/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -include ../tools.mk - -TARGET_SYSROOT := $(shell $(RUSTC) --print sysroot)/lib/rustlib/$(TARGET)/lib - -ifdef IS_MSVC -LIBSTD := $(wildcard $(TARGET_SYSROOT)/libstd-*.dll.lib) -else -LIBSTD := $(wildcard $(TARGET_SYSROOT)/$(call DYLIB_GLOB,std)) -STD := $(basename $(patsubst lib%,%, $(notdir $(LIBSTD)))) -endif - -all: $(call RUN_BINFILE,foo) - $(call RUN,foo) - -ifdef IS_MSVC -CLIBS := $(TMPDIR)/foo.dll.lib $(TMPDIR)/bar.dll.lib $(LIBSTD) -$(call RUN_BINFILE,foo): $(call DYLIB,foo) - $(CC) $(CFLAGS) foo.c $(CLIBS) $(call OUT_EXE,foo) -else -CLIBS := -lfoo -lbar -l$(STD) -L $(TMPDIR) -L $(TARGET_SYSROOT) -$(call RUN_BINFILE,foo): $(call DYLIB,foo) - $(CC) $(CFLAGS) foo.c $(CLIBS) -o $(call RUN_BINFILE,foo) -endif - -$(call DYLIB,foo): - $(RUSTC) -C prefer-dynamic bar.rs - $(RUSTC) foo.rs diff --git a/tests/run-make-fulldeps/cdylib-dylib-linkage/bar.rs b/tests/run-make-fulldeps/cdylib-dylib-linkage/bar.rs deleted file mode 100644 index b3a7539abaeffe6d4ac414f79e0448a582298b6d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-dylib-linkage/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "dylib"] - -pub fn bar() { - println!("hello!"); -} diff --git a/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.c b/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.c deleted file mode 100644 index 154f9682ef8f1dd678cdb5a3605a11cee1cb92bf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.c +++ /dev/null @@ -1,10 +0,0 @@ -#include - -extern void foo(); -extern unsigned bar(unsigned a, unsigned b); - -int main() { - foo(); - assert(bar(1, 2) == 3); - return 0; -} diff --git a/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.rs b/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.rs deleted file mode 100644 index c4069495aaff1670d9084e004844024f095c56b4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-dylib-linkage/foo.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![crate_type = "cdylib"] - -extern crate bar; - -#[no_mangle] -pub extern "C" fn foo() { - bar::bar(); -} - -#[no_mangle] -pub extern "C" fn bar(a: u32, b: u32) -> u32 { - a + b -} diff --git a/tests/run-make-fulldeps/cdylib-fewer-symbols/Makefile b/tests/run-make-fulldeps/cdylib-fewer-symbols/Makefile deleted file mode 100644 index 324791af8dee54a9515e94f9748c8934d9ac5021..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-fewer-symbols/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# Test that allocator-related symbols don't show up as exported from a cdylib as -# they're internal to Rust and not part of the public ABI. - -include ../tools.mk - -# ignore-windows -# FIXME: The __rdl_ and __rust_ symbol still remains, no matter using MSVC or GNU -# See https://github.com/rust-lang/rust/pull/46207#issuecomment-347561753 - -all: - $(RUSTC) foo.rs - nm -g "$(call DYLIB,foo)" | $(CGREP) -v __rdl_ __rde_ __rg_ __rust_ diff --git a/tests/run-make-fulldeps/cdylib-fewer-symbols/foo.rs b/tests/run-make-fulldeps/cdylib-fewer-symbols/foo.rs deleted file mode 100644 index af37bc8e9534d3cc5241224b6e07c80af86a4354..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib-fewer-symbols/foo.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "cdylib"] - -#[no_mangle] -pub extern "C" fn foo() -> u32 { - 3 -} diff --git a/tests/run-make-fulldeps/cdylib/Makefile b/tests/run-make-fulldeps/cdylib/Makefile deleted file mode 100644 index 47ec762b3e94c86ebceea79022d5dba0be923911..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -include ../tools.mk - -all: $(call RUN_BINFILE,foo) - $(call RUN,foo) - rm $(call DYLIB,foo) - $(RUSTC) foo.rs -C lto - $(call RUN,foo) - -ifdef IS_MSVC -$(call RUN_BINFILE,foo): $(call DYLIB,foo) - $(CC) $(CFLAGS) foo.c $(TMPDIR)/foo.dll.lib $(call OUT_EXE,foo) -else -$(call RUN_BINFILE,foo): $(call DYLIB,foo) - $(CC) $(CFLAGS) foo.c -lfoo -o $(call RUN_BINFILE,foo) -L $(TMPDIR) -endif - -$(call DYLIB,foo): - $(RUSTC) bar.rs - $(RUSTC) foo.rs diff --git a/tests/run-make-fulldeps/cdylib/bar.rs b/tests/run-make-fulldeps/cdylib/bar.rs deleted file mode 100644 index fe665abc7c1c13221d961cdda625aa31e68ee9ac..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "rlib"] - -pub fn bar() { - println!("hello!"); -} diff --git a/tests/run-make-fulldeps/cdylib/foo.c b/tests/run-make-fulldeps/cdylib/foo.c deleted file mode 100644 index 154f9682ef8f1dd678cdb5a3605a11cee1cb92bf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib/foo.c +++ /dev/null @@ -1,10 +0,0 @@ -#include - -extern void foo(); -extern unsigned bar(unsigned a, unsigned b); - -int main() { - foo(); - assert(bar(1, 2) == 3); - return 0; -} diff --git a/tests/run-make-fulldeps/cdylib/foo.rs b/tests/run-make-fulldeps/cdylib/foo.rs deleted file mode 100644 index c4069495aaff1670d9084e004844024f095c56b4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cdylib/foo.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![crate_type = "cdylib"] - -extern crate bar; - -#[no_mangle] -pub extern "C" fn foo() { - bar::bar(); -} - -#[no_mangle] -pub extern "C" fn bar(a: u32, b: u32) -> u32 { - a + b -} diff --git a/tests/run-make-fulldeps/codegen-options-parsing/Makefile b/tests/run-make-fulldeps/codegen-options-parsing/Makefile deleted file mode 100644 index b063593c9d97a9b0319c6ecb2b36c5a46ec36c68..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/codegen-options-parsing/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -include ../tools.mk - -all: - #Option taking a number - $(RUSTC) -C codegen-units dummy.rs 2>&1 | \ - $(CGREP) 'codegen option `codegen-units` requires a number' - $(RUSTC) -C codegen-units= dummy.rs 2>&1 | \ - $(CGREP) 'incorrect value `` for codegen option `codegen-units` - a number was expected' - $(RUSTC) -C codegen-units=foo dummy.rs 2>&1 | \ - $(CGREP) 'incorrect value `foo` for codegen option `codegen-units` - a number was expected' - $(RUSTC) -C codegen-units=1 dummy.rs - #Option taking a string - $(RUSTC) -C extra-filename dummy.rs 2>&1 | \ - $(CGREP) 'codegen option `extra-filename` requires a string' - $(RUSTC) -C extra-filename= dummy.rs 2>&1 - $(RUSTC) -C extra-filename=foo dummy.rs 2>&1 - #Option taking no argument - $(RUSTC) -C lto= dummy.rs 2>&1 | \ - $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' - $(RUSTC) -C lto=1 dummy.rs 2>&1 | \ - $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' - $(RUSTC) -C lto=foo dummy.rs 2>&1 | \ - $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' - $(RUSTC) -C lto dummy.rs - - # Should not link dead code... - $(RUSTC) --print link-args dummy.rs 2>&1 | \ - $(CGREP) -e '--gc-sections|-z[^ ]* [^ ]*|-dead_strip|/OPT:REF' - # ... unless you specifically ask to keep it - $(RUSTC) --print link-args -C link-dead-code dummy.rs 2>&1 | \ - $(CGREP) -ve '--gc-sections|-z[^ ]* [^ ]*|-dead_strip|/OPT:REF' diff --git a/tests/run-make-fulldeps/codegen-options-parsing/dummy.rs b/tests/run-make-fulldeps/codegen-options-parsing/dummy.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/codegen-options-parsing/dummy.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/compile-stdin/Makefile b/tests/run-make-fulldeps/compile-stdin/Makefile deleted file mode 100644 index be15548690fb51ba99a139502519971b50c8b146..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compile-stdin/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - echo 'fn main(){}' | $(RUSTC) - - $(call RUN,rust_out) diff --git a/tests/run-make-fulldeps/compiler-lookup-paths-2/Makefile b/tests/run-make-fulldeps/compiler-lookup-paths-2/Makefile deleted file mode 100644 index d4ff7d8daabf94af918b1e3e9041daca12beb016..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths-2/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - mkdir -p $(TMPDIR)/a $(TMPDIR)/b - $(RUSTC) a.rs && mv $(TMPDIR)/liba.rlib $(TMPDIR)/a - $(RUSTC) b.rs -L $(TMPDIR)/a && mv $(TMPDIR)/libb.rlib $(TMPDIR)/b - $(RUSTC) c.rs -L crate=$(TMPDIR)/b -L dependency=$(TMPDIR)/a \ - && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/compiler-lookup-paths-2/a.rs b/tests/run-make-fulldeps/compiler-lookup-paths-2/a.rs deleted file mode 100644 index 83be6e807e0b9bc42f55f3df77db7a1e99b3d93c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths-2/a.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/compiler-lookup-paths-2/b.rs b/tests/run-make-fulldeps/compiler-lookup-paths-2/b.rs deleted file mode 100644 index 1be6cbc919d0d6fd7992edd1948545e9b931ac69..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths-2/b.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -extern crate a; diff --git a/tests/run-make-fulldeps/compiler-lookup-paths-2/c.rs b/tests/run-make-fulldeps/compiler-lookup-paths-2/c.rs deleted file mode 100644 index e37bc2e1dcef1d1e83063c50dc1f0dbd9a6d5a45..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths-2/c.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "lib"] -extern crate b; -extern crate a; diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/Makefile b/tests/run-make-fulldeps/compiler-lookup-paths/Makefile deleted file mode 100644 index c16bf7af6c48d9c6152b252400b6b87bf2b43e62..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -include ../tools.mk - -all: $(TMPDIR)/libnative.a - mkdir -p $(TMPDIR)/crate - mkdir -p $(TMPDIR)/native - mv $(TMPDIR)/libnative.a $(TMPDIR)/native - $(RUSTC) a.rs - mv $(TMPDIR)/liba.rlib $(TMPDIR)/crate - $(RUSTC) b.rs -L native=$(TMPDIR)/crate && exit 1 || exit 0 - $(RUSTC) b.rs -L dependency=$(TMPDIR)/crate && exit 1 || exit 0 - $(RUSTC) b.rs -L crate=$(TMPDIR)/crate - $(RUSTC) b.rs -L all=$(TMPDIR)/crate - $(RUSTC) c.rs -L native=$(TMPDIR)/crate && exit 1 || exit 0 - $(RUSTC) c.rs -L crate=$(TMPDIR)/crate && exit 1 || exit 0 - $(RUSTC) c.rs -L dependency=$(TMPDIR)/crate - $(RUSTC) c.rs -L all=$(TMPDIR)/crate - $(RUSTC) d.rs -L dependency=$(TMPDIR)/native && exit 1 || exit 0 - $(RUSTC) d.rs -L crate=$(TMPDIR)/native && exit 1 || exit 0 - $(RUSTC) d.rs -L native=$(TMPDIR)/native - $(RUSTC) d.rs -L all=$(TMPDIR)/native - # Deduplication tests: - # Same hash, no errors. - mkdir -p $(TMPDIR)/e1 - mkdir -p $(TMPDIR)/e2 - $(RUSTC) e.rs -o $(TMPDIR)/e1/libe.rlib - $(RUSTC) e.rs -o $(TMPDIR)/e2/libe.rlib - $(RUSTC) f.rs -L $(TMPDIR)/e1 -L $(TMPDIR)/e2 - $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L $(TMPDIR)/e2 - $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 - # Different hash, errors. - $(RUSTC) e2.rs -o $(TMPDIR)/e2/libe.rlib - $(RUSTC) f.rs -L $(TMPDIR)/e1 -L $(TMPDIR)/e2 && exit 1 || exit 0 - $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L $(TMPDIR)/e2 && exit 1 || exit 0 - $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 && exit 1 || exit 0 - # Native/dependency paths don't cause errors. - $(RUSTC) f.rs -L native=$(TMPDIR)/e1 -L $(TMPDIR)/e2 - $(RUSTC) f.rs -L dependency=$(TMPDIR)/e1 -L $(TMPDIR)/e2 - $(RUSTC) f.rs -L dependency=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/a.rs b/tests/run-make-fulldeps/compiler-lookup-paths/a.rs deleted file mode 100644 index 83be6e807e0b9bc42f55f3df77db7a1e99b3d93c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/a.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/b.rs b/tests/run-make-fulldeps/compiler-lookup-paths/b.rs deleted file mode 100644 index 1be6cbc919d0d6fd7992edd1948545e9b931ac69..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/b.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -extern crate a; diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/c.rs b/tests/run-make-fulldeps/compiler-lookup-paths/c.rs deleted file mode 100644 index 4c7ce01b6a02c7a4ad8bf335d5c408c522bd3ec4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/c.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -extern crate b; diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/d.rs b/tests/run-make-fulldeps/compiler-lookup-paths/d.rs deleted file mode 100644 index 6cd9916b6f69d5c1a4d2d4b585f70aaf4a41a140..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/d.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "native", kind = "static")] -extern "C" {} diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/e.rs b/tests/run-make-fulldeps/compiler-lookup-paths/e.rs deleted file mode 100644 index 18eb60aca97d2b0b4b348f3e46395f383c55b5bf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/e.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_name = "e"] -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/e2.rs b/tests/run-make-fulldeps/compiler-lookup-paths/e2.rs deleted file mode 100644 index cbf08b98e7ea15704d2db29e14cede4a0e82f60f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/e2.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_name = "e"] -#![crate_type = "rlib"] - -pub fn f() {} diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/f.rs b/tests/run-make-fulldeps/compiler-lookup-paths/f.rs deleted file mode 100644 index 483deaaea4927d131c3a4c52e0c57e8aa83e191f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/f.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "rlib"] -extern crate e; diff --git a/tests/run-make-fulldeps/compiler-lookup-paths/native.c b/tests/run-make-fulldeps/compiler-lookup-paths/native.c deleted file mode 100644 index d11c69f812a8dfe9ea3db2474363c188c096c5b3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-lookup-paths/native.c +++ /dev/null @@ -1 +0,0 @@ -// intentionally empty diff --git a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/Makefile b/tests/run-make-fulldeps/compiler-rt-works-on-mingw/Makefile deleted file mode 100644 index 74917570a01425bd1790e766a1e215b25cb3e47b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# only-windows-gnu - -all: - $(CXX) foo.cpp -c -o $(TMPDIR)/foo.o - $(AR) crus $(TMPDIR)/libfoo.a $(TMPDIR)/foo.o - $(RUSTC) foo.rs -lfoo -lstdc++ - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.cpp b/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.cpp deleted file mode 100644 index 4c2fb9cdb8782b69d62487cd9f27db134cf2592f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.cpp +++ /dev/null @@ -1,4 +0,0 @@ -extern "C" void foo() { - int *a = new int(3); - delete a; -} diff --git a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.rs b/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.rs deleted file mode 100644 index 7fdb815887118bce354981132c94de3d3283d71a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/compiler-rt-works-on-mingw/foo.rs +++ /dev/null @@ -1,10 +0,0 @@ -extern "C" { - fn foo(); -} - -pub fn main() { - unsafe { - foo(); - } - assert_eq!(7f32.powi(3), 343f32); -} diff --git a/tests/run-make-fulldeps/core-no-fp-fmt-parse/Makefile b/tests/run-make-fulldeps/core-no-fp-fmt-parse/Makefile deleted file mode 100644 index 837664d92b93842daf3707f07427cc641c77c41c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/core-no-fp-fmt-parse/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/core/src/lib.rs --cfg no_fp_fmt_parse diff --git a/tests/run-make-fulldeps/crate-data-smoke/Makefile b/tests/run-make-fulldeps/crate-data-smoke/Makefile deleted file mode 100644 index a453f65ff3ea24646f76f96f58fd015890e386e1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-data-smoke/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: - [ `$(RUSTC) --print crate-name crate.rs` = "foo" ] - [ `$(RUSTC) --print file-names crate.rs` = "$(call BIN,foo)" ] - [ `$(RUSTC) --print file-names --crate-type=lib \ - --test crate.rs` = "$(call BIN,foo)" ] - [ `$(RUSTC) --print file-names --test lib.rs` = "$(call BIN,mylib)" ] - $(RUSTC) --print file-names lib.rs - $(RUSTC) --print file-names rlib.rs diff --git a/tests/run-make-fulldeps/crate-data-smoke/crate.rs b/tests/run-make-fulldeps/crate-data-smoke/crate.rs deleted file mode 100644 index a48a6f51c423466c7018c7af294cb19bdcf1b246..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-data-smoke/crate.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_name = "foo"] - -// Querying about the crate metadata should *not* parse the entire crate, it -// only needs the crate attributes (which are guaranteed to be at the top) be -// sure that if we have an error like a missing module that we can still query -// about the crate id. -mod error; diff --git a/tests/run-make-fulldeps/crate-data-smoke/lib.rs b/tests/run-make-fulldeps/crate-data-smoke/lib.rs deleted file mode 100644 index 8002f11ec871ba8d82eb650b3ac7bd1c8bdca78e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-data-smoke/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_name = "mylib"] -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/crate-data-smoke/rlib.rs b/tests/run-make-fulldeps/crate-data-smoke/rlib.rs deleted file mode 100644 index 47fcce4a7f67c176a4ca25c73583b38f016ed28f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-data-smoke/rlib.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_name = "mylib"] -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/crate-hash-rustc-version/Makefile b/tests/run-make-fulldeps/crate-hash-rustc-version/Makefile deleted file mode 100644 index 4f25a865ebd1f0251a5b124b14d3bf2ba5831c28..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-hash-rustc-version/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -# Ensure that crates compiled with different rustc versions cannot -# be dynamically linked. - -FLAGS := -Cprefer-dynamic -Zsymbol-mangling-version=v0 -UNAME := $(shell uname) -ifeq ($(UNAME),Linux) - EXT=".so" - NM_CMD := nm -D -endif -ifeq ($(UNAME),Darwin) - EXT=".dylib" - NM_CMD := nm -endif - -ifndef NM_CMD -all: - exit 0 -else -all: - # a.rs is a dylib - $(RUSTC) a.rs --crate-type=dylib $(FLAGS) - # Write symbols to disk. - $(NM_CMD) $(call DYLIB,a) > $(TMPDIR)/symbolsbefore - # b.rs is a binary - $(RUSTC) b.rs --extern a=$(TMPDIR)/liba$(EXT) --crate-type=bin -Crpath $(FLAGS) - $(call RUN,b) - # Now re-compile a.rs with another rustc version - RUSTC_FORCE_RUSTC_VERSION=deadfeed $(RUSTC) a.rs --crate-type=dylib $(FLAGS) - # After compiling with a different rustc version, write symbols to disk again. - $(NM_CMD) $(call DYLIB,a) > $(TMPDIR)/symbolsafter - # As a sanity check, test if the symbols changed: - # If the symbols are identical, there's been an error. - if diff $(TMPDIR)/symbolsbefore $(TMPDIR)/symbolsafter; then exit 1; fi - $(call FAIL,b) -endif diff --git a/tests/run-make-fulldeps/crate-hash-rustc-version/a.rs b/tests/run-make-fulldeps/crate-hash-rustc-version/a.rs deleted file mode 100644 index d65b5ce8e88316052d5847e7bae8e2cbb8253ebb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-hash-rustc-version/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub fn foo(mut x: String) -> String { - x.push_str(", world!"); - x -} diff --git a/tests/run-make-fulldeps/crate-hash-rustc-version/b.rs b/tests/run-make-fulldeps/crate-hash-rustc-version/b.rs deleted file mode 100644 index 316ac26e73fa2fefa2e953fb9b1a4310285bf6ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-hash-rustc-version/b.rs +++ /dev/null @@ -1,8 +0,0 @@ -extern crate a; - -use a::foo; - -fn main() { - let x = String::from("Hello"); - println!("{}", foo(x)); -} diff --git a/tests/run-make-fulldeps/crate-name-priority/Makefile b/tests/run-make-fulldeps/crate-name-priority/Makefile deleted file mode 100644 index 08a07c325e3102ded9ea45152ef818486271882b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-name-priority/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --crate-name bar - rm $(TMPDIR)/$(call BIN,bar) - $(RUSTC) foo1.rs - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo1.rs -o $(TMPDIR)/$(call BIN,bar1) - rm $(TMPDIR)/$(call BIN,bar1) diff --git a/tests/run-make-fulldeps/crate-name-priority/foo.rs b/tests/run-make-fulldeps/crate-name-priority/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-name-priority/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/crate-name-priority/foo1.rs b/tests/run-make-fulldeps/crate-name-priority/foo1.rs deleted file mode 100644 index 4ff3bd9516bd90de187b1ed7d4f1ac5ffb72cd5c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/crate-name-priority/foo1.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_name = "foo"] - -fn main() {} diff --git a/tests/run-make-fulldeps/cross-lang-lto-clang/Makefile b/tests/run-make-fulldeps/cross-lang-lto-clang/Makefile deleted file mode 100644 index acaebf439d65b5497f553772b8cadeb1ae955f5d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-clang/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# needs-matching-clang - -# This test makes sure that cross-language inlining actually works by checking -# the generated machine code. - -include ../tools.mk - -all: cpp-executable rust-executable - -cpp-executable: - $(RUSTC) -Clinker-plugin-lto=on -o $(TMPDIR)/librustlib-xlto.a -Copt-level=2 -Ccodegen-units=1 ./rustlib.rs - $(CLANG) -flto=thin -fuse-ld=lld -L $(TMPDIR) -lrustlib-xlto -o $(TMPDIR)/cmain ./cmain.c -O3 - # Make sure we don't find a call instruction to the function we expect to - # always be inlined. - "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/cmain | $(CGREP) -v -e "call.*rust_always_inlined" - # As a sanity check, make sure we do find a call instruction to a - # non-inlined function - "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/cmain | $(CGREP) -e "call.*rust_never_inlined" - -rust-executable: - $(CLANG) ./clib.c -flto=thin -c -o $(TMPDIR)/clib.o -O2 - (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) - $(RUSTC) -Clinker-plugin-lto=on -L$(TMPDIR) -Copt-level=2 -Clinker=$(CLANG) -Clink-arg=-fuse-ld=lld ./main.rs -o $(TMPDIR)/rsmain - "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -e "call.*c_never_inlined" - "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -v -e "call.*c_always_inlined" diff --git a/tests/run-make-fulldeps/cross-lang-lto-clang/clib.c b/tests/run-make-fulldeps/cross-lang-lto-clang/clib.c deleted file mode 100644 index 90f33f24dc42425b38b394c08354c4ef3ecd9d9a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-clang/clib.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -uint32_t c_always_inlined() { - return 1234; -} - -__attribute__((noinline)) uint32_t c_never_inlined() { - return 12345; -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-clang/cmain.c b/tests/run-make-fulldeps/cross-lang-lto-clang/cmain.c deleted file mode 100644 index e62a40117ce83a036da2becf0e4e3b55dc6ab2d9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-clang/cmain.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -// A trivial function defined in Rust, returning a constant value. This should -// always be inlined. -uint32_t rust_always_inlined(); - - -uint32_t rust_never_inlined(); - -int main(int argc, char** argv) { - return rust_never_inlined() + rust_always_inlined(); -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-clang/main.rs b/tests/run-make-fulldeps/cross-lang-lto-clang/main.rs deleted file mode 100644 index 8129dcb85d96a0442f390f86a63154f3ff580377..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-clang/main.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[link(name = "xyz")] -extern "C" { - fn c_always_inlined() -> u32; - fn c_never_inlined() -> u32; -} - -fn main() { - unsafe { - println!("blub: {}", c_always_inlined() + c_never_inlined()); - } -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-clang/rustlib.rs b/tests/run-make-fulldeps/cross-lang-lto-clang/rustlib.rs deleted file mode 100644 index 8a74d74a420bd556056268d427ca26493d02f447..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-clang/rustlib.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type="staticlib"] - -#[no_mangle] -pub extern "C" fn rust_always_inlined() -> u32 { - 42 -} - -#[no_mangle] -#[inline(never)] -pub extern "C" fn rust_never_inlined() -> u32 { - 421 -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/Makefile b/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/Makefile deleted file mode 100644 index 70085d9bde1d9a3e1c0422a0f0f9e246e5763af5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/Makefile +++ /dev/null @@ -1,87 +0,0 @@ -# needs-matching-clang - -# This test makes sure that cross-language inlining can be used in conjunction -# with profile-guided optimization. The test only tests that the whole workflow -# can be executed without anything crashing. It does not test whether PGO or -# xLTO have any specific effect on the generated code. - -include ../tools.mk - -COMMON_FLAGS=-Copt-level=3 -Ccodegen-units=1 - -# LLVM doesn't support instrumenting binaries that use SEH: -# https://bugs.llvm.org/show_bug.cgi?id=41279 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMMON_FLAGS+= -Cpanic=abort -endif - -all: cpp-executable rust-executable - -cpp-executable: - $(RUSTC) -Clinker-plugin-lto=on \ - -Cprofile-generate="$(TMPDIR)"/cpp-profdata \ - -o "$(TMPDIR)"/librustlib-xlto.a \ - $(COMMON_FLAGS) \ - ./rustlib.rs - $(CLANG) -flto=thin \ - -fprofile-generate="$(TMPDIR)"/cpp-profdata \ - -fuse-ld=lld \ - -L "$(TMPDIR)" \ - -lrustlib-xlto \ - -o "$(TMPDIR)"/cmain \ - -O3 \ - ./cmain.c - $(TMPDIR)/cmain - # Postprocess the profiling data so it can be used by the compiler - "$(LLVM_BIN_DIR)"/llvm-profdata merge \ - -o "$(TMPDIR)"/cpp-profdata/merged.profdata \ - "$(TMPDIR)"/cpp-profdata/default_*.profraw - $(RUSTC) -Clinker-plugin-lto=on \ - -Cprofile-use="$(TMPDIR)"/cpp-profdata/merged.profdata \ - -o "$(TMPDIR)"/librustlib-xlto.a \ - $(COMMON_FLAGS) \ - ./rustlib.rs - $(CLANG) -flto=thin \ - -fprofile-use="$(TMPDIR)"/cpp-profdata/merged.profdata \ - -fuse-ld=lld \ - -L "$(TMPDIR)" \ - -lrustlib-xlto \ - -o "$(TMPDIR)"/cmain \ - -O3 \ - ./cmain.c - -rust-executable: - exit - $(CLANG) ./clib.c -fprofile-generate="$(TMPDIR)"/rs-profdata -flto=thin -c -o $(TMPDIR)/clib.o -O3 - (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) - $(RUSTC) -Clinker-plugin-lto=on \ - -Cprofile-generate="$(TMPDIR)"/rs-profdata \ - -L$(TMPDIR) \ - $(COMMON_FLAGS) \ - -Clinker=$(CLANG) \ - -Clink-arg=-fuse-ld=lld \ - -o $(TMPDIR)/rsmain \ - ./main.rs - $(TMPDIR)/rsmain - # Postprocess the profiling data so it can be used by the compiler - "$(LLVM_BIN_DIR)"/llvm-profdata merge \ - -o "$(TMPDIR)"/rs-profdata/merged.profdata \ - "$(TMPDIR)"/rs-profdata/default_*.profraw - $(CLANG) ./clib.c \ - -fprofile-use="$(TMPDIR)"/rs-profdata/merged.profdata \ - -flto=thin \ - -c \ - -o $(TMPDIR)/clib.o \ - -O3 - rm "$(TMPDIR)"/libxyz.a - (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) - $(RUSTC) -Clinker-plugin-lto=on \ - -Cprofile-use="$(TMPDIR)"/rs-profdata/merged.profdata \ - -L$(TMPDIR) \ - $(COMMON_FLAGS) \ - -Clinker=$(CLANG) \ - -Clink-arg=-fuse-ld=lld \ - -o $(TMPDIR)/rsmain \ - ./main.rs diff --git a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/clib.c b/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/clib.c deleted file mode 100644 index 90f33f24dc42425b38b394c08354c4ef3ecd9d9a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/clib.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -uint32_t c_always_inlined() { - return 1234; -} - -__attribute__((noinline)) uint32_t c_never_inlined() { - return 12345; -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/cmain.c b/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/cmain.c deleted file mode 100644 index e3f24828be371c3828bece6ed9ad0b58715be781..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/cmain.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -// A trivial function defined in Rust, returning a constant value. This should -// always be inlined. -uint32_t rust_always_inlined(); - - -uint32_t rust_never_inlined(); - -int main(int argc, char** argv) { - return (rust_never_inlined() + rust_always_inlined()) * 0; -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/main.rs b/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/main.rs deleted file mode 100644 index 8129dcb85d96a0442f390f86a63154f3ff580377..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/main.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[link(name = "xyz")] -extern "C" { - fn c_always_inlined() -> u32; - fn c_never_inlined() -> u32; -} - -fn main() { - unsafe { - println!("blub: {}", c_always_inlined() + c_never_inlined()); - } -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/rustlib.rs b/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/rustlib.rs deleted file mode 100644 index 8a74d74a420bd556056268d427ca26493d02f447..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-pgo-smoketest/rustlib.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type="staticlib"] - -#[no_mangle] -pub extern "C" fn rust_always_inlined() -> u32 { - 42 -} - -#[no_mangle] -#[inline(never)] -pub extern "C" fn rust_never_inlined() -> u32 { - 421 -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile b/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile deleted file mode 100644 index 6f1caa31a8061a5d7455b22b6764b67c36674da6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -include ../tools.mk - -# ignore windows due to libLLVM being present in PATH and the PATH and library path being the same -# (so fixing it is harder). See #57765 for context -ifndef IS_WINDOWS - -# This test makes sure that we don't loose upstream object files when compiling -# staticlibs with -C linker-plugin-lto - -all: staticlib.rs upstream.rs - $(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1 - - # Check No LTO - $(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -L. -o $(TMPDIR)/staticlib.a - (cd $(TMPDIR); "$(LLVM_BIN_DIR)"/llvm-ar x ./staticlib.a) - # Make sure the upstream object file was included - ls $(TMPDIR)/upstream.*.rcgu.o - - # Cleanup - rm $(TMPDIR)/* - - # Check ThinLTO - $(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin - $(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin -L. -o $(TMPDIR)/staticlib.a - (cd $(TMPDIR); "$(LLVM_BIN_DIR)"/llvm-ar x ./staticlib.a) - ls $(TMPDIR)/upstream.*.rcgu.o - -else - -all: - -endif diff --git a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs b/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs deleted file mode 100644 index 34951dda3b6ec0236d96b401aba1d20850331ff9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/staticlib.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type="staticlib"] - -extern crate upstream; - -#[no_mangle] -pub extern "C" fn bar() { - upstream::foo(); -} diff --git a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs b/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs deleted file mode 100644 index bd6820098eea436cb272676f18774e67d5ea4ecb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto-upstream-rlibs/upstream.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "rlib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/cross-lang-lto/Makefile b/tests/run-make-fulldeps/cross-lang-lto/Makefile deleted file mode 100644 index 92058f952a9fcaeaf509d60dea1fa7c88c665da6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto/Makefile +++ /dev/null @@ -1,57 +0,0 @@ - -include ../tools.mk - -# ignore windows due to libLLVM being present in PATH and the PATH and library path being the same -# (so fixing it is harder). See #57765 for context -ifndef IS_WINDOWS - -# This test makes sure that the object files we generate are actually -# LLVM bitcode files (as used by linker LTO plugins) when compiling with -# -Clinker-plugin-lto. - -# this only succeeds for bitcode files -ASSERT_IS_BITCODE_OBJ=("$(LLVM_BIN_DIR)"/llvm-bcanalyzer $(1)) -EXTRACT_OBJS=(cd $(TMPDIR); rm -f ./*.o; "$(LLVM_BIN_DIR)"/llvm-ar x $(1)) - -BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1 -BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1 --emit=obj - -all: staticlib staticlib-fat-lto staticlib-thin-lto rlib exe cdylib rdylib - -staticlib: lib.rs - $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib.a - $(call EXTRACT_OBJS, liblib.a) - for file in $(TMPDIR)/liblib.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done - -staticlib-fat-lto: lib.rs - $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-fat-lto.a -Clto=fat - $(call EXTRACT_OBJS, liblib-fat-lto.a) - for file in $(TMPDIR)/liblib-fat-lto.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done - -staticlib-thin-lto: lib.rs - $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-thin-lto.a -Clto=thin - $(call EXTRACT_OBJS, liblib-thin-lto.a) - for file in $(TMPDIR)/liblib-thin-lto.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done - -rlib: lib.rs - $(BUILD_LIB) --crate-type=rlib -o $(TMPDIR)/liblib.rlib - $(call EXTRACT_OBJS, liblib.rlib) - for file in $(TMPDIR)/liblib.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done - -cdylib: lib.rs - $(BUILD_LIB) --crate-type=cdylib --emit=obj -o $(TMPDIR)/cdylib.o - $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/cdylib.o) - -rdylib: lib.rs - $(BUILD_LIB) --crate-type=dylib --emit=obj -o $(TMPDIR)/rdylib.o - $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/rdylib.o) - -exe: lib.rs - $(BUILD_EXE) -o $(TMPDIR)/exe.o - $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/exe.o) - -else - -all: - -endif diff --git a/tests/run-make-fulldeps/cross-lang-lto/lib.rs b/tests/run-make-fulldeps/cross-lang-lto/lib.rs deleted file mode 100644 index 94cfef6ada521c91aae49b732a80c174cfc46580..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[no_mangle] -pub extern "C" fn foo() { - println!("abc"); -} diff --git a/tests/run-make-fulldeps/cross-lang-lto/main.rs b/tests/run-make-fulldeps/cross-lang-lto/main.rs deleted file mode 100644 index f6320bcb04aa8f747f266e1105886837414fd921..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/cross-lang-lto/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello World"); -} diff --git a/tests/run-make-fulldeps/debug-assertions/Makefile b/tests/run-make-fulldeps/debug-assertions/Makefile deleted file mode 100644 index 73beb4b03ae10281bbf5ef5bdb3a62fe5d3eebc6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/debug-assertions/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) debug.rs -C debug-assertions=no - $(call RUN,debug) good - $(RUSTC) debug.rs -C opt-level=0 - $(call RUN,debug) bad - $(RUSTC) debug.rs -C opt-level=1 - $(call RUN,debug) good - $(RUSTC) debug.rs -C opt-level=2 - $(call RUN,debug) good - $(RUSTC) debug.rs -C opt-level=3 - $(call RUN,debug) good - $(RUSTC) debug.rs -C opt-level=s - $(call RUN,debug) good - $(RUSTC) debug.rs -C opt-level=z - $(call RUN,debug) good - $(RUSTC) debug.rs -O - $(call RUN,debug) good - $(RUSTC) debug.rs - $(call RUN,debug) bad - $(RUSTC) debug.rs -C debug-assertions=yes -O - $(call RUN,debug) bad - $(RUSTC) debug.rs -C debug-assertions=yes -C opt-level=1 - $(call RUN,debug) bad diff --git a/tests/run-make-fulldeps/debug-assertions/debug.rs b/tests/run-make-fulldeps/debug-assertions/debug.rs deleted file mode 100644 index 76ca60a71c8853e03c23809c15c5a59699c201e4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/debug-assertions/debug.rs +++ /dev/null @@ -1,33 +0,0 @@ -#![feature(rustc_attrs)] -#![deny(warnings)] - -use std::env; -use std::thread; - -fn main() { - let should_fail = env::args().nth(1) == Some("bad".to_string()); - - assert_eq!(thread::spawn(debug_assert_eq).join().is_err(), should_fail); - assert_eq!(thread::spawn(debug_assert).join().is_err(), should_fail); - assert_eq!(thread::spawn(overflow).join().is_err(), should_fail); -} - -fn debug_assert_eq() { - let mut hit1 = false; - let mut hit2 = false; - debug_assert_eq!({ hit1 = true; 1 }, { hit2 = true; 2 }); - assert!(!hit1); - assert!(!hit2); -} - -fn debug_assert() { - let mut hit = false; - debug_assert!({ hit = true; false }); - assert!(!hit); -} - -fn overflow() { - fn add(a: u8, b: u8) -> u8 { a + b } - - add(200u8, 200u8); -} diff --git a/tests/run-make-fulldeps/dep-info-doesnt-run-much/Makefile b/tests/run-make-fulldeps/dep-info-doesnt-run-much/Makefile deleted file mode 100644 index b4dc44ad2be84bb0ca45684a418fcf36fdd05a56..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-doesnt-run-much/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs --emit dep-info diff --git a/tests/run-make-fulldeps/dep-info-doesnt-run-much/foo.rs b/tests/run-make-fulldeps/dep-info-doesnt-run-much/foo.rs deleted file mode 100644 index 316e681293efdf376b6925c2a31e33d791ebff3b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-doesnt-run-much/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -// We're only emitting dep info, so we shouldn't be running static analysis to -// figure out that this program is erroneous. -fn main() { - let a: u8 = "a"; -} diff --git a/tests/run-make-fulldeps/dep-info-spaces/Makefile b/tests/run-make-fulldeps/dep-info-spaces/Makefile deleted file mode 100644 index 0cfe513e490a78c73c6b9e20473b9430a19cac65..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-spaces/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -include ../tools.mk - -# ignore-windows -# ignore-freebsd -# FIXME: (windows: see `../dep-info/Makefile`) - -all: - cp lib.rs $(TMPDIR)/ - cp 'foo foo.rs' $(TMPDIR)/ - cp bar.rs $(TMPDIR)/ - $(RUSTC) --emit link,dep-info --crate-type=lib $(TMPDIR)/lib.rs - sleep 1 - touch $(TMPDIR)/'foo foo.rs' - -rm -f $(TMPDIR)/done - $(MAKE) -drf Makefile.foo - rm $(TMPDIR)/done - pwd - $(MAKE) -drf Makefile.foo - rm $(TMPDIR)/done && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/dep-info-spaces/Makefile.foo b/tests/run-make-fulldeps/dep-info-spaces/Makefile.foo deleted file mode 100644 index 80a5d4333cdc22f4d4766c3a0a0291c232b6d55a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-spaces/Makefile.foo +++ /dev/null @@ -1,7 +0,0 @@ -LIB := $(shell $(RUSTC) --print file-names --crate-type=lib $(TMPDIR)/lib.rs) - -$(TMPDIR)/$(LIB): - $(RUSTC) --emit link,dep-info --crate-type=lib $(TMPDIR)/lib.rs - touch $(TMPDIR)/done - --include $(TMPDIR)/lib.d diff --git a/tests/run-make-fulldeps/dep-info-spaces/bar.rs b/tests/run-make-fulldeps/dep-info-spaces/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-spaces/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/dep-info-spaces/foo foo.rs b/tests/run-make-fulldeps/dep-info-spaces/foo foo.rs deleted file mode 100644 index b76b4321d62aa8e066b24d213c79ccc8230b8d7b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-spaces/foo foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn foo() {} diff --git a/tests/run-make-fulldeps/dep-info-spaces/lib.rs b/tests/run-make-fulldeps/dep-info-spaces/lib.rs deleted file mode 100644 index 6264e7b67ec6d7033092b48c40663c8536c3be9b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info-spaces/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[path="foo foo.rs"] -pub mod foo; - -pub mod bar; diff --git a/tests/run-make-fulldeps/dep-info/Makefile b/tests/run-make-fulldeps/dep-info/Makefile deleted file mode 100644 index c76f43a8eed5143fae1e08994dead7703e2c4cd0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -include ../tools.mk - -# ignore-windows -# ignore-freebsd -# FIXME: on windows `rustc --dep-info` produces Makefile dependency with -# windows native paths (e.g. `c:\path\to\libfoo.a`) -# but msys make seems to fail to recognize such paths, so test fails. - -all: - cp *.rs $(TMPDIR) - $(RUSTC) --emit dep-info,link --crate-type=lib $(TMPDIR)/lib.rs - sleep 2 - touch $(TMPDIR)/foo.rs - -rm -f $(TMPDIR)/done - $(MAKE) -drf Makefile.foo - sleep 2 - rm $(TMPDIR)/done - pwd - $(MAKE) -drf Makefile.foo - rm $(TMPDIR)/done && exit 1 || exit 0 - - # When a source file is deleted `make` should still work - rm $(TMPDIR)/bar.rs - cp $(TMPDIR)/lib2.rs $(TMPDIR)/lib.rs - $(MAKE) -drf Makefile.foo diff --git a/tests/run-make-fulldeps/dep-info/Makefile.foo b/tests/run-make-fulldeps/dep-info/Makefile.foo deleted file mode 100644 index e5df31f88c1e155a452f0baa34733870d8e7fdc1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/Makefile.foo +++ /dev/null @@ -1,7 +0,0 @@ -LIB := $(shell $(RUSTC) --print file-names --crate-type=lib lib.rs) - -$(TMPDIR)/$(LIB): - $(RUSTC) --emit dep-info,link --crate-type=lib lib.rs - touch $(TMPDIR)/done - --include $(TMPDIR)/foo.d diff --git a/tests/run-make-fulldeps/dep-info/bar.rs b/tests/run-make-fulldeps/dep-info/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/dep-info/foo.rs b/tests/run-make-fulldeps/dep-info/foo.rs deleted file mode 100644 index b76b4321d62aa8e066b24d213c79ccc8230b8d7b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn foo() {} diff --git a/tests/run-make-fulldeps/dep-info/lib.rs b/tests/run-make-fulldeps/dep-info/lib.rs deleted file mode 100644 index eb8631259d43d4e5828b91c7349e0e22986a4a92..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_name = "foo"] - -pub mod foo; -pub mod bar; diff --git a/tests/run-make-fulldeps/dep-info/lib2.rs b/tests/run-make-fulldeps/dep-info/lib2.rs deleted file mode 100644 index f4fda9c93c5ffdf1c0251e3180751d9c964afca2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dep-info/lib2.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_name = "foo"] - -pub mod foo; diff --git a/tests/run-make-fulldeps/doctests-keep-binaries/Makefile b/tests/run-make-fulldeps/doctests-keep-binaries/Makefile deleted file mode 100644 index 273c8980b02242d80332e582bd6943beafef31fe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/doctests-keep-binaries/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -# Check that valid binaries are persisted by running them, regardless of whether the --run or --no-run option is used. - -all: run no_run - -run: - mkdir -p $(TMPDIR)/doctests - $(RUSTC) --crate-type rlib t.rs - $(RUSTDOC) -Zunstable-options --test --persist-doctests $(TMPDIR)/doctests --extern t=$(TMPDIR)/libt.rlib t.rs - $(TMPDIR)/doctests/t_rs_2_0/rust_out - $(TMPDIR)/doctests/t_rs_8_0/rust_out - rm -rf $(TMPDIR)/doctests - -no_run: - mkdir -p $(TMPDIR)/doctests - $(RUSTC) --crate-type rlib t.rs - $(RUSTDOC) -Zunstable-options --test --persist-doctests $(TMPDIR)/doctests --extern t=$(TMPDIR)/libt.rlib t.rs --no-run - $(TMPDIR)/doctests/t_rs_2_0/rust_out - $(TMPDIR)/doctests/t_rs_8_0/rust_out - rm -rf $(TMPDIR)/doctests diff --git a/tests/run-make-fulldeps/doctests-keep-binaries/t.rs b/tests/run-make-fulldeps/doctests-keep-binaries/t.rs deleted file mode 100644 index c38cf0a0b25d4020b3a61cb10e759846c2dc2d24..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/doctests-keep-binaries/t.rs +++ /dev/null @@ -1,11 +0,0 @@ -/// Fungle the foople. -/// ``` -/// t::foople(); -/// ``` -pub fn foople() {} - -/// Flomble the florp -/// ``` -/// t::florp(); -/// ``` -pub fn florp() {} diff --git a/tests/run-make-fulldeps/duplicate-output-flavors/Makefile b/tests/run-make-fulldeps/duplicate-output-flavors/Makefile deleted file mode 100644 index e33279966c97187be0c905c72e015b60c66345ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/duplicate-output-flavors/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=rlib,rlib foo.rs diff --git a/tests/run-make-fulldeps/duplicate-output-flavors/foo.rs b/tests/run-make-fulldeps/duplicate-output-flavors/foo.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/duplicate-output-flavors/foo.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/dylib-chain/Makefile b/tests/run-make-fulldeps/dylib-chain/Makefile deleted file mode 100644 index 1139822f4ea91be9a325d5b9971c2e726aa12e2b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dylib-chain/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) m1.rs -C prefer-dynamic - $(RUSTC) m2.rs -C prefer-dynamic - $(RUSTC) m3.rs -C prefer-dynamic - $(RUSTC) m4.rs - $(call RUN,m4) - $(call REMOVE_DYLIBS,m1) - $(call REMOVE_DYLIBS,m2) - $(call REMOVE_DYLIBS,m3) - $(call FAIL,m4) diff --git a/tests/run-make-fulldeps/dylib-chain/m1.rs b/tests/run-make-fulldeps/dylib-chain/m1.rs deleted file mode 100644 index 08c3f37522cea485302e562d93a4cee561b84a41..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dylib-chain/m1.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "dylib"] -pub fn m1() {} diff --git a/tests/run-make-fulldeps/dylib-chain/m2.rs b/tests/run-make-fulldeps/dylib-chain/m2.rs deleted file mode 100644 index 62176ddc9f35ffa6dc40ffd851294aa5a6bb4623..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dylib-chain/m2.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "dylib"] -extern crate m1; - -pub fn m2() { m1::m1() } diff --git a/tests/run-make-fulldeps/dylib-chain/m3.rs b/tests/run-make-fulldeps/dylib-chain/m3.rs deleted file mode 100644 index d213aeda9ac19a1fed5288d5ed8cdf8dc81104be..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dylib-chain/m3.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "dylib"] -extern crate m2; - -pub fn m3() { m2::m2() } diff --git a/tests/run-make-fulldeps/dylib-chain/m4.rs b/tests/run-make-fulldeps/dylib-chain/m4.rs deleted file mode 100644 index fa8ec6079deace3f04d68dc79b920927ada6f385..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/dylib-chain/m4.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate m3; - -fn main() { m3::m3() } diff --git a/tests/run-make-fulldeps/emit-stack-sizes/Makefile b/tests/run-make-fulldeps/emit-stack-sizes/Makefile deleted file mode 100644 index f636ebd28f2ea15be0838d8a549df39418d855c2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/emit-stack-sizes/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -# ignore-windows -# ignore-macos -# -# This feature only works when the output object format is ELF so we ignore -# macOS and Windows - -# check that the .stack_sizes section is generated -all: - $(RUSTC) -C opt-level=3 -Z emit-stack-sizes --emit=obj foo.rs - size -A $(TMPDIR)/foo.o | $(CGREP) .stack_sizes diff --git a/tests/run-make-fulldeps/emit-stack-sizes/foo.rs b/tests/run-make-fulldeps/emit-stack-sizes/foo.rs deleted file mode 100644 index ee51ae32886e318b1a1430085723d7b37fd19cf2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/emit-stack-sizes/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "lib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/emit/Makefile b/tests/run-make-fulldeps/emit/Makefile deleted file mode 100644 index 78e68bd61114f8e4ea08522a8e89041328a112c6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/emit/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -Copt-level=0 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=1 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=2 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=3 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=s --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=z --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs - $(RUSTC) -Copt-level=0 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 - $(RUSTC) -Copt-level=1 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 - $(RUSTC) -Copt-level=2 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 - $(RUSTC) -Copt-level=3 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 - $(RUSTC) -Copt-level=s --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 - $(RUSTC) -Copt-level=z --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs - $(call RUN,test-26235) || exit 1 diff --git a/tests/run-make-fulldeps/emit/test-24876.rs b/tests/run-make-fulldeps/emit/test-24876.rs deleted file mode 100644 index 734e2ee4bd419443bb44a006b36069404906a2ad..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/emit/test-24876.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Checks for issue #24876 - -fn main() { - let mut v = 0; - for i in 0..0 { - v += i; - } - println!("{}", v) -} diff --git a/tests/run-make-fulldeps/emit/test-26235.rs b/tests/run-make-fulldeps/emit/test-26235.rs deleted file mode 100644 index 07d975f3317cade625b6add7064f6b83df15c0c4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/emit/test-26235.rs +++ /dev/null @@ -1,46 +0,0 @@ -// Checks for issue #26235 - -fn main() { - use std::thread; - - type Key = u32; - const NUM_THREADS: usize = 2; - - #[derive(Clone,Copy)] - struct Stats { - upsert: S, - delete: S, - insert: S, - update: S - }; - - impl Stats where S: Copy { - fn dot(self, s: Stats, f: F) -> Stats where F: Fn(S, T) -> B { - let Stats { upsert: u1, delete: d1, insert: i1, update: p1 } = self; - let Stats { upsert: u2, delete: d2, insert: i2, update: p2 } = s; - Stats { upsert: f(u1, u2), delete: f(d1, d2), insert: f(i1, i2), update: f(p1, p2) } - } - - fn new(init: S) -> Self { - Stats { upsert: init, delete: init, insert: init, update: init } - } - } - - fn make_threads() -> Vec> { - let mut t = Vec::with_capacity(NUM_THREADS); - for _ in 0..NUM_THREADS { - t.push(thread::spawn(move || {})); - } - t - } - - let stats = [Stats::new(0); NUM_THREADS]; - make_threads(); - - { - let Stats { ref upsert, ref delete, ref insert, ref update } = stats.iter().fold( - Stats::new(0), |res, &s| res.dot(s, |x: Key, y: Key| x.wrapping_add(y))); - println!("upserts: {}, deletes: {}, inserts: {}, updates: {}", - upsert, delete, insert, update); - } -} diff --git a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/Makefile b/tests/run-make-fulldeps/error-found-staticlib-instead-crate/Makefile deleted file mode 100644 index 0eae41d720ccc0f3c5a60a32fc169f6fc64d46c4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs --crate-type staticlib - $(RUSTC) bar.rs 2>&1 | $(CGREP) "found staticlib" diff --git a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/bar.rs b/tests/run-make-fulldeps/error-found-staticlib-instead-crate/bar.rs deleted file mode 100644 index fe35f1f8e2ead2e1ea2d06c1aa4ce426d2a8a6aa..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::foo(); -} diff --git a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/foo.rs b/tests/run-make-fulldeps/error-found-staticlib-instead-crate/foo.rs deleted file mode 100644 index b76b4321d62aa8e066b24d213c79ccc8230b8d7b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/error-found-staticlib-instead-crate/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn foo() {} diff --git a/tests/run-make-fulldeps/error-writing-dependencies/Makefile b/tests/run-make-fulldeps/error-writing-dependencies/Makefile deleted file mode 100644 index a5d30a647f81744f7a1f0389a3086b77249db4ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/error-writing-dependencies/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - # Let's get a nice error message - $(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | \ - $(CGREP) "error writing dependencies" - # Make sure the filename shows up - $(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | $(CGREP) "baz" diff --git a/tests/run-make-fulldeps/error-writing-dependencies/foo.rs b/tests/run-make-fulldeps/error-writing-dependencies/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/error-writing-dependencies/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/exit-code/Makefile b/tests/run-make-fulldeps/exit-code/Makefile deleted file mode 100644 index 3ffaafe90657c469c17b0c8eef3848532711caf6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/exit-code/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) success.rs; [ $$? -eq 0 ] - $(RUSTC) --invalid-arg-foo; [ $$? -eq 1 ] - $(RUSTC) compile-error.rs; [ $$? -eq 1 ] - $(RUSTC) -Ztreat-err-as-bug compile-error.rs; [ $$? -eq 101 ] - $(RUSTDOC) -o $(TMPDIR)/exit-code success.rs; [ $$? -eq 0 ] - $(RUSTDOC) --invalid-arg-foo; [ $$? -eq 1 ] - $(RUSTDOC) compile-error.rs; [ $$? -eq 1 ] - $(RUSTDOC) lint-failure.rs; [ $$? -eq 1 ] diff --git a/tests/run-make-fulldeps/exit-code/compile-error.rs b/tests/run-make-fulldeps/exit-code/compile-error.rs deleted file mode 100644 index a96c197606cceb2fcf47e9fad4d930179942b6fc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/exit-code/compile-error.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - compile_error!("kaboom"); -} diff --git a/tests/run-make-fulldeps/exit-code/lint-failure.rs b/tests/run-make-fulldeps/exit-code/lint-failure.rs deleted file mode 100644 index df876ec237ff35dabe26c154b856e716ec26a929..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/exit-code/lint-failure.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![deny(broken_intra_doc_links)] - -/// [intradoc::failure] -pub fn main() { - println!("Hello, world!"); -} diff --git a/tests/run-make-fulldeps/exit-code/success.rs b/tests/run-make-fulldeps/exit-code/success.rs deleted file mode 100644 index 55b8e42b6e2017adfee18d031178cbbaead8894d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/exit-code/success.rs +++ /dev/null @@ -1,4 +0,0 @@ -/// Main function -fn main() { - println!("Hello, world!"); -} diff --git a/tests/run-make-fulldeps/extern-diff-internal-name/Makefile b/tests/run-make-fulldeps/extern-diff-internal-name/Makefile deleted file mode 100644 index 54596c2f029e1b6fdf38c8c2b5dfec38aaa62ceb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-diff-internal-name/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) lib.rs - $(RUSTC) test.rs --extern foo=$(TMPDIR)/libbar.rlib diff --git a/tests/run-make-fulldeps/extern-diff-internal-name/lib.rs b/tests/run-make-fulldeps/extern-diff-internal-name/lib.rs deleted file mode 100644 index ad96f70866e4f1269e95cf7f99118e0f47dee551..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-diff-internal-name/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_name = "bar"] -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/extern-diff-internal-name/test.rs b/tests/run-make-fulldeps/extern-diff-internal-name/test.rs deleted file mode 100644 index 4c53dc28a80e62338a6e6597cc43129798a7f360..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-diff-internal-name/test.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[macro_use] -extern crate foo; - -fn main() { -} diff --git a/tests/run-make-fulldeps/extern-flag-disambiguates/Makefile b/tests/run-make-fulldeps/extern-flag-disambiguates/Makefile deleted file mode 100644 index a8f142a6402e2dd22874b97240e6ee418a59f627..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-disambiguates/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -include ../tools.mk - -# Attempt to build this dependency tree: -# -# A.1 A.2 -# |\ | -# | \ | -# B \ C -# \ | / -# \|/ -# D -# -# Note that A.1 and A.2 are crates with the same name. - -all: - $(RUSTC) -C metadata=1 -C extra-filename=-1 a.rs - $(RUSTC) -C metadata=2 -C extra-filename=-2 a.rs - $(RUSTC) b.rs --extern a=$(TMPDIR)/liba-1.rlib - $(RUSTC) c.rs --extern a=$(TMPDIR)/liba-2.rlib - @echo before - $(RUSTC) --cfg before d.rs --extern a=$(TMPDIR)/liba-1.rlib - $(call RUN,d) - @echo after - $(RUSTC) --cfg after d.rs --extern a=$(TMPDIR)/liba-1.rlib - $(call RUN,d) diff --git a/tests/run-make-fulldeps/extern-flag-disambiguates/a.rs b/tests/run-make-fulldeps/extern-flag-disambiguates/a.rs deleted file mode 100644 index 2b1a3190150fe4e411f71bdc6d081ce11a7f72c6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-disambiguates/a.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_name = "a"] -#![crate_type = "rlib"] - -static FOO: usize = 3; - -pub fn token() -> &'static usize { &FOO } diff --git a/tests/run-make-fulldeps/extern-flag-disambiguates/b.rs b/tests/run-make-fulldeps/extern-flag-disambiguates/b.rs deleted file mode 100644 index 1d7a7339ce27e37d7f87cb9cdd2cb10d8018ada6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-disambiguates/b.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![crate_name = "b"] -#![crate_type = "rlib"] - -extern crate a; - -static FOO: usize = 3; - -pub fn token() -> &'static usize { &FOO } -pub fn a_token() -> &'static usize { a::token() } diff --git a/tests/run-make-fulldeps/extern-flag-disambiguates/c.rs b/tests/run-make-fulldeps/extern-flag-disambiguates/c.rs deleted file mode 100644 index 3f9d143ed2dc46a397d5bff89dc3a463c0391b5e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-disambiguates/c.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![crate_name = "c"] -#![crate_type = "rlib"] - -extern crate a; - -static FOO: usize = 3; - -pub fn token() -> &'static usize { &FOO } -pub fn a_token() -> &'static usize { a::token() } diff --git a/tests/run-make-fulldeps/extern-flag-disambiguates/d.rs b/tests/run-make-fulldeps/extern-flag-disambiguates/d.rs deleted file mode 100644 index 249c6a107ff39a193429f74152a85888eb57eeb9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-disambiguates/d.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[cfg(before)] extern crate a; -extern crate b; -extern crate c; -#[cfg(after)] extern crate a; - -fn t(a: &'static usize) -> usize { a as *const _ as usize } - -fn main() { - assert_eq!(t(a::token()), t(b::a_token())); - assert!(t(a::token()) != t(c::a_token())); -} diff --git a/tests/run-make-fulldeps/extern-flag-fun/Makefile b/tests/run-make-fulldeps/extern-flag-fun/Makefile deleted file mode 100644 index a0b7c15edb9a5b854c0be8c2d630a361886e3586..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) bar.rs --crate-type=rlib - $(RUSTC) bar.rs --crate-type=rlib -C extra-filename=-a - $(RUSTC) bar-alt.rs --crate-type=rlib - $(RUSTC) foo.rs --extern bar=no-exist && exit 1 || exit 0 - $(RUSTC) foo.rs --extern bar=foo.rs && exit 1 || exit 0 - $(RUSTC) foo.rs \ - --extern bar=$(TMPDIR)/libbar.rlib \ - --extern bar=$(TMPDIR)/libbar-alt.rlib \ - && exit 1 || exit 0 - $(RUSTC) foo.rs \ - --extern bar=$(TMPDIR)/libbar.rlib \ - --extern bar=$(TMPDIR)/libbar-a.rlib - $(RUSTC) foo.rs --extern bar=$(TMPDIR)/libbar.rlib - # Try to be sneaky and load a private crate from with a non-private name. - $(RUSTC) rustc.rs -Zforce-unstable-if-unmarked --crate-type=rlib - $(RUSTC) gated_unstable.rs --extern alloc=$(TMPDIR)/librustc.rlib 2>&1 | $(CGREP) 'rustc_private' diff --git a/tests/run-make-fulldeps/extern-flag-fun/bar-alt.rs b/tests/run-make-fulldeps/extern-flag-fun/bar-alt.rs deleted file mode 100644 index cdc6c27d800bdf61531058e432b2217e45a34dc7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/bar-alt.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn f() {} diff --git a/tests/run-make-fulldeps/extern-flag-fun/bar.rs b/tests/run-make-fulldeps/extern-flag-fun/bar.rs deleted file mode 100644 index d11c69f812a8dfe9ea3db2474363c188c096c5b3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/bar.rs +++ /dev/null @@ -1 +0,0 @@ -// intentionally empty diff --git a/tests/run-make-fulldeps/extern-flag-fun/foo.rs b/tests/run-make-fulldeps/extern-flag-fun/foo.rs deleted file mode 100644 index 0edda7d7b8842debbdd5417ed08d904c00d9c956..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate bar; - -fn main() {} diff --git a/tests/run-make-fulldeps/extern-flag-fun/gated_unstable.rs b/tests/run-make-fulldeps/extern-flag-fun/gated_unstable.rs deleted file mode 100644 index 03600c830fff6e53672d531ee063e85ffc297a63..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/gated_unstable.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate alloc; - -fn main() {} diff --git a/tests/run-make-fulldeps/extern-flag-fun/rustc.rs b/tests/run-make-fulldeps/extern-flag-fun/rustc.rs deleted file mode 100644 index b76b4321d62aa8e066b24d213c79ccc8230b8d7b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-fun/rustc.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn foo() {} diff --git a/tests/run-make-fulldeps/extern-flag-pathless/Makefile b/tests/run-make-fulldeps/extern-flag-pathless/Makefile deleted file mode 100644 index 0f23815b6505bcacde50e172ac59b9e5286480f5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-pathless/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../tools.mk - -# Test mixing pathless --extern with paths. - -all: - $(RUSTC) bar-static.rs --crate-name=bar --crate-type=rlib - $(RUSTC) bar-dynamic.rs --crate-name=bar --crate-type=dylib -C prefer-dynamic - # rlib preferred over dylib - $(RUSTC) foo.rs --extern bar - $(call RUN,foo) | $(CGREP) 'static' - $(RUSTC) foo.rs --extern bar=$(TMPDIR)/libbar.rlib --extern bar - $(call RUN,foo) | $(CGREP) 'static' - # explicit --extern overrides pathless - $(RUSTC) foo.rs --extern bar=$(call DYLIB,bar) --extern bar - $(call RUN,foo) | $(CGREP) 'dynamic' - # prefer-dynamic does what it says - $(RUSTC) foo.rs --extern bar -C prefer-dynamic - $(call RUN,foo) | $(CGREP) 'dynamic' diff --git a/tests/run-make-fulldeps/extern-flag-pathless/bar-dynamic.rs b/tests/run-make-fulldeps/extern-flag-pathless/bar-dynamic.rs deleted file mode 100644 index e2d68d517ff9729fdabdc5149c1c86636b438f68..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-pathless/bar-dynamic.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn f() { - println!("dynamic"); -} diff --git a/tests/run-make-fulldeps/extern-flag-pathless/bar-static.rs b/tests/run-make-fulldeps/extern-flag-pathless/bar-static.rs deleted file mode 100644 index 240d8bde4d186761401f23b82dcaf7c2e540f50c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-pathless/bar-static.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn f() { - println!("static"); -} diff --git a/tests/run-make-fulldeps/extern-flag-pathless/foo.rs b/tests/run-make-fulldeps/extern-flag-pathless/foo.rs deleted file mode 100644 index 1ea64da7dad26a6b7c04068e5080b0411a164000..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-pathless/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - bar::f(); -} diff --git a/tests/run-make-fulldeps/extern-flag-rename-transitive/Makefile b/tests/run-make-fulldeps/extern-flag-rename-transitive/Makefile deleted file mode 100644 index d16a8e20868efe2b8eaa3d4be15eaebbf254009f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-rename-transitive/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(RUSTC) baz.rs --extern a=$(TMPDIR)/libfoo.rlib - diff --git a/tests/run-make-fulldeps/extern-flag-rename-transitive/bar.rs b/tests/run-make-fulldeps/extern-flag-rename-transitive/bar.rs deleted file mode 100644 index 94446a07d6c5496af473304fe6bce96f5a7403e8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-rename-transitive/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "rlib"] - -extern crate foo; diff --git a/tests/run-make-fulldeps/extern-flag-rename-transitive/baz.rs b/tests/run-make-fulldeps/extern-flag-rename-transitive/baz.rs deleted file mode 100644 index c3908db34299deb1f7242f869933c24f1e166861..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-rename-transitive/baz.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] - -extern crate a; -extern crate bar; diff --git a/tests/run-make-fulldeps/extern-flag-rename-transitive/foo.rs b/tests/run-make-fulldeps/extern-flag-rename-transitive/foo.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-flag-rename-transitive/foo.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/extern-fn-generic/Makefile b/tests/run-make-fulldeps/extern-fn-generic/Makefile deleted file mode 100644 index 71746fb10cbf47e2f87cdac6b9d613bb542b32b3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-generic/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) testcrate.rs - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-generic/test.c b/tests/run-make-fulldeps/extern-fn-generic/test.c deleted file mode 100644 index a8504ff2afb06077bd2262fffc3fea5bf6084fe3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-generic/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include - -typedef struct TestStruct { - uint8_t x; - int32_t y; -} TestStruct; - -typedef int callback(TestStruct s); - -uint32_t call(callback *c) { - TestStruct s; - s.x = 'a'; - s.y = 3; - - return c(s); -} diff --git a/tests/run-make-fulldeps/extern-fn-generic/test.rs b/tests/run-make-fulldeps/extern-fn-generic/test.rs deleted file mode 100644 index c9baa489881b1b3a6d6e90571a162fa89233315b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-generic/test.rs +++ /dev/null @@ -1,20 +0,0 @@ -extern crate testcrate; - -extern "C" fn bar(ts: testcrate::TestStruct) -> T { - ts.y -} - -#[link(name = "test", kind = "static")] -extern "C" { - fn call(c: extern "C" fn(testcrate::TestStruct) -> i32) -> i32; -} - -fn main() { - // Let's test calling it cross crate - let back = unsafe { testcrate::call(testcrate::foo::) }; - assert_eq!(3, back); - - // And just within this crate - let back = unsafe { call(bar::) }; - assert_eq!(3, back); -} diff --git a/tests/run-make-fulldeps/extern-fn-generic/testcrate.rs b/tests/run-make-fulldeps/extern-fn-generic/testcrate.rs deleted file mode 100644 index 39f76e59ca0c0edcd42b6178f4759319437c7d4a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-generic/testcrate.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![crate_type = "lib"] - -#[repr(C)] -pub struct TestStruct { - pub x: u8, - pub y: T, -} - -pub extern "C" fn foo(ts: TestStruct) -> T { - ts.y -} - -#[link(name = "test", kind = "static")] -extern "C" { - pub fn call(c: extern "C" fn(TestStruct) -> i32) -> i32; -} diff --git a/tests/run-make-fulldeps/extern-fn-mangle/Makefile b/tests/run-make-fulldeps/extern-fn-mangle/Makefile deleted file mode 100644 index 4f5d026f213f282dfc24a32484b2110bf6e36ffd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-mangle/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-mangle/test.c b/tests/run-make-fulldeps/extern-fn-mangle/test.c deleted file mode 100644 index e94d75083b8ffd7bdf72fed6d9f814bb90c0ad0f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-mangle/test.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -uint32_t foo(); -uint32_t bar(); - -uint32_t add() { - return foo() + bar(); -} diff --git a/tests/run-make-fulldeps/extern-fn-mangle/test.rs b/tests/run-make-fulldeps/extern-fn-mangle/test.rs deleted file mode 100644 index 40b08f1ed709e348ebe73eb2c7602a68f79220e0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-mangle/test.rs +++ /dev/null @@ -1,19 +0,0 @@ -#[no_mangle] -pub extern "C" fn foo() -> i32 { - 3 -} - -#[no_mangle] -pub extern "C" fn bar() -> i32 { - 5 -} - -#[link(name = "test", kind = "static")] -extern "C" { - fn add() -> i32; -} - -fn main() { - let back = unsafe { add() }; - assert_eq!(8, back); -} diff --git a/tests/run-make-fulldeps/extern-fn-reachable/Makefile b/tests/run-make-fulldeps/extern-fn-reachable/Makefile deleted file mode 100644 index 05bdb8d65b7bff79659c50daa9198b9d5296918f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-reachable/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -include ../tools.mk - -# ignore-windows-msvc - -NM=nm -D - -ifeq ($(UNAME),Darwin) -NM=nm -gU -endif - -ifdef IS_WINDOWS -NM=nm -g -endif - -# This overrides the LD_LIBRARY_PATH for RUN -TARGET_RPATH_DIR:=$(TARGET_RPATH_DIR):$(TMPDIR) - -all: - $(RUSTC) dylib.rs -o $(TMPDIR)/libdylib.so -C prefer-dynamic - - [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun1)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun2)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun3)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun4)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun5)" -eq "1" ] diff --git a/tests/run-make-fulldeps/extern-fn-reachable/dylib.rs b/tests/run-make-fulldeps/extern-fn-reachable/dylib.rs deleted file mode 100644 index cd01793487051a7bf5e37b893f3e0ef1bc652a9b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-reachable/dylib.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![crate_type = "dylib"] -#![allow(dead_code)] - -#[no_mangle] pub extern "C" fn fun1() {} -#[no_mangle] extern "C" fn fun2() {} - -mod foo { - #[no_mangle] pub extern "C" fn fun3() {} -} -pub mod bar { - #[no_mangle] pub extern "C" fn fun4() {} -} - -#[no_mangle] pub fn fun5() {} diff --git a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/Makefile b/tests/run-make-fulldeps/extern-fn-struct-passing-abi/Makefile deleted file mode 100644 index 4f5d026f213f282dfc24a32484b2110bf6e36ffd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.c b/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.c deleted file mode 100644 index 136b07129e1df3518679cef224113b5c67382d29..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.c +++ /dev/null @@ -1,314 +0,0 @@ -#include -#include - -struct Rect { - int32_t a; - int32_t b; - int32_t c; - int32_t d; -}; - -struct BiggerRect { - struct Rect s; - int32_t a; - int32_t b; -}; - -struct FloatRect { - int32_t a; - int32_t b; - double c; -}; - -struct Huge { - int32_t a; - int32_t b; - int32_t c; - int32_t d; - int32_t e; -}; - -struct FloatPoint { - double x; - double y; -}; - -struct FloatOne { - double x; -}; - -struct IntOdd { - int8_t a; - int8_t b; - int8_t c; -}; - -// System V x86_64 ABI: -// a, b, c, d, e should be in registers -// s should be byval pointer -// -// Win64 ABI: -// a, b, c, d should be in registers -// e should be on the stack -// s should be byval pointer -void byval_rect(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(c == 3); - assert(d == 4); - assert(e == 5); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); -} - -// System V x86_64 ABI: -// a, b, c, d, e, f should be in registers -// s should be byval pointer on the stack -// -// Win64 ABI: -// a, b, c, d should be in registers -// e, f should be on the stack -// s should be byval pointer on the stack -void byval_many_rect(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, - int32_t f, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(c == 3); - assert(d == 4); - assert(e == 5); - assert(f == 6); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); -} - -// System V x86_64 ABI: -// a, b, c, d, e, f, g should be in sse registers -// s should be split across 2 registers -// t should be byval pointer -// -// Win64 ABI: -// a, b, c, d should be in sse registers -// e, f, g should be on the stack -// s should be on the stack (treated as 2 i64's) -// t should be on the stack (treated as an i64 and a double) -void byval_rect_floats(float a, float b, double c, float d, float e, - float f, double g, struct Rect s, struct FloatRect t) { - assert(a == 1.); - assert(b == 2.); - assert(c == 3.); - assert(d == 4.); - assert(e == 5.); - assert(f == 6.); - assert(g == 7.); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); - assert(t.a == 3489); - assert(t.b == 3490); - assert(t.c == 8.); -} - -// System V x86_64 ABI: -// a, b, d, e, f should be in registers -// c passed via sse registers -// s should be byval pointer -// -// Win64 ABI: -// a, b, d should be in registers -// c passed via sse registers -// e, f should be on the stack -// s should be byval pointer -void byval_rect_with_float(int32_t a, int32_t b, float c, int32_t d, - int32_t e, int32_t f, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(c == 3.); - assert(d == 4); - assert(e == 5); - assert(f == 6); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); -} - -// System V x86_64 ABI: -// a, b, d, e, f should be byval pointer (on the stack) -// g passed via register (fixes #41375) -// -// Win64 ABI: -// a, b, d, e, f, g should be byval pointer -void byval_rect_with_many_huge(struct Huge a, struct Huge b, struct Huge c, - struct Huge d, struct Huge e, struct Huge f, - struct Rect g) { - assert(g.a == 123); - assert(g.b == 456); - assert(g.c == 789); - assert(g.d == 420); -} - -// System V x86_64 & Win64 ABI: -// a, b should be in registers -// s should be split across 2 integer registers -void split_rect(int32_t a, int32_t b, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); -} - -// System V x86_64 & Win64 ABI: -// a, b should be in sse registers -// s should be split across integer & sse registers -void split_rect_floats(float a, float b, struct FloatRect s) { - assert(a == 1.); - assert(b == 2.); - assert(s.a == 3489); - assert(s.b == 3490); - assert(s.c == 8.); -} - -// System V x86_64 ABI: -// a, b, d, f should be in registers -// c, e passed via sse registers -// s should be split across 2 registers -// -// Win64 ABI: -// a, b, d should be in registers -// c passed via sse registers -// e, f should be on the stack -// s should be on the stack (treated as 2 i64's) -void split_rect_with_floats(int32_t a, int32_t b, float c, - int32_t d, float e, int32_t f, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(c == 3.); - assert(d == 4); - assert(e == 5.); - assert(f == 6); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); -} - -// System V x86_64 & Win64 ABI: -// a, b, c should be in registers -// s should be split across 2 registers -// t should be a byval pointer -void split_and_byval_rect(int32_t a, int32_t b, int32_t c, struct Rect s, struct Rect t) { - assert(a == 1); - assert(b == 2); - assert(c == 3); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); - assert(t.a == 553); - assert(t.b == 554); - assert(t.c == 555); - assert(t.d == 556); -} - -// System V x86_64 & Win64 ABI: -// a, b should in registers -// s and return should be split across 2 registers -struct Rect split_ret_byval_struct(int32_t a, int32_t b, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); - return s; -} - -// System V x86_64 & Win64 ABI: -// a, b, c, d should be in registers -// return should be in a hidden sret pointer -// s should be a byval pointer -struct BiggerRect sret_byval_struct(int32_t a, int32_t b, int32_t c, int32_t d, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(c == 3); - assert(d == 4); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); - - struct BiggerRect t; - t.s = s; t.a = 27834; t.b = 7657; - return t; -} - -// System V x86_64 & Win64 ABI: -// a, b should be in registers -// return should be in a hidden sret pointer -// s should be split across 2 registers -struct BiggerRect sret_split_struct(int32_t a, int32_t b, struct Rect s) { - assert(a == 1); - assert(b == 2); - assert(s.a == 553); - assert(s.b == 554); - assert(s.c == 555); - assert(s.d == 556); - - struct BiggerRect t; - t.s = s; t.a = 27834; t.b = 7657; - return t; -} - -// System V x86_64 & Win64 ABI: -// s should be byval pointer (since sizeof(s) > 16) -// return should in a hidden sret pointer -struct Huge huge_struct(struct Huge s) { - assert(s.a == 5647); - assert(s.b == 5648); - assert(s.c == 5649); - assert(s.d == 5650); - assert(s.e == 5651); - - return s; -} - -// System V x86_64 ABI: -// p should be in registers -// return should be in registers -// -// Win64 ABI and 64-bit PowerPC ELFv1 ABI: -// p should be a byval pointer -// return should be in a hidden sret pointer -struct FloatPoint float_point(struct FloatPoint p) { - assert(p.x == 5.); - assert(p.y == -3.); - - return p; -} - -// 64-bit PowerPC ELFv1 ABI: -// f1 should be in a register -// return should be in a hidden sret pointer -struct FloatOne float_one(struct FloatOne f1) { - assert(f1.x == 7.); - - return f1; -} - -// 64-bit PowerPC ELFv1 ABI: -// i should be in the least-significant bits of a register -// return should be in a hidden sret pointer -struct IntOdd int_odd(struct IntOdd i) { - assert(i.a == 1); - assert(i.b == 2); - assert(i.c == 3); - - return i; -} diff --git a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.rs b/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.rs deleted file mode 100644 index afe0f52ef0b288f432a0efda8fa4d31733c1c22e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-struct-passing-abi/test.rs +++ /dev/null @@ -1,138 +0,0 @@ -// Passing structs via FFI should work regardless of whether -// they get passed in multiple registers, byval pointers or the stack - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct Rect { - a: i32, - b: i32, - c: i32, - d: i32, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct BiggerRect { - s: Rect, - a: i32, - b: i32, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct FloatRect { - a: i32, - b: i32, - c: f64, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct Huge { - a: i32, - b: i32, - c: i32, - d: i32, - e: i32, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct FloatPoint { - x: f64, - y: f64, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct FloatOne { - x: f64, -} - -#[derive(Clone, Copy, Debug, PartialEq)] -#[repr(C)] -struct IntOdd { - a: i8, - b: i8, - c: i8, -} - -#[link(name = "test", kind = "static")] -extern "C" { - fn byval_rect(a: i32, b: i32, c: i32, d: i32, e: i32, s: Rect); - - fn byval_many_rect(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, s: Rect); - - fn byval_rect_floats( - a: f32, - b: f32, - c: f64, - d: f32, - e: f32, - f: f32, - g: f64, - s: Rect, - t: FloatRect, - ); - - fn byval_rect_with_float(a: i32, b: i32, c: f32, d: i32, e: i32, f: i32, s: Rect); - - fn byval_rect_with_many_huge(a: Huge, b: Huge, c: Huge, d: Huge, e: Huge, f: Huge, g: Rect); - - fn split_rect(a: i32, b: i32, s: Rect); - - fn split_rect_floats(a: f32, b: f32, s: FloatRect); - - fn split_rect_with_floats(a: i32, b: i32, c: f32, d: i32, e: f32, f: i32, s: Rect); - - fn split_and_byval_rect(a: i32, b: i32, c: i32, s: Rect, t: Rect); - - fn split_ret_byval_struct(a: i32, b: i32, s: Rect) -> Rect; - - fn sret_byval_struct(a: i32, b: i32, c: i32, d: i32, s: Rect) -> BiggerRect; - - fn sret_split_struct(a: i32, b: i32, s: Rect) -> BiggerRect; - - fn huge_struct(s: Huge) -> Huge; - - fn float_point(p: FloatPoint) -> FloatPoint; - - fn float_one(f: FloatOne) -> FloatOne; - - fn int_odd(i: IntOdd) -> IntOdd; -} - -fn main() { - let s = Rect { a: 553, b: 554, c: 555, d: 556 }; - let t = BiggerRect { s: s, a: 27834, b: 7657 }; - let u = FloatRect { a: 3489, b: 3490, c: 8. }; - let v = Huge { a: 5647, b: 5648, c: 5649, d: 5650, e: 5651 }; - let p = FloatPoint { x: 5., y: -3. }; - let f1 = FloatOne { x: 7. }; - let i = IntOdd { a: 1, b: 2, c: 3 }; - - unsafe { - byval_rect(1, 2, 3, 4, 5, s); - byval_many_rect(1, 2, 3, 4, 5, 6, s); - byval_rect_floats(1., 2., 3., 4., 5., 6., 7., s, u); - byval_rect_with_float(1, 2, 3.0, 4, 5, 6, s); - byval_rect_with_many_huge(v, v, v, v, v, v, Rect { a: 123, b: 456, c: 789, d: 420 }); - split_rect(1, 2, s); - split_rect_floats(1., 2., u); - split_rect_with_floats(1, 2, 3.0, 4, 5.0, 6, s); - split_and_byval_rect(1, 2, 3, s, s); - split_rect(1, 2, s); - assert_eq!(huge_struct(v), v); - assert_eq!(split_ret_byval_struct(1, 2, s), s); - assert_eq!(sret_byval_struct(1, 2, 3, 4, s), t); - assert_eq!(sret_split_struct(1, 2, s), t); - assert_eq!(float_point(p), p); - assert_eq!(int_odd(i), i); - - // MSVC/GCC/Clang are not consistent in the ABI of single-float aggregates. - // x86_64: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82028 - // i686: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82041 - #[cfg(not(all(windows, target_env = "gnu")))] - assert_eq!(float_one(f1), f1); - } -} diff --git a/tests/run-make-fulldeps/extern-fn-with-extern-types/Makefile b/tests/run-make-fulldeps/extern-fn-with-extern-types/Makefile deleted file mode 100644 index 1fa708950d4361a00e0c82c22a98fb60ae542aea..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-extern-types/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,ctest) - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-with-extern-types/ctest.c b/tests/run-make-fulldeps/extern-fn-with-extern-types/ctest.c deleted file mode 100644 index 3b6fb4cfce984ebb83879f9cf8fae81dc5ca5280..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-extern-types/ctest.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include - -typedef struct data { - uint32_t magic; -} data; - -data* data_create(uint32_t magic) { - static data d; - d.magic = magic; - return &d; -} - -uint32_t data_get(data* p) { - return p->magic; -} diff --git a/tests/run-make-fulldeps/extern-fn-with-extern-types/test.rs b/tests/run-make-fulldeps/extern-fn-with-extern-types/test.rs deleted file mode 100644 index 90a6ebaf1aa6caec96ffaaf15383561778ebcf9b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-extern-types/test.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![feature(extern_types)] - -#[link(name = "ctest", kind = "static")] -extern "C" { - type data; - - fn data_create(magic: u32) -> *mut data; - fn data_get(data: *mut data) -> u32; -} - -const MAGIC: u32 = 0xdeadbeef; -fn main() { - unsafe { - let data = data_create(MAGIC); - assert_eq!(data_get(data), MAGIC); - } -} diff --git a/tests/run-make-fulldeps/extern-fn-with-packed-struct/Makefile b/tests/run-make-fulldeps/extern-fn-with-packed-struct/Makefile deleted file mode 100644 index 4f5d026f213f282dfc24a32484b2110bf6e36ffd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-packed-struct/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.c b/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.c deleted file mode 100644 index c89f8272b1e8376a4a5b29440bf48c94dd8f3ee3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.c +++ /dev/null @@ -1,26 +0,0 @@ -// Pragma needed cause of gcc bug on windows: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 - -#include - -#ifdef _MSC_VER -#pragma pack(push,1) -struct Foo { - char a; - short b; - char c; -}; -#else -#pragma pack(1) -struct __attribute__((packed)) Foo { - char a; - short b; - char c; -}; -#endif - -struct Foo foo(struct Foo foo) { - assert(foo.a == 1); - assert(foo.b == 2); - assert(foo.c == 3); - return foo; -} diff --git a/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.rs b/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.rs deleted file mode 100644 index 2f261efb5105d94248ff296ab42cf41b07d15f20..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-packed-struct/test.rs +++ /dev/null @@ -1,20 +0,0 @@ -#[repr(C, packed)] -#[derive(Copy, Clone, Debug, PartialEq)] -struct Foo { - a: i8, - b: i16, - c: i8, -} - -#[link(name = "test", kind = "static")] -extern "C" { - fn foo(f: Foo) -> Foo; -} - -fn main() { - unsafe { - let a = Foo { a: 1, b: 2, c: 3 }; - let b = foo(a); - assert_eq!(a, b); - } -} diff --git a/tests/run-make-fulldeps/extern-fn-with-union/Makefile b/tests/run-make-fulldeps/extern-fn-with-union/Makefile deleted file mode 100644 index 40bae923e30b91c8a3960607da79ab08a7cc169b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-union/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,ctest) - $(RUSTC) testcrate.rs - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/extern-fn-with-union/ctest.c b/tests/run-make-fulldeps/extern-fn-with-union/ctest.c deleted file mode 100644 index 86cb64537236e1611f877a64a32a1b52d06c5904..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-union/ctest.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -typedef union TestUnion { - uint64_t bits; -} TestUnion; - -uint64_t give_back(TestUnion tu) { - return tu.bits; -} diff --git a/tests/run-make-fulldeps/extern-fn-with-union/test.rs b/tests/run-make-fulldeps/extern-fn-with-union/test.rs deleted file mode 100644 index 438fbddf31fb287c7d96989c1afdcd7cf6f16a52..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-union/test.rs +++ /dev/null @@ -1,19 +0,0 @@ -extern crate testcrate; - -use std::mem; - -extern "C" { - fn give_back(tu: testcrate::TestUnion) -> u64; -} - -fn main() { - let magic: u64 = 0xDEADBEEF; - - // Let's test calling it cross crate - let back = unsafe { testcrate::give_back(mem::transmute(magic)) }; - assert_eq!(magic, back); - - // And just within this crate - let back = unsafe { give_back(mem::transmute(magic)) }; - assert_eq!(magic, back); -} diff --git a/tests/run-make-fulldeps/extern-fn-with-union/testcrate.rs b/tests/run-make-fulldeps/extern-fn-with-union/testcrate.rs deleted file mode 100644 index 28d91ff37c360fc4975b087749748ee363786b80..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-fn-with-union/testcrate.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![crate_type = "lib"] - -#[repr(C)] -pub struct TestUnion { - _val: u64, -} - -#[link(name = "ctest", kind = "static")] -extern "C" { - pub fn give_back(tu: TestUnion) -> u64; -} diff --git a/tests/run-make-fulldeps/extern-multiple-copies/Makefile b/tests/run-make-fulldeps/extern-multiple-copies/Makefile deleted file mode 100644 index 00668a6bc88c2eedcbed35b1711ce873529e87ba..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo1.rs - $(RUSTC) foo2.rs - mkdir $(TMPDIR)/foo - cp $(TMPDIR)/libfoo1.rlib $(TMPDIR)/foo/libfoo1.rlib - $(RUSTC) bar.rs --extern foo1=$(TMPDIR)/libfoo1.rlib -L $(TMPDIR)/foo diff --git a/tests/run-make-fulldeps/extern-multiple-copies/bar.rs b/tests/run-make-fulldeps/extern-multiple-copies/bar.rs deleted file mode 100644 index c6b3595f677532f653c9ebc30f86673231877c1b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies/bar.rs +++ /dev/null @@ -1,6 +0,0 @@ -extern crate foo2; // foo2 first to exhibit the bug -extern crate foo1; - -fn main() { - /* ... */ -} diff --git a/tests/run-make-fulldeps/extern-multiple-copies/foo1.rs b/tests/run-make-fulldeps/extern-multiple-copies/foo1.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies/foo1.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/extern-multiple-copies/foo2.rs b/tests/run-make-fulldeps/extern-multiple-copies/foo2.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies/foo2.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/extern-multiple-copies2/Makefile b/tests/run-make-fulldeps/extern-multiple-copies2/Makefile deleted file mode 100644 index 84de2ebf34dfc74ce5ae6a12fa079af109f9b447..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies2/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo1.rs - $(RUSTC) foo2.rs - mkdir $(TMPDIR)/foo - cp $(TMPDIR)/libfoo1.rlib $(TMPDIR)/foo/libfoo1.rlib - $(RUSTC) bar.rs \ - --extern foo1=$(TMPDIR)/foo/libfoo1.rlib \ - --extern foo2=$(TMPDIR)/libfoo2.rlib diff --git a/tests/run-make-fulldeps/extern-multiple-copies2/bar.rs b/tests/run-make-fulldeps/extern-multiple-copies2/bar.rs deleted file mode 100644 index b3088152d6ab831771fe2b7f4df0ae70f9079a44..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies2/bar.rs +++ /dev/null @@ -1,8 +0,0 @@ -#[macro_use] -extern crate foo2; // foo2 first to exhibit the bug -#[macro_use] -extern crate foo1; - -fn main() { - foo2::foo2(foo1::A); -} diff --git a/tests/run-make-fulldeps/extern-multiple-copies2/foo1.rs b/tests/run-make-fulldeps/extern-multiple-copies2/foo1.rs deleted file mode 100644 index 4c778e52ff4da7b5b0bbd3b46e925a864c7b086c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies2/foo1.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_type = "rlib"] - -pub struct A; - -pub fn foo1(a: A) { - drop(a); -} diff --git a/tests/run-make-fulldeps/extern-multiple-copies2/foo2.rs b/tests/run-make-fulldeps/extern-multiple-copies2/foo2.rs deleted file mode 100644 index 2be103507dfd88d5c0d8597f8c837e3d517c6e49..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-multiple-copies2/foo2.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type = "rlib"] - -#[macro_use] -extern crate foo1; - -pub fn foo2(a: foo1::A) { - foo1::foo1(a); -} diff --git a/tests/run-make-fulldeps/extern-overrides-distribution/Makefile b/tests/run-make-fulldeps/extern-overrides-distribution/Makefile deleted file mode 100644 index c57b062cd5dd10b24abc23ed90f0a9191aacf884..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-overrides-distribution/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) libc.rs -Cmetadata=foo - $(RUSTC) main.rs --extern libc=$(TMPDIR)/liblibc.rlib diff --git a/tests/run-make-fulldeps/extern-overrides-distribution/libc.rs b/tests/run-make-fulldeps/extern-overrides-distribution/libc.rs deleted file mode 100644 index ee51ae32886e318b1a1430085723d7b37fd19cf2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-overrides-distribution/libc.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "lib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/extern-overrides-distribution/main.rs b/tests/run-make-fulldeps/extern-overrides-distribution/main.rs deleted file mode 100644 index 1290a8c56701c5c61253117ccf0ec2fffe81d240..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extern-overrides-distribution/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate libc; - -fn main() { - libc::foo(); -} diff --git a/tests/run-make-fulldeps/extra-filename-with-temp-outputs/Makefile b/tests/run-make-fulldeps/extra-filename-with-temp-outputs/Makefile deleted file mode 100644 index 470448cf50c575b786b96810e0bd52473dee5a6b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extra-filename-with-temp-outputs/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -C extra-filename=bar foo.rs -C save-temps - rm $(TMPDIR)/foobar.foo*0.rcgu.o - rm $(TMPDIR)/$(call BIN,foobar) diff --git a/tests/run-make-fulldeps/extra-filename-with-temp-outputs/foo.rs b/tests/run-make-fulldeps/extra-filename-with-temp-outputs/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/extra-filename-with-temp-outputs/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/foreign-double-unwind/Makefile b/tests/run-make-fulldeps/foreign-double-unwind/Makefile deleted file mode 100644 index ea2fe9ff881bc86bb20cef2c05d85f980957f617..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-double-unwind/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: foo - $(call RUN,foo) | $(CGREP) -v unreachable - -foo: foo.rs $(call NATIVE_STATICLIB,foo) - $(RUSTC) $< -lfoo $(EXTRARSCXXFLAGS) - -$(TMPDIR)/libfoo.o: foo.cpp - $(call COMPILE_OBJ_CXX,$@,$<) diff --git a/tests/run-make-fulldeps/foreign-double-unwind/foo.cpp b/tests/run-make-fulldeps/foreign-double-unwind/foo.cpp deleted file mode 100644 index 69a8f11c2db78e9bf83352b73f558b0f6c2f9f74..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-double-unwind/foo.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -void println(const char* s) { - puts(s); - fflush(stdout); -} - -struct outer_exception {}; -struct inner_exception {}; - -extern "C" { - void throw_cxx_exception() { - if (std::uncaught_exception()) { - println("throwing inner C++ exception"); - throw inner_exception(); - } else { - println("throwing outer C++ exception"); - throw outer_exception(); - } - } - - void cxx_catch_callback(void (*cb)()) { - try { - cb(); - println("unreachable: callback returns"); - } catch (outer_exception) { - println("unreachable: caught outer exception in catch (...)"); - } catch (inner_exception) { - println("unreachable: caught inner exception in catch (...)"); - } - } -} diff --git a/tests/run-make-fulldeps/foreign-double-unwind/foo.rs b/tests/run-make-fulldeps/foreign-double-unwind/foo.rs deleted file mode 100644 index cae8aa9402d88f7c5e6534b1dbf6936da438c90a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-double-unwind/foo.rs +++ /dev/null @@ -1,26 +0,0 @@ -// Tests that C++ double unwinding through Rust code will be properly guarded -// against instead of exhibiting undefined behaviour. - -#![feature(c_unwind)] - -extern "C-unwind" { - fn throw_cxx_exception(); - fn cxx_catch_callback(cb: extern "C-unwind" fn()); -} - -struct ThrowOnDrop; - -impl Drop for ThrowOnDrop { - fn drop(&mut self) { - unsafe { throw_cxx_exception() }; - } -} - -extern "C-unwind" fn test_double_unwind() { - let _a = ThrowOnDrop; - let _b = ThrowOnDrop; -} - -fn main() { - unsafe { cxx_catch_callback(test_double_unwind) }; -} diff --git a/tests/run-make-fulldeps/foreign-exceptions/Makefile b/tests/run-make-fulldeps/foreign-exceptions/Makefile deleted file mode 100644 index 38fe2773df2e76e988e09bd442534bd7356dffb2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-exceptions/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: foo - $(call RUN,foo) - -foo: foo.rs $(call NATIVE_STATICLIB,foo) - $(RUSTC) $< -lfoo $(EXTRARSCXXFLAGS) - -$(TMPDIR)/libfoo.o: foo.cpp - $(call COMPILE_OBJ_CXX,$@,$<) diff --git a/tests/run-make-fulldeps/foreign-exceptions/foo.cpp b/tests/run-make-fulldeps/foreign-exceptions/foo.cpp deleted file mode 100644 index 8182021a2cce453996a4389f23ff936d8ae8b971..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-exceptions/foo.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include - -void println(const char* s) { - puts(s); - fflush(stdout); -} - -struct exception {}; -struct rust_panic {}; - -struct drop_check { - bool* ok; - ~drop_check() { - println("~drop_check"); - - if (ok) - *ok = true; - } -}; - -extern "C" { - void rust_catch_callback(void (*cb)(), bool* rust_ok); - - void throw_cxx_exception() { - println("throwing C++ exception"); - throw exception(); - } - - void test_cxx_exception() { - bool rust_ok = false; - try { - rust_catch_callback(throw_cxx_exception, &rust_ok); - assert(false && "unreachable"); - } catch (exception e) { - println("caught C++ exception"); - assert(rust_ok); - return; - } - assert(false && "did not catch thrown C++ exception"); - } - - void cxx_catch_callback(void (*cb)(), bool* cxx_ok) { - drop_check x; - x.ok = NULL; - try { - cb(); - } catch (rust_panic e) { - assert(false && "shouldn't be able to catch a rust panic"); - } catch (...) { - println("caught foreign exception in catch (...)"); - // Foreign exceptions are caught by catch (...). We only set the ok - // flag if we successfully caught the panic. The destructor of - // drop_check will then set the flag to true if it is executed. - x.ok = cxx_ok; - throw; - } - } -} diff --git a/tests/run-make-fulldeps/foreign-exceptions/foo.rs b/tests/run-make-fulldeps/foreign-exceptions/foo.rs deleted file mode 100644 index dd3b7c76f28675b8d0d77321f9607193fe843119..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-exceptions/foo.rs +++ /dev/null @@ -1,59 +0,0 @@ -// Tests that C++ exceptions can unwind through Rust code run destructors and -// are caught by catch_unwind. Also tests that Rust panics can unwind through -// C++ code. - -#![feature(c_unwind)] - -use std::panic::{catch_unwind, AssertUnwindSafe}; - -struct DropCheck<'a>(&'a mut bool); -impl<'a> Drop for DropCheck<'a> { - fn drop(&mut self) { - println!("DropCheck::drop"); - *self.0 = true; - } -} - -extern "C" { - fn test_cxx_exception(); -} - -extern "C-unwind" { - fn cxx_catch_callback(cb: extern "C-unwind" fn(), ok: *mut bool); -} - -#[no_mangle] -extern "C-unwind" fn rust_catch_callback(cb: extern "C-unwind" fn(), rust_ok: &mut bool) { - let _drop = DropCheck(rust_ok); - cb(); - unreachable!("should have unwound instead of returned"); -} - -fn test_rust_panic() { - extern "C-unwind" fn callback() { - println!("throwing rust panic"); - panic!(1234i32); - } - - let mut dropped = false; - let mut cxx_ok = false; - let caught_unwind = catch_unwind(AssertUnwindSafe(|| { - let _drop = DropCheck(&mut dropped); - unsafe { - cxx_catch_callback(callback, &mut cxx_ok); - } - unreachable!("should have unwound instead of returned"); - })); - println!("caught rust panic"); - assert!(dropped); - assert!(caught_unwind.is_err()); - let panic_obj = caught_unwind.unwrap_err(); - let panic_int = *panic_obj.downcast_ref::().unwrap(); - assert_eq!(panic_int, 1234); - assert!(cxx_ok); -} - -fn main() { - unsafe { test_cxx_exception() }; - test_rust_panic(); -} diff --git a/tests/run-make-fulldeps/foreign-rust-exceptions/Makefile b/tests/run-make-fulldeps/foreign-rust-exceptions/Makefile deleted file mode 100644 index 50fca7f24e616d70b91028681ca0c901810987fc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-rust-exceptions/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# ignore-i686-pc-windows-gnu - -# This test doesn't work on 32-bit MinGW as cdylib has its own copy of unwinder -# so cross-DLL unwinding does not work. - -include ../tools.mk - -all: - $(RUSTC) bar.rs --crate-type=cdylib - $(RUSTC) foo.rs - $(call RUN,foo) 2>&1 | $(CGREP) "Rust cannot catch foreign exceptions" diff --git a/tests/run-make-fulldeps/foreign-rust-exceptions/bar.rs b/tests/run-make-fulldeps/foreign-rust-exceptions/bar.rs deleted file mode 100644 index 5f9efe323609b8d857fb90de218fcfb93e72ba42..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-rust-exceptions/bar.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_type = "cdylib"] -#![feature(c_unwind)] - -#[no_mangle] -extern "C-unwind" fn panic() { - panic!(); -} diff --git a/tests/run-make-fulldeps/foreign-rust-exceptions/foo.rs b/tests/run-make-fulldeps/foreign-rust-exceptions/foo.rs deleted file mode 100644 index 266987c5b6d63b117c1deeeb37535b917e52730e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/foreign-rust-exceptions/foo.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![feature(c_unwind)] - -#[cfg_attr(not(windows), link(name = "bar"))] -#[cfg_attr(windows, link(name = "bar.dll"))] -extern "C-unwind" { - fn panic(); -} - -fn main() { - let _ = std::panic::catch_unwind(|| { - unsafe { panic() }; - }); -} diff --git a/tests/run-make-fulldeps/fpic/Makefile b/tests/run-make-fulldeps/fpic/Makefile deleted file mode 100644 index 5986de3666f71c08a9c7deecdbe91bbb18f04f25..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/fpic/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -# ignore-windows -# ignore-macos - -# Test for #39529. -# `-z text` causes ld to error if there are any non-PIC sections - -all: - $(RUSTC) hello.rs -C link-args=-Wl,-z,text diff --git a/tests/run-make-fulldeps/fpic/hello.rs b/tests/run-make-fulldeps/fpic/hello.rs deleted file mode 100644 index 45590d86ba6c51f0babffb0b43e3e2f44d2f9e07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/fpic/hello.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() { } diff --git a/tests/run-make-fulldeps/glibc-staticlib-args/Makefile b/tests/run-make-fulldeps/glibc-staticlib-args/Makefile deleted file mode 100644 index 39e64bacf581314198c71b91720d20d634e0b02f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/glibc-staticlib-args/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# only-gnu -# only-linux - -include ../tools.mk - -# This ensures that std::env::args works in a library called from C on glibc Linux. - -all: - $(RUSTC) --crate-type=staticlib library.rs - $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(call RUN,program) diff --git a/tests/run-make-fulldeps/glibc-staticlib-args/library.rs b/tests/run-make-fulldeps/glibc-staticlib-args/library.rs deleted file mode 100644 index 5ab627a2ac1a282531a92a42cdacce95b489f6bd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/glibc-staticlib-args/library.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[no_mangle] -pub extern "C" fn args_check() { - assert_ne!(std::env::args_os().count(), 0); -} diff --git a/tests/run-make-fulldeps/glibc-staticlib-args/program.c b/tests/run-make-fulldeps/glibc-staticlib-args/program.c deleted file mode 100644 index 30f6974b75086ac6c67b50621f65832e1c3e8bce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/glibc-staticlib-args/program.c +++ /dev/null @@ -1,6 +0,0 @@ -void args_check(); - -int main() { - args_check(); - return 0; -} diff --git a/tests/run-make-fulldeps/hir-tree/Makefile b/tests/run-make-fulldeps/hir-tree/Makefile deleted file mode 100644 index b0450ea4bc5fddae4b62bf1c2281eb427a156193..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/hir-tree/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -# Test that hir-tree output doesn't crash and includes -# the string constant we would expect to see. - -all: - $(RUSTC) -o $(TMPDIR)/input.hir -Z unpretty=hir-tree input.rs - $(CGREP) '"Hello, Rustaceans!\n"' < $(TMPDIR)/input.hir diff --git a/tests/run-make-fulldeps/hir-tree/input.rs b/tests/run-make-fulldeps/hir-tree/input.rs deleted file mode 100644 index 9d1a4e9e47d718f0355edc7eef18090bcc6fc152..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/hir-tree/input.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, Rustaceans!"); -} diff --git a/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile b/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile index 4cda243ffb5a3d255dcea63e345650b42d861f89..6752091e699ff9c54dc19eb79bcf0a42648f6802 100644 --- a/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile +++ b/tests/run-make-fulldeps/hotplug_codegen_backend/Makefile @@ -1,4 +1,4 @@ -include ../tools.mk +include ../../run-make/tools.mk # ignore-stage1 diff --git a/tests/run-make-fulldeps/include_bytes_deps/Makefile b/tests/run-make-fulldeps/include_bytes_deps/Makefile deleted file mode 100644 index 696dfd207bbff7e04d0a9ed2f287a776b9f74167..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/include_bytes_deps/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -# ignore-freebsd - -all: - $(RUSTC) --emit dep-info main.rs - $(CGREP) "input.txt" "input.bin" "input.md" < $(TMPDIR)/main.d diff --git a/tests/run-make-fulldeps/include_bytes_deps/input.bin b/tests/run-make-fulldeps/include_bytes_deps/input.bin deleted file mode 100644 index cd0875583aabe89ee197ea133980a9085d08e497..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/include_bytes_deps/input.bin +++ /dev/null @@ -1 +0,0 @@ -Hello world! diff --git a/tests/run-make-fulldeps/include_bytes_deps/input.md b/tests/run-make-fulldeps/include_bytes_deps/input.md deleted file mode 100644 index 2a19b7405f795f88e9346104f4a843251e6eef2d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/include_bytes_deps/input.md +++ /dev/null @@ -1 +0,0 @@ -# Hello, world! diff --git a/tests/run-make-fulldeps/include_bytes_deps/input.txt b/tests/run-make-fulldeps/include_bytes_deps/input.txt deleted file mode 100644 index cd0875583aabe89ee197ea133980a9085d08e497..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/include_bytes_deps/input.txt +++ /dev/null @@ -1 +0,0 @@ -Hello world! diff --git a/tests/run-make-fulldeps/include_bytes_deps/main.rs b/tests/run-make-fulldeps/include_bytes_deps/main.rs deleted file mode 100644 index 2fd55699d44ddce99163b985a1f73468190ba115..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/include_bytes_deps/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[doc = include_str!("input.md")] -pub struct SomeStruct; - -pub fn main() { - const INPUT_TXT: &'static str = include_str!("input.txt"); - const INPUT_BIN: &'static [u8] = include_bytes!("input.bin"); - - println!("{}", INPUT_TXT); - println!("{:?}", INPUT_BIN); -} diff --git a/tests/run-make-fulldeps/incr-add-rust-src-component/Makefile b/tests/run-make-fulldeps/incr-add-rust-src-component/Makefile deleted file mode 100644 index 5c1d953cc05b6c1efc28285f42ac0061659d05a2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/incr-add-rust-src-component/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -include ../tools.mk - -# rust-lang/rust#70924: Test that if we add rust-src component in between two -# incremental compiles, the compiler does not ICE on the second. - -# This test uses `ln -s` rather than copying to save testing time, but its -# usage doesn't work on windows. So ignore windows. - -# ignore-windows - -SYSROOT:=$(shell $(RUSTC) --print sysroot) -FAKEROOT=$(TMPDIR)/fakeroot -INCR=$(TMPDIR)/incr - -# Make a local copy of the sysroot; then remove the rust-src part of it, if -# present, for the *first* build. Then put in a facsimile of the rust-src -# component for the second build, in order to expose the ICE from issue #70924. -# -# Note that it is much easier to just do `cp -a $(SYSROOT)/* $(FAKEROOT)` as a -# first step, but I am concerned that would be too expensive in a unit test -# compared to making symbolic links. -# -# Anyway, the pattern you'll see here is: For every prefix in -# root/lib/rustlib/src, link all of prefix parent content, then remove the -# prefix, then loop on the next prefix. This way, we basically create a copy of -# the context around root/lib/rustlib/src, and can freely add/remove the src -# component itself. -all: - mkdir $(FAKEROOT) - ln -s $(SYSROOT)/* $(FAKEROOT) - rm -f $(FAKEROOT)/lib - mkdir $(FAKEROOT)/lib - ln -s $(SYSROOT)/lib/* $(FAKEROOT)/lib - rm -f $(FAKEROOT)/lib/rustlib - mkdir $(FAKEROOT)/lib/rustlib - ln -s $(SYSROOT)/lib/rustlib/* $(FAKEROOT)/lib/rustlib - rm -f $(FAKEROOT)/lib/rustlib/src - mkdir $(FAKEROOT)/lib/rustlib/src - ln -s $(SYSROOT)/lib/rustlib/src/* $(FAKEROOT)/lib/rustlib/src - rm -f $(FAKEROOT)/lib/rustlib/src/rust - $(RUSTC) --sysroot $(FAKEROOT) -C incremental=$(INCR) main.rs - mkdir -p $(FAKEROOT)/lib/rustlib/src/rust/src/libstd - touch $(FAKEROOT)/lib/rustlib/src/rust/src/libstd/lib.rs - $(RUSTC) --sysroot $(FAKEROOT) -C incremental=$(INCR) main.rs diff --git a/tests/run-make-fulldeps/incr-add-rust-src-component/main.rs b/tests/run-make-fulldeps/incr-add-rust-src-component/main.rs deleted file mode 100644 index f6320bcb04aa8f747f266e1105886837414fd921..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/incr-add-rust-src-component/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello World"); -} diff --git a/tests/run-make-fulldeps/inline-always-many-cgu/Makefile b/tests/run-make-fulldeps/inline-always-many-cgu/Makefile deleted file mode 100644 index 9945821db289121aa60849b7a878aded3777928d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/inline-always-many-cgu/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs --emit llvm-ir -C codegen-units=2 - if cat $(TMPDIR)/*.ll | $(CGREP) -e '\bcall\b'; then \ - echo "found call instruction when one wasn't expected"; \ - exit 1; \ - fi diff --git a/tests/run-make-fulldeps/inline-always-many-cgu/foo.rs b/tests/run-make-fulldeps/inline-always-many-cgu/foo.rs deleted file mode 100644 index 65fe69c16fe7c0b34297eeb040859246c5b9ca4d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/inline-always-many-cgu/foo.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![crate_type = "lib"] - -pub mod a { - #[inline(always)] - pub fn foo() { - } - - pub fn bar() { - } -} - -#[no_mangle] -pub fn bar() { - a::foo(); -} diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/Makefile b/tests/run-make-fulldeps/interdependent-c-libraries/Makefile deleted file mode 100644 index dc5b55a99256e118dc628832c16f99cc49b62f61..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -include ../tools.mk - -# The rust crate foo will link to the native library foo, while the rust crate -# bar will link to the native library bar. There is also a dependency between -# the native library bar to the natibe library foo. -# -# This test ensures that the ordering of -lfoo and -lbar on the command line is -# correct to complete the linkage. If passed as "-lfoo -lbar", then the 'foo' -# library will be stripped out, and the linkage will fail. - -all: $(call NATIVE_STATICLIB,foo) $(call NATIVE_STATICLIB,bar) - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(RUSTC) main.rs --print link-args diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/bar.c b/tests/run-make-fulldeps/interdependent-c-libraries/bar.c deleted file mode 100644 index 812c97535287233599c6f936f6cd97be7f3ea5e6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/bar.c +++ /dev/null @@ -1,3 +0,0 @@ -void foo(); - -void bar() { foo(); } diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/bar.rs b/tests/run-make-fulldeps/interdependent-c-libraries/bar.rs deleted file mode 100644 index 3c2c3f218149480293e1f27a9028c052b2157c80..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/bar.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![crate_type = "rlib"] - -extern crate foo; - -#[link(name = "bar", kind = "static")] -extern "C" { - fn bar(); -} - -pub fn doit() { - unsafe { - bar(); - } -} diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/foo.c b/tests/run-make-fulldeps/interdependent-c-libraries/foo.c deleted file mode 100644 index 85e6cd8c3909a7e67c41750f5210b1463dd7a90c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/foo.c +++ /dev/null @@ -1 +0,0 @@ -void foo() {} diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/foo.rs b/tests/run-make-fulldeps/interdependent-c-libraries/foo.rs deleted file mode 100644 index a69809726c693b689216d6a3b8ed703a336a21f2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/foo.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "foo", kind = "static")] -extern "C" { - fn foo(); -} - -pub fn doit() { - unsafe { - foo(); - } -} diff --git a/tests/run-make-fulldeps/interdependent-c-libraries/main.rs b/tests/run-make-fulldeps/interdependent-c-libraries/main.rs deleted file mode 100644 index 2aba427df474380f006af18b35f76e475a8f9079..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/interdependent-c-libraries/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -extern crate foo; -extern crate bar; - -fn main() { - bar::doit(); -} diff --git a/tests/run-make-fulldeps/intrinsic-unreachable/Makefile b/tests/run-make-fulldeps/intrinsic-unreachable/Makefile deleted file mode 100644 index ff9cc57098c6bff2d203170fdd3fdafa2057f77e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/intrinsic-unreachable/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -# needs-asm-support -# ignore-windows-msvc -# -# Because of Windows exception handling, the code is not necessarily any shorter. -# https://github.com/llvm-mirror/llvm/commit/64b2297786f7fd6f5fa24cdd4db0298fbf211466 - -all: - $(RUSTC) -O --emit asm exit-ret.rs - $(RUSTC) -O --emit asm exit-unreachable.rs - test `wc -l < $(TMPDIR)/exit-unreachable.s` -lt `wc -l < $(TMPDIR)/exit-ret.s` diff --git a/tests/run-make-fulldeps/intrinsic-unreachable/exit-ret.rs b/tests/run-make-fulldeps/intrinsic-unreachable/exit-ret.rs deleted file mode 100644 index e7b9694d9f2ad6f20a2fb17d70f45b0550451f5c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/intrinsic-unreachable/exit-ret.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![crate_type="lib"] -use std::arch::asm; - -#[deny(unreachable_code)] -pub fn exit(n: usize) -> i32 { - unsafe { - // Pretend this asm is an exit() syscall. - asm!("/*{0}*/", in(reg) n); - } - // This return value is just here to generate some extra code for a return - // value, making it easier for the test script to detect whether the - // compiler deleted it. - 42 -} diff --git a/tests/run-make-fulldeps/intrinsic-unreachable/exit-unreachable.rs b/tests/run-make-fulldeps/intrinsic-unreachable/exit-unreachable.rs deleted file mode 100644 index ec85db733df04d59a3c461d3eb6c64f252c2f15c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/intrinsic-unreachable/exit-unreachable.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![feature(core_intrinsics)] -#![crate_type="lib"] -use std::arch::asm; - -use std::intrinsics; - -#[allow(unreachable_code)] -pub fn exit(n: usize) -> i32 { - unsafe { - // Pretend this asm is an exit() syscall. - asm!("/*{0}*/", in(reg) n); - intrinsics::unreachable() - } - // This return value is just here to generate some extra code for a return - // value, making it easier for the test script to detect whether the - // compiler deleted it. - 42 -} diff --git a/tests/run-make-fulldeps/invalid-library/Makefile b/tests/run-make-fulldeps/invalid-library/Makefile deleted file mode 100644 index 910d9af7b056498902f44fecc98278e607ce8a75..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/invalid-library/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - touch $(TMPDIR)/lib.rmeta - $(AR) crus $(TMPDIR)/libfoo-ffffffff-1.0.rlib $(TMPDIR)/lib.rmeta - $(RUSTC) foo.rs 2>&1 | $(CGREP) "found invalid metadata" diff --git a/tests/run-make-fulldeps/invalid-library/foo.rs b/tests/run-make-fulldeps/invalid-library/foo.rs deleted file mode 100644 index bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/invalid-library/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate foo; - -fn main() {} diff --git a/tests/run-make-fulldeps/invalid-staticlib/Makefile b/tests/run-make-fulldeps/invalid-staticlib/Makefile deleted file mode 100644 index 3f0f74ce3cb02c61e196b83baaea6ea5ef8d49ee..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/invalid-staticlib/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - touch $(TMPDIR)/libfoo.a - echo | $(RUSTC) - --crate-type=rlib -lstatic=foo 2>&1 | $(CGREP) "failed to add native library" diff --git a/tests/run-make-fulldeps/issue-11908/Makefile b/tests/run-make-fulldeps/issue-11908/Makefile deleted file mode 100644 index 47005537e41af7afe86ccd472083eb8bb44b933a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-11908/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# This test ensures that if you have the same rlib or dylib at two locations -# in the same path that you don't hit an assertion in the compiler. -# -# Note that this relies on `liburl` to be in the path somewhere else, -# and then our aux-built libraries will collide with liburl (they have -# the same version listed) - -include ../tools.mk - -all: - mkdir $(TMPDIR)/other - $(RUSTC) foo.rs --crate-type=dylib -C prefer-dynamic - mv $(call DYLIB,foo) $(TMPDIR)/other - $(RUSTC) foo.rs --crate-type=dylib -C prefer-dynamic - $(RUSTC) bar.rs -L $(TMPDIR)/other - rm -rf $(TMPDIR) - mkdir -p $(TMPDIR)/other - $(RUSTC) foo.rs --crate-type=rlib - mv $(TMPDIR)/libfoo.rlib $(TMPDIR)/other - $(RUSTC) foo.rs --crate-type=rlib - $(RUSTC) bar.rs -L $(TMPDIR)/other diff --git a/tests/run-make-fulldeps/issue-11908/bar.rs b/tests/run-make-fulldeps/issue-11908/bar.rs deleted file mode 100644 index bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-11908/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate foo; - -fn main() {} diff --git a/tests/run-make-fulldeps/issue-11908/foo.rs b/tests/run-make-fulldeps/issue-11908/foo.rs deleted file mode 100644 index 82b2dfe9fdb5152d916ac847baaa15e7f801745e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-11908/foo.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_name = "foo"] diff --git a/tests/run-make-fulldeps/issue-14500/Makefile b/tests/run-make-fulldeps/issue-14500/Makefile deleted file mode 100644 index 52550e57018e42d9a9ab0b7beeb83676bc99b9a7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14500/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include ../tools.mk - -# Test to make sure that reachable extern fns are always available in final -# productcs, including when LTO is used. In this test, the `foo` crate has a -# reahable symbol, and is a dependency of the `bar` crate. When the `bar` crate -# is compiled with LTO, it shouldn't strip the symbol from `foo`, and that's the -# only way that `foo.c` will successfully compile. - -all: - $(RUSTC) foo.rs --crate-type=rlib - $(RUSTC) bar.rs --crate-type=staticlib -C lto -L. -o $(TMPDIR)/libbar.a - $(CC) foo.c $(TMPDIR)/libbar.a $(EXTRACFLAGS) $(call OUT_EXE,foo) - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/issue-14500/bar.rs b/tests/run-make-fulldeps/issue-14500/bar.rs deleted file mode 100644 index 49af74e1b748908873bf49dfcd2239724b7ab495..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14500/bar.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate foo; diff --git a/tests/run-make-fulldeps/issue-14500/foo.c b/tests/run-make-fulldeps/issue-14500/foo.c deleted file mode 100644 index 2353d400df3038297225eb9f5c3c4eee01dea913..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14500/foo.c +++ /dev/null @@ -1,7 +0,0 @@ -extern void foo(); -extern char FOO_STATIC; - -int main() { - foo(); - return (int)FOO_STATIC; -} diff --git a/tests/run-make-fulldeps/issue-14500/foo.rs b/tests/run-make-fulldeps/issue-14500/foo.rs deleted file mode 100644 index 7c19c1f2c678a632c43cd1db85bca5b8e2b38cca..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14500/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[no_mangle] -pub extern "C" fn foo() {} - -#[no_mangle] -pub static FOO_STATIC: u8 = 0; diff --git a/tests/run-make-fulldeps/issue-14698/Makefile b/tests/run-make-fulldeps/issue-14698/Makefile deleted file mode 100644 index a1cfb5abab5411ef8daa57a54102416675af4500..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14698/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - TMP=fake TMPDIR=fake $(RUSTC) foo.rs 2>&1 | $(CGREP) "couldn't create a temp dir:" diff --git a/tests/run-make-fulldeps/issue-14698/foo.rs b/tests/run-make-fulldeps/issue-14698/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-14698/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/issue-15460/Makefile b/tests/run-make-fulldeps/issue-15460/Makefile deleted file mode 100644 index 1648d0c0c9b844810d7c0ca8accb12279d8eb6a3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-15460/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,foo) - $(RUSTC) foo.rs -C extra-filename=-383hf8 -C prefer-dynamic - $(RUSTC) bar.rs - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/issue-15460/bar.rs b/tests/run-make-fulldeps/issue-15460/bar.rs deleted file mode 100644 index e66aeb6bd39e6cfa627555237f8b774f656bfeb0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-15460/bar.rs +++ /dev/null @@ -1,4 +0,0 @@ -extern crate foo; -fn main() { - unsafe { foo::foo() } -} diff --git a/tests/run-make-fulldeps/issue-15460/foo.c b/tests/run-make-fulldeps/issue-15460/foo.c deleted file mode 100644 index fdf595b574e3397280431138651de0bfd5c85c6f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-15460/foo.c +++ /dev/null @@ -1,6 +0,0 @@ -// ignore-license - -#ifdef _WIN32 -__declspec(dllexport) -#endif -void foo() {} diff --git a/tests/run-make-fulldeps/issue-15460/foo.rs b/tests/run-make-fulldeps/issue-15460/foo.rs deleted file mode 100644 index b4eaa0b31c5be9bc67602cfeb1e60c2e09f4e71d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-15460/foo.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "dylib"] - -#[link(name = "foo", kind = "static")] -extern "C" { - pub fn foo(); -} diff --git a/tests/run-make-fulldeps/issue-18943/Makefile b/tests/run-make-fulldeps/issue-18943/Makefile deleted file mode 100644 index fc40d756d6f21650a7e641741638a4be60bfecb4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-18943/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -# Regression test for ICE #18943 when compiling as lib - -all: - $(RUSTC) foo.rs --crate-type lib - $(call REMOVE_RLIBS,foo) && exit 0 || exit 1 diff --git a/tests/run-make-fulldeps/issue-18943/foo.rs b/tests/run-make-fulldeps/issue-18943/foo.rs deleted file mode 100644 index d18400dd3a54b6e23c3d89e8550d782c458a8cb9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-18943/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -trait Foo { } - -trait Bar { } - -impl<'a> Foo for Bar + 'a { } diff --git a/tests/run-make-fulldeps/issue-19371/Makefile b/tests/run-make-fulldeps/issue-19371/Makefile index 994e50801c817102730bdd7a2736070faa928fe9..edec68f0862329645d22ba57f2a04ec4af92a304 100644 --- a/tests/run-make-fulldeps/issue-19371/Makefile +++ b/tests/run-make-fulldeps/issue-19371/Makefile @@ -1,4 +1,4 @@ -include ../tools.mk +include ../../run-make/tools.mk # This test ensures that rustc compile_input can be called twice in one task # without causing a panic. diff --git a/tests/run-make-fulldeps/issue-20626/Makefile b/tests/run-make-fulldeps/issue-20626/Makefile deleted file mode 100644 index f76f31e794af15da81448d82e9be7fe0adbbe573..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-20626/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -# Test output to be four -# The original error only occurred when printing, not when comparing using assert! - -all: - $(RUSTC) foo.rs -O - [ `$(call RUN,foo)` = "4" ] diff --git a/tests/run-make-fulldeps/issue-20626/foo.rs b/tests/run-make-fulldeps/issue-20626/foo.rs deleted file mode 100644 index a474e234e72d0b5b83cdd340bd8071867f3b5651..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-20626/foo.rs +++ /dev/null @@ -1,13 +0,0 @@ -fn identity(a: &u32) -> &u32 { a } - -fn print_foo(f: &fn(&u32) -> &u32, x: &u32) { - print!("{}", (*f)(x)); -} - -fn main() { - let x = &4; - let f: fn(&u32) -> &u32 = identity; - - // Didn't print 4 on optimized builds - print_foo(&f, x); -} diff --git a/tests/run-make-fulldeps/issue-22131/Makefile b/tests/run-make-fulldeps/issue-22131/Makefile deleted file mode 100644 index 770f4b04ec3582357347468c640fc4f076bd9fa2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-22131/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: foo.rs - $(RUSTC) --cfg 'feature="bar"' --crate-type lib foo.rs - $(RUSTDOC) --test --cfg 'feature="bar"' \ - -L $(TMPDIR) foo.rs |\ - $(CGREP) 'foo.rs - foo (line 1) ... ok' diff --git a/tests/run-make-fulldeps/issue-22131/foo.rs b/tests/run-make-fulldeps/issue-22131/foo.rs deleted file mode 100644 index 33255d76879f33c84785a988bdc2c44a8047266d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-22131/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -/// ```rust -/// assert_eq!(foo::foo(), 1); -/// ``` -#[cfg(feature = "bar")] -pub fn foo() -> i32 { 1 } diff --git a/tests/run-make-fulldeps/issue-24445/Makefile b/tests/run-make-fulldeps/issue-24445/Makefile deleted file mode 100644 index 2a12226a6c037cfd033cde033633bc059e7224cf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-24445/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -# only-linux - -all: - $(RUSTC) foo.rs - $(CC) foo.c -lfoo -L $(TMPDIR) -Wl,--gc-sections -lpthread -ldl -o $(TMPDIR)/foo - $(call RUN,foo) - $(CC) foo.c -lfoo -L $(TMPDIR) -Wl,--gc-sections -lpthread -ldl -pie -fPIC -o $(TMPDIR)/foo - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/issue-24445/foo.c b/tests/run-make-fulldeps/issue-24445/foo.c deleted file mode 100644 index bb4036b06e13b79a32ec78ae04db97590f54b2cc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-24445/foo.c +++ /dev/null @@ -1,6 +0,0 @@ -void foo(); - -int main() { - foo(); - return 0; -} diff --git a/tests/run-make-fulldeps/issue-24445/foo.rs b/tests/run-make-fulldeps/issue-24445/foo.rs deleted file mode 100644 index b67f3847cd4986ed227286b2e32a234ef0561191..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-24445/foo.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![crate_type = "staticlib"] - -struct Destroy; -impl Drop for Destroy { - fn drop(&mut self) { println!("drop"); } -} - -thread_local! { - static X: Destroy = Destroy -} - -#[no_mangle] -pub extern "C" fn foo() { - X.with(|_| ()); -} diff --git a/tests/run-make-fulldeps/issue-25581/Makefile b/tests/run-make-fulldeps/issue-25581/Makefile deleted file mode 100644 index 4f5d026f213f282dfc24a32484b2110bf6e36ffd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-25581/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) test.rs - $(call RUN,test) || exit 1 diff --git a/tests/run-make-fulldeps/issue-25581/test.c b/tests/run-make-fulldeps/issue-25581/test.c deleted file mode 100644 index 52fbf78510a88f98951ec1ca0fbf53883329b307..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-25581/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include - -struct ByteSlice { - uint8_t *data; - size_t len; -}; - -size_t slice_len(struct ByteSlice bs) { - return bs.len; -} - -uint8_t slice_elem(struct ByteSlice bs, size_t idx) { - return bs.data[idx]; -} diff --git a/tests/run-make-fulldeps/issue-25581/test.rs b/tests/run-make-fulldeps/issue-25581/test.rs deleted file mode 100644 index ba6749c9722241dd4a89b19de8db4b010006df7f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-25581/test.rs +++ /dev/null @@ -1,18 +0,0 @@ -#[link(name = "test", kind = "static")] -extern "C" { - fn slice_len(s: &[u8]) -> usize; - fn slice_elem(s: &[u8], idx: usize) -> u8; -} - -fn main() { - let data = [1, 2, 3, 4, 5]; - - unsafe { - assert_eq!(data.len(), slice_len(&data) as usize); - assert_eq!(data[0], slice_elem(&data, 0)); - assert_eq!(data[1], slice_elem(&data, 1)); - assert_eq!(data[2], slice_elem(&data, 2)); - assert_eq!(data[3], slice_elem(&data, 3)); - assert_eq!(data[4], slice_elem(&data, 4)); - } -} diff --git a/tests/run-make-fulldeps/issue-26006/Makefile b/tests/run-make-fulldeps/issue-26006/Makefile deleted file mode 100644 index 0ff0730200250c4eef7a0c1ae9ac3d0541d866c5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-26006/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include ../tools.mk - -# ignore-windows - -OUT := $(TMPDIR)/out - -all: time - -time: libc - mkdir -p $(OUT)/time $(OUT)/time/deps - ln -sf $(OUT)/libc/liblibc.rlib $(OUT)/time/deps/ - $(RUSTC) in/time/lib.rs -Ldependency=$(OUT)/time/deps/ - -libc: - mkdir -p $(OUT)/libc - $(RUSTC) in/libc/lib.rs --crate-name=libc -Cmetadata=foo -o $(OUT)/libc/liblibc.rlib diff --git a/tests/run-make-fulldeps/issue-26006/in/libc/lib.rs b/tests/run-make-fulldeps/issue-26006/in/libc/lib.rs deleted file mode 100644 index 23f2bf51800a388226e02d77dc0e4af5d1b6dff8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-26006/in/libc/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type="rlib"] - -pub fn something(){} diff --git a/tests/run-make-fulldeps/issue-26006/in/time/lib.rs b/tests/run-make-fulldeps/issue-26006/in/time/lib.rs deleted file mode 100644 index 87f2f824a36695c6c440d6c70ea203513c9d1cd3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-26006/in/time/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![feature(rustc_private)] -extern crate libc; - -fn main(){} diff --git a/tests/run-make-fulldeps/issue-26092/Makefile b/tests/run-make-fulldeps/issue-26092/Makefile deleted file mode 100644 index 96822e7690bef71ea3e9ca7487836e98cf348955..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-26092/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -# This test ensures that rustc does not panic with `-o ""` option. - -all: - $(RUSTC) -o "" blank.rs 2>&1 | $(CGREP) -i 'panic' && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/issue-26092/blank.rs b/tests/run-make-fulldeps/issue-26092/blank.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-26092/blank.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/issue-28595/Makefile b/tests/run-make-fulldeps/issue-28595/Makefile deleted file mode 100644 index 30a1d9c560a96a85bbd20968a8f2ed2d56a08821..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28595/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,a) $(call NATIVE_STATICLIB,b) - $(RUSTC) a.rs - $(RUSTC) b.rs - $(call RUN,b) diff --git a/tests/run-make-fulldeps/issue-28595/a.c b/tests/run-make-fulldeps/issue-28595/a.c deleted file mode 100644 index 7bfd83cca210a92f53d831ff0eab2eedf45051d1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28595/a.c +++ /dev/null @@ -1 +0,0 @@ -void a(void) {} diff --git a/tests/run-make-fulldeps/issue-28595/a.rs b/tests/run-make-fulldeps/issue-28595/a.rs deleted file mode 100644 index 07863cf64d6e9de0766f1816b22ddf9028b9b6a5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28595/a.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "a", kind = "static")] -extern "C" { - pub fn a(); -} diff --git a/tests/run-make-fulldeps/issue-28595/b.c b/tests/run-make-fulldeps/issue-28595/b.c deleted file mode 100644 index 6aecb5f9e04c0058b0ed06452d700897a38b5951..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28595/b.c +++ /dev/null @@ -1,5 +0,0 @@ -extern void a(void); - -void b(void) { - a(); -} diff --git a/tests/run-make-fulldeps/issue-28595/b.rs b/tests/run-make-fulldeps/issue-28595/b.rs deleted file mode 100644 index 1f389859fad73414695390b5b61fd999a0b43c11..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28595/b.rs +++ /dev/null @@ -1,12 +0,0 @@ -extern crate a; - -#[link(name = "b", kind = "static")] -extern "C" { - pub fn b(); -} - -fn main() { - unsafe { - b(); - } -} diff --git a/tests/run-make-fulldeps/issue-28766/Makefile b/tests/run-make-fulldeps/issue-28766/Makefile deleted file mode 100644 index 96d0bdc2b2aea99d05264ad289d2bf6bae114ad2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28766/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -O foo.rs - $(RUSTC) -O -L $(TMPDIR) main.rs diff --git a/tests/run-make-fulldeps/issue-28766/foo.rs b/tests/run-make-fulldeps/issue-28766/foo.rs deleted file mode 100644 index 1dcabe42dc11672121f1e50c935f5b178d295a1b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28766/foo.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type="lib"] -pub struct Foo(()); - -impl Foo { - pub fn new() -> Foo { - Foo(()) - } -} diff --git a/tests/run-make-fulldeps/issue-28766/main.rs b/tests/run-make-fulldeps/issue-28766/main.rs deleted file mode 100644 index de12b1fd9dc3de2933f3462af407b2174f456328..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-28766/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_type="lib"] -extern crate foo; -use foo::Foo; - -pub fn crash() -> Box { - Box::new(Foo::new()) -} diff --git a/tests/run-make-fulldeps/issue-30063/Makefile b/tests/run-make-fulldeps/issue-30063/Makefile deleted file mode 100644 index e4ede598f7be83372c1d046aaab2208d61063ee8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-30063/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -include ../tools.mk - -all: - rm -f $(TMPDIR)/foo-output - $(RUSTC) -C codegen-units=4 -o $(TMPDIR)/foo-output foo.rs - rm $(TMPDIR)/foo-output - - rm -f $(TMPDIR)/asm-output - $(RUSTC) -C codegen-units=4 --emit=asm -o $(TMPDIR)/asm-output foo.rs - rm $(TMPDIR)/asm-output - - rm -f $(TMPDIR)/bc-output - $(RUSTC) -C codegen-units=4 --emit=llvm-bc -o $(TMPDIR)/bc-output foo.rs - rm $(TMPDIR)/bc-output - - rm -f $(TMPDIR)/ir-output - $(RUSTC) -C codegen-units=4 --emit=llvm-ir -o $(TMPDIR)/ir-output foo.rs - rm $(TMPDIR)/ir-output - - rm -f $(TMPDIR)/link-output - $(RUSTC) -C codegen-units=4 --emit=link -o $(TMPDIR)/link-output foo.rs - rm $(TMPDIR)/link-output - - rm -f $(TMPDIR)/obj-output - $(RUSTC) -C codegen-units=4 --emit=obj -o $(TMPDIR)/obj-output foo.rs - rm $(TMPDIR)/obj-output - - rm -f $(TMPDIR)/dep-output - $(RUSTC) -C codegen-units=4 --emit=dep-info -o $(TMPDIR)/dep-output foo.rs - rm $(TMPDIR)/dep-output - -# # (This case doesn't work yet, and may be fundamentally wrong-headed anyway.) -# rm -f $(TMPDIR)/multi-output -# $(RUSTC) -C codegen-units=4 --emit=asm,obj -o $(TMPDIR)/multi-output foo.rs -# rm $(TMPDIR)/multi-output diff --git a/tests/run-make-fulldeps/issue-30063/foo.rs b/tests/run-make-fulldeps/issue-30063/foo.rs deleted file mode 100644 index 45590d86ba6c51f0babffb0b43e3e2f44d2f9e07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-30063/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() { } diff --git a/tests/run-make-fulldeps/issue-33329/Makefile b/tests/run-make-fulldeps/issue-33329/Makefile deleted file mode 100644 index 9c149440d8ec4347235df47086b86712b859c27f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-33329/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --target x86_64_unknown-linux-musl main.rs 2>&1 | $(CGREP) \ - "error: Error loading target specification: Could not find specification for target" diff --git a/tests/run-make-fulldeps/issue-33329/main.rs b/tests/run-make-fulldeps/issue-33329/main.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-33329/main.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/issue-35164/Makefile b/tests/run-make-fulldeps/issue-35164/Makefile deleted file mode 100644 index 38aa6f1265f1e2ec267fe32c1ff0fd237a70c76c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-35164/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) main.rs --error-format json 2>&1 | $(CGREP) -e '"byte_start":23\b' '"byte_end":29\b' diff --git a/tests/run-make-fulldeps/issue-35164/main.rs b/tests/run-make-fulldeps/issue-35164/main.rs deleted file mode 100644 index 1333d63224c0730f4f32aad8e3243ad33e1c54aa..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-35164/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod submodule; - -fn main() { - submodule::foo(); -} diff --git a/tests/run-make-fulldeps/issue-35164/submodule/mod.rs b/tests/run-make-fulldeps/issue-35164/submodule/mod.rs deleted file mode 100644 index a9045b242fb3db2b21d5191f1fcc6b170619f642..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-35164/submodule/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn foo() { - let _MyFoo = 2; -} diff --git a/tests/run-make-fulldeps/issue-37839/Makefile b/tests/run-make-fulldeps/issue-37839/Makefile deleted file mode 100644 index de50bd7137968d5611daecf22ad23973dee47e43..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37839/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) a.rs && $(RUSTC) b.rs - $(BARE_RUSTC) c.rs -L dependency=$(TMPDIR) --extern b=$(TMPDIR)/libb.rlib \ - --out-dir=$(TMPDIR) diff --git a/tests/run-make-fulldeps/issue-37839/a.rs b/tests/run-make-fulldeps/issue-37839/a.rs deleted file mode 100644 index b5dffac3ff6a1f9e446767ef0358f31d00300178..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37839/a.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![allow(unused)] -#![crate_type = "proc-macro"] diff --git a/tests/run-make-fulldeps/issue-37839/b.rs b/tests/run-make-fulldeps/issue-37839/b.rs deleted file mode 100644 index 355d2b165274bfbbd24d24e0b995f32700619796..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37839/b.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -#[macro_use] extern crate a; diff --git a/tests/run-make-fulldeps/issue-37839/c.rs b/tests/run-make-fulldeps/issue-37839/c.rs deleted file mode 100644 index 4c7ce01b6a02c7a4ad8bf335d5c408c522bd3ec4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37839/c.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -extern crate b; diff --git a/tests/run-make-fulldeps/issue-37893/Makefile b/tests/run-make-fulldeps/issue-37893/Makefile deleted file mode 100644 index 33a60830e5d190333296b4d40d0b3a5d627d3da4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37893/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) a.rs && $(RUSTC) b.rs && $(RUSTC) c.rs diff --git a/tests/run-make-fulldeps/issue-37893/a.rs b/tests/run-make-fulldeps/issue-37893/a.rs deleted file mode 100644 index b5dffac3ff6a1f9e446767ef0358f31d00300178..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37893/a.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![allow(unused)] -#![crate_type = "proc-macro"] diff --git a/tests/run-make-fulldeps/issue-37893/b.rs b/tests/run-make-fulldeps/issue-37893/b.rs deleted file mode 100644 index 355d2b165274bfbbd24d24e0b995f32700619796..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37893/b.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -#[macro_use] extern crate a; diff --git a/tests/run-make-fulldeps/issue-37893/c.rs b/tests/run-make-fulldeps/issue-37893/c.rs deleted file mode 100644 index b9c2155728cb78a85c9d0fade17ed425a3ed597a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-37893/c.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "staticlib"] -extern crate b; -extern crate a; diff --git a/tests/run-make-fulldeps/issue-38237/Makefile b/tests/run-make-fulldeps/issue-38237/Makefile deleted file mode 100644 index 75121d04012435cb3f2fcd3d80a946d6b5456296..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-38237/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs; $(RUSTC) bar.rs - $(RUSTDOC) baz.rs -L $(TMPDIR) -o $(TMPDIR) diff --git a/tests/run-make-fulldeps/issue-38237/bar.rs b/tests/run-make-fulldeps/issue-38237/bar.rs deleted file mode 100644 index 2b839f3a3b334d68f42ca90eeea5a3d45b8f4279..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-38237/bar.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "lib"] - -#[derive(Debug)] -pub struct S; diff --git a/tests/run-make-fulldeps/issue-38237/baz.rs b/tests/run-make-fulldeps/issue-38237/baz.rs deleted file mode 100644 index cd2425f9b692bd2dc291cf2a47a10862cb23b04b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-38237/baz.rs +++ /dev/null @@ -1,8 +0,0 @@ -extern crate foo; -extern crate bar; - -pub struct Bar; -impl ::std::ops::Deref for Bar { - type Target = bar::S; - fn deref(&self) -> &Self::Target { unimplemented!() } -} diff --git a/tests/run-make-fulldeps/issue-38237/foo.rs b/tests/run-make-fulldeps/issue-38237/foo.rs deleted file mode 100644 index a106e4fde5cc362ce54139640576adbfd0502c90..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-38237/foo.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![crate_type = "proc-macro"] - -extern crate proc_macro; - -#[proc_macro_derive(A)] -pub fn derive(ts: proc_macro::TokenStream) -> proc_macro::TokenStream { ts } - -#[derive(Debug)] -struct S; diff --git a/tests/run-make-fulldeps/issue-40535/Makefile b/tests/run-make-fulldeps/issue-40535/Makefile deleted file mode 100644 index 155c88252144ddf00a0794d290f43cda73c95073..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-40535/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include ../tools.mk - -# The ICE occurred in the following situation: -# * `foo` declares `extern crate bar, baz`, depends only on `bar` (forgetting `baz` in `Cargo.toml`) -# * `bar` declares and depends on `extern crate baz` -# * All crates built in metadata-only mode (`cargo check`) -all: - # cc https://github.com/rust-lang/rust/issues/40623 - $(RUSTC) baz.rs --emit=metadata - $(RUSTC) bar.rs --emit=metadata --extern baz=$(TMPDIR)/libbaz.rmeta - $(RUSTC) foo.rs --emit=metadata --extern bar=$(TMPDIR)/libbar.rmeta 2>&1 | \ - $(CGREP) -v "unexpectedly panicked" - # ^ Succeeds if it doesn't find the ICE message diff --git a/tests/run-make-fulldeps/issue-40535/bar.rs b/tests/run-make-fulldeps/issue-40535/bar.rs deleted file mode 100644 index b02b28f59d9eff76dcabc33d1c19c8079813cc38..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-40535/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "lib"] - -extern crate baz; diff --git a/tests/run-make-fulldeps/issue-40535/baz.rs b/tests/run-make-fulldeps/issue-40535/baz.rs deleted file mode 100644 index 83be6e807e0b9bc42f55f3df77db7a1e99b3d93c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-40535/baz.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/issue-40535/foo.rs b/tests/run-make-fulldeps/issue-40535/foo.rs deleted file mode 100644 index 270202664257b85a8e627d7d33b30fee14707226..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-40535/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "lib"] - -extern crate bar; -extern crate baz; diff --git a/tests/run-make-fulldeps/issue-46239/Makefile b/tests/run-make-fulldeps/issue-46239/Makefile deleted file mode 100644 index a93ef32129846d26ebce3ebdb207b47d434e2b41..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-46239/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) main.rs -C opt-level=1 - $(call RUN,main) diff --git a/tests/run-make-fulldeps/issue-46239/main.rs b/tests/run-make-fulldeps/issue-46239/main.rs deleted file mode 100644 index b7df5cf4d81287528f010ae7494dd41c18253401..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-46239/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn project(x: &(T,)) -> &T { &x.0 } - -fn dummy() {} - -fn main() { - let f = (dummy as fn(),); - (*project(&f))(); -} diff --git a/tests/run-make-fulldeps/issue-47551/Makefile b/tests/run-make-fulldeps/issue-47551/Makefile deleted file mode 100644 index 5a6ac725701b3ce2d3566de4fa506f1fc0e37988..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-47551/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# only-linux -# ignore-32bit - -include ../tools.mk - -all: - $(RUSTC) eh_frame-terminator.rs - $(call RUN,eh_frame-terminator) | $(CGREP) '1122334455667788' - objdump --dwarf=frames $(TMPDIR)/eh_frame-terminator | $(CGREP) 'ZERO terminator' diff --git a/tests/run-make-fulldeps/issue-47551/eh_frame-terminator.rs b/tests/run-make-fulldeps/issue-47551/eh_frame-terminator.rs deleted file mode 100644 index a2c7a31b7c329b7654e806575805d70ec24eb9d8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-47551/eh_frame-terminator.rs +++ /dev/null @@ -1,22 +0,0 @@ -// run-pass - -#[derive(Clone, Copy)] -struct Foo { - array: [u64; 10240], -} - -impl Foo { - const fn new() -> Self { - Self { - array: [0x1122_3344_5566_7788; 10240] - } - } -} - -static BAR: [Foo; 10240] = [Foo::new(); 10240]; - -fn main() { - let bt = std::backtrace::Backtrace::force_capture(); - println!("Hello, world! {:?}", bt); - println!("{:x}", BAR[0].array[0]); -} diff --git a/tests/run-make-fulldeps/issue-51671/Makefile b/tests/run-make-fulldeps/issue-51671/Makefile deleted file mode 100644 index c93645369928c4dce0ac7dd2399b456687a54f3b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-51671/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# ignore-windows-msvc - -all: - $(RUSTC) --emit=obj app.rs - nm $(TMPDIR)/app.o | $(CGREP) rust_begin_unwind - nm $(TMPDIR)/app.o | $(CGREP) rust_eh_personality - nm $(TMPDIR)/app.o | $(CGREP) __rg_oom diff --git a/tests/run-make-fulldeps/issue-51671/app.rs b/tests/run-make-fulldeps/issue-51671/app.rs deleted file mode 100644 index e9dc1e9744fb143a2c406f72de9425a33fde97b8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-51671/app.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![crate_type = "bin"] -#![feature(lang_items, alloc_error_handler)] -#![no_main] -#![no_std] - -use core::alloc::Layout; -use core::panic::PanicInfo; - -#[panic_handler] -fn panic(_: &PanicInfo) -> ! { - loop {} -} - -#[lang = "eh_personality"] -fn eh() {} - -#[alloc_error_handler] -fn oom(_: Layout) -> ! { - loop {} -} diff --git a/tests/run-make-fulldeps/issue-53964/Makefile b/tests/run-make-fulldeps/issue-53964/Makefile deleted file mode 100644 index 6bd83021374d915d15dfe8224ef7aae5c076d14a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-53964/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) panic.rs - $(RUSTC) -C panic=abort --emit=obj app.rs -L $(TMPDIR) diff --git a/tests/run-make-fulldeps/issue-53964/app.rs b/tests/run-make-fulldeps/issue-53964/app.rs deleted file mode 100644 index 8127b9578bfee96f8d2c383ed794597d1e4804bc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-53964/app.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type = "bin"] -#![no_main] -#![no_std] - -#![deny(unused_extern_crates)] - -// `panic` provides a `panic_handler` so it shouldn't trip the `unused_extern_crates` lint -extern crate panic; diff --git a/tests/run-make-fulldeps/issue-53964/panic.rs b/tests/run-make-fulldeps/issue-53964/panic.rs deleted file mode 100644 index a878120507172ef6007097c94e3ba184ee797c09..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-53964/panic.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "lib"] -#![feature(panic_handler)] -#![no_std] - -use core::panic::PanicInfo; - -#[panic_handler] -fn panic(_: &PanicInfo) -> ! { - loop {} -} diff --git a/tests/run-make-fulldeps/issue-64153/Makefile b/tests/run-make-fulldeps/issue-64153/Makefile deleted file mode 100644 index f42ea620fb9d13313b4ab3e1e22bc84bccf3b5cb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-64153/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -include ../tools.mk - -# `llvm-objdump`'s output looks different on windows than on other platforms. -# It should be enough to check on Unix platforms, so: -# ignore-windows - -# Staticlibs don't include Rust object files from upstream crates if the same -# code was already pulled into the lib via LTO. However, the bug described in -# https://github.com/rust-lang/rust/issues/64153 lead to this exclusion not -# working properly if the upstream crate was compiled with an explicit filename -# (via `-o`). -# -# This test makes sure that functions defined in the upstream crates do not -# appear twice in the final staticlib when listing all the symbols from it. - -all: - $(RUSTC) --crate-type rlib upstream.rs -o $(TMPDIR)/libupstream.rlib -Ccodegen-units=1 - $(RUSTC) --crate-type staticlib downstream.rs -Clto -Ccodegen-units=1 -o $(TMPDIR)/libdownstream.a - # Dump all the symbols from the staticlib into `syms` - "$(LLVM_BIN_DIR)"/llvm-objdump -t $(TMPDIR)/libdownstream.a > $(TMPDIR)/syms - # Count the global instances of `issue64153_test_function`. There'll be 2 - # if the `upstream` object file got erroneously included twice. - # The line we are testing for with the regex looks something like: - # 0000000000000000 g F .text.issue64153_test_function 00000023 issue64153_test_function - grep -c -e "[[:space:]]g[[:space:]]*F[[:space:]].*issue64153_test_function" $(TMPDIR)/syms > $(TMPDIR)/count - [ "$$(cat $(TMPDIR)/count)" -eq "1" ] diff --git a/tests/run-make-fulldeps/issue-64153/downstream.rs b/tests/run-make-fulldeps/issue-64153/downstream.rs deleted file mode 100644 index e03704665d46c40d1f840b37d3843e1c61ad5a42..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-64153/downstream.rs +++ /dev/null @@ -1,6 +0,0 @@ -extern crate upstream; - -#[no_mangle] -pub extern "C" fn foo() { - print!("1 + 1 = {}", upstream::issue64153_test_function(1)); -} diff --git a/tests/run-make-fulldeps/issue-64153/upstream.rs b/tests/run-make-fulldeps/issue-64153/upstream.rs deleted file mode 100644 index 861a00298ea3963d396193c1312703d8a5994f9a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-64153/upstream.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Make this function extern "C", public, and no-mangle, so that it gets -// exported from the downstream staticlib. -#[no_mangle] -pub extern "C" fn issue64153_test_function(x: u32) -> u32 { - x + 1 -} diff --git a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/Makefile b/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/Makefile deleted file mode 100644 index 13983f4ffe03aee51d0a616cc37c413c91329a49..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# Regression test for issue #68794 -# -# Verify that no text relocations are accidentally introduced by linking a -# minimal rust staticlib. -# -# The test links a rust static library into a shared library, and checks that -# the linker doesn't have to flag the resulting file as containing TEXTRELs. - -include ../tools.mk - -# only-linux - -all: - $(RUSTC) foo.rs - $(CC) bar.c $(call STATICLIB,foo) -fPIC -shared -o $(call DYLIB,bar) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - readelf -d $(call DYLIB,bar) | grep TEXTREL; test $$? -eq 1 diff --git a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/bar.c b/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/bar.c deleted file mode 100644 index bb4036b06e13b79a32ec78ae04db97590f54b2cc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/bar.c +++ /dev/null @@ -1,6 +0,0 @@ -void foo(); - -int main() { - foo(); - return 0; -} diff --git a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/foo.rs b/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/foo.rs deleted file mode 100644 index a3e865b638ed44fa2f7a17f1d540ef029e6cc2c3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-68794-textrel-on-minimal-lib/foo.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type = "staticlib"] - -#[no_mangle] -pub extern "C" fn foo(x: u32) { - // using the println! makes it so that enough code from the standard - // library is included (see issue #68794) - println!("foo: {}", x); -} diff --git a/tests/run-make-fulldeps/issue-69368/Makefile b/tests/run-make-fulldeps/issue-69368/Makefile deleted file mode 100644 index 41770475db04e9d1b8c3f7a5f7ee1b094334400b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-69368/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../tools.mk - -# Test that previously triggered a linker failure with root cause -# similar to one found in the issue #69368. -# -# The crate that provides oom lang item is missing some other lang -# items. Necessary to prevent the use of start-group / end-group. -# -# The weak lang items are defined in a separate compilation units, -# so that linker could omit them if not used. -# -# The crates that need those weak lang items are dependencies of -# crates that provide them. - -all: - $(RUSTC) a.rs - $(RUSTC) b.rs - $(RUSTC) c.rs diff --git a/tests/run-make-fulldeps/issue-69368/a.rs b/tests/run-make-fulldeps/issue-69368/a.rs deleted file mode 100644 index a54f429550e7435ed53fd6bc9f6361efceb9ee07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-69368/a.rs +++ /dev/null @@ -1,26 +0,0 @@ -#![crate_type = "rlib"] -#![feature(lang_items)] -#![feature(panic_unwind)] -#![no_std] - -extern crate panic_unwind; - -#[panic_handler] -pub fn panic_handler(_: &core::panic::PanicInfo) -> ! { - loop {} -} - -#[no_mangle] -extern "C" fn __rust_drop_panic() -> ! { - loop {} -} - -#[no_mangle] -extern "C" fn __rust_foreign_exception() -> ! { - loop {} -} - -#[lang = "eh_personality"] -fn eh_personality() { - loop {} -} diff --git a/tests/run-make-fulldeps/issue-69368/b.rs b/tests/run-make-fulldeps/issue-69368/b.rs deleted file mode 100644 index 4d6af0266563bddc124cb1e5710bd744ce027e4d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-69368/b.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type = "rlib"] -#![feature(alloc_error_handler)] -#![no_std] - -#[alloc_error_handler] -pub fn error_handler(_: core::alloc::Layout) -> ! { - panic!(); -} diff --git a/tests/run-make-fulldeps/issue-69368/c.rs b/tests/run-make-fulldeps/issue-69368/c.rs deleted file mode 100644 index 729c4249a053a8324b3688223b882284af798e16..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-69368/c.rs +++ /dev/null @@ -1,34 +0,0 @@ -#![crate_type = "bin"] -#![feature(start)] -#![no_std] - -extern crate alloc; -extern crate a; -extern crate b; - -use alloc::vec::Vec; -use core::alloc::*; - -struct Allocator; - -unsafe impl GlobalAlloc for Allocator { - unsafe fn alloc(&self, _: Layout) -> *mut u8 { - loop {} - } - - unsafe fn dealloc(&self, _: *mut u8, _: Layout) { - loop {} - } -} - -#[global_allocator] -static ALLOCATOR: Allocator = Allocator; - -#[start] -fn main(argc: isize, _argv: *const *const u8) -> isize { - let mut v = Vec::new(); - for i in 0..argc { - v.push(i); - } - v.iter().sum() -} diff --git a/tests/run-make-fulldeps/issue-7349/Makefile b/tests/run-make-fulldeps/issue-7349/Makefile deleted file mode 100644 index dc073b77fe128423cefa3d82c968fd3b403f4d33..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-7349/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# Test to make sure that inner functions within a polymorphic outer function -# don't get re-codegened when the outer function is monomorphized. The test -# code monomorphizes the outer functions several times, but the magic constants -# used in the inner functions should each appear only once in the generated IR. - -all: - $(RUSTC) foo.rs --emit=llvm-ir - [ "$$(grep -c 'ret i32 8675309' "$(TMPDIR)/foo.ll")" -eq "1" ] - [ "$$(grep -c 'ret i32 11235813' "$(TMPDIR)/foo.ll")" -eq "1" ] diff --git a/tests/run-make-fulldeps/issue-7349/foo.rs b/tests/run-make-fulldeps/issue-7349/foo.rs deleted file mode 100644 index 246a12595808b3efa96bf7dbb4e2f14813eacb49..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-7349/foo.rs +++ /dev/null @@ -1,22 +0,0 @@ -fn outer() { - #[allow(dead_code)] - fn inner() -> u32 { - 8675309 - } - inner(); -} - -extern "C" fn outer_foreign() { - #[allow(dead_code)] - fn inner() -> u32 { - 11235813 - } - inner(); -} - -fn main() { - outer::(); - outer::(); - outer_foreign::(); - outer_foreign::(); -} diff --git a/tests/run-make-fulldeps/issue-83045/Makefile b/tests/run-make-fulldeps/issue-83045/Makefile deleted file mode 100644 index fc180ccfe28e2448844e50f6aa32fc9cc22c2235..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-83045/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -# This test case creates a situation where the crate loader would run -# into an ICE when confronted with an invalid setup where it cannot -# find the dependency of a direct dependency. -# -# The test case makes sure that the compiler produces the expected -# error message but does not ICE immediately after. -# -# See https://github.com/rust-lang/rust/issues/83045 - -# This is a platform-independent issue, no need to waste time testing -# everywhere. -# only-x86_64 -# only-linux - -# NOTE: We use BARE_RUSTC below so that the compiler can't find liba.rlib -# If we used RUSTC the additional '-L TMPDIR' option would allow rustc to -# actually find the crate. -# -# We check that we get the expected error message -# But that we do not get an ICE - -all: - $(RUSTC) --crate-name=a --crate-type=rlib a.rs --verbose - $(RUSTC) --crate-name=b --crate-type=rlib --extern a=$(TMPDIR)/liba.rlib b.rs --verbose - $(BARE_RUSTC) --out-dir $(TMPDIR) \ - --extern b=$(TMPDIR)/libb.rlib \ - --crate-type=rlib \ - --edition=2018 \ - c.rs 2>&1 | tee $(TMPDIR)/output.txt || exit 0 - $(CGREP) E0519 < $(TMPDIR)/output.txt - $(CGREP) -v "internal compiler error" < $(TMPDIR)/output.txt diff --git a/tests/run-make-fulldeps/issue-83045/a.rs b/tests/run-make-fulldeps/issue-83045/a.rs deleted file mode 100644 index 66d9f758e9dde91e34fa87eb0b33161b1cac5e68..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-83045/a.rs +++ /dev/null @@ -1 +0,0 @@ -// empty on purpose diff --git a/tests/run-make-fulldeps/issue-83045/b.rs b/tests/run-make-fulldeps/issue-83045/b.rs deleted file mode 100644 index f4876cfa45736b96a43220f327316a896bed5cc5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-83045/b.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate a; diff --git a/tests/run-make-fulldeps/issue-83045/c.rs b/tests/run-make-fulldeps/issue-83045/c.rs deleted file mode 100644 index e0c4525499ed7150a9cb3e5167ed7b37a7ce5ebe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-83045/c.rs +++ /dev/null @@ -1 +0,0 @@ -use b as _; diff --git a/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/Makefile b/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/Makefile deleted file mode 100644 index 879ce174339a65b1a9af68f47158da3304239109..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# needs-matching-clang - -# This test makes sure the embed bitcode in elf created with -# lto-embed-bitcode=optimized is valid llvm BC module. - -include ../../run-make-fulldeps/tools.mk - -all: - $(RUSTC) test.rs --target $(TARGET) -Clink-arg=-fuse-ld=lld -Clinker-plugin-lto -Clinker=$(CLANG) -Clink-arg=-Wl,--plugin-opt=-lto-embed-bitcode=optimized -Zemit-thin-lto=no - $(LLVM_BIN_DIR)/objcopy --dump-section .llvmbc=$(TMPDIR)/test.bc $(TMPDIR)/test - $(LLVM_BIN_DIR)/llvm-dis $(TMPDIR)/test.bc diff --git a/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/test.rs b/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/test.rs deleted file mode 100644 index 47ad8c634112b312f330c58f581a654f46618be7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-84395-lto-embed-bitcode/test.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello World!"); -} diff --git a/tests/run-make-fulldeps/issue-97463-abi-param-passing/Makefile b/tests/run-make-fulldeps/issue-97463-abi-param-passing/Makefile deleted file mode 100644 index db1b53e152eae8194ab70e7befe5df8d01a45a25..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-97463-abi-param-passing/Makefile +++ /dev/null @@ -1,14 +0,0 @@ --include ../tools.mk - -# ignore-msvc - -# The issue exercised by this test, rust-lang/rust#97463, explicitly needs `-O` -# flags (like `-O3`) to reproduce. Thus, we call $(CC) instead of nicer -# alternatives provided by tools.mk like using `COMPILE_OBJ` or using a -# `NATIVE_STATICLIB` dependency. - -all: - $(CC) -c -O3 -o $(TMPDIR)/bad.o bad.c - $(AR) rcs $(TMPDIR)/libbad.a $(TMPDIR)/bad.o - $(RUSTC) param_passing.rs -L$(TMPDIR) -lbad -C opt-level=3 - $(call RUN,param_passing) diff --git a/tests/run-make-fulldeps/issue-97463-abi-param-passing/bad.c b/tests/run-make-fulldeps/issue-97463-abi-param-passing/bad.c deleted file mode 100644 index 013314ab20dc40409762e5c983e24cbf5712107b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-97463-abi-param-passing/bad.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include - - -struct bloc { - uint16_t a; - uint16_t b; - uint16_t c; -}; - -uint16_t c_read_value(uint32_t a, uint32_t b, uint32_t c) { - struct bloc *data = malloc(sizeof(struct bloc)); - - data->a = a & 0xFFFF; - data->b = b & 0xFFFF; - data->c = c & 0xFFFF; - - printf("C struct: a = %u, b = %u, c = %u\n", - (unsigned) data->a, (unsigned) data->b, (unsigned) data->c); - printf("C function returns %u\n", (unsigned) data->b); - - return data->b; /* leak data */ -} diff --git a/tests/run-make-fulldeps/issue-97463-abi-param-passing/param_passing.rs b/tests/run-make-fulldeps/issue-97463-abi-param-passing/param_passing.rs deleted file mode 100644 index c11f3cc72bdf26238dc19242ce0266c9c8e64a6e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue-97463-abi-param-passing/param_passing.rs +++ /dev/null @@ -1,38 +0,0 @@ -// NOTE: Exposing the bug encoded in this test is sensitive to -// LLVM optimization choices. See additional note below for an -// example. - -#[link(name = "bad")] -extern "C" { - pub fn c_read_value(a: u32, b: u32, c: u32) -> u16; -} - -fn main() { - const C1: usize = 0x327b23c6; - const C2: usize = C1 & 0xFFFF; - - let r1: usize = 0x0; - let r2: usize = C1; - let r3: usize = 0x0; - let value: u16 = unsafe { c_read_value(r1 as u32, r2 as u32, r3 as u32) }; - - // NOTE: as an example of the sensitivity of this test to optimization choices, - // uncommenting this block of code makes the bug go away on pnkfelix's machine. - // (But observing via `dbg!` doesn't hide the bug. At least sometimes.) - /* - println!("{}", value); - println!("{}", value as usize); - println!("{}", usize::from(value)); - println!("{}", (value as usize) & 0xFFFF); - */ - - let d1 = value; - let d2 = value as usize; - let d3 = usize::from(value); - let d4 = (value as usize) & 0xFFFF; - - let d = (&d1, &d2, &d3, &d4); - let d_ = (d1, d2, d3, d4); - - assert_eq!(((&(C2 as u16), &C2, &C2, &C2), (C2 as u16, C2, C2, C2)), (d, d_)); -} diff --git a/tests/run-make-fulldeps/issue64319/Makefile b/tests/run-make-fulldeps/issue64319/Makefile deleted file mode 100644 index ee0d177abc986a07aca4d8b2871bcd93f157db17..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue64319/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -# Different optimization levels imply different values for `-Zshare-generics`, -# so try out a whole bunch of combinations to make sure everything is compatible -all: - # First up, try some defaults - $(RUSTC) --crate-type rlib foo.rs - $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 - - # Next try mixing up some things explicitly - $(RUSTC) --crate-type rlib foo.rs -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no - $(RUSTC) --crate-type rlib foo.rs -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes - $(RUSTC) --crate-type rlib foo.rs -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no - $(RUSTC) --crate-type rlib foo.rs -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes - - # Now combine a whole bunch of options together - $(RUSTC) --crate-type rlib foo.rs - $(RUSTC) --crate-type dylib bar.rs - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 - $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 - $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 - $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -C opt-level=s - $(RUSTC) --crate-type dylib bar.rs -C opt-level=s -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -C opt-level=s -Z share-generics=yes - $(RUSTC) --crate-type dylib bar.rs -C opt-level=z - $(RUSTC) --crate-type dylib bar.rs -C opt-level=z -Z share-generics=no - $(RUSTC) --crate-type dylib bar.rs -C opt-level=z -Z share-generics=yes diff --git a/tests/run-make-fulldeps/issue64319/bar.rs b/tests/run-make-fulldeps/issue64319/bar.rs deleted file mode 100644 index 3895c0b6cdbb3d760b7df23c8934eca5da0210e8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue64319/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -pub fn bar() { - foo::foo(); -} diff --git a/tests/run-make-fulldeps/issue64319/foo.rs b/tests/run-make-fulldeps/issue64319/foo.rs deleted file mode 100644 index c54a238e9add7f8ae13a1602df43d48467bf2b57..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/issue64319/foo.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub fn foo() { - bar::(); -} - -pub fn bar() { - baz(); -} - -fn baz() {} diff --git a/tests/run-make-fulldeps/libs-through-symlinks/Makefile b/tests/run-make-fulldeps/libs-through-symlinks/Makefile deleted file mode 100644 index 45deaecb8406ad31f7032ed02465bc3ecca12140..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libs-through-symlinks/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# ignore-windows - -NAME := $(shell $(RUSTC) --print file-names foo.rs) - -all: - mkdir -p $(TMPDIR)/outdir - $(RUSTC) foo.rs -o $(TMPDIR)/outdir/$(NAME) - ln -nsf outdir/$(NAME) $(TMPDIR) - RUSTC_LOG=rustc_metadata::loader $(RUSTC) bar.rs diff --git a/tests/run-make-fulldeps/libs-through-symlinks/bar.rs b/tests/run-make-fulldeps/libs-through-symlinks/bar.rs deleted file mode 100644 index bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libs-through-symlinks/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate foo; - -fn main() {} diff --git a/tests/run-make-fulldeps/libs-through-symlinks/foo.rs b/tests/run-make-fulldeps/libs-through-symlinks/foo.rs deleted file mode 100644 index 8e3df2c6d4e512eee51487c129bb032c3c33a7ef..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libs-through-symlinks/foo.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "rlib"] -#![crate_name = "foo"] diff --git a/tests/run-make-fulldeps/libtest-json/Makefile b/tests/run-make-fulldeps/libtest-json/Makefile deleted file mode 100644 index 37b6cb9e2d4d52e6fe4f2a27f56157276492becc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libtest-json/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../tools.mk - -# Test expected libtest's JSON output - -OUTPUT_FILE_DEFAULT := $(TMPDIR)/libtest-json-output-default.json -OUTPUT_FILE_STDOUT_SUCCESS := $(TMPDIR)/libtest-json-output-stdout-success.json - -all: f.rs validate_json.py output-default.json output-stdout-success.json - $(RUSTC) --test f.rs - RUST_BACKTRACE=0 $(call RUN,f) -Z unstable-options --test-threads=1 --format=json > $(OUTPUT_FILE_DEFAULT) || true - RUST_BACKTRACE=0 $(call RUN,f) -Z unstable-options --test-threads=1 --format=json --show-output > $(OUTPUT_FILE_STDOUT_SUCCESS) || true - - cat $(OUTPUT_FILE_DEFAULT) | "$(PYTHON)" validate_json.py - cat $(OUTPUT_FILE_STDOUT_SUCCESS) | "$(PYTHON)" validate_json.py - - # Normalize the actual output and compare to expected output file - cat $(OUTPUT_FILE_DEFAULT) | sed 's/"exec_time": [0-9.]*/"exec_time": $$TIME/' | diff output-default.json - - cat $(OUTPUT_FILE_STDOUT_SUCCESS) | sed 's/"exec_time": [0-9.]*/"exec_time": $$TIME/' | diff output-stdout-success.json - diff --git a/tests/run-make-fulldeps/libtest-json/f.rs b/tests/run-make-fulldeps/libtest-json/f.rs deleted file mode 100644 index edfe25086ae9a83e5f07145ffdd27bb59e8e6331..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libtest-json/f.rs +++ /dev/null @@ -1,22 +0,0 @@ -#[test] -fn a() { - println!("print from successful test"); - // Should pass -} - -#[test] -fn b() { - assert!(false); -} - -#[test] -#[should_panic] -fn c() { - assert!(false); -} - -#[test] -#[ignore = "msg"] -fn d() { - assert!(false); -} diff --git a/tests/run-make-fulldeps/libtest-json/output-default.json b/tests/run-make-fulldeps/libtest-json/output-default.json deleted file mode 100644 index ad22b66eda69ffddfecce85d399558b857a22e02..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libtest-json/output-default.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "type": "suite", "event": "started", "test_count": 4 } -{ "type": "test", "event": "started", "name": "a" } -{ "type": "test", "name": "a", "event": "ok" } -{ "type": "test", "event": "started", "name": "b" } -{ "type": "test", "name": "b", "event": "failed", "stdout": "thread 'b' panicked at 'assertion failed: false', f.rs:9:5\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" } -{ "type": "test", "event": "started", "name": "c" } -{ "type": "test", "name": "c", "event": "ok" } -{ "type": "test", "event": "started", "name": "d" } -{ "type": "test", "name": "d", "event": "ignored", "message": "msg" } -{ "type": "suite", "event": "failed", "passed": 2, "failed": 1, "ignored": 1, "measured": 0, "filtered_out": 0, "exec_time": $TIME } diff --git a/tests/run-make-fulldeps/libtest-json/output-stdout-success.json b/tests/run-make-fulldeps/libtest-json/output-stdout-success.json deleted file mode 100644 index ec98172eb1c4ee63b2aa607fb0ca87cd2b815b9d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libtest-json/output-stdout-success.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "type": "suite", "event": "started", "test_count": 4 } -{ "type": "test", "event": "started", "name": "a" } -{ "type": "test", "name": "a", "event": "ok", "stdout": "print from successful test\n" } -{ "type": "test", "event": "started", "name": "b" } -{ "type": "test", "name": "b", "event": "failed", "stdout": "thread 'b' panicked at 'assertion failed: false', f.rs:9:5\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" } -{ "type": "test", "event": "started", "name": "c" } -{ "type": "test", "name": "c", "event": "ok", "stdout": "thread 'c' panicked at 'assertion failed: false', f.rs:15:5\n" } -{ "type": "test", "event": "started", "name": "d" } -{ "type": "test", "name": "d", "event": "ignored", "message": "msg" } -{ "type": "suite", "event": "failed", "passed": 2, "failed": 1, "ignored": 1, "measured": 0, "filtered_out": 0, "exec_time": $TIME } diff --git a/tests/run-make-fulldeps/libtest-json/validate_json.py b/tests/run-make-fulldeps/libtest-json/validate_json.py deleted file mode 100755 index 657f732f2bffd8804718c2e716c5754c55eb8536..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/libtest-json/validate_json.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python - -import sys -import json - -# Try to decode line in order to ensure it is a valid JSON document -for line in sys.stdin: - json.loads(line) diff --git a/tests/run-make-fulldeps/link-arg/Makefile b/tests/run-make-fulldeps/link-arg/Makefile deleted file mode 100644 index 103527c3e14d9093a71784e6989d31c705fc6882..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-arg/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk -RUSTC_FLAGS = -C link-arg="-lfoo" -C link-arg="-lbar" --print link-args - -all: - $(RUSTC) $(RUSTC_FLAGS) empty.rs | $(CGREP) lfoo lbar diff --git a/tests/run-make-fulldeps/link-arg/empty.rs b/tests/run-make-fulldeps/link-arg/empty.rs deleted file mode 100644 index 45590d86ba6c51f0babffb0b43e3e2f44d2f9e07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-arg/empty.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() { } diff --git a/tests/run-make-fulldeps/link-args-order/Makefile b/tests/run-make-fulldeps/link-args-order/Makefile deleted file mode 100644 index c562cc1b396fa3851249a868f809ee32f780aa8f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-args-order/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# ignore-msvc - -include ../tools.mk - -RUSTC_FLAGS = -C linker-flavor=ld -C link-arg=a -C link-args="b c" -C link-args="d e" -C link-arg=f -RUSTC_FLAGS_PRE = -C linker-flavor=ld -Z pre-link-arg=a -Z pre-link-args="b c" -Z pre-link-args="d e" -Z pre-link-arg=f - -all: - $(RUSTC) $(RUSTC_FLAGS) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"' - $(RUSTC) $(RUSTC_FLAGS_PRE) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"' diff --git a/tests/run-make-fulldeps/link-args-order/empty.rs b/tests/run-make-fulldeps/link-args-order/empty.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-args-order/empty.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/link-cfg/Makefile b/tests/run-make-fulldeps/link-cfg/Makefile deleted file mode 100644 index 0b25ccded0694f44318dbc17676c3b6f471ac069..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -include ../tools.mk - -all: $(call DYLIB,return1) $(call DYLIB,return2) $(call NATIVE_STATICLIB,return3) - ls $(TMPDIR) - $(BARE_RUSTC) --print cfg --target x86_64-unknown-linux-musl | $(CGREP) crt-static - - $(RUSTC) no-deps.rs --cfg foo - $(call RUN,no-deps) - $(RUSTC) no-deps.rs --cfg bar - $(call RUN,no-deps) - - $(RUSTC) dep.rs - $(RUSTC) with-deps.rs --cfg foo - $(call RUN,with-deps) - $(RUSTC) with-deps.rs --cfg bar - $(call RUN,with-deps) - - $(RUSTC) dep-with-staticlib.rs - $(RUSTC) with-staticlib-deps.rs --cfg foo - $(call RUN,with-staticlib-deps) - $(RUSTC) with-staticlib-deps.rs --cfg bar - $(call RUN,with-staticlib-deps) diff --git a/tests/run-make-fulldeps/link-cfg/dep-with-staticlib.rs b/tests/run-make-fulldeps/link-cfg/dep-with-staticlib.rs deleted file mode 100644 index 5ad66475d003ff3aab72a63392daf5d8e84fb81a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/dep-with-staticlib.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![feature(link_cfg)] -#![crate_type = "rlib"] - -#[link(name = "return1", cfg(foo))] -#[link(name = "return3", kind = "static", cfg(bar))] -extern "C" { - pub fn my_function() -> i32; -} diff --git a/tests/run-make-fulldeps/link-cfg/dep.rs b/tests/run-make-fulldeps/link-cfg/dep.rs deleted file mode 100644 index 40de77f05b3f67ba8f6ba43e210a4b0e3ac463fa..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/dep.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![feature(link_cfg)] -#![crate_type = "rlib"] - -#[link(name = "return1", cfg(foo))] -#[link(name = "return2", cfg(bar))] -extern "C" { - pub fn my_function() -> i32; -} diff --git a/tests/run-make-fulldeps/link-cfg/no-deps.rs b/tests/run-make-fulldeps/link-cfg/no-deps.rs deleted file mode 100644 index ba5a8711a2610aa10fbb0681f813fa653d5a2f30..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/no-deps.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![feature(link_cfg)] - -#[link(name = "return1", cfg(foo))] -#[link(name = "return2", cfg(bar))] -extern "C" { - fn my_function() -> i32; -} - -fn main() { - unsafe { - let v = my_function(); - if cfg!(foo) { - assert_eq!(v, 1); - } else if cfg!(bar) { - assert_eq!(v, 2); - } else { - panic!("unknown"); - } - } -} diff --git a/tests/run-make-fulldeps/link-cfg/return1.c b/tests/run-make-fulldeps/link-cfg/return1.c deleted file mode 100644 index 41c2809ade38e9bb4d766662d3d7d54aad068434..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/return1.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif -int my_function() { - return 1; -} diff --git a/tests/run-make-fulldeps/link-cfg/return2.c b/tests/run-make-fulldeps/link-cfg/return2.c deleted file mode 100644 index 622aeaa294c6b9cc3139f01150116f551ecb4619..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/return2.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif -int my_function() { - return 2; -} diff --git a/tests/run-make-fulldeps/link-cfg/return3.c b/tests/run-make-fulldeps/link-cfg/return3.c deleted file mode 100644 index f29dc60d5e892deb5c48275b008d6f2ee9b38999..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/return3.c +++ /dev/null @@ -1,6 +0,0 @@ -#ifdef _WIN32 -__declspec(dllexport) -#endif -int my_function() { - return 3; -} diff --git a/tests/run-make-fulldeps/link-cfg/with-deps.rs b/tests/run-make-fulldeps/link-cfg/with-deps.rs deleted file mode 100644 index 48b7828152eb964d9afa9c177a6ec22cc99356a0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/with-deps.rs +++ /dev/null @@ -1,14 +0,0 @@ -extern crate dep; - -fn main() { - unsafe { - let v = dep::my_function(); - if cfg!(foo) { - assert_eq!(v, 1); - } else if cfg!(bar) { - assert_eq!(v, 2); - } else { - panic!("unknown"); - } - } -} diff --git a/tests/run-make-fulldeps/link-cfg/with-staticlib-deps.rs b/tests/run-make-fulldeps/link-cfg/with-staticlib-deps.rs deleted file mode 100644 index 23e5926a73ce36e0e3a0636895a79b2cb2dbd5c0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-cfg/with-staticlib-deps.rs +++ /dev/null @@ -1,14 +0,0 @@ -extern crate dep_with_staticlib; - -fn main() { - unsafe { - let v = dep_with_staticlib::my_function(); - if cfg!(foo) { - assert_eq!(v, 1); - } else if cfg!(bar) { - assert_eq!(v, 3); - } else { - panic!("unknown"); - } - } -} diff --git a/tests/run-make-fulldeps/link-dedup/Makefile b/tests/run-make-fulldeps/link-dedup/Makefile deleted file mode 100644 index eff18ab48ab4f216f2e08207b8fef693608ab898..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-dedup/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# ignore-msvc - -include ../tools.mk - -all: - $(RUSTC) depa.rs - $(RUSTC) depb.rs - $(RUSTC) depc.rs - $(RUSTC) empty.rs --cfg bar 2>&1 | $(CGREP) '"-ltesta" "-ltestb" "-ltesta"' - $(RUSTC) empty.rs 2>&1 | $(CGREP) '"-ltesta"' - $(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltestb"' - $(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltesta" "-ltesta" "-ltesta"' diff --git a/tests/run-make-fulldeps/link-dedup/depa.rs b/tests/run-make-fulldeps/link-dedup/depa.rs deleted file mode 100644 index 19178c5bd49573296acba514aa1a2c3b2fe9d5a3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-dedup/depa.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "testa")] -extern "C" {} - -#[link(name = "testa")] -extern "C" {} - -#[link(name = "testa")] -extern "C" {} diff --git a/tests/run-make-fulldeps/link-dedup/depb.rs b/tests/run-make-fulldeps/link-dedup/depb.rs deleted file mode 100644 index b1be21fe005e6b74fed700e37a8d80d7f85269fe..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-dedup/depb.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![feature(link_cfg)] -#![crate_type = "rlib"] - -#[link(name = "testb", cfg(foo))] -extern "C" {} - -#[link(name = "testb", cfg(bar))] -extern "C" {} diff --git a/tests/run-make-fulldeps/link-dedup/depc.rs b/tests/run-make-fulldeps/link-dedup/depc.rs deleted file mode 100644 index 8dcb3dee5a2a4012db4926fa7a6e44e87e7fe669..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-dedup/depc.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "testa")] -extern "C" {} diff --git a/tests/run-make-fulldeps/link-dedup/empty.rs b/tests/run-make-fulldeps/link-dedup/empty.rs deleted file mode 100644 index e00ae18f4af39d5e8ad669ad6e01680849a1d8ba..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-dedup/empty.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate depa; -extern crate depb; -extern crate depc; - -fn main() {} diff --git a/tests/run-make-fulldeps/link-path-order/Makefile b/tests/run-make-fulldeps/link-path-order/Makefile deleted file mode 100644 index ed7c299e61a778559d6bf9c9d7aa6432982fdcab..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-path-order/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../tools.mk - -# Verifies that the -L arguments given to the linker is in the same order -# as the -L arguments on the rustc command line. - -CORRECT_DIR=$(TMPDIR)/correct -WRONG_DIR=$(TMPDIR)/wrong - -F := $(call NATIVE_STATICLIB_FILE,foo) - -all: $(call NATIVE_STATICLIB,correct) $(call NATIVE_STATICLIB,wrong) - mkdir -p $(CORRECT_DIR) $(WRONG_DIR) - mv $(call NATIVE_STATICLIB,correct) $(CORRECT_DIR)/$(F) - mv $(call NATIVE_STATICLIB,wrong) $(WRONG_DIR)/$(F) - $(RUSTC) main.rs -o $(TMPDIR)/should_succeed -L $(CORRECT_DIR) -L $(WRONG_DIR) - $(call RUN,should_succeed) - $(RUSTC) main.rs -o $(TMPDIR)/should_fail -L $(WRONG_DIR) -L $(CORRECT_DIR) - $(call FAIL,should_fail) diff --git a/tests/run-make-fulldeps/link-path-order/correct.c b/tests/run-make-fulldeps/link-path-order/correct.c deleted file mode 100644 index 3064af952f898dd0af82955b866136b66867c114..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-path-order/correct.c +++ /dev/null @@ -1 +0,0 @@ -int should_return_one() { return 1; } diff --git a/tests/run-make-fulldeps/link-path-order/main.rs b/tests/run-make-fulldeps/link-path-order/main.rs deleted file mode 100644 index 8024e343d19a74fdad927c1d898958a92505bf46..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-path-order/main.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![feature(rustc_private)] - -extern crate libc; - -#[link(name = "foo", kind = "static")] -extern "C" { - fn should_return_one() -> libc::c_int; -} - -fn main() { - let result = unsafe { should_return_one() }; - - if result != 1 { - std::process::exit(255); - } -} diff --git a/tests/run-make-fulldeps/link-path-order/wrong.c b/tests/run-make-fulldeps/link-path-order/wrong.c deleted file mode 100644 index 64275b3ad6bb0f78f4edd2abee386e200c445bff..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/link-path-order/wrong.c +++ /dev/null @@ -1 +0,0 @@ -int should_return_one() { return 0; } diff --git a/tests/run-make-fulldeps/linkage-attr-on-static/Makefile b/tests/run-make-fulldeps/linkage-attr-on-static/Makefile deleted file mode 100644 index 7cc54e40a3a80508db3cc3e3be07a4da6d7bda47..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/linkage-attr-on-static/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,foo) - $(RUSTC) bar.rs - $(call RUN,bar) || exit 1 diff --git a/tests/run-make-fulldeps/linkage-attr-on-static/bar.rs b/tests/run-make-fulldeps/linkage-attr-on-static/bar.rs deleted file mode 100644 index 68607cbb6572108b0e5013533ada08ebc0c4cd92..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/linkage-attr-on-static/bar.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![feature(linkage)] - -#[no_mangle] -#[linkage = "external"] -static BAZ: i32 = 21; - -#[link(name = "foo", kind = "static")] -extern "C" { - fn what() -> i32; -} - -fn main() { - unsafe { - assert_eq!(what(), BAZ); - } -} diff --git a/tests/run-make-fulldeps/linkage-attr-on-static/foo.c b/tests/run-make-fulldeps/linkage-attr-on-static/foo.c deleted file mode 100644 index 78a6934f57f76766182836819f92e94c3d513a4c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/linkage-attr-on-static/foo.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -extern int32_t BAZ; - -int32_t what() { - return BAZ; -} diff --git a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/Makefile b/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/Makefile deleted file mode 100644 index a38f4fe5dc59697a4f04700ac6bfd43677576732..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs -g - cp foo.bat $(TMPDIR)/ - OUT_DIR="$(TMPDIR)" RUSTC="$(RUSTC_ORIGINAL)" $(call RUN,foo) diff --git a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.bat b/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.bat deleted file mode 100644 index a9350f12bbb6d6e889d6a244daf87cb3aab3107d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.bat +++ /dev/null @@ -1 +0,0 @@ -%MY_LINKER% %* diff --git a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.rs b/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.rs deleted file mode 100644 index 74d7b9b07f697b6859e15be829691dcb3b1a92b5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/long-linker-command-lines-cmd-exe/foo.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Like the `long-linker-command-lines` test this test attempts to blow -// a command line limit for running the linker. Unlike that test, however, -// this test is testing `cmd.exe` specifically rather than the OS. -// -// Unfortunately `cmd.exe` has a 8192 limit which is relatively small -// in the grand scheme of things and anyone sripting rustc's linker -// is probably using a `*.bat` script and is likely to hit this limit. -// -// This test uses a `foo.bat` script as the linker which just simply -// delegates back to this program. The compiler should use a lower -// limit for arguments before passing everything via `@`, which -// means that everything should still succeed here. - -use std::env; -use std::fs::{self, File}; -use std::io::{BufWriter, Write, Read}; -use std::path::PathBuf; -use std::process::Command; - -fn main() { - if !cfg!(windows) { - return - } - - let tmpdir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); - let ok = tmpdir.join("ok"); - let not_ok = tmpdir.join("not_ok"); - if env::var("YOU_ARE_A_LINKER").is_ok() { - match env::args_os().find(|a| a.to_string_lossy().contains("@")) { - Some(file) => { - let file = file.to_str().unwrap(); - fs::copy(&file[1..], &ok).unwrap(); - } - None => { File::create(¬_ok).unwrap(); } - } - return - } - - let rustc = env::var_os("RUSTC").unwrap_or("rustc".into()); - let me = env::current_exe().unwrap(); - let bat = me.parent() - .unwrap() - .join("foo.bat"); - let bat_linker = format!("linker={}", bat.display()); - for i in (1..).map(|i| i * 10) { - println!("attempt: {}", i); - - let file = tmpdir.join("bar.rs"); - let mut f = BufWriter::new(File::create(&file).unwrap()); - let mut lib_name = String::new(); - for _ in 0..i { - lib_name.push_str("foo"); - } - for j in 0..i { - writeln!(f, "#[link(name = \"{}{}\")]", lib_name, j).unwrap(); - } - writeln!(f, "extern {{}}\nfn main() {{}}").unwrap(); - f.into_inner().unwrap(); - - drop(fs::remove_file(&ok)); - drop(fs::remove_file(¬_ok)); - let status = Command::new(&rustc) - .arg(&file) - .arg("-C").arg(&bat_linker) - .arg("--out-dir").arg(&tmpdir) - .env("YOU_ARE_A_LINKER", "1") - .env("MY_LINKER", &me) - .status() - .unwrap(); - - if !status.success() { - panic!("rustc didn't succeed: {}", status); - } - - if !ok.exists() { - assert!(not_ok.exists()); - continue - } - - let mut contents = Vec::new(); - File::open(&ok).unwrap().read_to_end(&mut contents).unwrap(); - - for j in 0..i { - let exp = format!("{}{}", lib_name, j); - let exp = if cfg!(target_env = "msvc") { - let mut out = Vec::with_capacity(exp.len() * 2); - for c in exp.encode_utf16() { - // encode in little endian - out.push(c as u8); - out.push((c >> 8) as u8); - } - out - } else { - exp.into_bytes() - }; - assert!(contents.windows(exp.len()).any(|w| w == &exp[..])); - } - - break - } -} diff --git a/tests/run-make-fulldeps/long-linker-command-lines/Makefile b/tests/run-make-fulldeps/long-linker-command-lines/Makefile deleted file mode 100644 index 00199ca970d3d52ef39af1c9cf27c88750f170ed..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/long-linker-command-lines/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs -g -O - RUSTC="$(RUSTC_ORIGINAL)" $(call RUN,foo) diff --git a/tests/run-make-fulldeps/long-linker-command-lines/foo.rs b/tests/run-make-fulldeps/long-linker-command-lines/foo.rs deleted file mode 100644 index db238c0cf1a92627b8a574a6e87e66144ec1a976..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/long-linker-command-lines/foo.rs +++ /dev/null @@ -1,106 +0,0 @@ -// This is a test which attempts to blow out the system limit with how many -// arguments can be passed to a process. This'll successively call rustc with -// larger and larger argument lists in an attempt to find one that's way too -// big for the system at hand. This file itself is then used as a "linker" to -// detect when the process creation succeeds. -// -// Eventually we should see an argument that looks like `@` as we switch from -// passing literal arguments to passing everything in the file. - -use std::collections::HashSet; -use std::env; -use std::fs::{self, File}; -use std::io::{BufWriter, Write}; -use std::path::{Path, PathBuf}; -use std::process::Command; - -fn write_test_case(file: &Path, n: usize) -> HashSet { - let mut libs = HashSet::new(); - let mut f = BufWriter::new(File::create(&file).unwrap()); - let mut prefix = String::new(); - for _ in 0..n { - prefix.push_str("foo"); - } - for i in 0..n { - writeln!(f, "#[link(name = \"S{}{}S\")]", prefix, i).unwrap(); - libs.insert(format!("{}{}", prefix, i)); - } - writeln!(f, "extern \"C\" {{}}\nfn main() {{}}").unwrap(); - f.into_inner().unwrap(); - - libs -} - -fn read_linker_args(path: &Path) -> String { - let contents = fs::read(path).unwrap(); - if cfg!(target_env = "msvc") { - let mut i = contents.chunks(2).map(|c| { - c[0] as u16 | ((c[1] as u16) << 8) - }); - assert_eq!(i.next(), Some(0xfeff), "Expected UTF-16 BOM"); - String::from_utf16(&i.collect::>()).unwrap() - } else { - String::from_utf8(contents).unwrap() - } -} - -fn main() { - let tmpdir = PathBuf::from(env::var_os("TMPDIR").unwrap()); - let ok = tmpdir.join("ok"); - if env::var("YOU_ARE_A_LINKER").is_ok() { - if let Some(file) = env::args_os().find(|a| a.to_string_lossy().contains("@")) { - let file = file.to_str().expect("non-utf8 file argument"); - fs::copy(&file[1..], &ok).unwrap(); - } - return - } - - let rustc = env::var_os("RUSTC").unwrap_or("rustc".into()); - let me_as_linker = format!("linker={}", env::current_exe().unwrap().display()); - for i in (1..).map(|i| i * 100) { - println!("attempt: {}", i); - let file = tmpdir.join("bar.rs"); - let mut expected_libs = write_test_case(&file, i); - - drop(fs::remove_file(&ok)); - let output = Command::new(&rustc) - .arg(&file) - .arg("-C").arg(&me_as_linker) - .arg("--out-dir").arg(&tmpdir) - .env("YOU_ARE_A_LINKER", "1") - .output() - .unwrap(); - - if !output.status.success() { - let stderr = String::from_utf8_lossy(&output.stderr); - panic!("status: {}\nstdout:\n{}\nstderr:\n{}", - output.status, - String::from_utf8_lossy(&output.stdout), - stderr.lines().map(|l| { - if l.len() > 200 { - format!("{}...\n", &l[..200]) - } else { - format!("{}\n", l) - } - }).collect::()); - } - - if !ok.exists() { - continue - } - - let linker_args = read_linker_args(&ok); - for arg in linker_args.split('S') { - expected_libs.remove(arg); - } - - assert!( - expected_libs.is_empty(), - "expected but missing libraries: {:#?}\nlinker arguments: \n{}", - expected_libs, - linker_args, - ); - - break - } -} diff --git a/tests/run-make-fulldeps/longjmp-across-rust/Makefile b/tests/run-make-fulldeps/longjmp-across-rust/Makefile deleted file mode 100644 index 848638d82dd6e89040dcc86a11beb9a9915b4354..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/longjmp-across-rust/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,foo) - $(RUSTC) main.rs - $(call RUN,main) diff --git a/tests/run-make-fulldeps/longjmp-across-rust/foo.c b/tests/run-make-fulldeps/longjmp-across-rust/foo.c deleted file mode 100644 index bd71cc4d777128b9877043b7b928eee0b9592343..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/longjmp-across-rust/foo.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include - -static jmp_buf ENV; - -extern void test_middle(); - -void test_start(void(*f)()) { - if (setjmp(ENV) != 0) - return; - f(); - assert(0); -} - -void test_end() { - longjmp(ENV, 1); - assert(0); -} diff --git a/tests/run-make-fulldeps/longjmp-across-rust/main.rs b/tests/run-make-fulldeps/longjmp-across-rust/main.rs deleted file mode 100644 index cc1d5b126dd35c229fa0268e6df5a9da8b1fc238..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/longjmp-across-rust/main.rs +++ /dev/null @@ -1,29 +0,0 @@ -#[link(name = "foo", kind = "static")] -extern "C" { - fn test_start(f: extern "C" fn()); - fn test_end(); -} - -fn main() { - unsafe { - test_start(test_middle); - } -} - -struct A; - -impl Drop for A { - fn drop(&mut self) {} -} - -extern "C" fn test_middle() { - let _a = A; - foo(); -} - -fn foo() { - let _a = A; - unsafe { - test_end(); - } -} diff --git a/tests/run-make-fulldeps/ls-metadata/Makefile b/tests/run-make-fulldeps/ls-metadata/Makefile deleted file mode 100644 index e0f916a248e9b011bddcbacc31801bacdf4620af..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/ls-metadata/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs - $(RUSTC) -Z ls $(TMPDIR)/foo - touch $(TMPDIR)/bar - $(RUSTC) -Z ls $(TMPDIR)/bar diff --git a/tests/run-make-fulldeps/ls-metadata/foo.rs b/tests/run-make-fulldeps/ls-metadata/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/ls-metadata/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/lto-dylib-dep/Makefile b/tests/run-make-fulldeps/lto-dylib-dep/Makefile deleted file mode 100644 index 41487b23c748f3fcd5fd0e0587b5e685f615cca2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-dylib-dep/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -# Test that we don't run into an assertion when using a Rust dylib dependency -# while compiling with full LTO. -# See https://github.com/rust-lang/rust/issues/59137 - -all: - $(RUSTC) a_dylib.rs --crate-type=dylib -C prefer-dynamic - $(RUSTC) main.rs -C lto - $(call RUN,main) diff --git a/tests/run-make-fulldeps/lto-dylib-dep/a_dylib.rs b/tests/run-make-fulldeps/lto-dylib-dep/a_dylib.rs deleted file mode 100644 index e63457e6eb9535041a23a3a3c1987fd874646e01..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-dylib-dep/a_dylib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn foo() { - println!("bar"); -} diff --git a/tests/run-make-fulldeps/lto-dylib-dep/main.rs b/tests/run-make-fulldeps/lto-dylib-dep/main.rs deleted file mode 100644 index 4fb3c4730b2c64d106dd33651e709a8664cf6091..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-dylib-dep/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate a_dylib; - -fn main() { - a_dylib::foo(); -} diff --git a/tests/run-make-fulldeps/lto-empty/Makefile b/tests/run-make-fulldeps/lto-empty/Makefile deleted file mode 100644 index b4345ba18832196b6aa205272fed8505b9eb4274..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-empty/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -all: cdylib-fat cdylib-thin - -cdylib-fat: - $(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat - $(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat - -cdylib-thin: - $(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin - $(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin - diff --git a/tests/run-make-fulldeps/lto-empty/lib.rs b/tests/run-make-fulldeps/lto-empty/lib.rs deleted file mode 100644 index e3663c79078f4f0823ebbb7baf5fc65a1512c15a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-empty/lib.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "cdylib"] diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/Makefile b/tests/run-make-fulldeps/lto-no-link-whole-rlib/Makefile deleted file mode 100644 index e576ee37cf7156d5dd6fd94d428aafd75142de98..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,foo) $(call NATIVE_STATICLIB,bar) - $(RUSTC) lib1.rs - $(RUSTC) lib2.rs - $(RUSTC) main.rs -Clto - $(call RUN,main) - diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/bar.c b/tests/run-make-fulldeps/lto-no-link-whole-rlib/bar.c deleted file mode 100644 index b2501193029ba9f5bf35b5948d64c9c8f06093c5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/bar.c +++ /dev/null @@ -1,3 +0,0 @@ -int foo() { - return 2; -} diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/foo.c b/tests/run-make-fulldeps/lto-no-link-whole-rlib/foo.c deleted file mode 100644 index 75010458eceb0861d4ac8e4ee8e126789a61940a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/foo.c +++ /dev/null @@ -1,3 +0,0 @@ -int foo() { - return 1; -} diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib1.rs b/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib1.rs deleted file mode 100644 index f70bb338223e0b96b4d1c086b4f89e75e5468172..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib1.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "rlib"] - -#[link(name = "foo", kind = "static")] -extern "C" { - fn foo() -> i32; -} - -pub fn foo1() -> i32 { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib2.rs b/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib2.rs deleted file mode 100644 index 2dec2a2718e83a197c6656c1aed89f752ee1dfe3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/lib2.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type = "rlib"] - -extern crate lib1; - -#[link(name = "bar", kind = "static")] -extern "C" { - fn foo() -> i32; -} - -pub fn foo2() -> i32 { - unsafe { foo() } -} diff --git a/tests/run-make-fulldeps/lto-no-link-whole-rlib/main.rs b/tests/run-make-fulldeps/lto-no-link-whole-rlib/main.rs deleted file mode 100644 index 0c658808e6e5da77c06495903a327ad48c2b430f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-no-link-whole-rlib/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern crate lib1; -extern crate lib2; - -fn main() { - assert_eq!(lib1::foo1(), 2); - assert_eq!(lib2::foo2(), 2); -} diff --git a/tests/run-make-fulldeps/lto-readonly-lib/Makefile b/tests/run-make-fulldeps/lto-readonly-lib/Makefile deleted file mode 100644 index a20ecea88ea1cd1c0957737990a2bfe33649b73b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-readonly-lib/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) lib.rs - - # the compiler needs to copy and modify the rlib file when performing - # LTO, so we should ensure that it can cope with the original rlib - # being read-only. - chmod 444 $(TMPDIR)/*.rlib - - $(RUSTC) main.rs -C lto - $(call RUN,main) diff --git a/tests/run-make-fulldeps/lto-readonly-lib/lib.rs b/tests/run-make-fulldeps/lto-readonly-lib/lib.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-readonly-lib/lib.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/lto-readonly-lib/main.rs b/tests/run-make-fulldeps/lto-readonly-lib/main.rs deleted file mode 100644 index 69da798b3eb95bfc6c1a03036be3468689f5e9e4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-readonly-lib/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate lib; - -fn main() {} diff --git a/tests/run-make-fulldeps/lto-smoke-c/Makefile b/tests/run-make-fulldeps/lto-smoke-c/Makefile deleted file mode 100644 index 7c6ee3be849502e9e34dad9b625edbf2ace2db6f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke-c/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# Apparently older versions of GCC segfault if -g is passed... -CC := $(CC:-g=) - -all: - $(RUSTC) foo.rs -C lto - $(CC) bar.c $(call STATICLIB,foo) \ - $(call OUT_EXE,bar) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/lto-smoke-c/bar.c b/tests/run-make-fulldeps/lto-smoke-c/bar.c deleted file mode 100644 index bb4036b06e13b79a32ec78ae04db97590f54b2cc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke-c/bar.c +++ /dev/null @@ -1,6 +0,0 @@ -void foo(); - -int main() { - foo(); - return 0; -} diff --git a/tests/run-make-fulldeps/lto-smoke-c/foo.rs b/tests/run-make-fulldeps/lto-smoke-c/foo.rs deleted file mode 100644 index 2e59432cdb16feca35d30166b94ab591a1568125..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke-c/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "staticlib"] - -#[no_mangle] -pub extern "C" fn foo() {} diff --git a/tests/run-make-fulldeps/lto-smoke/Makefile b/tests/run-make-fulldeps/lto-smoke/Makefile deleted file mode 100644 index 8bce708b44b0b3b47d85f5847c9ee5a93de8cdeb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -include ../tools.mk - -all: noparam bool_true bool_false thin fat - -noparam: - $(RUSTC) lib.rs - $(RUSTC) main.rs -C lto - $(call RUN,main) - -bool_true: - $(RUSTC) lib.rs - $(RUSTC) main.rs -C lto=yes - $(call RUN,main) - - -bool_false: - $(RUSTC) lib.rs - $(RUSTC) main.rs -C lto=off - $(call RUN,main) - -thin: - $(RUSTC) lib.rs - $(RUSTC) main.rs -C lto=thin - $(call RUN,main) - -fat: - $(RUSTC) lib.rs - $(RUSTC) main.rs -C lto=fat - $(call RUN,main) - diff --git a/tests/run-make-fulldeps/lto-smoke/lib.rs b/tests/run-make-fulldeps/lto-smoke/lib.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke/lib.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/lto-smoke/main.rs b/tests/run-make-fulldeps/lto-smoke/main.rs deleted file mode 100644 index 69da798b3eb95bfc6c1a03036be3468689f5e9e4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/lto-smoke/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate lib; - -fn main() {} diff --git a/tests/run-make-fulldeps/manual-crate-name/Makefile b/tests/run-make-fulldeps/manual-crate-name/Makefile deleted file mode 100644 index c00e20c7c57d64bd22af7642bca3ce590784b41b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-crate-name/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --crate-name foo bar.rs - rm $(TMPDIR)/libfoo.rlib diff --git a/tests/run-make-fulldeps/manual-crate-name/bar.rs b/tests/run-make-fulldeps/manual-crate-name/bar.rs deleted file mode 100644 index c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-crate-name/bar.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "rlib"] diff --git a/tests/run-make-fulldeps/manual-link/Makefile b/tests/run-make-fulldeps/manual-link/Makefile deleted file mode 100644 index 401f6eb440a58e6394165c2ed9a8a9da90a54086..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-link/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: $(TMPDIR)/libbar.a - $(RUSTC) foo.rs -lstatic=bar - $(RUSTC) main.rs - $(call RUN,main) diff --git a/tests/run-make-fulldeps/manual-link/bar.c b/tests/run-make-fulldeps/manual-link/bar.c deleted file mode 100644 index e42599986781fe984a2c1427a3373cf439a34f60..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-link/bar.c +++ /dev/null @@ -1 +0,0 @@ -void bar() {} diff --git a/tests/run-make-fulldeps/manual-link/foo.c b/tests/run-make-fulldeps/manual-link/foo.c deleted file mode 100644 index e42599986781fe984a2c1427a3373cf439a34f60..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-link/foo.c +++ /dev/null @@ -1 +0,0 @@ -void bar() {} diff --git a/tests/run-make-fulldeps/manual-link/foo.rs b/tests/run-make-fulldeps/manual-link/foo.rs deleted file mode 100644 index c1f28236ffd2ba8ad7fefd61c31f154a6ebcdd2f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-link/foo.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![crate_type = "rlib"] - -extern "C" { - fn bar(); -} - -pub fn foo() { - unsafe { - bar(); - } -} diff --git a/tests/run-make-fulldeps/manual-link/main.rs b/tests/run-make-fulldeps/manual-link/main.rs deleted file mode 100644 index fe35f1f8e2ead2e1ea2d06c1aa4ce426d2a8a6aa..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/manual-link/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::foo(); -} diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/Makefile b/tests/run-make-fulldeps/many-crates-but-no-match/Makefile deleted file mode 100644 index ca0ab8e9e5f412c8f58327837639b4605664bd16..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -include ../tools.mk - -# Modelled after ui/changing-crates.rs test, but this one puts -# more than one (mismatching) candidate crate into the search path, -# which did not appear directly expressible in UI testing infrastructure. -# -# Note that we move the built libraries into target direcrtories rather than -# use the `--out-dir` option because the `../tools.mk` file already bakes a -# use of `--out-dir` into the definition of $(RUSTC). - -A1=$(TMPDIR)/a1 -A2=$(TMPDIR)/a2 -A3=$(TMPDIR)/a3 - -# A hack to match distinct lines of output from a single run. -LOG=$(TMPDIR)/log.txt - -all: - mkdir -p $(A1) $(A2) $(A3) - $(RUSTC) --crate-type=rlib crateA1.rs - mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A1) - $(RUSTC) --crate-type=rlib -L $(A1) crateB.rs - $(RUSTC) --crate-type=rlib crateA2.rs - mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A2) - $(RUSTC) --crate-type=rlib crateA3.rs - mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A3) - # Ensure crateC fails to compile since A1 is "missing" and A2/A3 hashes do not match - $(RUSTC) -L $(A2) -L $(A3) crateC.rs >$(LOG) 2>&1 || true - $(CGREP) \ - 'found possibly newer version of crate `crateA` which `crateB` depends on' \ - 'note: perhaps that crate needs to be recompiled?' \ - 'crate `crateA`:' \ - 'crate `crateB`:' \ - < $(LOG) - # the 'crate `crateA`' will match two entries. diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/crateA1.rs b/tests/run-make-fulldeps/many-crates-but-no-match/crateA1.rs deleted file mode 100644 index 3fed5a38e2caeb6f4e93f718a7c0118eb335db5b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/crateA1.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_name="crateA"] - -// Base crate -pub fn func() {} diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/crateA2.rs b/tests/run-make-fulldeps/many-crates-but-no-match/crateA2.rs deleted file mode 100644 index 8db07a015ff2a3c993152ae0341c86674de002c1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/crateA2.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_name="crateA"] - -// Base crate -pub fn func() { println!("hello"); } diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/crateA3.rs b/tests/run-make-fulldeps/many-crates-but-no-match/crateA3.rs deleted file mode 100644 index a1e8e40a38c2a5a37373259a3b4007453aa90517..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/crateA3.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_name="crateA"] - -// Base crate -pub fn foo() { println!("world!"); } diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/crateB.rs b/tests/run-make-fulldeps/many-crates-but-no-match/crateB.rs deleted file mode 100644 index 4ccd65d653eddf5af3e5a0700b0e0a1e3299de0a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/crateB.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate crateA; diff --git a/tests/run-make-fulldeps/many-crates-but-no-match/crateC.rs b/tests/run-make-fulldeps/many-crates-but-no-match/crateC.rs deleted file mode 100644 index a8b817ec6810b5d73e592d6abee2b9ef4c6418b0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/many-crates-but-no-match/crateC.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate crateB; - -fn main() {} diff --git a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/Makefile b/tests/run-make-fulldeps/metadata-flag-frobs-symbols/Makefile deleted file mode 100644 index dc6b10f4e9db236ffd1decaec62abc869bc8dbec..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs -C metadata=a -C extra-filename=-a - $(RUSTC) foo.rs -C metadata=b -C extra-filename=-b - $(RUSTC) bar.rs \ - --extern foo1=$(TMPDIR)/libfoo-a.rlib \ - --extern foo2=$(TMPDIR)/libfoo-b.rlib \ - --print link-args - $(call RUN,bar) diff --git a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/bar.rs b/tests/run-make-fulldeps/metadata-flag-frobs-symbols/bar.rs deleted file mode 100644 index 1e6957a3694b60bd0b86bced1d9867e7d4fc4754..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/bar.rs +++ /dev/null @@ -1,8 +0,0 @@ -extern crate foo1; -extern crate foo2; - -fn main() { - let a = foo1::foo(); - let b = foo2::foo(); - assert!(a as *const _ != b as *const _); -} diff --git a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/foo.rs b/tests/run-make-fulldeps/metadata-flag-frobs-symbols/foo.rs deleted file mode 100644 index 696aed2fa1db4109b521a5ea4c5e745a8345617c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/metadata-flag-frobs-symbols/foo.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_name = "foo"] -#![crate_type = "rlib"] - -static FOO: usize = 3; - -pub fn foo() -> &'static usize { &FOO } diff --git a/tests/run-make-fulldeps/min-global-align/Makefile b/tests/run-make-fulldeps/min-global-align/Makefile deleted file mode 100644 index 82f38749e009284169ec95737368efc7f2736067..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/min-global-align/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -include ../tools.mk - -# only-linux - -# This tests ensure that global variables respect the target minimum alignment. -# The three bools `STATIC_BOOL`, `STATIC_MUT_BOOL`, and `CONST_BOOL` all have -# type-alignment of 1, but some targets require greater global alignment. - -SRC = min_global_align.rs -LL = $(TMPDIR)/min_global_align.ll - -all: -# Most targets are happy with default alignment -- take i686 for example. -ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) - $(RUSTC) --target=i686-unknown-linux-gnu --emit=llvm-ir $(SRC) - [ "$$(grep -c 'align 1' "$(LL)")" -eq "3" ] -endif -# SystemZ requires even alignment for PC-relative addressing. -ifeq ($(filter systemz,$(LLVM_COMPONENTS)),systemz) - $(RUSTC) --target=s390x-unknown-linux-gnu --emit=llvm-ir $(SRC) - [ "$$(grep -c 'align 2' "$(LL)")" -eq "3" ] -endif diff --git a/tests/run-make-fulldeps/min-global-align/min_global_align.rs b/tests/run-make-fulldeps/min-global-align/min_global_align.rs deleted file mode 100644 index 135792e9372050750a24ba94808880210b230f0d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/min-global-align/min_global_align.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![feature(no_core, lang_items)] -#![crate_type = "rlib"] -#![no_core] - -pub static STATIC_BOOL: bool = true; - -pub static mut STATIC_MUT_BOOL: bool = true; - -const CONST_BOOL: bool = true; -pub static CONST_BOOL_REF: &'static bool = &CONST_BOOL; - -#[lang = "sized"] -trait Sized {} - -#[lang = "copy"] -trait Copy {} -impl Copy for bool {} -impl Copy for &bool {} - -#[lang = "freeze"] -trait Freeze {} - -// No `UnsafeCell`, so everything is `Freeze`. -impl Freeze for T {} - -#[lang = "sync"] -trait Sync {} -impl Sync for bool {} -impl Sync for &'static bool {} - -#[lang = "drop_in_place"] -pub unsafe fn drop_in_place(_: *mut T) {} diff --git a/tests/run-make-fulldeps/mingw-export-call-convention/Makefile b/tests/run-make-fulldeps/mingw-export-call-convention/Makefile deleted file mode 100644 index 4a60059cc5441815bf4b3a03ca80c58cd32a0f39..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mingw-export-call-convention/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# only-windows-gnu - -all: - $(RUSTC) foo.rs - # FIXME: we should make sure __stdcall calling convention is used here - # but that only works with LLD right now - nm -g "$(call IMPLIB,foo)" | $(CGREP) bar diff --git a/tests/run-make-fulldeps/mingw-export-call-convention/foo.rs b/tests/run-make-fulldeps/mingw-export-call-convention/foo.rs deleted file mode 100644 index 1fec00311ef06b526d4dfa9ef067fe419bc42898..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mingw-export-call-convention/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "cdylib"] - -#[no_mangle] -pub extern "system" fn bar() {} diff --git a/tests/run-make-fulldeps/mismatching-target-triples/Makefile b/tests/run-make-fulldeps/mismatching-target-triples/Makefile deleted file mode 100644 index 409388e041478693d38f407ba183a23717db9fc4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mismatching-target-triples/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# Issue #10814 -# -# these are no_std to avoid having to have the standard library or any -# linkers/assemblers for the relevant platform - -all: - $(RUSTC) foo.rs --target=i686-unknown-linux-gnu - $(RUSTC) bar.rs --target=x86_64-unknown-linux-gnu 2>&1 \ - | $(CGREP) 'couldn'"'"'t find crate `foo` with expected target triple x86_64-unknown-linux-gnu' diff --git a/tests/run-make-fulldeps/mismatching-target-triples/bar.rs b/tests/run-make-fulldeps/mismatching-target-triples/bar.rs deleted file mode 100644 index b2c2fc1c41074ce59dc372165f0bb28e0bb8bc02..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mismatching-target-triples/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![feature(no_core)] -#![no_core] -extern crate foo; diff --git a/tests/run-make-fulldeps/mismatching-target-triples/foo.rs b/tests/run-make-fulldeps/mismatching-target-triples/foo.rs deleted file mode 100644 index 6fa0549144807bf6e11f3bf82b35127b8a96a9fc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mismatching-target-triples/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![feature(no_core)] -#![no_core] -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/missing-crate-dependency/Makefile b/tests/run-make-fulldeps/missing-crate-dependency/Makefile deleted file mode 100644 index 7c271ab8a90deba3a1c2b741f9e1f5ee006374dd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/missing-crate-dependency/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --crate-type=rlib crateA.rs - $(RUSTC) --crate-type=rlib crateB.rs - $(call REMOVE_RLIBS,crateA) - # Ensure crateC fails to compile since dependency crateA is missing - $(RUSTC) crateC.rs 2>&1 | \ - $(CGREP) 'can'"'"'t find crate for `crateA` which `crateB` depends on' diff --git a/tests/run-make-fulldeps/missing-crate-dependency/crateA.rs b/tests/run-make-fulldeps/missing-crate-dependency/crateA.rs deleted file mode 100644 index 31433cb60b8a648926e2f8ce0d7da0962783b5f6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/missing-crate-dependency/crateA.rs +++ /dev/null @@ -1,2 +0,0 @@ -// Base crate -pub fn func() {} diff --git a/tests/run-make-fulldeps/missing-crate-dependency/crateB.rs b/tests/run-make-fulldeps/missing-crate-dependency/crateB.rs deleted file mode 100644 index 4ccd65d653eddf5af3e5a0700b0e0a1e3299de0a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/missing-crate-dependency/crateB.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate crateA; diff --git a/tests/run-make-fulldeps/missing-crate-dependency/crateC.rs b/tests/run-make-fulldeps/missing-crate-dependency/crateC.rs deleted file mode 100644 index a8b817ec6810b5d73e592d6abee2b9ef4c6418b0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/missing-crate-dependency/crateC.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate crateB; - -fn main() {} diff --git a/tests/run-make-fulldeps/mixing-deps/Makefile b/tests/run-make-fulldeps/mixing-deps/Makefile deleted file mode 100644 index 956e704ee168e081909c517b29b97d85b034dfdd..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-deps/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) both.rs -C prefer-dynamic - $(RUSTC) dylib.rs -C prefer-dynamic - $(RUSTC) prog.rs - $(call RUN,prog) diff --git a/tests/run-make-fulldeps/mixing-deps/both.rs b/tests/run-make-fulldeps/mixing-deps/both.rs deleted file mode 100644 index 6a58187633f48312916c9300d333e5321aae86d4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-deps/both.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] -#![crate_type = "dylib"] - -pub static foo: isize = 4; diff --git a/tests/run-make-fulldeps/mixing-deps/dylib.rs b/tests/run-make-fulldeps/mixing-deps/dylib.rs deleted file mode 100644 index 88976d5b663f32de3aeed99064cfd1db19efd3e7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-deps/dylib.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "dylib"] -extern crate both; - -use std::mem; - -pub fn addr() -> usize { unsafe { mem::transmute(&both::foo) } } diff --git a/tests/run-make-fulldeps/mixing-deps/prog.rs b/tests/run-make-fulldeps/mixing-deps/prog.rs deleted file mode 100644 index 188981dc1a31adea0075e610d49b7d810d371e74..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-deps/prog.rs +++ /dev/null @@ -1,9 +0,0 @@ -extern crate dylib; -extern crate both; - -use std::mem; - -fn main() { - assert_eq!(unsafe { mem::transmute::<&isize, usize>(&both::foo) }, - dylib::addr()); -} diff --git a/tests/run-make-fulldeps/mixing-formats/Makefile b/tests/run-make-fulldeps/mixing-formats/Makefile deleted file mode 100644 index b27e54257f9c104cff6bea607a462225c41b193c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -include ../tools.mk - -# Testing various mixings of rlibs and dylibs. Makes sure that it's possible to -# link an rlib to a dylib. The dependency tree among the file looks like: -# -# foo -# / \ -# bar1 bar2 -# / \ / -# baz baz2 -# -# This is generally testing the permutations of the foo/bar1/bar2 layer against -# the baz/baz2 layer - -all: - # Building just baz - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic - $(RUSTC) --crate-type=bin baz.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic - $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic - $(RUSTC) --crate-type=bin baz.rs - rm $(TMPDIR)/* - # Building baz2 - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib baz2.rs && exit 1 || exit 0 - $(RUSTC) --crate-type=bin baz2.rs && exit 1 || exit 0 - rm $(TMPDIR)/* - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib,rlib baz2.rs - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic - $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=rlib foo.rs - $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic - $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic - $(RUSTC) --crate-type=rlib bar2.rs - $(RUSTC) --crate-type=dylib,rlib baz2.rs - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic - $(RUSTC) --crate-type=rlib bar1.rs - $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib,rlib baz2.rs - $(RUSTC) --crate-type=bin baz2.rs - rm $(TMPDIR)/* - $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic - $(RUSTC) --crate-type=dylib,rlib baz2.rs - $(RUSTC) --crate-type=bin baz2.rs diff --git a/tests/run-make-fulldeps/mixing-formats/bar1.rs b/tests/run-make-fulldeps/mixing-formats/bar1.rs deleted file mode 100644 index 49af74e1b748908873bf49dfcd2239724b7ab495..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/bar1.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate foo; diff --git a/tests/run-make-fulldeps/mixing-formats/bar2.rs b/tests/run-make-fulldeps/mixing-formats/bar2.rs deleted file mode 100644 index 49af74e1b748908873bf49dfcd2239724b7ab495..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/bar2.rs +++ /dev/null @@ -1 +0,0 @@ -extern crate foo; diff --git a/tests/run-make-fulldeps/mixing-formats/baz.rs b/tests/run-make-fulldeps/mixing-formats/baz.rs deleted file mode 100644 index 99a73159ea4bd6078b65daed227e3627e4b4b5a1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/baz.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate bar1; - -fn main() {} diff --git a/tests/run-make-fulldeps/mixing-formats/baz2.rs b/tests/run-make-fulldeps/mixing-formats/baz2.rs deleted file mode 100644 index d0fab1e4cdf61f47a73e4e361ad160793a101e40..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/baz2.rs +++ /dev/null @@ -1,4 +0,0 @@ -extern crate bar1; -extern crate bar2; - -fn main() {} diff --git a/tests/run-make-fulldeps/mixing-formats/foo.rs b/tests/run-make-fulldeps/mixing-formats/foo.rs deleted file mode 100644 index d11c69f812a8dfe9ea3db2474363c188c096c5b3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-formats/foo.rs +++ /dev/null @@ -1 +0,0 @@ -// intentionally empty diff --git a/tests/run-make-fulldeps/mixing-libs/Makefile b/tests/run-make-fulldeps/mixing-libs/Makefile deleted file mode 100644 index 39cc0708ca1ea9dbf8fc9ac9e83873ed35e16486..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-libs/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) rlib.rs - $(RUSTC) dylib.rs - $(RUSTC) rlib.rs --crate-type=dylib - $(RUSTC) dylib.rs - $(call REMOVE_DYLIBS,rlib) - $(RUSTC) prog.rs && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/mixing-libs/dylib.rs b/tests/run-make-fulldeps/mixing-libs/dylib.rs deleted file mode 100644 index 6856887501c2664a513126a4bc9479611e09b730..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-libs/dylib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "dylib"] -extern crate rlib; - -pub fn dylib() { rlib::rlib() } diff --git a/tests/run-make-fulldeps/mixing-libs/prog.rs b/tests/run-make-fulldeps/mixing-libs/prog.rs deleted file mode 100644 index 14ce5c951a7b7a8882036e1d8292c78429def9a7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-libs/prog.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern crate dylib; -extern crate rlib; - -fn main() { - dylib::dylib(); - rlib::rlib(); -} diff --git a/tests/run-make-fulldeps/mixing-libs/rlib.rs b/tests/run-make-fulldeps/mixing-libs/rlib.rs deleted file mode 100644 index 96dcd16bb9301087e225b49a952cd5a476d7da3c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/mixing-libs/rlib.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "rlib"] -pub fn rlib() {} diff --git a/tests/run-make-fulldeps/msvc-opt-minsize/Makefile b/tests/run-make-fulldeps/msvc-opt-minsize/Makefile deleted file mode 100644 index a5f019f244e2a07caaa2e827dd2e7cbf1537bbae..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/msvc-opt-minsize/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs -Copt-level=z 2>&1 - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/msvc-opt-minsize/foo.rs b/tests/run-make-fulldeps/msvc-opt-minsize/foo.rs deleted file mode 100644 index 3f5496c08ee259a52be03d4b1867b32e54315575..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/msvc-opt-minsize/foo.rs +++ /dev/null @@ -1,19 +0,0 @@ -#![feature(test)] -extern crate test; - -fn foo(x: i32, y: i32) -> i64 { - (x + y) as i64 -} - -#[inline(never)] -fn bar() { - let _f = Box::new(0); - // This call used to trigger an LLVM bug in opt-level z where the base - // pointer gets corrupted, see issue #45034 - let y: fn(i32, i32) -> i64 = test::black_box(foo); - test::black_box(y(1, 2)); -} - -fn main() { - bar(); -} diff --git a/tests/run-make-fulldeps/multiple-emits/Makefile b/tests/run-make-fulldeps/multiple-emits/Makefile deleted file mode 100644 index d1f297644854f017558aaa0274b9756b2004d03a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/multiple-emits/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs --emit=asm,llvm-ir -o $(TMPDIR)/out 2>&1 - rm $(TMPDIR)/out.ll $(TMPDIR)/out.s - $(RUSTC) foo.rs --emit=asm,llvm-ir -o $(TMPDIR)/out2.ext 2>&1 - rm $(TMPDIR)/out2.ll $(TMPDIR)/out2.s diff --git a/tests/run-make-fulldeps/multiple-emits/foo.rs b/tests/run-make-fulldeps/multiple-emits/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/multiple-emits/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/no-builtins-lto/Makefile b/tests/run-make-fulldeps/no-builtins-lto/Makefile deleted file mode 100644 index c8f05d9918b9123452d8f7b8d19f1985027cf85a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-builtins-lto/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -all: - # Compile a `#![no_builtins]` rlib crate - $(RUSTC) no_builtins.rs - # Build an executable that depends on that crate using LTO. The no_builtins crate doesn't - # participate in LTO, so its rlib must be explicitly linked into the final binary. Verify this by - # grepping the linker arguments. - $(RUSTC) main.rs -C lto --print link-args | $(CGREP) 'libno_builtins.rlib' diff --git a/tests/run-make-fulldeps/no-builtins-lto/main.rs b/tests/run-make-fulldeps/no-builtins-lto/main.rs deleted file mode 100644 index 890c999c8ccf7c1340f20f9b0e16113718553512..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-builtins-lto/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate no_builtins; - -fn main() {} diff --git a/tests/run-make-fulldeps/no-builtins-lto/no_builtins.rs b/tests/run-make-fulldeps/no-builtins-lto/no_builtins.rs deleted file mode 100644 index 5d001031a57fa0ca5ec98d2948ea28c492db0571..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-builtins-lto/no_builtins.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "lib"] -#![no_builtins] diff --git a/tests/run-make-fulldeps/no-duplicate-libs/Makefile b/tests/run-make-fulldeps/no-duplicate-libs/Makefile deleted file mode 100644 index b05aff7826e095e43c4ff731282e6d40c0ffedce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-duplicate-libs/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -ifdef IS_MSVC -# FIXME(#27979) -all: -else -all: $(call STATICLIB,foo) $(call STATICLIB,bar) - $(RUSTC) main.rs - $(call RUN,main) -endif diff --git a/tests/run-make-fulldeps/no-duplicate-libs/bar.c b/tests/run-make-fulldeps/no-duplicate-libs/bar.c deleted file mode 100644 index e369526572d6fe00a2be0991b523b2a40faae12f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-duplicate-libs/bar.c +++ /dev/null @@ -1,5 +0,0 @@ -extern void foo(); - -void bar() { - foo(); -} diff --git a/tests/run-make-fulldeps/no-duplicate-libs/foo.c b/tests/run-make-fulldeps/no-duplicate-libs/foo.c deleted file mode 100644 index 85e6cd8c3909a7e67c41750f5210b1463dd7a90c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-duplicate-libs/foo.c +++ /dev/null @@ -1 +0,0 @@ -void foo() {} diff --git a/tests/run-make-fulldeps/no-duplicate-libs/main.rs b/tests/run-make-fulldeps/no-duplicate-libs/main.rs deleted file mode 100644 index b25ef35ada68ebe68e65dc191751f5c0f62fb274..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-duplicate-libs/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[link(name = "foo")] // linker should drop this library, no symbols used -#[link(name = "bar")] // symbol comes from this library -#[link(name = "foo")] // now linker picks up `foo` b/c `bar` library needs it -extern "C" { - fn bar(); -} - -fn main() { - unsafe { bar() } -} diff --git a/tests/run-make-fulldeps/no-intermediate-extras/Makefile b/tests/run-make-fulldeps/no-intermediate-extras/Makefile deleted file mode 100644 index 4116aac1b8f0b165a1a7ef44291a3449edc4f6ef..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-intermediate-extras/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# Regression test for issue #10973 - -include ../tools.mk - -all: - $(RUSTC) --crate-type=rlib --test foo.rs - rm $(TMPDIR)/foo.bc && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/no-intermediate-extras/foo.rs b/tests/run-make-fulldeps/no-intermediate-extras/foo.rs deleted file mode 100644 index d11c69f812a8dfe9ea3db2474363c188c096c5b3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/no-intermediate-extras/foo.rs +++ /dev/null @@ -1 +0,0 @@ -// intentionally empty diff --git a/tests/run-make-fulldeps/obey-crate-type-flag/Makefile b/tests/run-make-fulldeps/obey-crate-type-flag/Makefile deleted file mode 100644 index effcfc94cc5ee252521d14fabeeb9f5a28687a97..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/obey-crate-type-flag/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include ../tools.mk - -# check that rustc builds all crate_type attributes -# delete rlib -# delete whatever dylib is made for this system -# check that rustc only builds --crate-type flags, ignoring attributes -# fail if an rlib was built -all: - $(RUSTC) test.rs - $(call REMOVE_RLIBS,test) - $(call REMOVE_DYLIBS,test) - $(RUSTC) --crate-type dylib test.rs - $(call REMOVE_RLIBS,test) && exit 1 || exit 0 diff --git a/tests/run-make-fulldeps/obey-crate-type-flag/test.rs b/tests/run-make-fulldeps/obey-crate-type-flag/test.rs deleted file mode 100644 index 8a768f9de902488183b79d3cd12450c56def85a0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/obey-crate-type-flag/test.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "rlib"] -#![crate_type = "dylib"] diff --git a/tests/run-make-fulldeps/obtain-borrowck/Makefile b/tests/run-make-fulldeps/obtain-borrowck/Makefile index 212d0f67d0063919f122095f889d2ddc22ea5693..233f5c9eaf499df07302b803b316387b9ebd2610 100644 --- a/tests/run-make-fulldeps/obtain-borrowck/Makefile +++ b/tests/run-make-fulldeps/obtain-borrowck/Makefile @@ -1,4 +1,4 @@ -include ../tools.mk +include ../../run-make/tools.mk # This example shows how to implement a rustc driver that retrieves MIR bodies # together with the borrow checker information. diff --git a/tests/run-make-fulldeps/output-filename-conflicts-with-directory/Makefile b/tests/run-make-fulldeps/output-filename-conflicts-with-directory/Makefile deleted file mode 100644 index 45221356cd97fe0b0cb23ff465098254b21d9e1e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-filename-conflicts-with-directory/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - cp foo.rs $(TMPDIR)/foo.rs - mkdir $(TMPDIR)/foo - $(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo 2>&1 \ - | $(CGREP) -e "the generated executable for the input file \".*foo\.rs\" conflicts with the existing directory \".*foo\"" diff --git a/tests/run-make-fulldeps/output-filename-conflicts-with-directory/foo.rs b/tests/run-make-fulldeps/output-filename-conflicts-with-directory/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-filename-conflicts-with-directory/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/output-filename-overwrites-input/Makefile b/tests/run-make-fulldeps/output-filename-overwrites-input/Makefile deleted file mode 100644 index 33069c06f5adec0ac996d4fa085b7635327db14f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-filename-overwrites-input/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include ../tools.mk - -all: - cp foo.rs $(TMPDIR)/foo - $(RUSTC) $(TMPDIR)/foo -o $(TMPDIR)/foo 2>&1 \ - | $(CGREP) -e "the input file \".*foo\" would be overwritten by the generated executable" - cp bar.rs $(TMPDIR)/bar.rlib - $(RUSTC) $(TMPDIR)/bar.rlib -o $(TMPDIR)/bar.rlib 2>&1 \ - | $(CGREP) -e "the input file \".*bar.rlib\" would be overwritten by the generated executable" - $(RUSTC) foo.rs 2>&1 && $(RUSTC) -Z ls $(TMPDIR)/foo 2>&1 - cp foo.rs $(TMPDIR)/foo.rs - $(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo.rs 2>&1 \ - | $(CGREP) -e "the input file \".*foo.rs\" would be overwritten by the generated executable" diff --git a/tests/run-make-fulldeps/output-filename-overwrites-input/bar.rs b/tests/run-make-fulldeps/output-filename-overwrites-input/bar.rs deleted file mode 100644 index 83be6e807e0b9bc42f55f3df77db7a1e99b3d93c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-filename-overwrites-input/bar.rs +++ /dev/null @@ -1 +0,0 @@ -#![crate_type = "lib"] diff --git a/tests/run-make-fulldeps/output-filename-overwrites-input/foo.rs b/tests/run-make-fulldeps/output-filename-overwrites-input/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-filename-overwrites-input/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/output-type-permutations/Makefile b/tests/run-make-fulldeps/output-type-permutations/Makefile deleted file mode 100644 index 791606c643b14e925a6a2f93c95381de7e082335..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-type-permutations/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs --crate-type=rlib,dylib,staticlib - $(call REMOVE_RLIBS,bar) - $(call REMOVE_DYLIBS,bar) - rm $(call STATICLIB,bar) - rm -f $(TMPDIR)/{lib,}bar.{dll.exp,dll.lib,pdb,dll.a} - # Check that $(TMPDIR) is empty. - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --crate-type=bin - rm $(TMPDIR)/$(call BIN,bar) - rm -f $(TMPDIR)/bar.pdb - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit=asm,llvm-ir,llvm-bc,obj,link - rm $(TMPDIR)/bar.ll - rm $(TMPDIR)/bar.bc - rm $(TMPDIR)/bar.s - rm $(TMPDIR)/bar.o - rm $(TMPDIR)/$(call BIN,bar) - rm -f $(TMPDIR)/bar.pdb - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit asm -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit asm=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit=asm=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit llvm-bc -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit llvm-bc=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit=llvm-bc=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit llvm-ir -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit=llvm-ir=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit obj -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit obj=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --emit=obj=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit link -o $(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --emit link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --emit=link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - rm -f $(TMPDIR)/foo.pdb - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --crate-type=rlib --emit link=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --crate-type=rlib --emit=link=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --crate-type=dylib -o $(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --crate-type=dylib --emit link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --crate-type=dylib --emit=link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - rm -f $(TMPDIR)/{lib,}foo.{dll.exp,dll.lib,pdb,dll.a,exe.a} - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] || (ls -1 $(TMPDIR) && exit 1) - - $(RUSTC) foo.rs --crate-type=staticlib -o $(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --crate-type=staticlib --emit link=$(TMPDIR)/foo - rm $(TMPDIR)/foo - $(RUSTC) foo.rs --crate-type=staticlib --emit=link=$(TMPDIR)/foo - rm $(TMPDIR)/foo - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --crate-type=bin -o $(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --crate-type=bin --emit link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - $(RUSTC) foo.rs --crate-type=bin --emit=link=$(TMPDIR)/$(call BIN,foo) - rm $(TMPDIR)/$(call BIN,foo) - rm -f $(TMPDIR)/foo.pdb - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/ir \ - --emit link \ - --crate-type=rlib - rm $(TMPDIR)/ir - rm $(TMPDIR)/libbar.rlib - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit asm=$(TMPDIR)/asm \ - --emit llvm-ir=$(TMPDIR)/ir \ - --emit llvm-bc=$(TMPDIR)/bc \ - --emit obj=$(TMPDIR)/obj \ - --emit link=$(TMPDIR)/link \ - --crate-type=staticlib - rm $(TMPDIR)/asm - rm $(TMPDIR)/ir - rm $(TMPDIR)/bc - rm $(TMPDIR)/obj - rm $(TMPDIR)/link - $(RUSTC) foo.rs --emit=asm=$(TMPDIR)/asm \ - --emit llvm-ir=$(TMPDIR)/ir \ - --emit=llvm-bc=$(TMPDIR)/bc \ - --emit obj=$(TMPDIR)/obj \ - --emit=link=$(TMPDIR)/link \ - --crate-type=staticlib - rm $(TMPDIR)/asm - rm $(TMPDIR)/ir - rm $(TMPDIR)/bc - rm $(TMPDIR)/obj - rm $(TMPDIR)/link - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] - - $(RUSTC) foo.rs --emit=asm,llvm-ir,llvm-bc,obj,link --crate-type=staticlib - rm $(TMPDIR)/bar.ll - rm $(TMPDIR)/bar.s - rm $(TMPDIR)/bar.o - rm $(call STATICLIB,bar) - mv $(TMPDIR)/bar.bc $(TMPDIR)/foo.bc - # Don't check that the $(TMPDIR) is empty - we left `foo.bc` for later - # comparison. - - $(RUSTC) foo.rs --emit=llvm-bc,link --crate-type=rlib - cmp $(TMPDIR)/foo.bc $(TMPDIR)/bar.bc - rm $(TMPDIR)/bar.bc - rm $(TMPDIR)/foo.bc - $(call REMOVE_RLIBS,bar) - [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] diff --git a/tests/run-make-fulldeps/output-type-permutations/foo.rs b/tests/run-make-fulldeps/output-type-permutations/foo.rs deleted file mode 100644 index f0a2cc6ad75e606e43b2195aca79aff1ec838754..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-type-permutations/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_name = "bar"] - -fn main() {} diff --git a/tests/run-make-fulldeps/output-with-hyphens/Makefile b/tests/run-make-fulldeps/output-with-hyphens/Makefile deleted file mode 100644 index 365fb6e591a914d613807f1a7519cb022fe4776f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-with-hyphens/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo-bar.rs --crate-type bin - [ -f $(TMPDIR)/$(call BIN,foo-bar) ] - $(RUSTC) foo-bar.rs --crate-type lib - [ -f $(TMPDIR)/libfoo_bar.rlib ] diff --git a/tests/run-make-fulldeps/output-with-hyphens/foo-bar.rs b/tests/run-make-fulldeps/output-with-hyphens/foo-bar.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/output-with-hyphens/foo-bar.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/override-aliased-flags/Makefile b/tests/run-make-fulldeps/override-aliased-flags/Makefile deleted file mode 100644 index 186b8c7c85eaddf7f4501f61f33d4b6538c86675..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/override-aliased-flags/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -include ../tools.mk - -# FIXME: it would be good to check that it's actually the rightmost flags -# that are used when multiple flags are specified, but I can't think of a -# reliable way to check this. - -all: - # Test that `-O` and `-C opt-level` can be specified multiple times. - # The rightmost flag will be used over any previous flags. - $(RUSTC) -O -O main.rs - $(RUSTC) -O -C opt-level=0 main.rs - $(RUSTC) -C opt-level=0 -O main.rs - $(RUSTC) -C opt-level=0 -C opt-level=2 main.rs - $(RUSTC) -C opt-level=2 -C opt-level=0 main.rs - - # Test that `-g` and `-C debuginfo` can be specified multiple times. - # The rightmost flag will be used over any previous flags. - $(RUSTC) -g -g main.rs - $(RUSTC) -g -C debuginfo=0 main.rs - $(RUSTC) -C debuginfo=0 -g main.rs - $(RUSTC) -C debuginfo=0 -C debuginfo=2 main.rs - $(RUSTC) -C debuginfo=2 -C debuginfo=0 main.rs diff --git a/tests/run-make-fulldeps/override-aliased-flags/main.rs b/tests/run-make-fulldeps/override-aliased-flags/main.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/override-aliased-flags/main.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/panic-impl-transitive/Makefile b/tests/run-make-fulldeps/panic-impl-transitive/Makefile deleted file mode 100644 index c3192efcb5a08bb86a0bd8acaf872a6398390a66..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/panic-impl-transitive/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -# NOTE we use --emit=llvm-ir to avoid running the linker (linking will fail because there's no main -# in this crate) -all: - $(RUSTC) panic-impl-provider.rs - $(RUSTC) panic-impl-consumer.rs -C panic=abort --emit=llvm-ir -L $(TMPDIR) diff --git a/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-consumer.rs b/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-consumer.rs deleted file mode 100644 index 82a98b12d041d316d2868475c4add8bc812c2931..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-consumer.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![no_std] -#![no_main] - -// this crate provides the `panic_impl` lang item so we don't need to define it here -extern crate panic_impl_provider; diff --git a/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs b/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs deleted file mode 100644 index f1b9873c83a34d836f6377dbeea3925c67218350..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/panic-impl-transitive/panic-impl-provider.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![crate_type = "rlib"] -#![no_std] - -use core::panic::PanicInfo; - -#[panic_handler] -fn panic(info: &PanicInfo) -> ! { - loop {} -} diff --git a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/Makefile b/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/Makefile deleted file mode 100644 index 42d3c977f757d87720559baac34922e3891c558a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) nonclike.rs -L$(TMPDIR) -ltest - $(call RUN,nonclike) diff --git a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/nonclike.rs b/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/nonclike.rs deleted file mode 100644 index 517286a868d8ccd5600a41db5cff85b7eaf4320f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/nonclike.rs +++ /dev/null @@ -1,21 +0,0 @@ -#[repr(C, u8)] -pub enum TT { - AA(u64, u64), - BB, -} - -#[repr(C,u8)] -pub enum T { - A(u64), - B, -} - -extern "C" { - pub fn t_add(a: T, b: T) -> u64; - pub fn tt_add(a: TT, b: TT) -> u64; -} - -fn main() { - assert_eq!(33, unsafe { tt_add(TT::AA(1,2), TT::AA(10,20)) }); - assert_eq!(11, unsafe { t_add(T::A(1), T::A(10)) }); -} diff --git a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/test.c b/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/test.c deleted file mode 100644 index 99511b2530f0693979ed0ddaeb0d69e500759452..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/test.c +++ /dev/null @@ -1,85 +0,0 @@ -#include - -/* This is the code generated by cbindgen 0.12.1 for the `enum TT` - * type in nonclike.rs . */ -enum TT_Tag { - AA, - BB, -}; -typedef uint8_t TT_Tag; - -typedef struct { - uint64_t _0; - uint64_t _1; -} AA_Body; - -typedef struct { - TT_Tag tag; - union { - AA_Body aa; - }; -} TT; - -/* This is the code generated by cbindgen 0.12.1 for the `enum T` type - * in nonclike.rs . */ -enum T_Tag { - A, - B, -}; -typedef uint8_t T_Tag; - -typedef struct { - uint64_t _0; -} A_Body; - -typedef struct { - T_Tag tag; - union { - A_Body a; - }; -} T; - -uint64_t tt_add(TT a, TT b) { - if (a.tag == AA && b.tag == AA) { - return a.aa._0 + a.aa._1 + b.aa._0 + b.aa._1; - } else if (a.tag == AA) { - return a.aa._0 + a.aa._1; - } else if (b.tag == BB) { - return b.aa._0 + b.aa._1; - } else { - return 0; - } -} - -uint64_t t_add(T a, T b) { - if (a.tag == A && b.tag == A) { - return a.a._0 + b.a._0; - } else if (a.tag == AA) { - return a.a._0; - } else if (b.tag == BB) { - return b.a._0; - } else { - return 0; - } -} - -TT tt_new(uint64_t a, uint64_t b) { - TT tt = { - .tag = AA, - .aa = { - ._0 = a, - ._1 = b, - }, - }; - return tt; -} - -T t_new(uint64_t a) { - T t = { - .tag = A, - .a = { - ._0 = a, - }, - }; - return t; -} diff --git a/tests/run-make-fulldeps/pgo-branch-weights/Makefile b/tests/run-make-fulldeps/pgo-branch-weights/Makefile deleted file mode 100644 index c60206a1f341c1b426b9f9156384f1097e713fb1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-branch-weights/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -# needs-profiler-support -# ignore-windows-gnu - -# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works -# properly. Since we only have GCC on the CI ignore the test for now. - -include ../tools.mk - -# For some very small programs GNU ld seems to not properly handle -# instrumentation sections correctly. Neither Gold nor LLD have that problem. -ifeq ($(UNAME),Linux) -ifneq (,$(findstring x86,$(TARGET))) -COMMON_FLAGS=-Clink-args=-fuse-ld=gold -endif -endif - - -all: - # We don't compile `opaque` with either optimizations or instrumentation. - $(RUSTC) $(COMMON_FLAGS) opaque.rs || exit 1 - # Compile the test program with instrumentation - mkdir -p "$(TMPDIR)/prof_data_dir" || exit 1 - $(RUSTC) $(COMMON_FLAGS) interesting.rs \ - -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O -Ccodegen-units=1 || exit 1 - $(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O || exit 1 - # The argument below generates to the expected branch weights - $(call RUN,main aaaaaaaaaaaa2bbbbbbbbbbbb2bbbbbbbbbbbbbbbbcc) || exit 1 - "$(LLVM_BIN_DIR)/llvm-profdata" merge \ - -o "$(TMPDIR)/prof_data_dir/merged.profdata" \ - "$(TMPDIR)/prof_data_dir" || exit 1 - $(RUSTC) $(COMMON_FLAGS) interesting.rs \ - -Cprofile-use="$(TMPDIR)/prof_data_dir/merged.profdata" -O \ - -Ccodegen-units=1 --emit=llvm-ir || exit 1 - cat "$(TMPDIR)/interesting.ll" | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make-fulldeps/pgo-branch-weights/filecheck-patterns.txt b/tests/run-make-fulldeps/pgo-branch-weights/filecheck-patterns.txt deleted file mode 100644 index 70d5a645c14545d999519f90d537f0ef8c5430b5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-branch-weights/filecheck-patterns.txt +++ /dev/null @@ -1,24 +0,0 @@ - -# First, establish that certain !prof labels are attached to the expected -# functions and branching instructions. - -CHECK: define void @function_called_twice(i32 {{.*}} !prof [[function_called_twice_id:![0-9]+]] { -CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}, !prof [[branch_weights0:![0-9]+]] - -CHECK: define void @function_called_42_times(i32{{.*}} %c) {{.*}} !prof [[function_called_42_times_id:![0-9]+]] { -CHECK: switch i32 %c, label {{.*}} [ -CHECK-NEXT: i32 97, label {{.*}} -CHECK-NEXT: i32 98, label {{.*}} -CHECK-NEXT: ], !prof [[branch_weights1:![0-9]+]] - -CHECK: define void @function_called_never(i32 {{.*}} !prof [[function_called_never_id:![0-9]+]] { - - - -# Now check that those !prof tags hold the expected counts - -CHECK: [[function_called_twice_id]] = !{!"function_entry_count", i64 2} -CHECK: [[branch_weights0]] = !{!"branch_weights", i32 2, i32 0} -CHECK: [[function_called_42_times_id]] = !{!"function_entry_count", i64 42} -CHECK: [[branch_weights1]] = !{!"branch_weights", i32 2, i32 12, i32 28} -CHECK: [[function_called_never_id]] = !{!"function_entry_count", i64 0} diff --git a/tests/run-make-fulldeps/pgo-branch-weights/interesting.rs b/tests/run-make-fulldeps/pgo-branch-weights/interesting.rs deleted file mode 100644 index a26d6fd69d14086c5bf062c579c57bd322d0f601..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-branch-weights/interesting.rs +++ /dev/null @@ -1,40 +0,0 @@ -#![crate_name="interesting"] -#![crate_type="rlib"] - -extern crate opaque; - -#[no_mangle] -#[inline(never)] -pub fn function_called_twice(c: char) { - if c == '2' { - // This branch is taken twice - opaque::f1(); - } else { - // This branch is never taken - opaque::f2(); - } -} - -#[no_mangle] -#[inline(never)] -pub fn function_called_42_times(c: char) { - if c == 'a' { - // This branch is taken 12 times - opaque::f1(); - } else { - - if c == 'b' { - // This branch is taken 28 times - opaque::f2(); - } else { - // This branch is taken 2 times - opaque::f3(); - } - } -} - -#[no_mangle] -#[inline(never)] -pub fn function_called_never(_: char) { - opaque::f1(); -} diff --git a/tests/run-make-fulldeps/pgo-branch-weights/main.rs b/tests/run-make-fulldeps/pgo-branch-weights/main.rs deleted file mode 100644 index 619cf9c698c9e577322ec7923bd25aed1ebd0e72..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-branch-weights/main.rs +++ /dev/null @@ -1,17 +0,0 @@ -extern crate interesting; - -fn main() { - let arg = std::env::args().skip(1).next().unwrap(); - - for c in arg.chars() { - if c == '2' { - interesting::function_called_twice(c); - } else { - interesting::function_called_42_times(c); - } - - if c == '0' { - interesting::function_called_never(c); - } - } -} diff --git a/tests/run-make-fulldeps/pgo-branch-weights/opaque.rs b/tests/run-make-fulldeps/pgo-branch-weights/opaque.rs deleted file mode 100644 index 72f93c9feab6ff37fd5bc86ab0b8bc03fc0c3e6d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-branch-weights/opaque.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_name="opaque"] -#![crate_type="rlib"] - -pub fn f1() {} -pub fn f2() {} -pub fn f3() {} diff --git a/tests/run-make-fulldeps/pgo-gen-lto/Makefile b/tests/run-make-fulldeps/pgo-gen-lto/Makefile deleted file mode 100644 index 3f2f6a838b51ce8a21330d45b11e906331580f9b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen-lto/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# needs-profiler-support -# ignore-windows-gnu - -# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works -# properly. Since we only have GCC on the CI ignore the test for now. - -include ../tools.mk - -COMPILE_FLAGS=-Copt-level=3 -Clto=fat -Cprofile-generate="$(TMPDIR)" - -all: - $(RUSTC) $(COMPILE_FLAGS) test.rs - $(call RUN,test) || exit 1 - [ -e "$(TMPDIR)"/default_*.profraw ] || (echo "No .profraw file"; exit 1) diff --git a/tests/run-make-fulldeps/pgo-gen-lto/test.rs b/tests/run-make-fulldeps/pgo-gen-lto/test.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen-lto/test.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile b/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile deleted file mode 100644 index 7f72b11b611ed4926abe37a3f8bc92e1dae3b665..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# needs-profiler-support - -include ../tools.mk - -COMPILE_FLAGS=-O -Ccodegen-units=1 -Cprofile-generate="$(TMPDIR)" - -all: - $(RUSTC) $(COMPILE_FLAGS) --emit=llvm-ir test.rs - # We expect symbols starting with "__llvm_profile_". - $(CGREP) "__llvm_profile_" < $(TMPDIR)/test.ll - # We do NOT expect the "__imp_" version of these symbols. - $(CGREP) -v "__imp___llvm_profile_" < $(TMPDIR)/test.ll # 64 bit - $(CGREP) -v "__imp____llvm_profile_" < $(TMPDIR)/test.ll # 32 bit diff --git a/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/test.rs b/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/test.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen-no-imp-symbols/test.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/pgo-gen/Makefile b/tests/run-make-fulldeps/pgo-gen/Makefile deleted file mode 100644 index 4623a74957b0f88b10eeced50c4f23179ace435f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# needs-profiler-support -# ignore-windows-gnu - -# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works -# properly. Since we only have GCC on the CI ignore the test for now. - -include ../tools.mk - -COMPILE_FLAGS=-g -Cprofile-generate="$(TMPDIR)" - -all: - $(RUSTC) $(COMPILE_FLAGS) test.rs - $(call RUN,test) || exit 1 - [ -e "$(TMPDIR)"/default_*.profraw ] || (echo "No .profraw file"; exit 1) diff --git a/tests/run-make-fulldeps/pgo-gen/test.rs b/tests/run-make-fulldeps/pgo-gen/test.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-gen/test.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/pgo-indirect-call-promotion/Makefile b/tests/run-make-fulldeps/pgo-indirect-call-promotion/Makefile deleted file mode 100644 index 45302215cc64e6e46c6f37821d54905946ad5224..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-indirect-call-promotion/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# needs-profiler-support -# ignore-windows-gnu - -# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works -# properly. Since we only have GCC on the CI ignore the test for now. - -include ../tools.mk - -all: - # We don't compile `opaque` with either optimizations or instrumentation. - # We don't compile `opaque` with either optimizations or instrumentation. - $(RUSTC) $(COMMON_FLAGS) opaque.rs - # Compile the test program with instrumentation - mkdir -p "$(TMPDIR)"/prof_data_dir - $(RUSTC) $(COMMON_FLAGS) interesting.rs \ - -Cprofile-generate="$(TMPDIR)"/prof_data_dir -O -Ccodegen-units=1 - $(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)"/prof_data_dir -O - # The argument below generates to the expected branch weights - $(call RUN,main) || exit 1 - "$(LLVM_BIN_DIR)"/llvm-profdata merge \ - -o "$(TMPDIR)"/prof_data_dir/merged.profdata \ - "$(TMPDIR)"/prof_data_dir - $(RUSTC) $(COMMON_FLAGS) interesting.rs \ - -Cprofile-use="$(TMPDIR)"/prof_data_dir/merged.profdata -O \ - -Ccodegen-units=1 --emit=llvm-ir - cat "$(TMPDIR)"/interesting.ll | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make-fulldeps/pgo-indirect-call-promotion/filecheck-patterns.txt b/tests/run-make-fulldeps/pgo-indirect-call-promotion/filecheck-patterns.txt deleted file mode 100644 index e19c78350e9d98e8d5db50429a3387957dc14f7f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-indirect-call-promotion/filecheck-patterns.txt +++ /dev/null @@ -1,16 +0,0 @@ -CHECK: define void @call_a_bunch_of_functions({{.*}} { - -# Make sure that indirect call promotion inserted a check against the most -# frequently called function. -CHECK: %{{.*}} = icmp eq {{void \(\)\*|ptr}} %{{.*}}, @function_called_always - -# Check that the call to `function_called_always` was inlined, so that we -# directly call `opaque_f1` from the upstream crate. -CHECK: call void @opaque_f1() - - -# Same checks as above, repeated for the trait object case - -CHECK: define void @call_a_bunch_of_trait_methods({{.*}} -CHECK: %{{.*}} = icmp eq {{void \(\{\}\*\)\*|ptr}} %{{.*}}, {{.*}}@foo -CHECK: tail call void @opaque_f2() diff --git a/tests/run-make-fulldeps/pgo-indirect-call-promotion/interesting.rs b/tests/run-make-fulldeps/pgo-indirect-call-promotion/interesting.rs deleted file mode 100644 index 4fd096d626dec5837b90f5ccc8f9790526208143..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-indirect-call-promotion/interesting.rs +++ /dev/null @@ -1,56 +0,0 @@ -#![crate_name="interesting"] -#![crate_type="rlib"] - -extern crate opaque; - -#[no_mangle] -pub fn function_called_always() { - opaque::opaque_f1(); -} - -#[no_mangle] -pub fn function_called_never() { - opaque::opaque_f2(); -} - -#[no_mangle] -pub fn call_a_bunch_of_functions(fns: &[fn()]) { - - // Indirect call promotion transforms the below into something like - // - // for f in fns { - // if f == function_called_always { - // function_called_always() - // } else { - // f(); - // } - // } - // - // where `function_called_always` actually gets inlined too. - - for f in fns { - f(); - } -} - - -pub trait Foo { - fn foo(&self); -} - -impl Foo for u32 { - - #[no_mangle] - fn foo(&self) { - opaque::opaque_f2(); - } -} - -#[no_mangle] -pub fn call_a_bunch_of_trait_methods(trait_objects: &[&dyn Foo]) { - - // Same as above, just with vtables in between - for x in trait_objects { - x.foo(); - } -} diff --git a/tests/run-make-fulldeps/pgo-indirect-call-promotion/main.rs b/tests/run-make-fulldeps/pgo-indirect-call-promotion/main.rs deleted file mode 100644 index 27181f30710bbbbe05fcc0a4b7525d8699381217..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-indirect-call-promotion/main.rs +++ /dev/null @@ -1,14 +0,0 @@ -extern crate interesting; - -fn main() { - // function pointer case - let fns: Vec<_> = std::iter::repeat(interesting::function_called_always as fn()) - .take(1000) - .collect(); - interesting::call_a_bunch_of_functions(&fns[..]); - - // Trait object case - let trait_objects = vec![0u32; 1000]; - let trait_objects: Vec<_> = trait_objects.iter().map(|x| x as &dyn interesting::Foo).collect(); - interesting::call_a_bunch_of_trait_methods(&trait_objects[..]); -} diff --git a/tests/run-make-fulldeps/pgo-indirect-call-promotion/opaque.rs b/tests/run-make-fulldeps/pgo-indirect-call-promotion/opaque.rs deleted file mode 100644 index 9628d711c505cab1a34cf8d9d3b8ab8e9823a5e6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-indirect-call-promotion/opaque.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_name="opaque"] -#![crate_type="rlib"] - -#[no_mangle] -pub fn opaque_f1() {} -#[no_mangle] -pub fn opaque_f2() {} diff --git a/tests/run-make-fulldeps/pgo-use/Makefile b/tests/run-make-fulldeps/pgo-use/Makefile deleted file mode 100644 index 3bac9b77aa39c452110ad64e0a51eb39e66dee76..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-use/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# needs-profiler-support -# ignore-windows-gnu - -# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works -# properly. Since we only have GCC on the CI ignore the test for now. - -include ../tools.mk - -# This test makes sure that PGO profiling data leads to cold functions being -# marked as `cold` and hot functions with `inlinehint`. -# The test program contains an `if` were actual execution only ever takes the -# `else` branch. Accordingly, we expect the function that is never called to -# be marked as cold. -# -# Disable the pre-inlining pass (i.e. a pass that does some inlining before -# it adds the profiling instrumentation). Disabling this pass leads to -# rather predictable IR which we need for this test to be stable. - -COMMON_FLAGS=-Copt-level=2 -Ccodegen-units=1 -Cllvm-args=-disable-preinline - -ifeq ($(UNAME),Darwin) -# macOS does not have the `tac` command, but `tail -r` does the same thing -TAC := tail -r -else -# some other platforms don't support the `-r` flag for `tail`, so use `tac` -TAC := tac -endif - -all: - # Compile the test program with instrumentation - $(RUSTC) $(COMMON_FLAGS) -Cprofile-generate="$(TMPDIR)" main.rs - # Run it in order to generate some profiling data - $(call RUN,main some-argument) || exit 1 - # Postprocess the profiling data so it can be used by the compiler - "$(LLVM_BIN_DIR)"/llvm-profdata merge \ - -o "$(TMPDIR)"/merged.profdata \ - "$(TMPDIR)"/default_*.profraw - # Compile the test program again, making use of the profiling data - $(RUSTC) $(COMMON_FLAGS) -Cprofile-use="$(TMPDIR)"/merged.profdata --emit=llvm-ir main.rs - # Check that the generate IR contains some things that we expect - # - # We feed the file into LLVM FileCheck tool *in reverse* so that we see the - # line with the function name before the line with the function attributes. - # FileCheck only supports checking that something matches on the next line, - # but not if something matches on the previous line. - $(TAC) "$(TMPDIR)"/main.ll | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make-fulldeps/pgo-use/filecheck-patterns.txt b/tests/run-make-fulldeps/pgo-use/filecheck-patterns.txt deleted file mode 100644 index 6da34f88f2a7400c24741840a62fd335e94374c6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-use/filecheck-patterns.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Add a check that the IR contains some expected metadata -CHECK: !{!"ProfileFormat", !"InstrProf"} -CHECK: !"ProfileSummary" - -# Make sure that the hot function is marked with `inlinehint` -CHECK: define {{.*}} @hot_function -CHECK-NEXT: Function Attrs:{{.*}}inlinehint - -# Make sure that the cold function is marked with `cold` -CHECK: define {{.*}} @cold_function -CHECK-NEXT: Function Attrs:{{.*}}cold diff --git a/tests/run-make-fulldeps/pgo-use/main.rs b/tests/run-make-fulldeps/pgo-use/main.rs deleted file mode 100644 index eb9192c87e6f05b213bb62781d253119190e6d6a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pgo-use/main.rs +++ /dev/null @@ -1,23 +0,0 @@ -#[no_mangle] -pub fn cold_function(c: u8) { - println!("cold {}", c); -} - -#[no_mangle] -pub fn hot_function(c: u8) { - std::env::set_var(format!("var{}", c), format!("hot {}", c)); -} - -fn main() { - let arg = std::env::args().skip(1).next().unwrap(); - - for i in 0 .. 1000_000 { - let some_value = arg.as_bytes()[i % arg.len()]; - if some_value == b'!' { - // This branch is never taken at runtime - cold_function(some_value); - } else { - hot_function(some_value); - } - } -} diff --git a/tests/run-make-fulldeps/pointer-auth-link-with-c/Makefile b/tests/run-make-fulldeps/pointer-auth-link-with-c/Makefile deleted file mode 100644 index 7acea03802cb39d23406f0da5a93f7dc6e7b79a0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pointer-auth-link-with-c/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -include ../tools.mk - -# only-aarch64 - -all: - $(COMPILE_OBJ) $(TMPDIR)/test.o test.c - $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o - $(RUSTC) -Z branch-protection=bti,pac-ret,leaf test.rs - $(call RUN,test) - - $(COMPILE_OBJ) $(TMPDIR)/test.o test.c -mbranch-protection=bti+pac-ret+leaf - $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o - $(RUSTC) -Z branch-protection=bti,pac-ret,leaf test.rs - $(call RUN,test) diff --git a/tests/run-make-fulldeps/pointer-auth-link-with-c/test.c b/tests/run-make-fulldeps/pointer-auth-link-with-c/test.c deleted file mode 100644 index 9fe07f82f9ed1495b13e4e4dcd2e092115b01b25..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pointer-auth-link-with-c/test.c +++ /dev/null @@ -1 +0,0 @@ -int foo() { return 0; } diff --git a/tests/run-make-fulldeps/pointer-auth-link-with-c/test.rs b/tests/run-make-fulldeps/pointer-auth-link-with-c/test.rs deleted file mode 100644 index 615ad0aeb3d0e52c2030dc082a074bc96180027a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pointer-auth-link-with-c/test.rs +++ /dev/null @@ -1,8 +0,0 @@ -#[link(name = "test")] -extern "C" { - fn foo() -> i32; -} - -fn main() { - unsafe {foo();} -} diff --git a/tests/run-make-fulldeps/prefer-dylib/Makefile b/tests/run-make-fulldeps/prefer-dylib/Makefile deleted file mode 100644 index 3817ca195eb2de4f81e3ee944129b0f5844f05d2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-dylib/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib -C prefer-dynamic - $(RUSTC) foo.rs -C prefer-dynamic - $(call RUN,foo) - rm $(TMPDIR)/*bar* - $(call FAIL,foo) diff --git a/tests/run-make-fulldeps/prefer-dylib/bar.rs b/tests/run-make-fulldeps/prefer-dylib/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-dylib/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/prefer-dylib/foo.rs b/tests/run-make-fulldeps/prefer-dylib/foo.rs deleted file mode 100644 index 8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-dylib/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate bar; - -fn main() { - bar::bar(); -} diff --git a/tests/run-make-fulldeps/prefer-rlib/Makefile b/tests/run-make-fulldeps/prefer-rlib/Makefile deleted file mode 100644 index adc345d760da557cdc9f26f195da0a99962a656a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-rlib/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib - ls $(TMPDIR)/$(call RLIB_GLOB,bar) - $(RUSTC) foo.rs - rm $(TMPDIR)/*bar* - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/prefer-rlib/bar.rs b/tests/run-make-fulldeps/prefer-rlib/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-rlib/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/prefer-rlib/foo.rs b/tests/run-make-fulldeps/prefer-rlib/foo.rs deleted file mode 100644 index 8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prefer-rlib/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate bar; - -fn main() { - bar::bar(); -} diff --git a/tests/run-make-fulldeps/pretty-expanded/Makefile b/tests/run-make-fulldeps/pretty-expanded/Makefile index 5a0097a83511f4a90642c91b390007d4b3ed5da6..48199179ecef99bede64786d74b80a7c059ded94 100644 --- a/tests/run-make-fulldeps/pretty-expanded/Makefile +++ b/tests/run-make-fulldeps/pretty-expanded/Makefile @@ -1,4 +1,4 @@ -include ../tools.mk +include ../../run-make/tools.mk all: $(RUSTC) -o $(TMPDIR)/input.expanded.rs -Zunpretty=expanded input.rs diff --git a/tests/run-make-fulldeps/pretty-print-to-file/Makefile b/tests/run-make-fulldeps/pretty-print-to-file/Makefile deleted file mode 100644 index ca11b8c47f06f341cc32f2f0345ada75121a6857..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pretty-print-to-file/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -o $(TMPDIR)/input.out -Zunpretty=normal input.rs - diff -u $(TMPDIR)/input.out input.pp diff --git a/tests/run-make-fulldeps/pretty-print-to-file/input.pp b/tests/run-make-fulldeps/pretty-print-to-file/input.pp deleted file mode 100644 index e3f03242a6e3700f646295c329fb7b55a944a88d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pretty-print-to-file/input.pp +++ /dev/null @@ -1,3 +0,0 @@ - -#[crate_type = "lib"] -pub fn foo() -> i32 { 45 } diff --git a/tests/run-make-fulldeps/pretty-print-to-file/input.rs b/tests/run-make-fulldeps/pretty-print-to-file/input.rs deleted file mode 100644 index aa828155b205a27a93e2afb9f42bbd6c6b736452..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/pretty-print-to-file/input.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[crate_type="lib"] - -pub fn -foo() -> i32 -{ 45 } diff --git a/tests/run-make-fulldeps/print-calling-conventions/Makefile b/tests/run-make-fulldeps/print-calling-conventions/Makefile deleted file mode 100644 index d3fd06392b0ed5ba1263f8266de00c927eea9a6b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/print-calling-conventions/Makefile +++ /dev/null @@ -1,4 +0,0 @@ --include ../tools.mk - -all: - $(RUSTC) --print calling-conventions diff --git a/tests/run-make-fulldeps/print-cfg/Makefile b/tests/run-make-fulldeps/print-cfg/Makefile deleted file mode 100644 index 126f5768c90f20b8c8cba03368424d076c27de07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/print-cfg/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# needs-llvm-components: x86 arm - -include ../tools.mk - -all: default - $(RUSTC) --target x86_64-pc-windows-gnu --print cfg | $(CGREP) windows - $(RUSTC) --target x86_64-pc-windows-gnu --print cfg | $(CGREP) x86_64 - $(RUSTC) --target i686-pc-windows-msvc --print cfg | $(CGREP) msvc - $(RUSTC) --target i686-apple-darwin --print cfg | $(CGREP) macos - $(RUSTC) --target i686-unknown-linux-gnu --print cfg | $(CGREP) gnu - $(RUSTC) --target arm-unknown-linux-gnueabihf --print cfg | $(CGREP) target_abi= - $(RUSTC) --target arm-unknown-linux-gnueabihf --print cfg | $(CGREP) eabihf - -ifdef IS_WINDOWS -default: - $(RUSTC) --print cfg | $(CGREP) windows -else -default: - $(RUSTC) --print cfg | $(CGREP) unix -endif diff --git a/tests/run-make-fulldeps/print-target-list/Makefile b/tests/run-make-fulldeps/print-target-list/Makefile deleted file mode 100644 index f23c40d4281e32c4c9875dbe31ece959934917e2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/print-target-list/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -# Checks that all the targets returned by `rustc --print target-list` are valid -# target specifications -all: - for target in $(shell $(BARE_RUSTC) --print target-list); do \ - $(BARE_RUSTC) --target $$target --print sysroot; \ - done diff --git a/tests/run-make-fulldeps/profile/Makefile b/tests/run-make-fulldeps/profile/Makefile deleted file mode 100644 index fffc051adbf8e152639036b7fecda6d9eae71395..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/profile/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# needs-profiler-support - -include ../tools.mk - -all: - $(RUSTC) -g -Z profile test.rs - $(call RUN,test) || exit 1 - [ -e "$(TMPDIR)/test.gcno" ] || (echo "No .gcno file"; exit 1) - [ -e "$(TMPDIR)/test.gcda" ] || (echo "No .gcda file"; exit 1) - $(RUSTC) -g -Z profile -Z profile-emit=$(TMPDIR)/abc/abc.gcda test.rs - $(call RUN,test) || exit 1 - [ -e "$(TMPDIR)/abc/abc.gcda" ] || (echo "gcda file not emitted to defined path"; exit 1) diff --git a/tests/run-make-fulldeps/profile/test.rs b/tests/run-make-fulldeps/profile/test.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/profile/test.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/prune-link-args/Makefile b/tests/run-make-fulldeps/prune-link-args/Makefile deleted file mode 100644 index a359dc5aef10228a1ca16803ed2e5cf8fbe1380a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prune-link-args/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# ignore-windows - -# Notice the space in the end, this emulates the output of pkg-config -RUSTC_FLAGS = -C link-args="-lc " - -all: - $(RUSTC) $(RUSTC_FLAGS) empty.rs diff --git a/tests/run-make-fulldeps/prune-link-args/empty.rs b/tests/run-make-fulldeps/prune-link-args/empty.rs deleted file mode 100644 index 45590d86ba6c51f0babffb0b43e3e2f44d2f9e07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/prune-link-args/empty.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() { } diff --git a/tests/run-make-fulldeps/redundant-libs/Makefile b/tests/run-make-fulldeps/redundant-libs/Makefile deleted file mode 100644 index b2dff05d1639a1c32d2a12dd40bb01b262075c92..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/redundant-libs/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -include ../tools.mk - -# ignore-windows-msvc - -# rustc will remove one of the two redundant references to foo below. Depending -# on which one gets removed, we'll get a linker error on SOME platforms (like -# Linux). On these platforms, when a library is referenced, the linker will -# only pull in the symbols needed _at that point in time_. If a later library -# depends on additional symbols from the library, they will not have been pulled -# in, and you'll get undefined symbols errors. -# -# So in this example, we need to ensure that rustc keeps the _later_ reference -# to foo, and not the former one. -RUSTC_FLAGS = \ - -l static=bar \ - -l foo \ - -l static=baz \ - -l foo \ - --print link-args - -all: $(call DYLIB,foo) $(call STATICLIB,bar) $(call STATICLIB,baz) - $(RUSTC) $(RUSTC_FLAGS) main.rs - $(call RUN,main) diff --git a/tests/run-make-fulldeps/redundant-libs/bar.c b/tests/run-make-fulldeps/redundant-libs/bar.c deleted file mode 100644 index e42599986781fe984a2c1427a3373cf439a34f60..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/redundant-libs/bar.c +++ /dev/null @@ -1 +0,0 @@ -void bar() {} diff --git a/tests/run-make-fulldeps/redundant-libs/baz.c b/tests/run-make-fulldeps/redundant-libs/baz.c deleted file mode 100644 index a4e2c2b717fdbeddb398c8753330e7b50c5540c9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/redundant-libs/baz.c +++ /dev/null @@ -1,7 +0,0 @@ -extern void foo1(); -extern void foo2(); - -void baz() { - foo1(); - foo2(); -} diff --git a/tests/run-make-fulldeps/redundant-libs/foo.c b/tests/run-make-fulldeps/redundant-libs/foo.c deleted file mode 100644 index 339ee86c99eaecec44f7c2c50cb15b3ef350b319..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/redundant-libs/foo.c +++ /dev/null @@ -1,2 +0,0 @@ -void foo1() {} -void foo2() {} diff --git a/tests/run-make-fulldeps/redundant-libs/main.rs b/tests/run-make-fulldeps/redundant-libs/main.rs deleted file mode 100644 index 90d185ff51dbdbd691db4689785b71322352f2cf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/redundant-libs/main.rs +++ /dev/null @@ -1,11 +0,0 @@ -extern "C" { - fn bar(); - fn baz(); -} - -fn main() { - unsafe { - bar(); - baz(); - } -} diff --git a/tests/run-make-fulldeps/relocation-model/Makefile b/tests/run-make-fulldeps/relocation-model/Makefile deleted file mode 100644 index a31dbfd916772cecada281275f6b5000563d023d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/relocation-model/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -include ../tools.mk - -all: others - $(RUSTC) -C relocation-model=dynamic-no-pic foo.rs - $(call RUN,foo) - - $(RUSTC) -C relocation-model=default foo.rs - $(call RUN,foo) - - $(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs --emit=link,obj - -ifdef IS_MSVC -# FIXME(#28026) -others: -else -others: - $(RUSTC) -C relocation-model=static foo.rs - $(call RUN,foo) -endif diff --git a/tests/run-make-fulldeps/relocation-model/foo.rs b/tests/run-make-fulldeps/relocation-model/foo.rs deleted file mode 100644 index da0f5d925d1078ed68c271eb7a378a34f77d7d2e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/relocation-model/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn main() {} diff --git a/tests/run-make-fulldeps/relro-levels/Makefile b/tests/run-make-fulldeps/relro-levels/Makefile deleted file mode 100644 index 6176fc1a58954975db7526e054ca8b903eaa9a31..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/relro-levels/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -include ../tools.mk - -# only-linux -# -# This tests the different -Zrelro-level values, and makes sure that they work properly. - -all: - # Ensure that binaries built with the full relro level links them with both - # RELRO and BIND_NOW for doing eager symbol resolving. - $(RUSTC) -Zrelro-level=full hello.rs - readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO - readelf -d $(TMPDIR)/hello | grep -q BIND_NOW - - $(RUSTC) -Zrelro-level=partial hello.rs - readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO - - # Ensure that we're *not* built with RELRO when setting it to off. We do - # not want to check for BIND_NOW however, as the linker might have that - # enabled by default. - $(RUSTC) -Zrelro-level=off hello.rs - ! readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO diff --git a/tests/run-make-fulldeps/relro-levels/hello.rs b/tests/run-make-fulldeps/relro-levels/hello.rs deleted file mode 100644 index e7a11a969c037e00a796aafeff6258501ec15e9a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/relro-levels/hello.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/tests/run-make-fulldeps/remap-path-prefix/Makefile b/tests/run-make-fulldeps/remap-path-prefix/Makefile deleted file mode 100644 index 2a7378fdf9ed5c80c76a5e3ac96734d35886b221..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/remap-path-prefix/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# ignore-windows - -# Checks if remapping works if the remap-from string contains path to the working directory plus more -all: - $(RUSTC) --remap-path-prefix $$PWD/auxiliary=/the/aux --crate-type=lib --emit=metadata auxiliary/lib.rs - grep "/the/aux/lib.rs" $(TMPDIR)/liblib.rmeta || exit 1 - ! grep "$$PWD/auxiliary" $(TMPDIR)/liblib.rmeta || exit 1 diff --git a/tests/run-make-fulldeps/remap-path-prefix/auxiliary/lib.rs b/tests/run-make-fulldeps/remap-path-prefix/auxiliary/lib.rs deleted file mode 100644 index 019c786a9023e40fc85577d5cbc78bbcf483464b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/remap-path-prefix/auxiliary/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub fn lib() { - panic!("calm"); -} diff --git a/tests/run-make-fulldeps/reproducible-build-2/Makefile b/tests/run-make-fulldeps/reproducible-build-2/Makefile deleted file mode 100644 index 1df5e102ce36c211ee7c9af69970830a4c97b669..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build-2/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -include ../tools.mk - -# ignore-musl -# ignore-windows -# Objects are reproducible but their path is not. - -all: \ - fat_lto \ - sysroot - -fat_lto: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs -C lto=fat - cp $(TMPDIR)/reproducible-build $(TMPDIR)/reproducible-build-a - $(RUSTC) reproducible-build.rs -C lto=fat - cmp "$(TMPDIR)/reproducible-build-a" "$(TMPDIR)/reproducible-build" || exit 1 - -sysroot: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(shell $(RUSTC) --print sysroot) --remap-path-prefix=$(shell $(RUSTC) --print sysroot)=/sysroot - cp -R $(shell $(RUSTC) --print sysroot) $(TMPDIR)/sysroot - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib - $(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(TMPDIR)/sysroot --remap-path-prefix=$(TMPDIR)/sysroot=/sysroot - cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 diff --git a/tests/run-make-fulldeps/reproducible-build-2/linker.rs b/tests/run-make-fulldeps/reproducible-build-2/linker.rs deleted file mode 100644 index 998d1f328596c8a16cc5d6e4677542d4d06e4f41..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build-2/linker.rs +++ /dev/null @@ -1,44 +0,0 @@ -use std::env; -use std::path::Path; -use std::fs::File; -use std::io::{Read, Write}; - -fn main() { - let mut dst = env::current_exe().unwrap(); - dst.pop(); - dst.push("linker-arguments1"); - if dst.exists() { - dst.pop(); - dst.push("linker-arguments2"); - assert!(!dst.exists()); - } - - let mut out = String::new(); - for arg in env::args().skip(1) { - let path = Path::new(&arg); - if !path.is_file() { - out.push_str(&arg); - out.push_str("\n"); - continue - } - - let mut contents = Vec::new(); - File::open(path).unwrap().read_to_end(&mut contents).unwrap(); - - out.push_str(&format!("{}: {}\n", arg, hash(&contents))); - } - - File::create(dst).unwrap().write_all(out.as_bytes()).unwrap(); -} - -// fnv hash for now -fn hash(contents: &[u8]) -> u64 { - let mut hash = 0xcbf29ce484222325; - - for byte in contents { - hash = hash ^ (*byte as u64); - hash = hash.wrapping_mul(0x100000001b3); - } - - hash -} diff --git a/tests/run-make-fulldeps/reproducible-build-2/reproducible-build-aux.rs b/tests/run-make-fulldeps/reproducible-build-2/reproducible-build-aux.rs deleted file mode 100644 index 8105b3d2bda3df7d16e54f5cbac35bc61a6c74e0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build-2/reproducible-build-aux.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![crate_type="lib"] - -pub static STATIC: i32 = 1234; - -pub struct Struct { - _t1: std::marker::PhantomData, - _t2: std::marker::PhantomData, -} - -pub fn regular_fn(_: i32) {} - -pub fn generic_fn() {} - -impl Drop for Struct { - fn drop(&mut self) {} -} - -pub enum Enum { - Variant1, - Variant2(u32), - Variant3 { x: u32 } -} - -pub struct TupleStruct(pub i8, pub i16, pub i32, pub i64); - -pub trait Trait { - fn foo(&self); -} diff --git a/tests/run-make-fulldeps/reproducible-build-2/reproducible-build.rs b/tests/run-make-fulldeps/reproducible-build-2/reproducible-build.rs deleted file mode 100644 index a6c04774c869a26dc110e270393ffbb0475ec34f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build-2/reproducible-build.rs +++ /dev/null @@ -1,116 +0,0 @@ -// This test case makes sure that two identical invocations of the compiler -// (i.e., same code base, same compile-flags, same compiler-versions, etc.) -// produce the same output. In the past, symbol names of monomorphized functions -// were not deterministic (which we want to avoid). -// -// The test tries to exercise as many different paths into symbol name -// generation as possible: -// -// - regular functions -// - generic functions -// - methods -// - statics -// - closures -// - enum variant constructors -// - tuple struct constructors -// - drop glue -// - FnOnce adapters -// - Trait object shims -// - Fn Pointer shims - -#![allow(dead_code, warnings)] - -extern crate reproducible_build_aux; - -static STATIC: i32 = 1234; - -pub struct Struct { - x: T1, - y: T2, -} - -fn regular_fn(_: i32) {} - -fn generic_fn() {} - -impl Drop for Struct { - fn drop(&mut self) {} -} - -pub enum Enum { - Variant1, - Variant2(u32), - Variant3 { x: u32 } -} - -struct TupleStruct(i8, i16, i32, i64); - -impl TupleStruct { - pub fn bar(&self) {} -} - -trait Trait { - fn foo(&self); -} - -impl Trait for u64 { - fn foo(&self) {} -} - -impl reproducible_build_aux::Trait for TupleStruct { - fn foo(&self) {} -} - -fn main() { - regular_fn(STATIC); - generic_fn::(); - generic_fn::>(); - generic_fn::, reproducible_build_aux::Struct>(); - - let dropped = Struct { - x: "", - y: 'a', - }; - - let _ = Enum::Variant1; - let _ = Enum::Variant2(0); - let _ = Enum::Variant3 { x: 0 }; - let _ = TupleStruct(1, 2, 3, 4); - - let closure = |x| { - x + 1i32 - }; - - fn inner i32>(f: F) -> i32 { - f(STATIC) - } - - println!("{}", inner(closure)); - - let object_shim: &Trait = &0u64; - object_shim.foo(); - - fn with_fn_once_adapter(f: F) { - f(0); - } - - with_fn_once_adapter(|_:i32| { }); - - reproducible_build_aux::regular_fn(STATIC); - reproducible_build_aux::generic_fn::(); - reproducible_build_aux::generic_fn::>(); - reproducible_build_aux::generic_fn::, - reproducible_build_aux::Struct>(); - - let _ = reproducible_build_aux::Enum::Variant1; - let _ = reproducible_build_aux::Enum::Variant2(0); - let _ = reproducible_build_aux::Enum::Variant3 { x: 0 }; - let _ = reproducible_build_aux::TupleStruct(1, 2, 3, 4); - - let object_shim: &reproducible_build_aux::Trait = &TupleStruct(0, 1, 2, 3); - object_shim.foo(); - - let pointer_shim: &Fn(i32) = ®ular_fn; - - TupleStruct(1, 2, 3, 4).bar(); -} diff --git a/tests/run-make-fulldeps/reproducible-build/Makefile b/tests/run-make-fulldeps/reproducible-build/Makefile deleted file mode 100644 index 642a480815b7be64889d8f4c11c71abbb9af93be..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build/Makefile +++ /dev/null @@ -1,139 +0,0 @@ -include ../tools.mk - -# ignore-musl -# Objects are reproducible but their path is not. - -all: \ - smoke \ - debug \ - opt \ - link_paths \ - remap_paths \ - different_source_dirs_rlib \ - remap_cwd_rlib \ - remap_cwd_to_empty \ - extern_flags - -# TODO: Builds of `bin` crate types are not deterministic with debuginfo=2 on -# Windows. -# See: https://github.com/rust-lang/rust/pull/87320#issuecomment-920105533 -# Issue: https://github.com/rust-lang/rust/issues/88982 -# -# different_source_dirs_bin \ -# remap_cwd_bin \ - -smoke: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) linker.rs -O - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) - diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" - -debug: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) linker.rs -O - $(RUSTC) reproducible-build-aux.rs -g - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g - diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" - -opt: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) linker.rs -O - $(RUSTC) reproducible-build-aux.rs -O - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O - $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O - diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" - -link_paths: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs --crate-type rlib -L /b - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib - $(RUSTC) reproducible-build.rs --crate-type rlib -L /a - cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 - -remap_paths: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/a=/c - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib - $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/b=/c - cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 - -different_source_dirs_bin: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - mkdir $(TMPDIR)/test - cp reproducible-build.rs $(TMPDIR)/test - $(RUSTC) reproducible-build.rs --crate-type bin --remap-path-prefix=$$PWD=/b - cp $(TMPDIR)/reproducible-build $(TMPDIR)/foo - (cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \ - --remap-path-prefix=$(TMPDIR)/test=/b \ - --crate-type bin) - cmp "$(TMPDIR)/reproducible-build" "$(TMPDIR)/foo" || exit 1 - -different_source_dirs_rlib: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - mkdir $(TMPDIR)/test - cp reproducible-build.rs $(TMPDIR)/test - $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=$$PWD=/b - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib - (cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \ - --remap-path-prefix=$(TMPDIR)/test=/b \ - --crate-type rlib) - cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 - -remap_cwd_bin: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - mkdir $(TMPDIR)/test - cp reproducible-build.rs $(TMPDIR)/test - $(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \ - -Z remap-cwd-prefix=. - cp $(TMPDIR)/reproducible-build $(TMPDIR)/first - (cd $(TMPDIR)/test && \ - $(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \ - -Z remap-cwd-prefix=.) - cmp "$(TMPDIR)/first" "$(TMPDIR)/reproducible-build" || exit 1 - -remap_cwd_rlib: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - mkdir $(TMPDIR)/test - cp reproducible-build.rs $(TMPDIR)/test - $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ - -Z remap-cwd-prefix=. - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib - (cd $(TMPDIR)/test && \ - $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ - -Z remap-cwd-prefix=.) - cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1 - -remap_cwd_to_empty: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - mkdir $(TMPDIR)/test - cp reproducible-build.rs $(TMPDIR)/test - $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ - -Z remap-cwd-prefix= - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib - (cd $(TMPDIR)/test && \ - $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ - -Z remap-cwd-prefix=) - cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1 - -extern_flags: - rm -rf $(TMPDIR) && mkdir $(TMPDIR) - $(RUSTC) reproducible-build-aux.rs - $(RUSTC) reproducible-build.rs \ - --extern reproducible_build_aux=$(TMPDIR)/libreproducible_build_aux.rlib \ - --crate-type rlib - cp $(TMPDIR)/libreproducible_build_aux.rlib $(TMPDIR)/libbar.rlib - cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib - $(RUSTC) reproducible-build.rs \ - --extern reproducible_build_aux=$(TMPDIR)/libbar.rlib \ - --crate-type rlib - cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 diff --git a/tests/run-make-fulldeps/reproducible-build/linker.rs b/tests/run-make-fulldeps/reproducible-build/linker.rs deleted file mode 100644 index 3dda6f190e448ae6c513d0f31e27e4e94a574673..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build/linker.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::env; -use std::path::Path; -use std::fs::File; -use std::io::{Read, Write}; - -fn main() { - let mut dst = env::current_exe().unwrap(); - dst.pop(); - dst.push("linker-arguments1"); - if dst.exists() { - dst.pop(); - dst.push("linker-arguments2"); - assert!(!dst.exists()); - } - - let mut out = String::new(); - for arg in env::args().skip(1) { - let path = Path::new(&arg); - if !path.is_file() { - out.push_str(&arg); - out.push_str("\n"); - continue - } - - let mut contents = Vec::new(); - File::open(path).unwrap().read_to_end(&mut contents).unwrap(); - - // This file is produced during linking in a temporary directory. - let arg = if arg.ends_with("/symbols.o") || arg.ends_with("\\symbols.o") { - "symbols.o" - } else { - &*arg - }; - out.push_str(&format!("{}: {}\n", arg, hash(&contents))); - } - - File::create(dst).unwrap().write_all(out.as_bytes()).unwrap(); -} - -// fnv hash for now -fn hash(contents: &[u8]) -> u64 { - let mut hash = 0xcbf29ce484222325; - - for byte in contents { - hash = hash ^ (*byte as u64); - hash = hash.wrapping_mul(0x100000001b3); - } - - hash -} diff --git a/tests/run-make-fulldeps/reproducible-build/reproducible-build-aux.rs b/tests/run-make-fulldeps/reproducible-build/reproducible-build-aux.rs deleted file mode 100644 index 8105b3d2bda3df7d16e54f5cbac35bc61a6c74e0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build/reproducible-build-aux.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![crate_type="lib"] - -pub static STATIC: i32 = 1234; - -pub struct Struct { - _t1: std::marker::PhantomData, - _t2: std::marker::PhantomData, -} - -pub fn regular_fn(_: i32) {} - -pub fn generic_fn() {} - -impl Drop for Struct { - fn drop(&mut self) {} -} - -pub enum Enum { - Variant1, - Variant2(u32), - Variant3 { x: u32 } -} - -pub struct TupleStruct(pub i8, pub i16, pub i32, pub i64); - -pub trait Trait { - fn foo(&self); -} diff --git a/tests/run-make-fulldeps/reproducible-build/reproducible-build.rs b/tests/run-make-fulldeps/reproducible-build/reproducible-build.rs deleted file mode 100644 index a6c04774c869a26dc110e270393ffbb0475ec34f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/reproducible-build/reproducible-build.rs +++ /dev/null @@ -1,116 +0,0 @@ -// This test case makes sure that two identical invocations of the compiler -// (i.e., same code base, same compile-flags, same compiler-versions, etc.) -// produce the same output. In the past, symbol names of monomorphized functions -// were not deterministic (which we want to avoid). -// -// The test tries to exercise as many different paths into symbol name -// generation as possible: -// -// - regular functions -// - generic functions -// - methods -// - statics -// - closures -// - enum variant constructors -// - tuple struct constructors -// - drop glue -// - FnOnce adapters -// - Trait object shims -// - Fn Pointer shims - -#![allow(dead_code, warnings)] - -extern crate reproducible_build_aux; - -static STATIC: i32 = 1234; - -pub struct Struct { - x: T1, - y: T2, -} - -fn regular_fn(_: i32) {} - -fn generic_fn() {} - -impl Drop for Struct { - fn drop(&mut self) {} -} - -pub enum Enum { - Variant1, - Variant2(u32), - Variant3 { x: u32 } -} - -struct TupleStruct(i8, i16, i32, i64); - -impl TupleStruct { - pub fn bar(&self) {} -} - -trait Trait { - fn foo(&self); -} - -impl Trait for u64 { - fn foo(&self) {} -} - -impl reproducible_build_aux::Trait for TupleStruct { - fn foo(&self) {} -} - -fn main() { - regular_fn(STATIC); - generic_fn::(); - generic_fn::>(); - generic_fn::, reproducible_build_aux::Struct>(); - - let dropped = Struct { - x: "", - y: 'a', - }; - - let _ = Enum::Variant1; - let _ = Enum::Variant2(0); - let _ = Enum::Variant3 { x: 0 }; - let _ = TupleStruct(1, 2, 3, 4); - - let closure = |x| { - x + 1i32 - }; - - fn inner i32>(f: F) -> i32 { - f(STATIC) - } - - println!("{}", inner(closure)); - - let object_shim: &Trait = &0u64; - object_shim.foo(); - - fn with_fn_once_adapter(f: F) { - f(0); - } - - with_fn_once_adapter(|_:i32| { }); - - reproducible_build_aux::regular_fn(STATIC); - reproducible_build_aux::generic_fn::(); - reproducible_build_aux::generic_fn::>(); - reproducible_build_aux::generic_fn::, - reproducible_build_aux::Struct>(); - - let _ = reproducible_build_aux::Enum::Variant1; - let _ = reproducible_build_aux::Enum::Variant2(0); - let _ = reproducible_build_aux::Enum::Variant3 { x: 0 }; - let _ = reproducible_build_aux::TupleStruct(1, 2, 3, 4); - - let object_shim: &reproducible_build_aux::Trait = &TupleStruct(0, 1, 2, 3); - object_shim.foo(); - - let pointer_shim: &Fn(i32) = ®ular_fn; - - TupleStruct(1, 2, 3, 4).bar(); -} diff --git a/tests/run-make-fulldeps/resolve-rename/Makefile b/tests/run-make-fulldeps/resolve-rename/Makefile deleted file mode 100644 index 00f83a5d6b2d47d8aa5e995f860fd5fad886fd2d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/resolve-rename/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -C extra-filename=-hash foo.rs - $(RUSTC) bar.rs - mv $(TMPDIR)/libfoo-hash.rlib $(TMPDIR)/libfoo-another-hash.rlib - $(RUSTC) baz.rs diff --git a/tests/run-make-fulldeps/resolve-rename/bar.rs b/tests/run-make-fulldeps/resolve-rename/bar.rs deleted file mode 100644 index 4a09ce355e684b0d65a83fecaa65e53937cd27b9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/resolve-rename/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "rlib"] - -extern crate foo; - -pub fn bar() { foo::foo() } diff --git a/tests/run-make-fulldeps/resolve-rename/baz.rs b/tests/run-make-fulldeps/resolve-rename/baz.rs deleted file mode 100644 index 9176073ef97f48717582483f4843a6329a08099e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/resolve-rename/baz.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "rlib"] - -extern crate bar; - -pub fn baz() { bar::bar() } diff --git a/tests/run-make-fulldeps/resolve-rename/foo.rs b/tests/run-make-fulldeps/resolve-rename/foo.rs deleted file mode 100644 index bd6820098eea436cb272676f18774e67d5ea4ecb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/resolve-rename/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "rlib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/Makefile b/tests/run-make-fulldeps/return-non-c-like-enum-from-c/Makefile deleted file mode 100644 index 42d3c977f757d87720559baac34922e3891c558a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,test) - $(RUSTC) nonclike.rs -L$(TMPDIR) -ltest - $(call RUN,nonclike) diff --git a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/nonclike.rs b/tests/run-make-fulldeps/return-non-c-like-enum-from-c/nonclike.rs deleted file mode 100644 index ea22a2a56e09b44b9d7243ac5d1bf48b2b4f4feb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/nonclike.rs +++ /dev/null @@ -1,31 +0,0 @@ -#[repr(C, u8)] -pub enum TT { - AA(u64, u64), - BB, -} - -#[repr(C,u8)] -pub enum T { - A(u64), - B, -} - -extern "C" { - pub fn t_new(a: u64) -> T; - pub fn tt_new(a: u64, b: u64) -> TT; -} - -fn main() { - if let TT::AA(a, b) = unsafe { tt_new(10, 11) } { - assert_eq!(10, a); - assert_eq!(11, b); - } else { - panic!("expected TT::AA"); - } - - if let T::A(a) = unsafe { t_new(10) } { - assert_eq!(10, a); - } else { - panic!("expected T::A"); - } -} diff --git a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/test.c b/tests/run-make-fulldeps/return-non-c-like-enum-from-c/test.c deleted file mode 100644 index 3ad135bab4a1e986c33ba940427ab52548d3688b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum-from-c/test.c +++ /dev/null @@ -1,61 +0,0 @@ -#include - -/* This is the code generated by cbindgen 0.12.1 for the `enum TT` - * type in nonclike.rs . */ -enum TT_Tag { - AA, - BB, -}; -typedef uint8_t TT_Tag; - -typedef struct { - uint64_t _0; - uint64_t _1; -} AA_Body; - -typedef struct { - TT_Tag tag; - union { - AA_Body aa; - }; -} TT; - -/* This is the code generated by cbindgen 0.12.1 for the `enum T` type - * in nonclike.rs . */ -enum T_Tag { - A, - B, -}; -typedef uint8_t T_Tag; - -typedef struct { - uint64_t _0; -} A_Body; - -typedef struct { - T_Tag tag; - union { - A_Body a; - }; -} T; - -TT tt_new(uint64_t a, uint64_t b) { - TT tt = { - .tag = AA, - .aa = { - ._0 = a, - ._1 = b, - }, - }; - return tt; -} - -T t_new(uint64_t a) { - T t = { - .tag = A, - .a = { - ._0 = a, - }, - }; - return t; -} diff --git a/tests/run-make-fulldeps/return-non-c-like-enum/Makefile b/tests/run-make-fulldeps/return-non-c-like-enum/Makefile deleted file mode 100644 index 513311c8289464df4cdc143fe236a1660c08a4c7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) --crate-type=staticlib nonclike.rs - $(CC) test.c $(call STATICLIB,nonclike) $(call OUT_EXE,test) \ - $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(call RUN,test) diff --git a/tests/run-make-fulldeps/return-non-c-like-enum/nonclike.rs b/tests/run-make-fulldeps/return-non-c-like-enum/nonclike.rs deleted file mode 100644 index de529cf641ab06d44a936add077782d2074f1054..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum/nonclike.rs +++ /dev/null @@ -1,21 +0,0 @@ -#[repr(C, u8)] -pub enum TT { - AA(u64, u64), - BB, -} - -#[no_mangle] -pub extern "C" fn tt_new(a: u64, b: u64) -> TT { - TT::AA(a, b) -} - -#[repr(C,u8)] -pub enum T { - A(u64), - B, -} - -#[no_mangle] -pub extern "C" fn t_new(a: u64) -> T { - T::A(a) -} diff --git a/tests/run-make-fulldeps/return-non-c-like-enum/test.c b/tests/run-make-fulldeps/return-non-c-like-enum/test.c deleted file mode 100644 index afadd3c10c5ca0d51e5cacf18f3e937aaefdb76a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/return-non-c-like-enum/test.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include - -/* This is the code generated by cbindgen 0.12.1 for the `enum TT` - * type in nonclike.rs . */ -enum TT_Tag { - AA, - BB, -}; -typedef uint8_t TT_Tag; - -typedef struct { - uint64_t _0; - uint64_t _1; -} AA_Body; - -typedef struct { - TT_Tag tag; - union { - AA_Body aa; - }; -} TT; - -/* This is the code generated by cbindgen 0.12.1 for the `enum T` type - * in nonclike.rs . */ -enum T_Tag { - A, - B, -}; -typedef uint8_t T_Tag; - -typedef struct { - uint64_t _0; -} A_Body; - -typedef struct { - T_Tag tag; - union { - A_Body a; - }; -} T; - -/* These symbols are defined by the Rust staticlib built from - * nonclike.rs. */ -extern TT tt_new(uint64_t a, uint64_t b); -extern T t_new(uint64_t v); - -int main(int argc, char *argv[]) { - (void)argc; (void)argv; - - /* This example works. */ - TT tt = tt_new(10, 20); - assert(AA == tt.tag); - assert(10 == tt.aa._0); - assert(20 == tt.aa._1); - - /* This one used to segfault (see issue #68190). */ - T t = t_new(10); - assert(A == t.tag); - assert(10 == t.a._0); - - return 0; -} diff --git a/tests/run-make-fulldeps/rlib-chain/Makefile b/tests/run-make-fulldeps/rlib-chain/Makefile deleted file mode 100644 index 236943a2a3b3513711d5b4d52a9c8f26d9a3b819..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rlib-chain/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) m1.rs - $(RUSTC) m2.rs - $(RUSTC) m3.rs - $(RUSTC) m4.rs - $(call RUN,m4) - rm $(TMPDIR)/*lib - $(call RUN,m4) diff --git a/tests/run-make-fulldeps/rlib-chain/m1.rs b/tests/run-make-fulldeps/rlib-chain/m1.rs deleted file mode 100644 index 665b206ccf197c2cf3ec3d7860555ff808a11c20..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rlib-chain/m1.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![crate_type = "rlib"] -pub fn m1() {} diff --git a/tests/run-make-fulldeps/rlib-chain/m2.rs b/tests/run-make-fulldeps/rlib-chain/m2.rs deleted file mode 100644 index eba12fe1218853b05c629339bdce5bb905ba53b7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rlib-chain/m2.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] -extern crate m1; - -pub fn m2() { m1::m1() } diff --git a/tests/run-make-fulldeps/rlib-chain/m3.rs b/tests/run-make-fulldeps/rlib-chain/m3.rs deleted file mode 100644 index ade191db49c8e81211afcd0f5efcf92a0c95d4f0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rlib-chain/m3.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] -extern crate m2; - -pub fn m3() { m2::m2() } diff --git a/tests/run-make-fulldeps/rlib-chain/m4.rs b/tests/run-make-fulldeps/rlib-chain/m4.rs deleted file mode 100644 index fa8ec6079deace3f04d68dc79b920927ada6f385..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rlib-chain/m4.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate m3; - -fn main() { m3::m3() } diff --git a/tests/run-make-fulldeps/rustdoc-determinism/Makefile b/tests/run-make-fulldeps/rustdoc-determinism/Makefile deleted file mode 100644 index a3ef1690671843878c9f4dfc8992e2effa8222e3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-determinism/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include ../tools.mk - -# Assert that the search index is generated deterministically, regardless of the -# order that crates are documented in. - -# ignore-windows -# Uses `diff`. - -all: - $(RUSTDOC) foo.rs -o $(TMPDIR)/foo_first - $(RUSTDOC) bar.rs -o $(TMPDIR)/foo_first - - $(RUSTDOC) bar.rs -o $(TMPDIR)/bar_first - $(RUSTDOC) foo.rs -o $(TMPDIR)/bar_first - - diff $(TMPDIR)/foo_first/search-index.js $(TMPDIR)/bar_first/search-index.js diff --git a/tests/run-make-fulldeps/rustdoc-determinism/bar.rs b/tests/run-make-fulldeps/rustdoc-determinism/bar.rs deleted file mode 100644 index ca05a6a9076c217012b462b2b4e9459096f3384b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-determinism/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub struct Bar; diff --git a/tests/run-make-fulldeps/rustdoc-determinism/foo.rs b/tests/run-make-fulldeps/rustdoc-determinism/foo.rs deleted file mode 100644 index 4a835673a596bcd05404f43d34082bf2785f2a9d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-determinism/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub struct Foo; diff --git a/tests/run-make-fulldeps/rustdoc-error-lines/Makefile b/tests/run-make-fulldeps/rustdoc-error-lines/Makefile deleted file mode 100644 index 2dc30f56b833f2a578f81878549c7f902e1ec928..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-error-lines/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include ../tools.mk - -# Test that hir-tree output doesn't crash and includes -# the string constant we would expect to see. - -all: - $(RUSTDOC) --test input.rs > $(TMPDIR)/output || true - $(CGREP) 'input.rs - foo (line 5)' < $(TMPDIR)/output - $(CGREP) 'input.rs:7:15' < $(TMPDIR)/output - $(CGREP) 'input.rs - bar (line 15)' < $(TMPDIR)/output - $(CGREP) 'input.rs:17:15' < $(TMPDIR)/output - $(CGREP) 'input.rs - bar (line 24)' < $(TMPDIR)/output - $(CGREP) 'input.rs:26:15' < $(TMPDIR)/output diff --git a/tests/run-make-fulldeps/rustdoc-error-lines/input.rs b/tests/run-make-fulldeps/rustdoc-error-lines/input.rs deleted file mode 100644 index b4db182e85f267791be1e99da124c4dee67e4a2d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-error-lines/input.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Test for #45868 - -// random #![feature] to ensure that crate attrs -// do not offset things -/// ```rust -/// #![feature(bool_to_option)] -/// let x: char = 1; -/// ``` -pub fn foo() { - -} - -/// Add some text around the test... -/// -/// ```rust -/// #![feature(bool_to_option)] -/// let x: char = 1; -/// ``` -/// -/// ...to make sure that the line number is still correct. -/// -/// Let's also add a second test in the same doc comment. -/// -/// ```rust -/// #![feature(bool_to_option)] -/// let x: char = 1; -/// ``` -pub fn bar() {} diff --git a/tests/run-make-fulldeps/rustdoc-io-error/Makefile b/tests/run-make-fulldeps/rustdoc-io-error/Makefile deleted file mode 100644 index 27f5ecf94aba39c6d806addc795dbe9ab1da075b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-io-error/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -include ../tools.mk - -# This test verifies that rustdoc doesn't ICE when it encounters an IO error -# while generating files. Ideally this would be a rustdoc-ui test, so we could -# verify the error message as well. - -# ignore-windows -# The test uses `chmod`. - -OUTPUT_DIR := "$(TMPDIR)/rustdoc-io-error" - -# This test operates by creating a temporary directory and modifying its -# permissions so that it is not writable. We have to take special care to set -# the permissions back to normal so that it's able to be deleted later. -all: - mkdir -p $(OUTPUT_DIR) - chmod u-w $(OUTPUT_DIR) - -$(shell $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs) - chmod u+w $(OUTPUT_DIR) - exit $($(.SHELLSTATUS) -eq 1) diff --git a/tests/run-make-fulldeps/rustdoc-io-error/foo.rs b/tests/run-make-fulldeps/rustdoc-io-error/foo.rs deleted file mode 100644 index 4a835673a596bcd05404f43d34082bf2785f2a9d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-io-error/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub struct Foo; diff --git a/tests/run-make-fulldeps/rustdoc-map-file/Makefile b/tests/run-make-fulldeps/rustdoc-map-file/Makefile deleted file mode 100644 index 5cbf7747af63866995ba7bf736cbe64211ed3ac8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-map-file/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTDOC) -Z unstable-options --generate-redirect-map foo.rs -o "$(TMPDIR)/out" - "$(PYTHON)" validate_json.py "$(TMPDIR)/out" diff --git a/tests/run-make-fulldeps/rustdoc-map-file/expected.json b/tests/run-make-fulldeps/rustdoc-map-file/expected.json deleted file mode 100644 index 6b1ccbeac3010849dde4231d550c141f9532ae88..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-map-file/expected.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "foo/macro.foo!.html": "foo/macro.foo.html", - "foo/private/struct.Quz.html": "foo/struct.Quz.html", - "foo/hidden/struct.Bar.html": "foo/struct.Bar.html" -} diff --git a/tests/run-make-fulldeps/rustdoc-map-file/foo.rs b/tests/run-make-fulldeps/rustdoc-map-file/foo.rs deleted file mode 100644 index e12b9d2292c5110d3d1bb3f3e197ffd13f94aa56..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-map-file/foo.rs +++ /dev/null @@ -1,16 +0,0 @@ -pub use private::Quz; -pub use hidden::Bar; - -mod private { - pub struct Quz; -} - -#[doc(hidden)] -pub mod hidden { - pub struct Bar; -} - -#[macro_export] -macro_rules! foo { - () => {} -} diff --git a/tests/run-make-fulldeps/rustdoc-map-file/validate_json.py b/tests/run-make-fulldeps/rustdoc-map-file/validate_json.py deleted file mode 100755 index 5c14c90b70d37d899f1f9d9c8d65c94d185d80e1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-map-file/validate_json.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -import json - - -def find_redirect_map_file(folder, errors): - for root, dirs, files in os.walk(folder): - for name in files: - if not name.endswith("redirect-map.json"): - continue - with open(os.path.join(root, name)) as f: - data = json.load(f) - with open("expected.json") as f: - expected = json.load(f) - for key in expected: - if expected[key] != data.get(key): - errors.append("Expected `{}` for key `{}`, found: `{}`".format( - expected[key], key, data.get(key))) - else: - del data[key] - for key in data: - errors.append("Extra data not expected: key: `{}`, data: `{}`".format( - key, data[key])) - return True - return False - - -if len(sys.argv) != 2: - print("Expected doc directory to check!") - sys.exit(1) - -errors = [] -if not find_redirect_map_file(sys.argv[1], errors): - print("Didn't find the map file in `{}`...".format(sys.argv[1])) - sys.exit(1) -for err in errors: - print("=> {}".format(err)) -if len(errors) != 0: - sys.exit(1) diff --git a/tests/run-make-fulldeps/rustdoc-output-path/Makefile b/tests/run-make-fulldeps/rustdoc-output-path/Makefile deleted file mode 100644 index 8f5cda9e56e9fec57c54703596d40449f922fab0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-output-path/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -include ../tools.mk - -all: - $(RUSTDOC) -o "$(TMPDIR)/foo/bar/doc" foo.rs diff --git a/tests/run-make-fulldeps/rustdoc-output-path/foo.rs b/tests/run-make-fulldeps/rustdoc-output-path/foo.rs deleted file mode 100644 index 4a835673a596bcd05404f43d34082bf2785f2a9d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-output-path/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub struct Foo; diff --git a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/Makefile b/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/Makefile deleted file mode 100644 index c857aa4b9937a81a796eb2a07b9801a8dce32a07..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -include ../../run-make-fulldeps/tools.mk - -OUTPUT_DIR := "$(TMPDIR)/rustdoc" -DYLIB_NAME := $(shell echo | $(RUSTC) --crate-name foobar_macro --crate-type dylib --print file-names -) - -all: - $(RUSTC) src/proc.rs --crate-name foobar_macro --edition=2021 --crate-type proc-macro --emit=dep-info,link - - $(RUSTC) src/lib.rs --crate-name foobar --edition=2021 --crate-type lib --emit=dep-info,link - - $(RUSTDOC) examples/ex.rs --crate-name ex --crate-type bin --output $(OUTPUT_DIR) \ - --extern foobar=$(TMPDIR)/libfoobar.rlib --extern foobar_macro=$(TMPDIR)/$(DYLIB_NAME) \ - -Z unstable-options --scrape-examples-output-path $(TMPDIR)/ex.calls --scrape-examples-target-crate foobar - - $(RUSTDOC) src/lib.rs --crate-name foobar --crate-type lib --output $(OUTPUT_DIR) \ - -Z unstable-options --with-examples $(TMPDIR)/ex.calls - - $(HTMLDOCCK) $(OUTPUT_DIR) src/lib.rs diff --git a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/examples/ex.rs b/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/examples/ex.rs deleted file mode 100644 index 4d8c8b30e311021cf9373e11e33f121fdea3c9e1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/examples/ex.rs +++ /dev/null @@ -1,27 +0,0 @@ -extern crate foobar; -extern crate foobar_macro; - -use foobar::*; -use foobar_macro::*; - -a_proc_macro!(); // no - -#[an_attr_macro] -fn a() { - f(); // no -} - -#[an_attr_macro(with_span)] -fn b() { - f(); // yes -} - -fn c() { - a_rules_macro!(f()); // yes -} - -fn d() { - a_rules_macro!(()); // no -} - -fn main(){} diff --git a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/lib.rs b/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/lib.rs deleted file mode 100644 index d8658a0f255771f25ed4e22391af3fc2437518d9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/lib.rs +++ /dev/null @@ -1,12 +0,0 @@ -// Scraped example should only include line numbers for items b and c in ex.rs -// @!has foobar/fn.f.html '//*[@class="src-line-numbers"]' '14' -// @has foobar/fn.f.html '//*[@class="src-line-numbers"]' '15' -// @has foobar/fn.f.html '//*[@class="src-line-numbers"]' '21' -// @!has foobar/fn.f.html '//*[@class="src-line-numbers"]' '22' - -pub fn f() {} - -#[macro_export] -macro_rules! a_rules_macro { - ($e:expr) => { ($e, foobar::f()); } -} diff --git a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/proc.rs b/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/proc.rs deleted file mode 100644 index 46e518fdf6af8fa127792aed4f35f6487c75e9c9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-scrape-examples-macros/src/proc.rs +++ /dev/null @@ -1,39 +0,0 @@ -extern crate proc_macro; -use proc_macro::*; - -#[proc_macro] -pub fn a_proc_macro(_item: TokenStream) -> TokenStream { - "fn ex() { foobar::f(); }".parse().unwrap() -} - -// inserts foobar::f() to the end of the function -#[proc_macro_attribute] -pub fn an_attr_macro(attr: TokenStream, item: TokenStream) -> TokenStream { - let new_call: TokenStream = "foobar::f();".parse().unwrap(); - - let mut tokens = item.into_iter(); - - let fn_tok = tokens.next().unwrap(); - let ident_tok = tokens.next().unwrap(); - let args_tok = tokens.next().unwrap(); - let body = match tokens.next().unwrap() { - TokenTree::Group(g) => { - let new_g = Group::new(g.delimiter(), new_call); - let mut outer_g = Group::new( - g.delimiter(), - [TokenTree::Group(g.clone()), TokenTree::Group(new_g)].into_iter().collect(), - ); - - if attr.to_string() == "with_span" { - outer_g.set_span(g.span()); - } - - TokenTree::Group(outer_g) - } - _ => unreachable!(), - }; - - let tokens = vec![fn_tok, ident_tok, args_tok, body].into_iter().collect::(); - - tokens -} diff --git a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/Makefile b/tests/run-make-fulldeps/rustdoc-target-spec-json-path/Makefile deleted file mode 100644 index 6d0bc4186f229206f98a812312ad161730d31860..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# Test that rustdoc will properly canonicalize the target spec json path just like rustc - -OUTPUT_DIR := "$(TMPDIR)/rustdoc-target-spec-json-path" - -all: - $(RUSTC) --crate-type lib dummy_core.rs --target target.json - $(RUSTDOC) -o $(OUTPUT_DIR) -L $(TMPDIR) my_crate.rs --target target.json diff --git a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/dummy_core.rs b/tests/run-make-fulldeps/rustdoc-target-spec-json-path/dummy_core.rs deleted file mode 100644 index da27b7f3463da5e12803a2d12850aa88fbc21401..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/dummy_core.rs +++ /dev/null @@ -1,2 +0,0 @@ -#![feature(no_core)] -#![no_core] diff --git a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/my_crate.rs b/tests/run-make-fulldeps/rustdoc-target-spec-json-path/my_crate.rs deleted file mode 100644 index 12aa0822084751bffed522614f6f13f571f76435..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/my_crate.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![feature(no_core)] -#![no_core] -extern crate dummy_core; diff --git a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/target.json b/tests/run-make-fulldeps/rustdoc-target-spec-json-path/target.json deleted file mode 100644 index 34357182c205e39e9294ce0ec782bc1c4f9ac8d3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-target-spec-json-path/target.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "arch": "x86_64", - "cpu": "x86-64", - "crt-static-respected": true, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", - "dynamic-linking": true, - "env": "gnu", - "executables": true, - "has-elf-tls": true, - "has-rpath": true, - "linker-is-gnu": true, - "llvm-target": "x86_64-unknown-linux-gnu", - "max-atomic-width": 64, - "os": "linux", - "position-independent-executables": true, - "pre-link-args": { - "gcc": [ - "-m64" - ] - }, - "relro-level": "full", - "stack-probes": { - "kind": "inline-or-call", - "min-llvm-version-for-inline": [ - 11, - 0, - 1 - ] - }, - "supported-sanitizers": [ - "address", - "leak", - "memory", - "thread" - ], - "target-family": "unix", - "target-pointer-width": "64" -} diff --git a/tests/run-make-fulldeps/rustdoc-themes/Makefile b/tests/run-make-fulldeps/rustdoc-themes/Makefile deleted file mode 100644 index a6d9a43addf6985478fa50cdcae3a2b27d874da1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-themes/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -# Test that rustdoc will properly load in a theme file and display it in the theme selector. - -OUTPUT_DIR := "$(TMPDIR)/rustdoc-themes" - -all: - cp $(S)/src/librustdoc/html/static/css/themes/light.css $(TMPDIR)/test.css - $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --theme $(TMPDIR)/test.css - $(HTMLDOCCK) $(OUTPUT_DIR) foo.rs diff --git a/tests/run-make-fulldeps/rustdoc-themes/foo.rs b/tests/run-make-fulldeps/rustdoc-themes/foo.rs deleted file mode 100644 index 995544aeff998032afe209c2518bec27de2ec215..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/rustdoc-themes/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -// @has test.css -// @has foo/struct.Foo.html -// @has - '//*[@id="rustdoc-vars"]/@data-themes' 'test' -pub struct Foo; diff --git a/tests/run-make-fulldeps/sanitizer-cdylib-link/Makefile b/tests/run-make-fulldeps/sanitizer-cdylib-link/Makefile deleted file mode 100644 index 691585268bfe96812fdd220462d802a800b9a357..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-cdylib-link/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# needs-sanitizer-support -# needs-sanitizer-address - -include ../tools.mk - -LOG := $(TMPDIR)/log.txt - -# This test builds a shared object, then an executable that links it as a native -# rust library (contrast to an rlib). The shared library and executable both -# are compiled with address sanitizer, and we assert that a fault in the cdylib -# is correctly detected. - -all: - $(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) library.rs - $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs - LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow diff --git a/tests/run-make-fulldeps/sanitizer-cdylib-link/library.rs b/tests/run-make-fulldeps/sanitizer-cdylib-link/library.rs deleted file mode 100644 index f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-cdylib-link/library.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[no_mangle] -pub extern "C" fn overflow() { - let xs = [0, 1, 2, 3]; - let _y = unsafe { *xs.as_ptr().offset(4) }; -} diff --git a/tests/run-make-fulldeps/sanitizer-cdylib-link/program.rs b/tests/run-make-fulldeps/sanitizer-cdylib-link/program.rs deleted file mode 100644 index ef053aa2e7a3ad21312463430b37c4532cd95475..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-cdylib-link/program.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern "C" { - fn overflow(); -} - -fn main() { - unsafe { overflow() } -} diff --git a/tests/run-make-fulldeps/sanitizer-dylib-link/Makefile b/tests/run-make-fulldeps/sanitizer-dylib-link/Makefile deleted file mode 100644 index b0a91e5b197d781e129027bca06332233675de08..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-dylib-link/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# needs-sanitizer-support -# needs-sanitizer-address - -include ../tools.mk - -LOG := $(TMPDIR)/log.txt - -# This test builds a shared object, then an executable that links it as a native -# rust library (contrast to an rlib). The shared library and executable both -# are compiled with address sanitizer, and we assert that a fault in the dylib -# is correctly detected. - -all: - $(RUSTC) -g -Z sanitizer=address --crate-type dylib --target $(TARGET) library.rs - $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs - LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow diff --git a/tests/run-make-fulldeps/sanitizer-dylib-link/library.rs b/tests/run-make-fulldeps/sanitizer-dylib-link/library.rs deleted file mode 100644 index f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-dylib-link/library.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[no_mangle] -pub extern "C" fn overflow() { - let xs = [0, 1, 2, 3]; - let _y = unsafe { *xs.as_ptr().offset(4) }; -} diff --git a/tests/run-make-fulldeps/sanitizer-dylib-link/program.rs b/tests/run-make-fulldeps/sanitizer-dylib-link/program.rs deleted file mode 100644 index ef053aa2e7a3ad21312463430b37c4532cd95475..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-dylib-link/program.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern "C" { - fn overflow(); -} - -fn main() { - unsafe { overflow() } -} diff --git a/tests/run-make-fulldeps/sanitizer-staticlib-link/Makefile b/tests/run-make-fulldeps/sanitizer-staticlib-link/Makefile deleted file mode 100644 index 7b1a286ed121d2fd73993b3312482bab076bf79c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-staticlib-link/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# needs-sanitizer-support -# needs-sanitizer-address - -include ../tools.mk - -# This test first builds a staticlib with AddressSanitizer and checks that -# linking it to an executable fails due to the missing sanitizer runtime. -# It then builds an executable linking to the staticlib and checks that -# the fault in the staticlib is detected correctly. - -# Note that checking for the link failure actually checks two things at once: -# 1) That the library has the sanitizer intrumentation -# 2) and that library does not have the sanitizer runtime - -all: - $(RUSTC) -g -Z sanitizer=address --crate-type staticlib --target $(TARGET) library.rs - ! $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -L . program.rs - LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow - diff --git a/tests/run-make-fulldeps/sanitizer-staticlib-link/library.rs b/tests/run-make-fulldeps/sanitizer-staticlib-link/library.rs deleted file mode 100644 index f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-staticlib-link/library.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[no_mangle] -pub extern "C" fn overflow() { - let xs = [0, 1, 2, 3]; - let _y = unsafe { *xs.as_ptr().offset(4) }; -} diff --git a/tests/run-make-fulldeps/sanitizer-staticlib-link/program.c b/tests/run-make-fulldeps/sanitizer-staticlib-link/program.c deleted file mode 100644 index 735e2b147fd9e91f8b0a7cd508dd860f4a96c094..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-staticlib-link/program.c +++ /dev/null @@ -1,6 +0,0 @@ -void overflow(); - -int main() { - overflow(); - return 0; -} diff --git a/tests/run-make-fulldeps/sanitizer-staticlib-link/program.rs b/tests/run-make-fulldeps/sanitizer-staticlib-link/program.rs deleted file mode 100644 index ec59bdb11c889eb86412857b1d10be205cde6adc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sanitizer-staticlib-link/program.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[link(name = "library")] -extern "C" { - fn overflow(); -} - -fn main() { - unsafe { - overflow(); - } -} diff --git a/tests/run-make-fulldeps/separate-link-fail/Makefile b/tests/run-make-fulldeps/separate-link-fail/Makefile deleted file mode 100644 index bfd18fbf972d62e5eec8c4cd3c432456d0bfb7bb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/separate-link-fail/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - echo 'fn main(){}' > $(TMPDIR)/main.rs - # Make sure that this fails - ! $(RUSTC) -Z link-only $(TMPDIR)/main.rs 2> $(TMPDIR)/stderr.txt - $(CGREP) "The input does not look like a .rlink file" < $(TMPDIR)/stderr.txt diff --git a/tests/run-make-fulldeps/separate-link/Makefile b/tests/run-make-fulldeps/separate-link/Makefile deleted file mode 100644 index 3ccdb6275d15827394deb39ac42c812c657a2d80..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/separate-link/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - echo 'fn main(){}' | $(RUSTC) -Z no-link - - $(RUSTC) -Z link-only $(TMPDIR)/rust_out.rlink - $(call RUN,rust_out) diff --git a/tests/run-make-fulldeps/sepcomp-cci-copies/Makefile b/tests/run-make-fulldeps/sepcomp-cci-copies/Makefile deleted file mode 100644 index df289d0b0b1a2df67dc459f90c53a826530ece7c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-cci-copies/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -include ../tools.mk - -# Check that cross-crate inlined items are inlined in all compilation units -# that refer to them, and not in any other compilation units. -# Note that we have to pass `-C codegen-units=6` because up to two CGUs may be -# created for each source module (see `rustc_const_eval::monomorphize::partitioning`). - -all: - $(RUSTC) cci_lib.rs - $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=6 \ - -Z inline-in-all-cgus - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ .*cci_fn)" -eq "2" ] diff --git a/tests/run-make-fulldeps/sepcomp-cci-copies/cci_lib.rs b/tests/run-make-fulldeps/sepcomp-cci-copies/cci_lib.rs deleted file mode 100644 index 869d4a6cd3e4ed0123bd26bfac897a47d2f56494..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-cci-copies/cci_lib.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "rlib"] - -#[inline] -pub fn cci_fn() -> usize { - 1234 -} diff --git a/tests/run-make-fulldeps/sepcomp-cci-copies/foo.rs b/tests/run-make-fulldeps/sepcomp-cci-copies/foo.rs deleted file mode 100644 index ba251fcb0ac24c99bf9b22c4868a5c710a6d65f8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-cci-copies/foo.rs +++ /dev/null @@ -1,25 +0,0 @@ -extern crate cci_lib; -use cci_lib::cci_fn; - -fn call1() -> usize { - cci_fn() -} - -mod a { - use cci_lib::cci_fn; - pub fn call2() -> usize { - cci_fn() - } -} - -mod b { - pub fn call3() -> usize { - 0 - } -} - -fn main() { - call1(); - a::call2(); - b::call3(); -} diff --git a/tests/run-make-fulldeps/sepcomp-inlining/Makefile b/tests/run-make-fulldeps/sepcomp-inlining/Makefile deleted file mode 100644 index 327aeb75e5eda5f2eece2c20ad7ca4b50d35eac5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-inlining/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../tools.mk - -# Test that #[inline] functions still get inlined across compilation unit -# boundaries. Compilation should produce three IR files, but only the two -# compilation units that have a usage of the #[inline] function should -# contain a definition. Also, the non-#[inline] function should be defined -# in only one compilation unit. - -all: - $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=3 \ - -Z inline-in-all-cgus - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ i32\ .*inlined)" -eq "0" ] - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ internal\ i32\ .*inlined)" -eq "2" ] - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ hidden\ i32\ .*normal)" -eq "1" ] - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c declare\ hidden\ i32\ .*normal)" -eq "2" ] diff --git a/tests/run-make-fulldeps/sepcomp-inlining/foo.rs b/tests/run-make-fulldeps/sepcomp-inlining/foo.rs deleted file mode 100644 index 2fe5f9cb726612b6ab87f90b98f8debbd1288f66..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-inlining/foo.rs +++ /dev/null @@ -1,30 +0,0 @@ -#![feature(start)] - -#[inline] -fn inlined() -> u32 { - 1234 -} - -fn normal() -> u32 { - 2345 -} - -mod a { - pub fn f() -> u32 { - ::inlined() + ::normal() - } -} - -mod b { - pub fn f() -> u32 { - ::inlined() + ::normal() - } -} - -#[start] -fn start(_: isize, _: *const *const u8) -> isize { - a::f(); - b::f(); - - 0 -} diff --git a/tests/run-make-fulldeps/sepcomp-separate/Makefile b/tests/run-make-fulldeps/sepcomp-separate/Makefile deleted file mode 100644 index 62cf54a88fbe9dfa15581b72e47dd686838ce0c1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-separate/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# Test that separate compilation actually puts code into separate compilation -# units. `foo.rs` defines `magic_fn` in three different modules, which should -# wind up in three different compilation units. - -all: - $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=3 - [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ .*magic_fn)" -eq "3" ] diff --git a/tests/run-make-fulldeps/sepcomp-separate/foo.rs b/tests/run-make-fulldeps/sepcomp-separate/foo.rs deleted file mode 100644 index 169bafa9b3a5018383ae9c7f2b8b80e7d7ddc298..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sepcomp-separate/foo.rs +++ /dev/null @@ -1,21 +0,0 @@ -fn magic_fn() -> usize { - 1234 -} - -mod a { - pub fn magic_fn() -> usize { - 2345 - } -} - -mod b { - pub fn magic_fn() -> usize { - 3456 - } -} - -fn main() { - magic_fn(); - a::magic_fn(); - b::magic_fn(); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/Makefile b/tests/run-make-fulldeps/share-generics-dylib/Makefile deleted file mode 100644 index 065fb574c3cbaaa263caf827d87b1aafa9a13f5e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# This test makes sure all generic instances get re-exported from Rust dylibs for use by -# `-Zshare-generics`. There are two rlibs (`instance_provider_a` and `instance_provider_b`) -# which both provide an instance of `Cell::set`. There is `instance_user_dylib` which is -# supposed to re-export both these instances, and then there are `instance_user_a_rlib` and -# `instance_user_b_rlib` which each rely on a specific instance to be available. -# -# In the end everything is linked together into `linked_leaf`. If `instance_user_dylib` does -# not export both then we'll get an `undefined reference` error for one of the instances. -# -# This is regression test for https://github.com/rust-lang/rust/issues/67276. - -include ../../run-make-fulldeps/tools.mk - -COMMON_ARGS=-Cprefer-dynamic -Zshare-generics=yes -Ccodegen-units=1 -Csymbol-mangling-version=v0 - -all: - $(RUSTC) instance_provider_a.rs $(COMMON_ARGS) --crate-type=rlib - $(RUSTC) instance_provider_b.rs $(COMMON_ARGS) --crate-type=rlib - $(RUSTC) instance_user_dylib.rs $(COMMON_ARGS) --crate-type=dylib - $(RUSTC) instance_user_a_rlib.rs $(COMMON_ARGS) --crate-type=rlib - $(RUSTC) instance_user_b_rlib.rs $(COMMON_ARGS) --crate-type=rlib - $(RUSTC) linked_leaf.rs $(COMMON_ARGS) --crate-type=bin diff --git a/tests/run-make-fulldeps/share-generics-dylib/instance_provider_a.rs b/tests/run-make-fulldeps/share-generics-dylib/instance_provider_a.rs deleted file mode 100644 index b4e125ac0523ae72b491238fa0fe43afd5c68057..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/instance_provider_a.rs +++ /dev/null @@ -1,6 +0,0 @@ -use std::cell::Cell; - -pub fn foo() { - let a: Cell = Cell::new(1); - a.set(123); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/instance_provider_b.rs b/tests/run-make-fulldeps/share-generics-dylib/instance_provider_b.rs deleted file mode 100644 index f613db873e6c6c41d6e1380db7fcf755a4328f34..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/instance_provider_b.rs +++ /dev/null @@ -1,6 +0,0 @@ -use std::cell::Cell; - -pub fn foo() { - let b: Cell = Cell::new(1); - b.set(123); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/instance_user_a_rlib.rs b/tests/run-make-fulldeps/share-generics-dylib/instance_user_a_rlib.rs deleted file mode 100644 index c8e6ab95cf9ceccf9e40bf25005b1c1952098a44..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/instance_user_a_rlib.rs +++ /dev/null @@ -1,9 +0,0 @@ -extern crate instance_provider_a as upstream; -use std::cell::Cell; - -pub fn foo() { - upstream::foo(); - - let b: Cell = Cell::new(1); - b.set(123); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/instance_user_b_rlib.rs b/tests/run-make-fulldeps/share-generics-dylib/instance_user_b_rlib.rs deleted file mode 100644 index 7c34af6d0dc8705842175a0be2ca1bc0024d57be..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/instance_user_b_rlib.rs +++ /dev/null @@ -1,9 +0,0 @@ -extern crate instance_provider_b as upstream; -use std::cell::Cell; - -pub fn foo() { - upstream::foo(); - - let b: Cell = Cell::new(1); - b.set(123); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/instance_user_dylib.rs b/tests/run-make-fulldeps/share-generics-dylib/instance_user_dylib.rs deleted file mode 100644 index 7c8368eec654b4e8f5d256871d90a0f96048dc97..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/instance_user_dylib.rs +++ /dev/null @@ -1,7 +0,0 @@ -extern crate instance_provider_a; -extern crate instance_provider_b; - -pub fn foo() { - instance_provider_a::foo(); - instance_provider_b::foo(); -} diff --git a/tests/run-make-fulldeps/share-generics-dylib/linked_leaf.rs b/tests/run-make-fulldeps/share-generics-dylib/linked_leaf.rs deleted file mode 100644 index e510dad691c572e97b37348c28b69652e3087ba7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/share-generics-dylib/linked_leaf.rs +++ /dev/null @@ -1,15 +0,0 @@ -extern crate instance_user_dylib; -extern crate instance_user_a_rlib; -extern crate instance_user_b_rlib; - -use std::cell::Cell; - -fn main() { - - instance_user_a_rlib::foo(); - instance_user_b_rlib::foo(); - instance_user_dylib::foo(); - - let a: Cell = Cell::new(1); - a.set(123); -} diff --git a/tests/run-make-fulldeps/simd-ffi/Makefile b/tests/run-make-fulldeps/simd-ffi/Makefile deleted file mode 100644 index 297353470411f8133369c5f8285a32b8713a575c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simd-ffi/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -include ../tools.mk - -TARGETS = -ifeq ($(filter arm,$(LLVM_COMPONENTS)),arm) -# construct a fairly exhaustive list of platforms that we -# support. These ones don't follow a pattern -TARGETS += arm-linux-androideabi arm-unknown-linux-gnueabihf arm-unknown-linux-gnueabi -endif - -ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) -X86_ARCHS = i686 x86_64 -else -X86_ARCHS = -endif - -# these ones do, each OS lists the architectures it supports -LINUX=$(filter aarch64 mips,$(LLVM_COMPONENTS)) $(X86_ARCHS) -ifeq ($(filter mips,$(LLVM_COMPONENTS)),mips) -LINUX += mipsel -endif - -WINDOWS=$(X86_ARCHS) -# fails with: failed to get iphonesimulator SDK path: no such file or directory -#IOS=i386 aarch64 armv7 -DARWIN=$(X86_ARCHS) - -$(foreach arch,$(LINUX),$(eval TARGETS += $(arch)-unknown-linux-gnu)) -$(foreach arch,$(WINDOWS),$(eval TARGETS += $(arch)-pc-windows-gnu)) -#$(foreach arch,$(IOS),$(eval TARGETS += $(arch)-apple-ios)) -$(foreach arch,$(DARWIN),$(eval TARGETS += $(arch)-apple-darwin)) - -all: $(TARGETS) - -define MK_TARGETS -# compile the rust file to the given target, but only to asm and IR -# form, to avoid having to have an appropriate linker. -# -# we need some features because the integer SIMD instructions are not -# enabled by-default for i686 and ARM; these features will be invalid -# on some platforms, but LLVM just prints a warning so that's fine for -# now. -$(1): simd.rs - $$(RUSTC) --target=$(1) --emit=llvm-ir,asm simd.rs \ - -C target-feature='+neon,+sse2' -C extra-filename=-$(1) -endef - -$(foreach targetxxx,$(TARGETS),$(eval $(call MK_TARGETS,$(targetxxx)))) diff --git a/tests/run-make-fulldeps/simd-ffi/simd.rs b/tests/run-make-fulldeps/simd-ffi/simd.rs deleted file mode 100644 index d11cfd77c5bf91b5a39f7bb05b7f4789862e7e63..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simd-ffi/simd.rs +++ /dev/null @@ -1,82 +0,0 @@ -// ensures that public symbols are not removed completely -#![crate_type = "lib"] -// we can compile to a variety of platforms, because we don't need -// cross-compiled standard libraries. -#![feature(no_core, auto_traits)] -#![no_core] -#![feature(repr_simd, simd_ffi, link_llvm_intrinsics, lang_items, rustc_attrs)] - -#[derive(Copy)] -#[repr(simd)] -pub struct f32x4(f32, f32, f32, f32); - -extern "C" { - #[link_name = "llvm.sqrt.v4f32"] - fn vsqrt(x: f32x4) -> f32x4; -} - -pub fn foo(x: f32x4) -> f32x4 { - unsafe { vsqrt(x) } -} - -#[derive(Copy)] -#[repr(simd)] -pub struct i32x4(i32, i32, i32, i32); - -extern "C" { - // _mm_sll_epi32 - #[cfg(any(target_arch = "x86", target_arch = "x86-64"))] - #[link_name = "llvm.x86.sse2.psll.d"] - fn integer(a: i32x4, b: i32x4) -> i32x4; - - // vmaxq_s32 - #[cfg(target_arch = "arm")] - #[link_name = "llvm.arm.neon.vmaxs.v4i32"] - fn integer(a: i32x4, b: i32x4) -> i32x4; - // vmaxq_s32 - #[cfg(target_arch = "aarch64")] - #[link_name = "llvm.aarch64.neon.maxs.v4i32"] - fn integer(a: i32x4, b: i32x4) -> i32x4; - - // just some substitute foreign symbol, not an LLVM intrinsic; so - // we still get type checking, but not as detailed as (ab)using - // LLVM. - #[cfg(not(any( - target_arch = "x86", - target_arch = "x86-64", - target_arch = "arm", - target_arch = "aarch64" - )))] - fn integer(a: i32x4, b: i32x4) -> i32x4; -} - -pub fn bar(a: i32x4, b: i32x4) -> i32x4 { - unsafe { integer(a, b) } -} - -#[lang = "sized"] -pub trait Sized {} - -#[lang = "copy"] -pub trait Copy {} - -impl Copy for f32 {} -impl Copy for i32 {} - -pub mod marker { - pub use Copy; -} - -#[lang = "freeze"] -auto trait Freeze {} - -#[macro_export] -#[rustc_builtin_macro] -macro_rules! Copy { - () => {}; -} -#[macro_export] -#[rustc_builtin_macro] -macro_rules! derive { - () => {}; -} diff --git a/tests/run-make-fulldeps/simple-dylib/Makefile b/tests/run-make-fulldeps/simple-dylib/Makefile deleted file mode 100644 index 5dda5d66d1c84917644303fd4fc305f6670f2a15..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-dylib/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk -all: - $(RUSTC) bar.rs --crate-type=dylib -C prefer-dynamic - $(RUSTC) foo.rs - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/simple-dylib/bar.rs b/tests/run-make-fulldeps/simple-dylib/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-dylib/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/simple-dylib/foo.rs b/tests/run-make-fulldeps/simple-dylib/foo.rs deleted file mode 100644 index 8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-dylib/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate bar; - -fn main() { - bar::bar(); -} diff --git a/tests/run-make-fulldeps/simple-rlib/Makefile b/tests/run-make-fulldeps/simple-rlib/Makefile deleted file mode 100644 index d912b8a7bab1f13319660e0b6c72c0077cec192a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-rlib/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk -all: - $(RUSTC) bar.rs --crate-type=rlib - $(RUSTC) foo.rs - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/simple-rlib/bar.rs b/tests/run-make-fulldeps/simple-rlib/bar.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-rlib/bar.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/simple-rlib/foo.rs b/tests/run-make-fulldeps/simple-rlib/foo.rs deleted file mode 100644 index 8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/simple-rlib/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate bar; - -fn main() { - bar::bar(); -} diff --git a/tests/run-make-fulldeps/split-debuginfo/Makefile b/tests/run-make-fulldeps/split-debuginfo/Makefile deleted file mode 100644 index 44cda0d3d117f8bfec9ff71bea889ee811153ba2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/split-debuginfo/Makefile +++ /dev/null @@ -1,308 +0,0 @@ -include ../tools.mk - -all: off packed unpacked - -ifeq ($(UNAME),Darwin) -# If disabled, don't run `dsymutil`. -off: - rm -rf $(TMPDIR)/*.dSYM - $(RUSTC) foo.rs -g -C split-debuginfo=off - [ ! -d $(TMPDIR)/foo.dSYM ] - -# Packed by default, but only if debuginfo is requested -packed: - rm -rf $(TMPDIR)/*.dSYM - $(RUSTC) foo.rs - [ ! -d $(TMPDIR)/foo.dSYM ] - rm -rf $(TMPDIR)/*.dSYM - $(RUSTC) foo.rs -g - [ -d $(TMPDIR)/foo.dSYM ] - rm -rf $(TMPDIR)/*.dSYM - $(RUSTC) foo.rs -g -C split-debuginfo=packed - [ -d $(TMPDIR)/foo.dSYM ] - rm -rf $(TMPDIR)/*.dSYM - -# Object files are preserved with unpacked and `dsymutil` isn't run -unpacked: - $(RUSTC) foo.rs -g -C split-debuginfo=unpacked - ls $(TMPDIR)/*.o - [ ! -d $(TMPDIR)/foo.dSYM ] -else -ifdef IS_WINDOWS -# Windows only supports packed debuginfo - nothing to test. -off: -packed: -unpacked: -else -# Some non-Windows, non-Darwin platforms are not stable, and some are. -ifeq ($(UNAME),Linux) - UNSTABLEOPTS := -else - UNSTABLEOPTS := -Zunstable-options -endif - -# - Debuginfo in `.o` files -# - `.o` deleted -# - `.dwo` never created -# - `.dwp` never created -off: - $(RUSTC) foo.rs -g -C $(UNSTABLEOPTS) split-debuginfo=off - [ ! -f $(TMPDIR)/*.dwp ] - [ ! -f $(TMPDIR)/*.dwo ] - $(RUSTC) foo.rs -g - [ ! -f $(TMPDIR)/*.dwp ] - [ ! -f $(TMPDIR)/*.dwo ] - -packed: packed-split packed-single packed-lto packed-remapped packed-crosscrate - -# - Debuginfo in `.dwo` files -# - `.o` deleted -# - `.dwo` deleted -# - `.dwp` present -packed-split: - $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=split - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/foo.dwp - rm $(TMPDIR)/$(call BIN,foo) - -# - Debuginfo in `.o` files -# - `.o` deleted -# - `.dwo` never created -# - `.dwp` present -packed-single: - $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=single - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/foo.dwp - rm $(TMPDIR)/$(call BIN,foo) - -packed-lto: packed-lto-split packed-lto-single - -# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated -# - `.o` never created -# - `.dwo` never created -# - `.dwp` never created -packed-lto-split: - $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split \ - --crate-type=rlib -Clinker-plugin-lto - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/libbaz.rlib - -# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated -# - `.o` never created -# - `.dwo` never created -# - `.dwp` never created -packed-lto-single: - $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=single \ - --crate-type=rlib -Clinker-plugin-lto - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/libbaz.rlib - -packed-remapped: packed-remapped-split packed-remapped-single - -# - Debuginfo in `.dwo` files -# - `.o` and binary refer to remapped `.dwo` paths which do not exist -# - `.o` deleted -# - `.dwo` deleted -# - `.dwp` present -packed-remapped-split: - $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ - -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g - objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/foo.dwp - rm $(TMPDIR)/$(call BIN,foo) - -# - Debuginfo in `.o` files -# - `.o` and binary refer to remapped `.o` paths which do not exist -# - `.o` deleted -# - `.dwo` never created -# - `.dwp` present -packed-remapped-single: - $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ - -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g - objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/foo.dwp - rm $(TMPDIR)/$(call BIN,foo) - -packed-crosscrate: packed-crosscrate-split packed-crosscrate-single - -# - Debuginfo in `.dwo` files -# - (bar) `.rlib` file created, contains `.dwo` -# - (bar) `.o` deleted -# - (bar) `.dwo` deleted -# - (bar) `.dwp` never created -# - (main) `.o` deleted -# - (main) `.dwo` deleted -# - (main) `.dwp` present -packed-crosscrate-split: - $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ - -Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs - ls $(TMPDIR)/*.rlib - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ - -C split-debuginfo=packed -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/main.dwp - rm $(TMPDIR)/$(call BIN,main) - -# - Debuginfo in `.o` files -# - (bar) `.rlib` file created, contains `.o` -# - (bar) `.o` deleted -# - (bar) `.dwo` never created -# - (bar) `.dwp` never created -# - (main) `.o` deleted -# - (main) `.dwo` never created -# - (main) `.dwp` present -packed-crosscrate-single: - $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ - -Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs - ls $(TMPDIR)/*.rlib - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ - -C split-debuginfo=packed -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - rm $(TMPDIR)/main.dwp - rm $(TMPDIR)/$(call BIN,main) - -unpacked: unpacked-split unpacked-single unpacked-lto unpacked-remapped unpacked-crosscrate - -# - Debuginfo in `.dwo` files -# - `.o` deleted -# - `.dwo` present -# - `.dwp` never created -unpacked-split: - $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split - ls $(TMPDIR)/*.o && exit 1 || exit 0 - rm $(TMPDIR)/*.dwo - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,foo) - -# - Debuginfo in `.o` files -# - `.o` present -# - `.dwo` never created -# - `.dwp` never created -unpacked-single: - $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single - ls $(TMPDIR)/*.o - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,foo) - -unpacked-lto: packed-lto-split packed-lto-single - -# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated -# - `.o` never created -# - `.dwo` never created -# - `.dwp` never created -unpacked-lto-split: - $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=split \ - --crate-type=rlib -Clinker-plugin-lto - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/libbaz.rlib - -# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated -# - `.o` never created -# - `.dwo` never created -# - `.dwp` never created -unpacked-lto-single: - $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=single \ - --crate-type=rlib -Clinker-plugin-lto - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/libbaz.rlib - -unpacked-remapped: unpacked-remapped-split unpacked-remapped-single - -# - Debuginfo in `.dwo` files -# - `.o` and binary refer to remapped `.dwo` paths which do not exist -# - `.o` deleted -# - `.dwo` present -# - `.dwp` never created -unpacked-remapped-split: - $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ - -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g - objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 - ls $(TMPDIR)/*.o && exit 1 || exit 0 - rm $(TMPDIR)/*.dwo - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,foo) - -# - Debuginfo in `.o` files -# - `.o` and binary refer to remapped `.o` paths which do not exist -# - `.o` present -# - `.dwo` never created -# - `.dwp` never created -unpacked-remapped-single: - $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ - -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g - objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 - rm $(TMPDIR)/*.o - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,foo) - -unpacked-crosscrate: unpacked-crosscrate-split unpacked-crosscrate-single - -# - Debuginfo in `.dwo` files -# - (bar) `.rlib` file created, contains `.dwo` -# - (bar) `.o` deleted -# - (bar) `.dwo` present -# - (bar) `.dwp` never created -# - (main) `.o` deleted -# - (main) `.dwo` present -# - (main) `.dwp` never created -unpacked-crosscrate-split: - $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \ - -Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs - ls $(TMPDIR)/*.rlib - ls $(TMPDIR)/*.o && exit 1 || exit 0 - ls $(TMPDIR)/*.dwo - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ - -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs - ls $(TMPDIR)/*.o && exit 1 || exit 0 - rm $(TMPDIR)/*.dwo - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,main) - -# - Debuginfo in `.o` files -# - (bar) `.rlib` file created, contains `.o` -# - (bar) `.o` present -# - (bar) `.dwo` never created -# - (bar) `.dwp` never created -# - (main) `.o` present -# - (main) `.dwo` never created -# - (main) `.dwp` never created -unpacked-crosscrate-single: - $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \ - -Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs - ls $(TMPDIR)/*.rlib - ls $(TMPDIR)/*.o - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ - -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs - ls $(TMPDIR)/*.o - ls $(TMPDIR)/*.dwo && exit 1 || exit 0 - ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - rm $(TMPDIR)/$(call BIN,main) -endif -endif diff --git a/tests/run-make-fulldeps/split-debuginfo/bar.rs b/tests/run-make-fulldeps/split-debuginfo/bar.rs deleted file mode 100644 index 07dd0715252cc346913b560ee70946ab9467e4aa..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/split-debuginfo/bar.rs +++ /dev/null @@ -1,13 +0,0 @@ -pub struct Bar { - x: u32, -} - -impl Bar { - pub fn print(&self) { - println!("{}", self.x); - } -} - -pub fn make_bar(x: u32) -> Bar { - Bar { x } -} diff --git a/tests/run-make-fulldeps/split-debuginfo/baz.rs b/tests/run-make-fulldeps/split-debuginfo/baz.rs deleted file mode 100644 index 8b1a393741c96c03c3712b4c80b3d2bcd06959b6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/split-debuginfo/baz.rs +++ /dev/null @@ -1 +0,0 @@ -// empty diff --git a/tests/run-make-fulldeps/split-debuginfo/foo.rs b/tests/run-make-fulldeps/split-debuginfo/foo.rs deleted file mode 100644 index b058e540862343f7a2b2b791e78fdfc830dc65e3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/split-debuginfo/foo.rs +++ /dev/null @@ -1,15 +0,0 @@ -pub struct Foo { - x: u32, -} - -impl Foo { - pub fn print(&self) { - println!("{}", self.x); - } -} - -pub fn make_foo(x: u32) -> Foo { - Foo { x } -} - -fn main() {} diff --git a/tests/run-make-fulldeps/split-debuginfo/main.rs b/tests/run-make-fulldeps/split-debuginfo/main.rs deleted file mode 100644 index 21fa16e40a4abaa42ac9f0d68df9f20630979027..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/split-debuginfo/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -extern crate bar; - -use bar::{Bar, make_bar}; - -fn main() { - let b = make_bar(3); - b.print(); -} diff --git a/tests/run-make-fulldeps/stable-symbol-names/Makefile b/tests/run-make-fulldeps/stable-symbol-names/Makefile deleted file mode 100644 index bbfb8e3888171cbb5c8a080a33882ee3e7910a6b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/stable-symbol-names/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -include ../tools.mk - -# The following command will: -# 1. dump the symbols of a library using `nm` -# 2. extract only those lines that we are interested in via `grep` -# 3. from those lines, extract just the symbol name via `sed`, which: -# * always starts with "_ZN" and ends with "E" (`legacy` mangling) -# * always starts with "_R" (`v0` mangling) -# 4. sort those symbol names for deterministic comparison -# 5. write the result into a file - -dump-symbols = nm "$(TMPDIR)/lib$(1).rlib" \ - | grep -E "$(2)" \ - | sed -E "s/.*(_ZN.*E|_R[a-zA-Z0-9_]*).*/\1/" \ - | sort \ - > "$(TMPDIR)/$(1)$(3).nm" - -# This test -# - compiles each of the two crates 2 times and makes sure each time we get -# exactly the same symbol names -# - makes sure that both crates agree on the same symbol names for monomorphic -# functions - -all: - $(RUSTC) stable-symbol-names1.rs - $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v1) - rm $(TMPDIR)/libstable_symbol_names1.rlib - $(RUSTC) stable-symbol-names1.rs - $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v2) - cmp "$(TMPDIR)/stable_symbol_names1_v1.nm" "$(TMPDIR)/stable_symbol_names1_v2.nm" - - $(RUSTC) stable-symbol-names2.rs - $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v1) - rm $(TMPDIR)/libstable_symbol_names2.rlib - $(RUSTC) stable-symbol-names2.rs - $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v2) - cmp "$(TMPDIR)/stable_symbol_names2_v1.nm" "$(TMPDIR)/stable_symbol_names2_v2.nm" - - $(call dump-symbols,stable_symbol_names1,mono_,_cross) - $(call dump-symbols,stable_symbol_names2,mono_,_cross) - cmp "$(TMPDIR)/stable_symbol_names1_cross.nm" "$(TMPDIR)/stable_symbol_names2_cross.nm" diff --git a/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names1.rs b/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names1.rs deleted file mode 100644 index b85a428278cd913eb74daccd4ab710c898d6b714..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names1.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![crate_type="rlib"] - -pub trait Foo { - fn generic_method(); -} - -pub struct Bar; - -impl Foo for Bar { - fn generic_method() {} -} - -pub fn mono_function() { - Bar::generic_method::(); -} - -pub fn mono_function_lifetime<'a>(x: &'a u64) -> u64 { - *x -} - -pub fn generic_function(t: T) -> T { - t -} - -pub fn user() { - generic_function(0u32); - generic_function("abc"); - let x = 2u64; - generic_function(&x); - let _ = mono_function_lifetime(&x); -} diff --git a/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names2.rs b/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names2.rs deleted file mode 100644 index 33df9d6c689881e7c289b8aab5f43de0834db7be..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/stable-symbol-names/stable-symbol-names2.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![crate_type="rlib"] - -extern crate stable_symbol_names1; - -pub fn user() { - stable_symbol_names1::generic_function(1u32); - stable_symbol_names1::generic_function("def"); - let x = 2u64; - stable_symbol_names1::generic_function(&x); - stable_symbol_names1::mono_function(); - stable_symbol_names1::mono_function_lifetime(&0); -} - -pub fn trait_impl_test_function() { - use stable_symbol_names1::*; - Bar::generic_method::(); -} diff --git a/tests/run-make-fulldeps/static-dylib-by-default/Makefile b/tests/run-make-fulldeps/static-dylib-by-default/Makefile deleted file mode 100644 index eedd0b320920aade5920c14f7815268ca42a7340..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-dylib-by-default/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include ../tools.mk - -TO_LINK := $(call DYLIB,bar) -ifdef IS_MSVC -LINK_ARG = $(TO_LINK:dll=dll.lib) -else -LINK_ARG = $(TO_LINK) -endif - -all: - $(RUSTC) foo.rs - $(RUSTC) bar.rs - $(CC) main.c $(call OUT_EXE,main) $(LINK_ARG) $(EXTRACFLAGS) - rm $(TMPDIR)/*.rlib - rm $(call DYLIB,foo) - $(call RUN,main) diff --git a/tests/run-make-fulldeps/static-dylib-by-default/bar.rs b/tests/run-make-fulldeps/static-dylib-by-default/bar.rs deleted file mode 100644 index 14421165e2da1367b46f3909a606c80239be27c2..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-dylib-by-default/bar.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![crate_type = "dylib"] - -extern crate foo; - -#[no_mangle] -pub extern "C" fn bar() { - foo::foo(); -} diff --git a/tests/run-make-fulldeps/static-dylib-by-default/foo.rs b/tests/run-make-fulldeps/static-dylib-by-default/foo.rs deleted file mode 100644 index 7ebec8720557dead6fe1fb805976a6751b54a3cb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-dylib-by-default/foo.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "rlib"] -#![crate_type = "dylib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/static-dylib-by-default/main.c b/tests/run-make-fulldeps/static-dylib-by-default/main.c deleted file mode 100644 index 5f7f2c27cd353e21bd542e9354df8e1aa5bf6076..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-dylib-by-default/main.c +++ /dev/null @@ -1,6 +0,0 @@ -extern void bar(); - -int main() { - bar(); - return 0; -} diff --git a/tests/run-make-fulldeps/static-extern-type/Makefile b/tests/run-make-fulldeps/static-extern-type/Makefile deleted file mode 100644 index e9aa95e63a05f679cb6d702d598d7d1f227ede56..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-extern-type/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: $(call NATIVE_STATICLIB,define-foo) - $(RUSTC) -ldefine-foo use-foo.rs - $(call RUN,use-foo) || exit 1 diff --git a/tests/run-make-fulldeps/static-extern-type/define-foo.c b/tests/run-make-fulldeps/static-extern-type/define-foo.c deleted file mode 100644 index 39be5acfa11182f4c46ed1f09f3c4bf27100499b..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-extern-type/define-foo.c +++ /dev/null @@ -1,11 +0,0 @@ -#include - -struct Foo { - uint8_t x; -}; - -struct Foo FOO = { 42 }; - -uint8_t bar(const struct Foo* foo) { - return foo->x; -} diff --git a/tests/run-make-fulldeps/static-extern-type/use-foo.rs b/tests/run-make-fulldeps/static-extern-type/use-foo.rs deleted file mode 100644 index 932b5b5944bc72d732f530e50fa268986e7400ad..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-extern-type/use-foo.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![feature(extern_types)] - -extern "C" { - type Foo; - static FOO: Foo; - fn bar(foo: *const Foo) -> u8; -} - -fn main() { - unsafe { - let foo = &FOO; - assert_eq!(bar(foo), 42); - } -} diff --git a/tests/run-make-fulldeps/static-unwinding/Makefile b/tests/run-make-fulldeps/static-unwinding/Makefile deleted file mode 100644 index 9c755d4ab18194e5658f236eee536479fcd95737..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-unwinding/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) lib.rs - $(RUSTC) main.rs - $(call RUN,main) diff --git a/tests/run-make-fulldeps/static-unwinding/lib.rs b/tests/run-make-fulldeps/static-unwinding/lib.rs deleted file mode 100644 index 3fb1117a11059ec37e7ecfb02d1dd1338d07ad12..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-unwinding/lib.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![crate_type = "rlib"] - -pub static mut statik: isize = 0; - -struct A; -impl Drop for A { - fn drop(&mut self) { - unsafe { statik = 1; } - } -} - -pub fn callback(f: F) where F: FnOnce() { - let _a = A; - f(); -} diff --git a/tests/run-make-fulldeps/static-unwinding/main.rs b/tests/run-make-fulldeps/static-unwinding/main.rs deleted file mode 100644 index 0c66ea1aa07fc8e7dc05472110a5559d6f886078..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/static-unwinding/main.rs +++ /dev/null @@ -1,24 +0,0 @@ -extern crate lib; - -use std::thread; - -static mut statik: isize = 0; - -struct A; -impl Drop for A { - fn drop(&mut self) { - unsafe { statik = 1; } - } -} - -fn main() { - thread::spawn(move|| { - let _a = A; - lib::callback(|| panic!()); - }).join().unwrap_err(); - - unsafe { - assert_eq!(lib::statik, 1); - assert_eq!(statik, 1); - } -} diff --git a/tests/run-make-fulldeps/staticlib-blank-lib/Makefile b/tests/run-make-fulldeps/staticlib-blank-lib/Makefile deleted file mode 100644 index fcbf87758fb9c814657c152fb3ce769ff086906e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/staticlib-blank-lib/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(AR) crus $(TMPDIR)/libfoo.a foo.rs - $(AR) d $(TMPDIR)/libfoo.a foo.rs - $(RUSTC) foo.rs diff --git a/tests/run-make-fulldeps/staticlib-blank-lib/foo.rs b/tests/run-make-fulldeps/staticlib-blank-lib/foo.rs deleted file mode 100644 index bf48d069da9565dfd86d8505eb5a6fe6a3e67679..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/staticlib-blank-lib/foo.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "staticlib"] - -#[link(name = "foo", kind = "static")] -extern "C" {} - -fn main() {} diff --git a/tests/run-make-fulldeps/std-core-cycle/Makefile b/tests/run-make-fulldeps/std-core-cycle/Makefile deleted file mode 100644 index 4f252863767903613fb5428a843b2960e06163ae..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/std-core-cycle/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -include ../tools.mk - -ifeq ($(UNAME),Darwin) -FLAGS := -else -ifdef IS_WINDOWS -FLAGS := -else -FLAGS := -C link-args=-Wl,--no-undefined -endif -endif - -all: - $(RUSTC) bar.rs - $(RUSTC) foo.rs $(FLAGS) - $(RUSTC) foo.rs $(FLAGS) -C panic=abort diff --git a/tests/run-make-fulldeps/std-core-cycle/bar.rs b/tests/run-make-fulldeps/std-core-cycle/bar.rs deleted file mode 100644 index 9f5e7c29bddd70e15bb6916767d147b23c3eee3d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/std-core-cycle/bar.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![feature(allocator_api)] -#![crate_type = "rlib"] - -use std::alloc::*; - -pub struct A; - -unsafe impl GlobalAlloc for A { - unsafe fn alloc(&self, _: Layout) -> *mut u8 { - loop {} - } - - unsafe fn dealloc(&self, _ptr: *mut u8, _: Layout) { - loop {} - } -} diff --git a/tests/run-make-fulldeps/std-core-cycle/foo.rs b/tests/run-make-fulldeps/std-core-cycle/foo.rs deleted file mode 100644 index 6aa6e1ac3c50599a528579ff4a9e04e59674ea71..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/std-core-cycle/foo.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![crate_type = "cdylib"] - -extern crate bar; - -#[global_allocator] -static A: bar::A = bar::A; - -#[no_mangle] -pub extern "C" fn a(a: u32, b: u32) -> u32 { - a / b -} diff --git a/tests/run-make-fulldeps/stdin-non-utf8/Makefile b/tests/run-make-fulldeps/stdin-non-utf8/Makefile deleted file mode 100644 index 709d4cf140895fc9aaf1be033f24caae977432d5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/stdin-non-utf8/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - cp non-utf8 $(TMPDIR)/non-utf.rs - cat $(TMPDIR)/non-utf.rs | $(RUSTC) - 2>&1 \ - | $(CGREP) "error: couldn't read from stdin, as it did not contain valid UTF-8" diff --git a/tests/run-make-fulldeps/stdin-non-utf8/non-utf8 b/tests/run-make-fulldeps/stdin-non-utf8/non-utf8 deleted file mode 100644 index bc87051a85299758c04bd9c796e7bdd4f8fa21b7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/stdin-non-utf8/non-utf8 +++ /dev/null @@ -1 +0,0 @@ -Ò diff --git a/tests/run-make-fulldeps/suspicious-library/Makefile b/tests/run-make-fulldeps/suspicious-library/Makefile deleted file mode 100644 index 2af9e85c228fde666fc27e8e6628c3f14ab044fb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/suspicious-library/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) foo.rs -C prefer-dynamic - touch $(call DYLIB,foo-something-special) - touch $(call DYLIB,foo-something-special2) - $(RUSTC) bar.rs diff --git a/tests/run-make-fulldeps/suspicious-library/bar.rs b/tests/run-make-fulldeps/suspicious-library/bar.rs deleted file mode 100644 index 550c94cd0c6088597416562822a53bf859f31492..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/suspicious-library/bar.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate foo; - -fn main() { foo::foo() } diff --git a/tests/run-make-fulldeps/suspicious-library/foo.rs b/tests/run-make-fulldeps/suspicious-library/foo.rs deleted file mode 100644 index a382d8f2c7f55d9a163cab22351f6374f90884f6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/suspicious-library/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "dylib"] - -pub fn foo() {} diff --git a/tests/run-make-fulldeps/symbol-visibility/Makefile b/tests/run-make-fulldeps/symbol-visibility/Makefile deleted file mode 100644 index 17052ef4e634615c35a8f2cad3bdb98f1671fb71..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/Makefile +++ /dev/null @@ -1,122 +0,0 @@ -include ../tools.mk - -# ignore-windows-msvc - -NM=nm -D -CDYLIB_NAME=liba_cdylib.so -RDYLIB_NAME=liba_rust_dylib.so -PROC_MACRO_NAME=liba_proc_macro.so -EXE_NAME=an_executable -COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.so - -ifeq ($(UNAME),Darwin) -NM=nm -gU -CDYLIB_NAME=liba_cdylib.dylib -RDYLIB_NAME=liba_rust_dylib.dylib -PROC_MACRO_NAME=liba_proc_macro.dylib -EXE_NAME=an_executable -COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.dylib -endif - -ifdef IS_WINDOWS -NM=nm -g -CDYLIB_NAME=liba_cdylib.dll.a -RDYLIB_NAME=liba_rust_dylib.dll.a -PROC_MACRO_NAME=liba_proc_macro.dll -EXE_NAME=an_executable.exe -COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.dll.a -endif - -# `grep` regex for symbols produced by either `legacy` or `v0` mangling -RE_ANY_RUST_SYMBOL="_ZN.*h.*E\|_R[a-zA-Z0-9_]+" - -all: - $(RUSTC) -Zshare-generics=no an_rlib.rs - $(RUSTC) -Zshare-generics=no a_cdylib.rs - $(RUSTC) -Zshare-generics=no a_rust_dylib.rs - $(RUSTC) -Zshare-generics=no a_proc_macro.rs - $(RUSTC) -Zshare-generics=no an_executable.rs - $(RUSTC) -Zshare-generics=no a_cdylib.rs --crate-name combined_rlib_dylib --crate-type=rlib,cdylib - - # Check that a cdylib exports its public #[no_mangle] functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] - # Check that a cdylib exports the public #[no_mangle] functions of dependencies - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - # Check that a cdylib DOES NOT export any public Rust functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] - - # Check that a Rust dylib exports its monomorphic functions - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rust_dylib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rust_dylib)" -eq "1" ] - # Check that a Rust dylib does not export generics if -Zshare-generics=no - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rust_dylib)" -eq "0" ] - - - # Check that a Rust dylib exports the monomorphic functions from its dependencies - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rlib)" -eq "1" ] - # Check that a Rust dylib does not export generics if -Zshare-generics=no - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rlib)" -eq "0" ] - - # Check that a proc macro exports its public #[no_mangle] functions - # FIXME(#99978) avoid exporting #[no_mangle] symbols for proc macros - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] - # Check that a proc macro exports the public #[no_mangle] functions of dependencies - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - # Check that a proc macro DOES NOT export any public Rust functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] - -# FIXME(nbdd0121): This is broken in MinGW, see https://github.com/rust-lang/rust/pull/95604#issuecomment-1101564032 -ifndef IS_WINDOWS - # Check that an executable does not export any dynamic symbols - [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "0" ] - [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_rust_function_from_exe)" -eq "0" ] -endif - - - # Check the combined case, where we generate a cdylib and an rlib in the same - # compilation session: - # Check that a cdylib exports its public #[no_mangle] functions - [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] - # Check that a cdylib exports the public #[no_mangle] functions of dependencies - [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - # Check that a cdylib DOES NOT export any public Rust functions - [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] - - - $(RUSTC) -Zshare-generics=yes an_rlib.rs - $(RUSTC) -Zshare-generics=yes a_cdylib.rs - $(RUSTC) -Zshare-generics=yes a_rust_dylib.rs - $(RUSTC) -Zshare-generics=yes a_proc_macro.rs - $(RUSTC) -Zshare-generics=yes an_executable.rs - - # Check that a cdylib exports its public #[no_mangle] functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] - # Check that a cdylib exports the public #[no_mangle] functions of dependencies - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - # Check that a cdylib DOES NOT export any public Rust functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] - - # Check that a Rust dylib exports its monomorphic functions, including generics this time - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rust_dylib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rust_dylib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rust_dylib)" -eq "1" ] - - # Check that a Rust dylib exports the monomorphic functions from its dependencies - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rlib)" -eq "1" ] - [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rlib)" -eq "1" ] - - # Check that a proc macro exports its public #[no_mangle] functions - # FIXME(#99978) avoid exporting #[no_mangle] symbols for proc macros - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] - # Check that a proc macro exports the public #[no_mangle] functions of dependencies - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] - # Check that a proc macro DOES NOT export any public Rust functions - [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] - -ifndef IS_WINDOWS - # Check that an executable does not export any dynamic symbols - [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "0" ] - [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_rust_function_from_exe)" -eq "0" ] -endif diff --git a/tests/run-make-fulldeps/symbol-visibility/a_cdylib.rs b/tests/run-make-fulldeps/symbol-visibility/a_cdylib.rs deleted file mode 100644 index d4fbff85bfe6ff17e7de82302c2d752ed1a3b919..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/a_cdylib.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type="cdylib"] - -extern crate an_rlib; - -// This should not be exported -pub fn public_rust_function_from_cdylib() {} - -// This should be exported -#[no_mangle] -pub extern "C" fn public_c_function_from_cdylib() { - an_rlib::public_c_function_from_rlib(); -} diff --git a/tests/run-make-fulldeps/symbol-visibility/a_proc_macro.rs b/tests/run-make-fulldeps/symbol-visibility/a_proc_macro.rs deleted file mode 100644 index 9fd1a8a671767f6d649484c4ad1ea0993bab938c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/a_proc_macro.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![crate_type = "proc-macro"] - -extern crate an_rlib; - -// This should not be exported -#[no_mangle] -extern "C" fn public_c_function_from_cdylib() { - an_rlib::public_c_function_from_rlib(); -} diff --git a/tests/run-make-fulldeps/symbol-visibility/a_rust_dylib.rs b/tests/run-make-fulldeps/symbol-visibility/a_rust_dylib.rs deleted file mode 100644 index a47df0ab7eed1ff6724d53be2ca0e6433ce92ca3..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/a_rust_dylib.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![crate_type="dylib"] - -extern crate an_rlib; - -// This should be exported -pub fn public_rust_function_from_rust_dylib() {} - -// This should be exported -#[no_mangle] -pub extern "C" fn public_c_function_from_rust_dylib() { - let _ = public_generic_function_from_rust_dylib(1u16); -} - -// This should be exported if -Zshare-generics=yes -pub fn public_generic_function_from_rust_dylib(x: T) -> T { x } diff --git a/tests/run-make-fulldeps/symbol-visibility/an_executable.rs b/tests/run-make-fulldeps/symbol-visibility/an_executable.rs deleted file mode 100644 index 3f5e125ad193d365cf97e276de6eb70432b64482..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/an_executable.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_type="bin"] - -extern crate an_rlib; - -pub fn public_rust_function_from_exe() {} - -fn main() {} diff --git a/tests/run-make-fulldeps/symbol-visibility/an_rlib.rs b/tests/run-make-fulldeps/symbol-visibility/an_rlib.rs deleted file mode 100644 index 3696422b11e96adc6148eabc87e7e3e72df3d7ef..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbol-visibility/an_rlib.rs +++ /dev/null @@ -1,12 +0,0 @@ -#![crate_type="rlib"] - -pub fn public_rust_function_from_rlib() {} - -#[no_mangle] -pub extern "C" fn public_c_function_from_rlib() { - let _ = public_generic_function_from_rlib(0u64); -} - -pub fn public_generic_function_from_rlib(x: T) -> T { - x -} diff --git a/tests/run-make-fulldeps/symbols-include-type-name/Makefile b/tests/run-make-fulldeps/symbols-include-type-name/Makefile deleted file mode 100644 index ac26a852e36c1464ecf282ff60111d86b6a2d4c6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbols-include-type-name/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# Check that symbol names for methods include type names, instead of . - -OUT=$(TMPDIR)/lib.s - -all: - $(RUSTC) --crate-type staticlib --emit asm lib.rs - $(CGREP) Def < $(OUT) diff --git a/tests/run-make-fulldeps/symbols-include-type-name/lib.rs b/tests/run-make-fulldeps/symbols-include-type-name/lib.rs deleted file mode 100644 index 37d445917674f3910b2c920af776f21d2eaccdf6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symbols-include-type-name/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub struct Def { - pub id: i32, -} - -impl Def { - pub fn new(id: i32) -> Def { - Def { id: id } - } -} - -#[no_mangle] -pub fn user() { - let _ = Def::new(0); -} diff --git a/tests/run-make-fulldeps/symlinked-extern/Makefile b/tests/run-make-fulldeps/symlinked-extern/Makefile deleted file mode 100644 index 058f43e857a2b263126c808b72825e96335df3ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-extern/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# ignore-windows -# `ln` is actually `cp` on msys. - -all: - $(RUSTC) foo.rs - mkdir -p $(TMPDIR)/other - ln -nsf $(TMPDIR)/libfoo.rlib $(TMPDIR)/other - $(RUSTC) bar.rs -L $(TMPDIR) - $(RUSTC) baz.rs --extern foo=$(TMPDIR)/other/libfoo.rlib -L $(TMPDIR) diff --git a/tests/run-make-fulldeps/symlinked-extern/bar.rs b/tests/run-make-fulldeps/symlinked-extern/bar.rs deleted file mode 100644 index cd9c959d5e6a358ac147ddbbfc94ab43fa6f5b72..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-extern/bar.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "rlib"] - -extern crate foo; - -pub fn bar(_s: foo::S) { -} diff --git a/tests/run-make-fulldeps/symlinked-extern/baz.rs b/tests/run-make-fulldeps/symlinked-extern/baz.rs deleted file mode 100644 index cd433a3ac7a3ebdc73a60292c8e643454dc687e8..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-extern/baz.rs +++ /dev/null @@ -1,6 +0,0 @@ -extern crate bar; -extern crate foo; - -fn main() { - bar::bar(foo::foo()); -} diff --git a/tests/run-make-fulldeps/symlinked-extern/foo.rs b/tests/run-make-fulldeps/symlinked-extern/foo.rs deleted file mode 100644 index c00700b8cf83e9f35124da244e440e6307522328..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-extern/foo.rs +++ /dev/null @@ -1,5 +0,0 @@ -#![crate_type = "rlib"] - -pub struct S; - -pub fn foo() -> S { S } diff --git a/tests/run-make-fulldeps/symlinked-libraries/Makefile b/tests/run-make-fulldeps/symlinked-libraries/Makefile deleted file mode 100644 index 576bf7e54bed8cfae3341263528a4713028b59ce..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-libraries/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -include ../tools.mk - -# ignore-windows -# `ln` is actually `cp` on msys. - -all: - $(RUSTC) foo.rs -C prefer-dynamic - mkdir -p $(TMPDIR)/other - ln -nsf $(TMPDIR)/$(call DYLIB_GLOB,foo) $(TMPDIR)/other - $(RUSTC) bar.rs -L $(TMPDIR)/other diff --git a/tests/run-make-fulldeps/symlinked-libraries/bar.rs b/tests/run-make-fulldeps/symlinked-libraries/bar.rs deleted file mode 100644 index fde0d746634c75bda4939b7e052e9f6516700c36..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-libraries/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::bar(); -} diff --git a/tests/run-make-fulldeps/symlinked-libraries/foo.rs b/tests/run-make-fulldeps/symlinked-libraries/foo.rs deleted file mode 100644 index cde9e291b45bc1364a450a7aaedb8fdcd7596571..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-libraries/foo.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![crate_type = "dylib"] - -pub fn bar() {} diff --git a/tests/run-make-fulldeps/symlinked-rlib/Makefile b/tests/run-make-fulldeps/symlinked-rlib/Makefile deleted file mode 100644 index 49d3f220a353fd598373e8324558476757738249..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-rlib/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# ignore-windows -# `ln` is actually `cp` on msys. - -all: - $(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo.xxx - ln -nsf $(TMPDIR)/foo.xxx $(TMPDIR)/libfoo.rlib - $(RUSTC) bar.rs -L $(TMPDIR) diff --git a/tests/run-make-fulldeps/symlinked-rlib/bar.rs b/tests/run-make-fulldeps/symlinked-rlib/bar.rs deleted file mode 100644 index fde0d746634c75bda4939b7e052e9f6516700c36..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-rlib/bar.rs +++ /dev/null @@ -1,5 +0,0 @@ -extern crate foo; - -fn main() { - foo::bar(); -} diff --git a/tests/run-make-fulldeps/symlinked-rlib/foo.rs b/tests/run-make-fulldeps/symlinked-rlib/foo.rs deleted file mode 100644 index c5c0bc606cd699cda9d339035a1ca95bff4a70f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/symlinked-rlib/foo.rs +++ /dev/null @@ -1 +0,0 @@ -pub fn bar() {} diff --git a/tests/run-make-fulldeps/sysroot-crates-are-unstable/Makefile b/tests/run-make-fulldeps/sysroot-crates-are-unstable/Makefile deleted file mode 100644 index 1e267fb9576ba1e923c656775b09958a1f9758f7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sysroot-crates-are-unstable/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -all: - '$(PYTHON)' test.py diff --git a/tests/run-make-fulldeps/sysroot-crates-are-unstable/test.py b/tests/run-make-fulldeps/sysroot-crates-are-unstable/test.py deleted file mode 100644 index cb77eb34fef08d77246fe41bdf4eec42d9be6b78..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/sysroot-crates-are-unstable/test.py +++ /dev/null @@ -1,74 +0,0 @@ -import sys -import os -from os import listdir -from os.path import isfile, join -from subprocess import PIPE, Popen - - -# This is n list of files which are stable crates or simply are not crates, -# we don't check for the instability of these crates as they're all stable! -STABLE_CRATES = ['std', 'alloc', 'core', 'proc_macro', - 'rsbegin.o', 'rsend.o', 'dllcrt2.o', 'crt2.o', 'clang_rt'] - - -def convert_to_string(s): - if s.__class__.__name__ == 'bytes': - return s.decode('utf-8') - return s - - -def set_ld_lib_path(): - var = os.environ.get("LD_LIB_PATH_ENVVAR") - rpath = os.environ.get("HOST_RPATH_DIR") - if var and rpath: - path = os.environ.get(var) - if path: - os.environ[var] = rpath + os.pathsep + path - else: - os.environ[var] = rpath - - -def exec_command(command, to_input=None): - child = None - if to_input is None: - child = Popen(command, stdout=PIPE, stderr=PIPE) - else: - child = Popen(command, stdout=PIPE, stderr=PIPE, stdin=PIPE) - stdout, stderr = child.communicate(input=to_input) - return (convert_to_string(stdout), convert_to_string(stderr)) - - -def check_lib(lib): - if lib['name'] in STABLE_CRATES: - return True - print('verifying if {} is an unstable crate'.format(lib['name'])) - stdout, stderr = exec_command([os.environ['RUSTC'], '-', '--crate-type', 'rlib', - '--extern', '{}={}'.format(lib['name'], lib['path'])], - to_input=('extern crate {};'.format(lib['name'])).encode('utf-8')) - if not 'use of unstable library feature' in '{}{}'.format(stdout, stderr): - print('crate {} "{}" is not unstable'.format(lib['name'], lib['path'])) - print('{}{}'.format(stdout, stderr)) - print('') - return False - return True - -# Generate a list of all crates in the sysroot. To do this we list all files in -# rustc's sysroot, look at the filename, strip everything after the `-`, and -# strip the leading `lib` (if present) -def get_all_libs(dir_path): - return [{ 'path': join(dir_path, f), 'name': f[3:].split('-')[0] } - for f in listdir(dir_path) - if isfile(join(dir_path, f)) and f.endswith('.rlib') and f not in STABLE_CRATES] - - -set_ld_lib_path() -sysroot = exec_command([os.environ['RUSTC'], '--print', 'sysroot'])[0].replace('\n', '') -assert sysroot, "Could not read the rustc sysroot!" -libs = get_all_libs(join(sysroot, 'lib/rustlib/{}/lib'.format(os.environ['TARGET']))) - -ret = 0 -for lib in libs: - if not check_lib(lib): - # We continue so users can see all the not unstable crates. - ret = 1 -sys.exit(ret) diff --git a/tests/run-make-fulldeps/target-cpu-native/Makefile b/tests/run-make-fulldeps/target-cpu-native/Makefile deleted file mode 100644 index eb3ca1e13aa62db001c8ac22bbd2462a29ea5cd5..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-cpu-native/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -include ../tools.mk - -# only-linux -# only-x86_64 -# -# I *really* don't want to deal with a cross-platform way to compare file sizes, -# tests in `make` sort of are awful - -all: $(TMPDIR)/out.log - # Make sure no warnings about "unknown CPU `native`" were emitted - if [ "$$(wc -c $(TMPDIR)/out.log | cut -d' ' -f 1)" = "0" ]; then \ - echo no warnings generated; \ - else \ - exit 1; \ - fi - - -$(TMPDIR)/out.log: - $(RUSTC) foo.rs -C target-cpu=native 2>&1 | tee $(TMPDIR)/out.log - $(call RUN,foo) diff --git a/tests/run-make-fulldeps/target-cpu-native/foo.rs b/tests/run-make-fulldeps/target-cpu-native/foo.rs deleted file mode 100644 index f79c691f0853c5b08e114041f7c8db43b0452fe0..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-cpu-native/foo.rs +++ /dev/null @@ -1,2 +0,0 @@ -fn main() { -} diff --git a/tests/run-make-fulldeps/target-specs/Makefile b/tests/run-make-fulldeps/target-specs/Makefile deleted file mode 100644 index a33f5368e3cfd4ea255b5497933fa4197e8e0977..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk -all: - $(RUSTC) foo.rs --target=my-awesome-platform.json --crate-type=lib --emit=asm - $(CGREP) -v morestack < $(TMPDIR)/foo.s - $(RUSTC) foo.rs --target=my-invalid-platform.json 2>&1 | $(CGREP) "Error loading target specification" - $(RUSTC) foo.rs --target=my-incomplete-platform.json 2>&1 | $(CGREP) 'Field llvm-target' - RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-awesome-platform --crate-type=lib --emit=asm - RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-x86_64-unknown-linux-gnu-platform --crate-type=lib --emit=asm - $(RUSTC) -Z unstable-options --target=my-awesome-platform.json --print target-spec-json > $(TMPDIR)/test-platform.json && $(RUSTC) -Z unstable-options --target=$(TMPDIR)/test-platform.json --print target-spec-json | diff -q $(TMPDIR)/test-platform.json - - $(RUSTC) foo.rs --target=definitely-not-builtin-target 2>&1 | $(CGREP) 'may not set is_builtin' - $(RUSTC) foo.rs --target=mismatching-data-layout --crate-type=lib diff --git a/tests/run-make-fulldeps/target-specs/definitely-not-builtin-target.json b/tests/run-make-fulldeps/target-specs/definitely-not-builtin-target.json deleted file mode 100644 index b36fa993d9783f49353108c2ea3a14d81f75b589..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/definitely-not-builtin-target.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "arch": "x86_64", - "is-builtin": true, - "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", - "llvm-target": "x86_64-unknown-unknown-gnu", - "target-pointer-width": "64" -} diff --git a/tests/run-make-fulldeps/target-specs/foo.rs b/tests/run-make-fulldeps/target-specs/foo.rs deleted file mode 100644 index 22939e87912c1a32f96cb1133cb8ef8e284855e4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/foo.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![feature(lang_items, no_core, auto_traits)] -#![no_core] - -#[lang = "copy"] -trait Copy {} - -#[lang = "sized"] -trait Sized {} - -#[lang = "freeze"] -auto trait Freeze {} - -#[lang = "start"] -fn start(_main: fn() -> T, _argc: isize, _argv: *const *const u8, _sigpipe: u8) -> isize { - 0 -} - -extern "C" { - fn _foo() -> [u8; 16]; -} - -fn _main() { - let _a = unsafe { _foo() }; -} diff --git a/tests/run-make-fulldeps/target-specs/mismatching-data-layout.json b/tests/run-make-fulldeps/target-specs/mismatching-data-layout.json deleted file mode 100644 index d12caaad14a031b044329156610d076eac6d00fc..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/mismatching-data-layout.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "arch": "x86_64", - "data-layout": "e-m:e-i64:16:32:64", - "llvm-target": "x86_64-unknown-unknown-gnu", - "target-pointer-width": "64" -} diff --git a/tests/run-make-fulldeps/target-specs/my-awesome-platform.json b/tests/run-make-fulldeps/target-specs/my-awesome-platform.json deleted file mode 100644 index 00de3de05f07a66baaed0d82f89b2f4c97fa5a00..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/my-awesome-platform.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "data-layout": "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128", - "linker-flavor": "gcc", - "llvm-target": "i686-unknown-linux-gnu", - "target-endian": "little", - "target-pointer-width": "32", - "target-c-int-width": "32", - "arch": "x86", - "os": "linux", - "morestack": false -} diff --git a/tests/run-make-fulldeps/target-specs/my-incomplete-platform.json b/tests/run-make-fulldeps/target-specs/my-incomplete-platform.json deleted file mode 100644 index ceaa25cdf2fef6f79a1811f6ce01d4a2b226f301..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/my-incomplete-platform.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "data-layout": "e-p:32:32-f64:32:64-i64:32:64-f80:32:32-n8:16:32", - "linker-flavor": "gcc", - "target-endian": "little", - "target-pointer-width": "32", - "target-c-int-width": "32", - "arch": "x86", - "os": "foo", - "morestack": false -} diff --git a/tests/run-make-fulldeps/target-specs/my-invalid-platform.json b/tests/run-make-fulldeps/target-specs/my-invalid-platform.json deleted file mode 100644 index 3feac45b7d660a813db9b37d511551019ca5920a..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/my-invalid-platform.json +++ /dev/null @@ -1 +0,0 @@ -wow this json is really broke! diff --git a/tests/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json b/tests/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json deleted file mode 100644 index 6d5e964ed4fee41552661577c5ff2157763426b9..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-specs/my-x86_64-unknown-linux-gnu-platform.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "pre-link-args": {"gcc": ["-m64"]}, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", - "linker-flavor": "gcc", - "llvm-target": "x86_64-unknown-linux-gnu", - "target-endian": "little", - "target-pointer-width": "64", - "target-c-int-width": "32", - "arch": "x86_64", - "os": "linux", - "morestack": false -} diff --git a/tests/run-make-fulldeps/target-without-atomic-cas/Makefile b/tests/run-make-fulldeps/target-without-atomic-cas/Makefile deleted file mode 100644 index 451f03d66cd2318aac8d6305790fc5e9f9acba87..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/target-without-atomic-cas/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -# The target used below doesn't support atomic CAS operations. Verify that's the case -all: - $(RUSTC) --print cfg --target thumbv6m-none-eabi | $(CGREP) -v 'target_has_atomic="ptr"' diff --git a/tests/run-make-fulldeps/test-harness/Makefile b/tests/run-make-fulldeps/test-harness/Makefile deleted file mode 100644 index 1fe059b07d2a05f6106493c340a6981bc33fa787..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/test-harness/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -all: - # check that #[cfg_attr(..., ignore)] does the right thing. - $(RUSTC) --test test-ignore-cfg.rs --cfg ignorecfg - $(call RUN,test-ignore-cfg) | $(CGREP) 'shouldnotignore ... ok' 'shouldignore ... ignored' - $(call RUN,test-ignore-cfg --quiet) | $(CGREP) -e "^i\.$$" - $(call RUN,test-ignore-cfg --quiet) | $(CGREP) -v 'should' diff --git a/tests/run-make-fulldeps/test-harness/test-ignore-cfg.rs b/tests/run-make-fulldeps/test-harness/test-ignore-cfg.rs deleted file mode 100644 index 31ef131f2ad76cdd5f54c06875bbee98003adaea..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/test-harness/test-ignore-cfg.rs +++ /dev/null @@ -1,9 +0,0 @@ -#[test] -#[cfg_attr(ignorecfg, ignore)] -fn shouldignore() { -} - -#[test] -#[cfg_attr(noignorecfg, ignore)] -fn shouldnotignore() { -} diff --git a/tests/run-make-fulldeps/tools.mk b/tests/run-make-fulldeps/tools.mk deleted file mode 100644 index ea06b620c4cff7b24b41adb586fa0a038caf6ebf..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/tools.mk +++ /dev/null @@ -1,187 +0,0 @@ -# These deliberately use `=` and not `:=` so that client makefiles can -# augment HOST_RPATH_DIR / TARGET_RPATH_DIR. -HOST_RPATH_ENV = \ - $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(HOST_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))" -TARGET_RPATH_ENV = \ - $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(TARGET_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))" - -RUSTC_ORIGINAL := $(RUSTC) -BARE_RUSTC := $(HOST_RPATH_ENV) '$(RUSTC)' -BARE_RUSTDOC := $(HOST_RPATH_ENV) '$(RUSTDOC)' -RUSTC := $(BARE_RUSTC) --out-dir $(TMPDIR) -L $(TMPDIR) $(RUSTFLAGS) -RUSTDOC := $(BARE_RUSTDOC) -L $(TARGET_RPATH_DIR) -ifdef RUSTC_LINKER -RUSTC := $(RUSTC) -Clinker='$(RUSTC_LINKER)' -RUSTDOC := $(RUSTDOC) -Clinker='$(RUSTC_LINKER)' -endif -#CC := $(CC) -L $(TMPDIR) -HTMLDOCCK := '$(PYTHON)' '$(S)/src/etc/htmldocck.py' -CGREP := "$(S)/src/etc/cat-and-grep.sh" - -# diff with common flags for multi-platform diffs against text output -DIFF := diff -u --strip-trailing-cr - -# Some of the Rust CI platforms use `/bin/dash` to run `shell` script in -# Makefiles. Other platforms, including many developer platforms, default to -# `/bin/bash`. (In many cases, `make` is actually using `/bin/sh`, but `sh` -# is configured to execute one or the other shell binary). `dash` features -# support only a small subset of `bash` features, so `dash` can be thought of as -# the lowest common denominator, and tests should be validated against `dash` -# whenever possible. Most developer platforms include `/bin/dash`, but to ensure -# tests still work when `/bin/dash`, if not available, this `SHELL` override is -# conditional: -ifndef IS_WINDOWS # dash interprets backslashes in executable paths incorrectly -ifneq (,$(wildcard /bin/dash)) -SHELL := /bin/dash -endif -endif - -# This is the name of the binary we will generate and run; use this -# e.g. for `$(CC) -o $(RUN_BINFILE)`. -RUN_BINFILE = $(TMPDIR)/$(1) - -# Invoke the generated binary on the remote machine if compiletest was -# configured to use a remote test device, otherwise run it on the current host. -ifdef REMOTE_TEST_CLIENT -# FIXME: if a test requires additional files, this will need to be changed to -# also push them (by changing the 0 to the number of additional files, and -# providing the path of the additional files as the last arguments). -EXECUTE = $(REMOTE_TEST_CLIENT) run 0 $(RUN_BINFILE) -else -EXECUTE = $(RUN_BINFILE) -endif - -# RUN and FAIL are basic way we will invoke the generated binary. On -# non-windows platforms, they set the LD_LIBRARY_PATH environment -# variable before running the binary. - -RLIB_GLOB = lib$(1)*.rlib -BIN = $(1) - -UNAME = $(shell uname) - -ifeq ($(UNAME),Darwin) -RUN = $(TARGET_RPATH_ENV) $(EXECUTE) -FAIL = $(TARGET_RPATH_ENV) $(EXECUTE) && exit 1 || exit 0 -DYLIB_GLOB = lib$(1)*.dylib -DYLIB = $(TMPDIR)/lib$(1).dylib -STATICLIB = $(TMPDIR)/lib$(1).a -STATICLIB_GLOB = lib$(1)*.a -else -ifdef IS_WINDOWS -RUN = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(EXECUTE) -FAIL = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(EXECUTE) && exit 1 || exit 0 -DYLIB_GLOB = $(1)*.dll -DYLIB = $(TMPDIR)/$(1).dll -ifdef IS_MSVC -STATICLIB = $(TMPDIR)/$(1).lib -STATICLIB_GLOB = $(1)*.lib -else -IMPLIB = $(TMPDIR)/lib$(1).dll.a -STATICLIB = $(TMPDIR)/lib$(1).a -STATICLIB_GLOB = lib$(1)*.a -endif -BIN = $(1).exe -LLVM_FILECHECK := $(shell cygpath -u "$(LLVM_FILECHECK)") -else -RUN = $(TARGET_RPATH_ENV) $(EXECUTE) -FAIL = $(TARGET_RPATH_ENV) $(EXECUTE) && exit 1 || exit 0 -DYLIB_GLOB = lib$(1)*.so -DYLIB = $(TMPDIR)/lib$(1).so -STATICLIB = $(TMPDIR)/lib$(1).a -STATICLIB_GLOB = lib$(1)*.a -endif -endif - -ifdef IS_MSVC -COMPILE_OBJ = $(CC) -c -Fo:`cygpath -w $(1)` $(2) -COMPILE_OBJ_CXX = $(CXX) -EHs -c -Fo:`cygpath -w $(1)` $(2) -NATIVE_STATICLIB_FILE = $(1).lib -NATIVE_STATICLIB = $(TMPDIR)/$(call NATIVE_STATICLIB_FILE,$(1)) -OUT_EXE=-Fe:`cygpath -w $(TMPDIR)/$(call BIN,$(1))` \ - -Fo:`cygpath -w $(TMPDIR)/$(1).obj` -else -COMPILE_OBJ = $(CC) -v -c -o $(1) $(2) -COMPILE_OBJ_CXX = $(CXX) -c -o $(1) $(2) -NATIVE_STATICLIB_FILE = lib$(1).a -NATIVE_STATICLIB = $(call STATICLIB,$(1)) -OUT_EXE=-o $(TMPDIR)/$(1) -endif - - -# Extra flags needed to compile a working executable with the standard library -ifdef IS_WINDOWS -ifdef IS_MSVC - EXTRACFLAGS := ws2_32.lib userenv.lib advapi32.lib bcrypt.lib ntdll.lib -else - EXTRACFLAGS := -lws2_32 -luserenv -lbcrypt -lntdll - EXTRACXXFLAGS := -lstdc++ - # So this is a bit hacky: we can't use the DLL version of libstdc++ because - # it pulls in the DLL version of libgcc, which means that we end up with 2 - # instances of the DW2 unwinding implementation. This is a problem on - # i686-pc-windows-gnu because each module (DLL/EXE) needs to register its - # unwind information with the unwinding implementation, and libstdc++'s - # __cxa_throw won't see the unwinding info we registered with our statically - # linked libgcc. - # - # Now, simply statically linking libstdc++ would fix this problem, except - # that it is compiled with the expectation that pthreads is dynamically - # linked as a DLL and will fail to link with a statically linked libpthread. - # - # So we end up with the following hack: we link use static:-bundle to only - # link the parts of libstdc++ that we actually use, which doesn't include - # the dependency on the pthreads DLL. - EXTRARSCXXFLAGS := -l static:-bundle=stdc++ -endif -else -ifeq ($(UNAME),Darwin) - EXTRACFLAGS := -lresolv - EXTRACXXFLAGS := -lc++ - EXTRARSCXXFLAGS := -lc++ -else -ifeq ($(UNAME),FreeBSD) - EXTRACFLAGS := -lm -lpthread -lgcc_s -else -ifeq ($(UNAME),SunOS) - EXTRACFLAGS := -lm -lpthread -lposix4 -lsocket -lresolv -else -ifeq ($(UNAME),OpenBSD) - EXTRACFLAGS := -lm -lpthread -lc++abi - RUSTC := $(RUSTC) -C linker="$(word 1,$(CC:ccache=))" -else - EXTRACFLAGS := -lm -lrt -ldl -lpthread - EXTRACXXFLAGS := -lstdc++ - EXTRARSCXXFLAGS := -lstdc++ -endif -endif -endif -endif -endif - -REMOVE_DYLIBS = rm $(TMPDIR)/$(call DYLIB_GLOB,$(1)) -REMOVE_RLIBS = rm $(TMPDIR)/$(call RLIB_GLOB,$(1)) - -%.a: %.o - $(AR) crus $@ $< -ifdef IS_MSVC -%.lib: lib%.o - $(MSVC_LIB) -out:`cygpath -w $@` $< -else -%.lib: lib%.o - $(AR) crus $@ $< -endif -%.dylib: %.o - $(CC) -dynamiclib -Wl,-dylib -o $@ $< -%.so: %.o - $(CC) -o $@ $< -shared - -ifdef IS_MSVC -%.dll: lib%.o - $(CC) $< -link -dll -out:`cygpath -w $@` -else -%.dll: lib%.o - $(CC) -o $@ $< -shared -Wl,--out-implib=$@.a -endif - -$(TMPDIR)/lib%.o: %.c - $(call COMPILE_OBJ,$@,$<) diff --git a/tests/run-make-fulldeps/type-mismatch-same-crate-name/Makefile b/tests/run-make-fulldeps/type-mismatch-same-crate-name/Makefile deleted file mode 100644 index a2a2a41c7a5a130d75f5fa6396213211d9092864..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/type-mismatch-same-crate-name/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -include ../tools.mk - -all: - # compile two different versions of crateA - $(RUSTC) --crate-type=rlib crateA.rs -C metadata=-1 -C extra-filename=-1 - $(RUSTC) --crate-type=rlib crateA.rs -C metadata=-2 -C extra-filename=-2 - # make crateB depend on version 1 of crateA - $(RUSTC) --crate-type=rlib crateB.rs --extern crateA=$(TMPDIR)/libcrateA-1.rlib - # make crateC depend on version 2 of crateA - $(RUSTC) crateC.rs --extern crateA=$(TMPDIR)/libcrateA-2.rlib 2>&1 | \ - tr -d '\r\n' | $(CGREP) -e \ - "mismatched types.*\ - crateB::try_foo\(foo2\);.*\ - expected \`crateA::foo::Foo\`, found \`Foo\`.*\ - different versions of crate \`crateA\`.*\ - mismatched types.*\ - crateB::try_bar\(bar2\);.*\ - expected trait \`crateA::bar::Bar\`, found trait \`Bar\`.*\ - different versions of crate \`crateA\`" diff --git a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateA.rs b/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateA.rs deleted file mode 100644 index 4871c8c2e9ccd5f3f6bc425cfc2c0aac22c7982d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateA.rs +++ /dev/null @@ -1,16 +0,0 @@ -mod foo { - pub struct Foo; -} - -mod bar { - pub trait Bar{} - - pub fn bar() -> Box { - unimplemented!() - } -} - -// This makes the publicly accessible path -// differ from the internal one. -pub use foo::Foo; -pub use bar::{Bar, bar}; diff --git a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateB.rs b/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateB.rs deleted file mode 100644 index 24fcc7cadc10817f53551b00a7751f2c96a35a77..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateB.rs +++ /dev/null @@ -1,4 +0,0 @@ -extern crate crateA; - -pub fn try_foo(x: crateA::Foo){} -pub fn try_bar(x: Box){} diff --git a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateC.rs b/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateC.rs deleted file mode 100644 index 71b38a9f8ca566474d5ea68f488ed29e574422c6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/type-mismatch-same-crate-name/crateC.rs +++ /dev/null @@ -1,25 +0,0 @@ -// This tests the extra note reported when a type error deals with -// seemingly identical types. -// The main use case of this error is when there are two crates -// (generally different versions of the same crate) with the same name -// causing a type mismatch. - -// The test is nearly the same as the one in -// ui/type/type-mismatch-same-crate-name.rs -// but deals with the case where one of the crates -// is only introduced as an indirect dependency. -// and the type is accessed via a re-export. -// This is similar to how the error can be introduced -// when using cargo's automatic dependency resolution. - -extern crate crateA; - -fn main() { - let foo2 = crateA::Foo; - let bar2 = crateA::bar(); - { - extern crate crateB; - crateB::try_foo(foo2); - crateB::try_bar(bar2); - } -} diff --git a/tests/run-make-fulldeps/use-extern-for-plugins/Makefile b/tests/run-make-fulldeps/use-extern-for-plugins/Makefile deleted file mode 100644 index 6ae53afad207b57532d6d2ac9faf389287268feb..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-extern-for-plugins/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -include ../tools.mk - -# ignore-freebsd -# ignore-openbsd -# ignore-sunos - -HOST := $(shell $(RUSTC) -vV | grep 'host:' | sed 's/host: //') -ifeq ($(findstring i686,$(HOST)),i686) -TARGET := $(subst i686,x86_64,$(HOST)) -else -TARGET := $(subst x86_64,i686,$(HOST)) -endif - -all: - $(RUSTC) foo.rs -C extra-filename=-host - $(RUSTC) bar.rs -C extra-filename=-targ --target $(TARGET) - $(RUSTC) baz.rs --extern a=$(TMPDIR)/liba-targ.rlib --target $(TARGET) diff --git a/tests/run-make-fulldeps/use-extern-for-plugins/bar.rs b/tests/run-make-fulldeps/use-extern-for-plugins/bar.rs deleted file mode 100644 index 704d212036273615470229f83734a9b94e732c32..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-extern-for-plugins/bar.rs +++ /dev/null @@ -1,9 +0,0 @@ -#![feature(no_core)] -#![no_core] -#![crate_type = "lib"] -#![crate_name = "a"] - -#[macro_export] -macro_rules! bar { - () => () -} diff --git a/tests/run-make-fulldeps/use-extern-for-plugins/baz.rs b/tests/run-make-fulldeps/use-extern-for-plugins/baz.rs deleted file mode 100644 index 49a96a0c80b02fabc0cbf61d94a9a3394da954f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-extern-for-plugins/baz.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![feature(no_core)] -#![no_core] -#![crate_type = "lib"] - -#[macro_use] -extern crate a; - -bar!(); diff --git a/tests/run-make-fulldeps/use-extern-for-plugins/foo.rs b/tests/run-make-fulldeps/use-extern-for-plugins/foo.rs deleted file mode 100644 index dffdc0798872e95c3a723a1812e41656c8b5593c..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-extern-for-plugins/foo.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![no_std] -#![crate_type = "lib"] -#![crate_name = "a"] - -#[macro_export] -macro_rules! foo { - () => () -} diff --git a/tests/run-make-fulldeps/use-suggestions-rust-2018/Makefile b/tests/run-make-fulldeps/use-suggestions-rust-2018/Makefile deleted file mode 100644 index 37cd6283c0a6e9ae78e13b29b0a724fa8a14dc73..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-suggestions-rust-2018/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) ep-nested-lib.rs - - $(RUSTC) use-suggestions.rs --edition=2018 --extern ep_nested_lib=$(TMPDIR)/libep_nested_lib.rlib 2>&1 | $(CGREP) "use ep_nested_lib::foo::bar::Baz" - diff --git a/tests/run-make-fulldeps/use-suggestions-rust-2018/ep-nested-lib.rs b/tests/run-make-fulldeps/use-suggestions-rust-2018/ep-nested-lib.rs deleted file mode 100644 index 62a0a9d8f1b66440e4393dae2cc0690efe512250..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-suggestions-rust-2018/ep-nested-lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![crate_type = "rlib"] - -pub mod foo { - pub mod bar { - pub struct Baz; - } -} diff --git a/tests/run-make-fulldeps/use-suggestions-rust-2018/use-suggestions.rs b/tests/run-make-fulldeps/use-suggestions-rust-2018/use-suggestions.rs deleted file mode 100644 index d262d6f9877cb160ebe68784a7157d3aad72c924..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/use-suggestions-rust-2018/use-suggestions.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - let x = Baz{}; -} diff --git a/tests/run-make-fulldeps/used-cdylib-macos/Makefile b/tests/run-make-fulldeps/used-cdylib-macos/Makefile deleted file mode 100644 index 38a4c31c7b3af5e90c51706b40e54ebc610dbb9e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/used-cdylib-macos/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include ../tools.mk - -# only-macos -# -# This checks that `#[used]` passes through to the linker on -# darwin. This is subject to change in the future, see -# https://github.com/rust-lang/rust/pull/93718 for discussion - -all: - $(RUSTC) -Copt-level=3 dylib_used.rs - nm $(TMPDIR)/libdylib_used.dylib | $(CGREP) VERY_IMPORTANT_SYMBOL diff --git a/tests/run-make-fulldeps/used-cdylib-macos/dylib_used.rs b/tests/run-make-fulldeps/used-cdylib-macos/dylib_used.rs deleted file mode 100644 index 85f0ff92fe7301be3469e3f18aa2067d13e59032..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/used-cdylib-macos/dylib_used.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![crate_type = "cdylib"] - -#[used] -static VERY_IMPORTANT_SYMBOL: u32 = 12345; diff --git a/tests/run-make-fulldeps/used/Makefile b/tests/run-make-fulldeps/used/Makefile deleted file mode 100644 index e80eb9e402086c5b76cb7d74d4a362bcd2d30b39..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/used/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -include ../tools.mk - -# ignore-windows-msvc - -all: - $(RUSTC) -C opt-level=3 --emit=obj used.rs - nm $(TMPDIR)/used.o | $(CGREP) FOO diff --git a/tests/run-make-fulldeps/used/used.rs b/tests/run-make-fulldeps/used/used.rs deleted file mode 100644 index dca0a5e1167a81685f29d467acc0e1f82bce0c24..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/used/used.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![crate_type = "lib"] - -#[used] -static FOO: u32 = 0; - -static BAR: u32 = 0; diff --git a/tests/run-make-fulldeps/version/Makefile b/tests/run-make-fulldeps/version/Makefile deleted file mode 100644 index 3a130545d69d3c8960dc7930251057e4fcef85e1..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/version/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) -V - $(RUSTC) -vV - $(RUSTC) --version --verbose diff --git a/tests/run-make-fulldeps/volatile-intrinsics/Makefile b/tests/run-make-fulldeps/volatile-intrinsics/Makefile deleted file mode 100644 index 2a78c7b9cfe174859ac2adc7d3267efc647d5ff6..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/volatile-intrinsics/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -all: - # The tests must pass... - $(RUSTC) main.rs - $(call RUN,main) - # ... and the loads/stores must not be optimized out. - $(RUSTC) main.rs --emit=llvm-ir - $(CGREP) "load volatile" "store volatile" < $(TMPDIR)/main.ll diff --git a/tests/run-make-fulldeps/volatile-intrinsics/main.rs b/tests/run-make-fulldeps/volatile-intrinsics/main.rs deleted file mode 100644 index 4295d95f3f39813b5eba6cadc762d2aac8ee10f4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/volatile-intrinsics/main.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![feature(core_intrinsics, volatile)] - -use std::intrinsics::{ - unaligned_volatile_load, unaligned_volatile_store, volatile_load, volatile_store, -}; -use std::ptr::{read_volatile, write_volatile}; - -pub fn main() { - unsafe { - let mut i: isize = 1; - volatile_store(&mut i, 2); - assert_eq!(volatile_load(&i), 2); - } - unsafe { - let mut i: isize = 1; - unaligned_volatile_store(&mut i, 2); - assert_eq!(unaligned_volatile_load(&i), 2); - } - unsafe { - let mut i: isize = 1; - write_volatile(&mut i, 2); - assert_eq!(read_volatile(&i), 2); - } -} diff --git a/tests/run-make-fulldeps/weird-output-filenames/Makefile b/tests/run-make-fulldeps/weird-output-filenames/Makefile deleted file mode 100644 index d3a34e3b46e8979ff5fde1e22019616d9cfef1e4..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/weird-output-filenames/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include ../tools.mk - -all: - cp foo.rs $(TMPDIR)/.foo.rs - $(RUSTC) $(TMPDIR)/.foo.rs 2>&1 \ - | $(CGREP) -e "invalid character.*in crate name:" - cp foo.rs $(TMPDIR)/.foo.bar - $(RUSTC) $(TMPDIR)/.foo.bar 2>&1 \ - | $(CGREP) -e "invalid character.*in crate name:" - cp foo.rs $(TMPDIR)/+foo+bar.rs - $(RUSTC) $(TMPDIR)/+foo+bar.rs 2>&1 \ - | $(CGREP) -e "invalid character.*in crate name:" - cp foo.rs $(TMPDIR)/-foo.rs - $(RUSTC) $(TMPDIR)/-foo.rs 2>&1 \ - | $(CGREP) 'crate names cannot start with a `-`' diff --git a/tests/run-make-fulldeps/weird-output-filenames/foo.rs b/tests/run-make-fulldeps/weird-output-filenames/foo.rs deleted file mode 100644 index f328e4d9d04c31d0d70d16d21a07d1613be9d577..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/weird-output-filenames/foo.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() {} diff --git a/tests/run-make-fulldeps/windows-binary-no-external-deps/Makefile b/tests/run-make-fulldeps/windows-binary-no-external-deps/Makefile deleted file mode 100644 index 8960020fed558e3e12f234b30ab886c71f91586f..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-binary-no-external-deps/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -include ../tools.mk - -# only-windows - -PATH=$(SYSTEMROOT)/system32 - -all: - $(RUSTC) hello.rs - $(TMPDIR)/hello.exe diff --git a/tests/run-make-fulldeps/windows-binary-no-external-deps/hello.rs b/tests/run-make-fulldeps/windows-binary-no-external-deps/hello.rs deleted file mode 100644 index 47ad8c634112b312f330c58f581a654f46618be7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-binary-no-external-deps/hello.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello World!"); -} diff --git a/tests/run-make-fulldeps/windows-spawn/Makefile b/tests/run-make-fulldeps/windows-spawn/Makefile deleted file mode 100644 index b6cdb169bab484badcb3b31543c2b84d13770ef7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-spawn/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -include ../tools.mk - -# only-windows - -all: - $(RUSTC) -o "$(TMPDIR)/hopefullydoesntexist bar.exe" hello.rs - $(RUSTC) spawn.rs - $(TMPDIR)/spawn.exe diff --git a/tests/run-make-fulldeps/windows-spawn/hello.rs b/tests/run-make-fulldeps/windows-spawn/hello.rs deleted file mode 100644 index 47ad8c634112b312f330c58f581a654f46618be7..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-spawn/hello.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello World!"); -} diff --git a/tests/run-make-fulldeps/windows-spawn/spawn.rs b/tests/run-make-fulldeps/windows-spawn/spawn.rs deleted file mode 100644 index c34da3d5fde4cbf586c402e6cfccb11a4e34c451..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-spawn/spawn.rs +++ /dev/null @@ -1,12 +0,0 @@ -use std::io::ErrorKind; -use std::process::Command; - -fn main() { - // Make sure it doesn't try to run "hopefullydoesntexist bar.exe". - assert_eq!(Command::new("hopefullydoesntexist") - .arg("bar") - .spawn() - .unwrap_err() - .kind(), - ErrorKind::NotFound); -} diff --git a/tests/run-make-fulldeps/windows-subsystem/Makefile b/tests/run-make-fulldeps/windows-subsystem/Makefile deleted file mode 100644 index 78c4e2ac1e875f0574c23181fd032bf2cc3f4226..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-subsystem/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -include ../tools.mk - -all: - $(RUSTC) windows.rs - $(RUSTC) console.rs diff --git a/tests/run-make-fulldeps/windows-subsystem/console.rs b/tests/run-make-fulldeps/windows-subsystem/console.rs deleted file mode 100644 index 61a92eb6a9db7552a16f5024f38341029e80f27e..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-subsystem/console.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![windows_subsystem = "console"] - -fn main() {} diff --git a/tests/run-make-fulldeps/windows-subsystem/windows.rs b/tests/run-make-fulldeps/windows-subsystem/windows.rs deleted file mode 100644 index 1138248f07da0de0b434e6f6b37e00779b4b791d..0000000000000000000000000000000000000000 --- a/tests/run-make-fulldeps/windows-subsystem/windows.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![windows_subsystem = "windows"] - -fn main() {} diff --git a/tests/run-make/a-b-a-linker-guard/Makefile b/tests/run-make/a-b-a-linker-guard/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..43282eae09c595d9a960109fa7557a32e18eb43f --- /dev/null +++ b/tests/run-make/a-b-a-linker-guard/Makefile @@ -0,0 +1,16 @@ +# ignore-cross-compile +include ../tools.mk + +# Test that if we build `b` against a version of `a` that has one set +# of types, it will not run with a dylib that has a different set of +# types. + +# NOTE(eddyb) this test only works with the `legacy` mangling, +# and will probably get removed once `legacy` is gone. + +all: + $(RUSTC) a.rs --cfg x -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy + $(RUSTC) b.rs -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy + $(call RUN,b) + $(RUSTC) a.rs --cfg y -C prefer-dynamic -Z unstable-options -C symbol-mangling-version=legacy + $(call FAIL,b) diff --git a/tests/run-make/a-b-a-linker-guard/a.rs b/tests/run-make/a-b-a-linker-guard/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..aa07b1e71607cf3bfe417fe97d3d1a0fe99bd865 --- /dev/null +++ b/tests/run-make/a-b-a-linker-guard/a.rs @@ -0,0 +1,8 @@ +#![crate_name = "a"] +#![crate_type = "dylib"] + +#[cfg(x)] +pub fn foo(x: u32) { } + +#[cfg(y)] +pub fn foo(x: i32) { } diff --git a/tests/run-make/a-b-a-linker-guard/b.rs b/tests/run-make/a-b-a-linker-guard/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..f30df120a3ba7ae4ea5f71a459cc9dbb972a621a --- /dev/null +++ b/tests/run-make/a-b-a-linker-guard/b.rs @@ -0,0 +1,7 @@ +#![crate_name = "b"] + +extern crate a; + +fn main() { + a::foo(22_u32); +} diff --git a/tests/run-make/alloc-no-oom-handling/Makefile b/tests/run-make/alloc-no-oom-handling/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..87f74c69c793963b1d8f2d8ee108c277d6965b21 --- /dev/null +++ b/tests/run-make/alloc-no-oom-handling/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_global_oom_handling diff --git a/tests/run-make/alloc-no-rc/Makefile b/tests/run-make/alloc-no-rc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9824b17e6c2a7a9d443a27336db0fcc6a6c4d46b --- /dev/null +++ b/tests/run-make/alloc-no-rc/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_rc diff --git a/tests/run-make/alloc-no-sync/Makefile b/tests/run-make/alloc-no-sync/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..04ec4c7d8bc9a1831b7dfe38246fd99d3da25366 --- /dev/null +++ b/tests/run-make/alloc-no-sync/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/alloc/src/lib.rs --cfg no_sync diff --git a/tests/run-make/allow-non-lint-warnings-cmdline/Makefile b/tests/run-make/allow-non-lint-warnings-cmdline/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..78b9a7b989895adff121cf7f849f9e07402869bc --- /dev/null +++ b/tests/run-make/allow-non-lint-warnings-cmdline/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +# Test that -A warnings makes the 'empty trait list for derive' warning go away +OUT=$(shell $(RUSTC) foo.rs -A warnings 2>&1 | grep "warning" ) + +all: foo + test -z '$(OUT)' + +# This is just to make sure the above command actually succeeds +foo: + $(RUSTC) foo.rs -A warnings diff --git a/tests/run-make/allow-non-lint-warnings-cmdline/foo.rs b/tests/run-make/allow-non-lint-warnings-cmdline/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..46e72da2de9f330923f3c03fe7b7bcc07449b1ce --- /dev/null +++ b/tests/run-make/allow-non-lint-warnings-cmdline/foo.rs @@ -0,0 +1,5 @@ +#[derive()] +#[derive(Copy, Clone)] +pub struct Foo; + +pub fn main() { } diff --git a/tests/run-make/allow-warnings-cmdline-stability/Makefile b/tests/run-make/allow-warnings-cmdline-stability/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..368a39af6bfe2f29fba65f135a97339ee29edf49 --- /dev/null +++ b/tests/run-make/allow-warnings-cmdline-stability/Makefile @@ -0,0 +1,16 @@ +# ignore-cross-compile +include ../tools.mk + +# Test that -A warnings makes the 'empty trait list for derive' warning go away +DEP=$(shell $(RUSTC) bar.rs) +OUT=$(shell $(RUSTC) foo.rs -A warnings 2>&1 | grep "warning" ) + +all: foo bar + test -z '$(OUT)' + +# These are just to ensure that the above commands actually work +bar: + $(RUSTC) bar.rs + +foo: bar + $(RUSTC) foo.rs -A warnings diff --git a/tests/run-make/allow-warnings-cmdline-stability/bar.rs b/tests/run-make/allow-warnings-cmdline-stability/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..3dcfb9dadd804dd6d0e069b30aa8e39ddc6bb252 --- /dev/null +++ b/tests/run-make/allow-warnings-cmdline-stability/bar.rs @@ -0,0 +1,5 @@ +#![crate_type = "lib"] +#![feature(staged_api)] +#![unstable(feature = "unstable_test_feature", issue = "none")] + +pub fn baz() {} diff --git a/tests/run-make/allow-warnings-cmdline-stability/foo.rs b/tests/run-make/allow-warnings-cmdline-stability/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..869b543541688019298822844b038e4846d8d553 --- /dev/null +++ b/tests/run-make/allow-warnings-cmdline-stability/foo.rs @@ -0,0 +1,5 @@ +#![feature(unstable_test_feature)] + +extern crate bar; + +pub fn main() { bar::baz() } diff --git a/tests/run-make/archive-duplicate-names/Makefile b/tests/run-make/archive-duplicate-names/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5433a42d252865de19de9fea542e3b184a9b30e9 --- /dev/null +++ b/tests/run-make/archive-duplicate-names/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +all: + mkdir $(TMPDIR)/a + mkdir $(TMPDIR)/b + $(call COMPILE_OBJ,$(TMPDIR)/a/foo.o,foo.c) + $(call COMPILE_OBJ,$(TMPDIR)/b/foo.o,bar.c) + $(AR) crus $(TMPDIR)/libfoo.a $(TMPDIR)/a/foo.o $(TMPDIR)/b/foo.o + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(call RUN,bar) diff --git a/tests/run-make/archive-duplicate-names/bar.c b/tests/run-make/archive-duplicate-names/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..e42599986781fe984a2c1427a3373cf439a34f60 --- /dev/null +++ b/tests/run-make/archive-duplicate-names/bar.c @@ -0,0 +1 @@ +void bar() {} diff --git a/tests/run-make/archive-duplicate-names/bar.rs b/tests/run-make/archive-duplicate-names/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..994a98c2cd8b1e41be828d629bb2cf8b84d65c45 --- /dev/null +++ b/tests/run-make/archive-duplicate-names/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::baz(); +} diff --git a/tests/run-make/archive-duplicate-names/foo.c b/tests/run-make/archive-duplicate-names/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..85e6cd8c3909a7e67c41750f5210b1463dd7a90c --- /dev/null +++ b/tests/run-make/archive-duplicate-names/foo.c @@ -0,0 +1 @@ +void foo() {} diff --git a/tests/run-make/archive-duplicate-names/foo.rs b/tests/run-make/archive-duplicate-names/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..0bf13c406ab53c7b7c9217a4c623bd1c3a1538a8 --- /dev/null +++ b/tests/run-make/archive-duplicate-names/foo.rs @@ -0,0 +1,14 @@ +#![crate_type = "rlib"] + +#[link(name = "foo", kind = "static")] +extern "C" { + fn foo(); + fn bar(); +} + +pub fn baz() { + unsafe { + foo(); + bar(); + } +} diff --git a/tests/run-make/arguments-non-c-like-enum/Makefile b/tests/run-make/arguments-non-c-like-enum/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0c8d8bf3acc60e599f9b61bc9a080fb02f182e7b --- /dev/null +++ b/tests/run-make/arguments-non-c-like-enum/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) --crate-type=staticlib nonclike.rs + $(CC) test.c $(call STATICLIB,nonclike) $(call OUT_EXE,test) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(call RUN,test) diff --git a/tests/run-make/arguments-non-c-like-enum/nonclike.rs b/tests/run-make/arguments-non-c-like-enum/nonclike.rs new file mode 100644 index 0000000000000000000000000000000000000000..57c2c6127ed9cc01fa04dd8a9e49eeb6c9db20b0 --- /dev/null +++ b/tests/run-make/arguments-non-c-like-enum/nonclike.rs @@ -0,0 +1,31 @@ +#[repr(C, u8)] +pub enum TT { + AA(u64, u64), + BB, +} + +#[no_mangle] +pub extern "C" fn tt_add(a: TT, b: TT) -> u64 { + match (a, b) { + (TT::AA(a1, b1), TT::AA(a2, b2)) => a1 + a2 + b1 + b2, + (TT::AA(a1, b1), TT::BB) => a1 + b1, + (TT::BB, TT::AA(a1, b1)) => a1 + b1, + _ => 0, + } +} + +#[repr(C, u8)] +pub enum T { + A(u64), + B, +} + +#[no_mangle] +pub extern "C" fn t_add(a: T, b: T) -> u64 { + match (a, b) { + (T::A(a), T::A(b)) => a + b, + (T::A(a), T::B) => a, + (T::B, T::A(b)) => b, + _ => 0, + } +} diff --git a/tests/run-make/arguments-non-c-like-enum/test.c b/tests/run-make/arguments-non-c-like-enum/test.c new file mode 100644 index 0000000000000000000000000000000000000000..0a1621e49f2eeed5e86a2622355c74c345d74131 --- /dev/null +++ b/tests/run-make/arguments-non-c-like-enum/test.c @@ -0,0 +1,66 @@ +#include +#include + +#include + +/* This is the code generated by cbindgen 0.12.1 for the `enum TT` + * type in nonclike.rs . */ +enum TT_Tag { + AA, + BB, +}; +typedef uint8_t TT_Tag; + +typedef struct { + uint64_t _0; + uint64_t _1; +} AA_Body; + +typedef struct { + TT_Tag tag; + union { + AA_Body aa; + }; +} TT; + +/* This is the code generated by cbindgen 0.12.1 for the `enum T` type + * in nonclike.rs . */ +enum T_Tag { + A, + B, +}; +typedef uint8_t T_Tag; + +typedef struct { + uint64_t _0; +} A_Body; + +typedef struct { + T_Tag tag; + union { + A_Body a; + }; +} T; + +/* These symbols are defined by the Rust staticlib built from + * nonclike.rs. */ +extern uint64_t t_add(T a, T b); +extern uint64_t tt_add(TT a, TT b); + +int main(int argc, char *argv[]) { + (void)argc; (void)argv; + + /* This example works. */ + TT xx = { .tag = AA, .aa = { ._0 = 1, ._1 = 2 } }; + TT yy = { .tag = AA, .aa = { ._0 = 10, ._1 = 20 } }; + uint64_t rr = tt_add(xx, yy); + assert(33 == rr); + + /* This one used to return an incorrect result (see issue #68190). */ + T x = { .tag = A, .a = { ._0 = 1 } }; + T y = { .tag = A, .a = { ._0 = 10 } }; + uint64_t r = t_add(x, y); + assert(11 == r); + + return 0; +} diff --git a/tests/run-make/atomic-lock-free/Makefile b/tests/run-make/atomic-lock-free/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..37e59624a2541744708b052f687e8194a60a1214 --- /dev/null +++ b/tests/run-make/atomic-lock-free/Makefile @@ -0,0 +1,48 @@ +include ../tools.mk + +# This tests ensure that atomic types are never lowered into runtime library calls that are not +# guaranteed to be lock-free. + +all: +ifeq ($(UNAME),Linux) +ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) + $(RUSTC) --target=i686-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=x86_64-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +ifeq ($(filter arm,$(LLVM_COMPONENTS)),arm) + $(RUSTC) --target=arm-unknown-linux-gnueabi atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=arm-unknown-linux-gnueabihf atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=armv7-unknown-linux-gnueabihf atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=thumbv7neon-unknown-linux-gnueabihf atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +ifeq ($(filter aarch64,$(LLVM_COMPONENTS)),aarch64) + $(RUSTC) --target=aarch64-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +ifeq ($(filter mips,$(LLVM_COMPONENTS)),mips) + $(RUSTC) --target=mips-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=mipsel-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +ifeq ($(filter powerpc,$(LLVM_COMPONENTS)),powerpc) + $(RUSTC) --target=powerpc-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=powerpc-unknown-linux-gnuspe atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=powerpc64-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add + $(RUSTC) --target=powerpc64le-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +ifeq ($(filter systemz,$(LLVM_COMPONENTS)),systemz) + $(RUSTC) --target=s390x-unknown-linux-gnu atomic_lock_free.rs + nm "$(TMPDIR)/libatomic_lock_free.rlib" | $(CGREP) -v __atomic_fetch_add +endif +endif diff --git a/tests/run-make/atomic-lock-free/atomic_lock_free.rs b/tests/run-make/atomic-lock-free/atomic_lock_free.rs new file mode 100644 index 0000000000000000000000000000000000000000..47d90b1856be51ad7701c19df3a798b451cd6083 --- /dev/null +++ b/tests/run-make/atomic-lock-free/atomic_lock_free.rs @@ -0,0 +1,66 @@ +#![feature(no_core, intrinsics, lang_items)] +#![crate_type="rlib"] +#![no_core] + +extern "rust-intrinsic" { + fn atomic_xadd_seqcst(dst: *mut T, src: T) -> T; +} + +#[lang = "sized"] +trait Sized {} +#[lang = "copy"] +trait Copy {} +#[lang = "freeze"] +trait Freeze {} + +impl Copy for *mut T {} + +#[cfg(target_has_atomic = "8")] +pub unsafe fn atomic_u8(x: *mut u8) { + atomic_xadd_seqcst(x, 1); + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "8")] +pub unsafe fn atomic_i8(x: *mut i8) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "16")] +pub unsafe fn atomic_u16(x: *mut u16) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "16")] +pub unsafe fn atomic_i16(x: *mut i16) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "32")] +pub unsafe fn atomic_u32(x: *mut u32) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "32")] +pub unsafe fn atomic_i32(x: *mut i32) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "64")] +pub unsafe fn atomic_u64(x: *mut u64) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "64")] +pub unsafe fn atomic_i64(x: *mut i64) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "128")] +pub unsafe fn atomic_u128(x: *mut u128) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "128")] +pub unsafe fn atomic_i128(x: *mut i128) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "ptr")] +pub unsafe fn atomic_usize(x: *mut usize) { + atomic_xadd_seqcst(x, 1); +} +#[cfg(target_has_atomic = "ptr")] +pub unsafe fn atomic_isize(x: *mut isize) { + atomic_xadd_seqcst(x, 1); +} diff --git a/tests/run-make/bare-outfile/Makefile b/tests/run-make/bare-outfile/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..23b619ea0ba3281e8318e5decb7a383b812ef9f5 --- /dev/null +++ b/tests/run-make/bare-outfile/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + cp foo.rs $(TMPDIR) + cd $(TMPDIR) && $(RUSTC) -o foo foo.rs + $(call RUN,foo) diff --git a/tests/run-make/bare-outfile/foo.rs b/tests/run-make/bare-outfile/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f79c691f0853c5b08e114041f7c8db43b0452fe0 --- /dev/null +++ b/tests/run-make/bare-outfile/foo.rs @@ -0,0 +1,2 @@ +fn main() { +} diff --git a/tests/run-make/c-dynamic-dylib/Makefile b/tests/run-make/c-dynamic-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b5bfbc76539119253681311d0a91116cc2b6240a --- /dev/null +++ b/tests/run-make/c-dynamic-dylib/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-macos +# +# This hits an assertion in the linker on older versions of osx apparently + +all: $(call DYLIB,cfoo) + $(RUSTC) foo.rs -C prefer-dynamic + $(RUSTC) bar.rs + $(call RUN,bar) + $(call REMOVE_DYLIBS,cfoo) + $(call FAIL,bar) diff --git a/tests/run-make/c-dynamic-dylib/bar.rs b/tests/run-make/c-dynamic-dylib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b8c798ffdb4a99bbb9a5df89147fcfa12695a70e --- /dev/null +++ b/tests/run-make/c-dynamic-dylib/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::rsfoo(); +} diff --git a/tests/run-make/c-dynamic-dylib/cfoo.c b/tests/run-make/c-dynamic-dylib/cfoo.c new file mode 100644 index 0000000000000000000000000000000000000000..fea490cf9b45fb6347a8afa71a98636e8845914a --- /dev/null +++ b/tests/run-make/c-dynamic-dylib/cfoo.c @@ -0,0 +1,4 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int foo() { return 0; } diff --git a/tests/run-make/c-dynamic-dylib/foo.rs b/tests/run-make/c-dynamic-dylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..9f7a9e2213c0927a78b47a2a7edd7f44ffb2e917 --- /dev/null +++ b/tests/run-make/c-dynamic-dylib/foo.rs @@ -0,0 +1,10 @@ +#![crate_type = "dylib"] + +#[link(name = "cfoo")] +extern "C" { + fn foo(); +} + +pub fn rsfoo() { + unsafe { foo() } +} diff --git a/tests/run-make/c-dynamic-rlib/Makefile b/tests/run-make/c-dynamic-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0475bd8acae5a83d0a1ace4badaca18341d34cc6 --- /dev/null +++ b/tests/run-make/c-dynamic-rlib/Makefile @@ -0,0 +1,16 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-macos +# +# This hits an assertion in the linker on older versions of osx apparently + +# This overrides the LD_LIBRARY_PATH for RUN +TARGET_RPATH_DIR:=$(TARGET_RPATH_DIR):$(TMPDIR) + +all: $(call DYLIB,cfoo) + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(call RUN,bar) + $(call REMOVE_DYLIBS,cfoo) + $(call FAIL,bar) diff --git a/tests/run-make/c-dynamic-rlib/bar.rs b/tests/run-make/c-dynamic-rlib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b8c798ffdb4a99bbb9a5df89147fcfa12695a70e --- /dev/null +++ b/tests/run-make/c-dynamic-rlib/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::rsfoo(); +} diff --git a/tests/run-make/c-dynamic-rlib/cfoo.c b/tests/run-make/c-dynamic-rlib/cfoo.c new file mode 100644 index 0000000000000000000000000000000000000000..fea490cf9b45fb6347a8afa71a98636e8845914a --- /dev/null +++ b/tests/run-make/c-dynamic-rlib/cfoo.c @@ -0,0 +1,4 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int foo() { return 0; } diff --git a/tests/run-make/c-dynamic-rlib/foo.rs b/tests/run-make/c-dynamic-rlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..3dd376f1ff57beae396507485a4aa72527b08cf5 --- /dev/null +++ b/tests/run-make/c-dynamic-rlib/foo.rs @@ -0,0 +1,10 @@ +#![crate_type = "rlib"] + +#[link(name = "cfoo")] +extern "C" { + fn foo(); +} + +pub fn rsfoo() { + unsafe { foo() } +} diff --git a/tests/run-make/c-link-to-rust-dylib/Makefile b/tests/run-make/c-link-to-rust-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2763cb6ed1d73351cf7d9ec9343104d1b1dcb878 --- /dev/null +++ b/tests/run-make/c-link-to-rust-dylib/Makefile @@ -0,0 +1,18 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(TMPDIR)/$(call BIN,bar) + $(call RUN,bar) + $(call REMOVE_DYLIBS,foo) + $(call FAIL,bar) + +ifdef IS_MSVC +$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo) + $(CC) bar.c $(TMPDIR)/foo.dll.lib $(call OUT_EXE,bar) +else +$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo) + $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) -L $(TMPDIR) +endif + +$(call DYLIB,foo): foo.rs + $(RUSTC) foo.rs diff --git a/tests/run-make/c-link-to-rust-dylib/bar.c b/tests/run-make/c-link-to-rust-dylib/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..bb4036b06e13b79a32ec78ae04db97590f54b2cc --- /dev/null +++ b/tests/run-make/c-link-to-rust-dylib/bar.c @@ -0,0 +1,6 @@ +void foo(); + +int main() { + foo(); + return 0; +} diff --git a/tests/run-make/c-link-to-rust-dylib/foo.rs b/tests/run-make/c-link-to-rust-dylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f197fa513345d49b3f28f5c75248392ba792283f --- /dev/null +++ b/tests/run-make/c-link-to-rust-dylib/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "dylib"] + +#[no_mangle] +pub extern "C" fn foo() {} diff --git a/tests/run-make/c-link-to-rust-staticlib/Makefile b/tests/run-make/c-link-to-rust-staticlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e14775f5c181c0a8e2bc0c328275d1b1cb934c3e --- /dev/null +++ b/tests/run-make/c-link-to-rust-staticlib/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-freebsd +# FIXME + +all: + $(RUSTC) foo.rs + $(CC) bar.c $(call STATICLIB,foo) $(call OUT_EXE,bar) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(call RUN,bar) + rm $(call STATICLIB,foo) + $(call RUN,bar) diff --git a/tests/run-make/c-link-to-rust-staticlib/bar.c b/tests/run-make/c-link-to-rust-staticlib/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..bb4036b06e13b79a32ec78ae04db97590f54b2cc --- /dev/null +++ b/tests/run-make/c-link-to-rust-staticlib/bar.c @@ -0,0 +1,6 @@ +void foo(); + +int main() { + foo(); + return 0; +} diff --git a/tests/run-make/c-link-to-rust-staticlib/foo.rs b/tests/run-make/c-link-to-rust-staticlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..2e59432cdb16feca35d30166b94ab591a1568125 --- /dev/null +++ b/tests/run-make/c-link-to-rust-staticlib/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "staticlib"] + +#[no_mangle] +pub extern "C" fn foo() {} diff --git a/tests/run-make/c-link-to-rust-va-list-fn/Makefile b/tests/run-make/c-link-to-rust-va-list-fn/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..596c0fce3ceae64fd45b3c95c5fbd739ad8870a2 --- /dev/null +++ b/tests/run-make/c-link-to-rust-va-list-fn/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) checkrust.rs + $(CC) test.c $(call STATICLIB,checkrust) $(call OUT_EXE,test) $(EXTRACFLAGS) + $(call RUN,test) diff --git a/tests/run-make/c-link-to-rust-va-list-fn/checkrust.rs b/tests/run-make/c-link-to-rust-va-list-fn/checkrust.rs new file mode 100644 index 0000000000000000000000000000000000000000..5830ef033d38990198300d15843d721b42b41d29 --- /dev/null +++ b/tests/run-make/c-link-to-rust-va-list-fn/checkrust.rs @@ -0,0 +1,148 @@ +#![crate_type = "staticlib"] +#![feature(c_variadic)] +#![feature(rustc_private)] + +extern crate libc; + +use libc::{c_char, c_double, c_int, c_long, c_longlong}; +use std::ffi::VaList; +use std::ffi::{CString, CStr}; + +macro_rules! continue_if { + ($cond:expr) => { + if !($cond) { + return 0xff; + } + } +} + +unsafe fn compare_c_str(ptr: *const c_char, val: &str) -> bool { + let cstr0 = CStr::from_ptr(ptr); + match CString::new(val) { + Ok(cstr1) => &*cstr1 == cstr0, + Err(_) => false, + } +} + +#[no_mangle] +pub unsafe extern "C" fn check_list_0(mut ap: VaList) -> usize { + continue_if!(ap.arg::() == 1); + continue_if!(ap.arg::() == 2); + continue_if!(ap.arg::() == 3); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_list_1(mut ap: VaList) -> usize { + continue_if!(ap.arg::() == -1); + continue_if!(ap.arg::() == 'A' as c_char); + continue_if!(ap.arg::() == '4' as c_char); + continue_if!(ap.arg::() == ';' as c_char); + continue_if!(ap.arg::() == 0x32); + continue_if!(ap.arg::() == 0x10000001); + continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Valid!")); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_list_2(mut ap: VaList) -> usize { + continue_if!(ap.arg::().floor() == 3.14f64.floor()); + continue_if!(ap.arg::() == 12); + continue_if!(ap.arg::() == 'a' as c_char); + continue_if!(ap.arg::().floor() == 6.18f64.floor()); + continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Hello")); + continue_if!(ap.arg::() == 42); + continue_if!(compare_c_str(ap.arg::<*const c_char>(), "World")); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_list_copy_0(mut ap: VaList) -> usize { + continue_if!(ap.arg::().floor() == 6.28f64.floor()); + continue_if!(ap.arg::() == 16); + continue_if!(ap.arg::() == 'A' as c_char); + continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Skip Me!")); + ap.with_copy(|mut ap| { + if compare_c_str(ap.arg::<*const c_char>(), "Correct") { + 0 + } else { + 0xff + } + }) +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_0(_: c_int, mut ap: ...) -> usize { + continue_if!(ap.arg::() == 42); + continue_if!(compare_c_str(ap.arg::<*const c_char>(), "Hello, World!")); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_1(_: c_int, mut ap: ...) -> usize { + continue_if!(ap.arg::().floor() == 3.14f64.floor()); + continue_if!(ap.arg::() == 12); + continue_if!(ap.arg::() == 'A' as c_char); + continue_if!(ap.arg::() == 1); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_2(_: c_int, _ap: ...) -> usize { + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_3(_: c_int, mut ap: ...) -> usize { + continue_if!(ap.arg::() == 1); + continue_if!(ap.arg::() == 2); + continue_if!(ap.arg::() == 3); + continue_if!(ap.arg::() == 4); + continue_if!(ap.arg::() == 5); + continue_if!(ap.arg::() == 6); + continue_if!(ap.arg::() == 7); + continue_if!(ap.arg::() == 8); + continue_if!(ap.arg::() == 9); + continue_if!(ap.arg::() == 10); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_4(_: c_double, mut ap: ...) -> usize { + continue_if!(ap.arg::() == 1.0); + continue_if!(ap.arg::() == 2.0); + continue_if!(ap.arg::() == 3.0); + continue_if!(ap.arg::() == 4.0); + continue_if!(ap.arg::() == 5.0); + continue_if!(ap.arg::() == 6.0); + continue_if!(ap.arg::() == 7.0); + continue_if!(ap.arg::() == 8.0); + continue_if!(ap.arg::() == 9.0); + continue_if!(ap.arg::() == 10.0); + 0 +} + +#[no_mangle] +pub unsafe extern "C" fn check_varargs_5(_: c_int, mut ap: ...) -> usize { + continue_if!(ap.arg::() == 1.0); + continue_if!(ap.arg::() == 1); + continue_if!(ap.arg::() == 2.0); + continue_if!(ap.arg::() == 2); + continue_if!(ap.arg::() == 3.0); + continue_if!(ap.arg::() == 3); + continue_if!(ap.arg::() == 4.0); + continue_if!(ap.arg::() == 4); + continue_if!(ap.arg::() == 5); + continue_if!(ap.arg::() == 5.0); + continue_if!(ap.arg::() == 6); + continue_if!(ap.arg::() == 6.0); + continue_if!(ap.arg::() == 7); + continue_if!(ap.arg::() == 7.0); + continue_if!(ap.arg::() == 8); + continue_if!(ap.arg::() == 8.0); + continue_if!(ap.arg::() == 9); + continue_if!(ap.arg::() == 9.0); + continue_if!(ap.arg::() == 10); + continue_if!(ap.arg::() == 10.0); + 0 +} diff --git a/tests/run-make/c-link-to-rust-va-list-fn/test.c b/tests/run-make/c-link-to-rust-va-list-fn/test.c new file mode 100644 index 0000000000000000000000000000000000000000..5bdb51680a6562ec25d03597146de4bdf4cbb417 --- /dev/null +++ b/tests/run-make/c-link-to-rust-va-list-fn/test.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include + +extern size_t check_list_0(va_list ap); +extern size_t check_list_1(va_list ap); +extern size_t check_list_2(va_list ap); +extern size_t check_list_copy_0(va_list ap); +extern size_t check_varargs_0(int fixed, ...); +extern size_t check_varargs_1(int fixed, ...); +extern size_t check_varargs_2(int fixed, ...); +extern size_t check_varargs_3(int fixed, ...); +extern size_t check_varargs_4(double fixed, ...); +extern size_t check_varargs_5(int fixed, ...); + +int test_rust(size_t (*fn)(va_list), ...) { + size_t ret = 0; + va_list ap; + va_start(ap, fn); + ret = fn(ap); + va_end(ap); + return ret; +} + +int main(int argc, char* argv[]) { + assert(test_rust(check_list_0, 0x01LL, 0x02, 0x03LL) == 0); + + assert(test_rust(check_list_1, -1, 'A', '4', ';', 0x32, 0x10000001, "Valid!") == 0); + + assert(test_rust(check_list_2, 3.14, 12l, 'a', 6.28, "Hello", 42, "World") == 0); + + assert(test_rust(check_list_copy_0, 6.28, 16, 'A', "Skip Me!", "Correct") == 0); + + assert(check_varargs_0(0, 42, "Hello, World!") == 0); + + assert(check_varargs_1(0, 3.14, 12l, 'A', 0x1LL) == 0); + + assert(check_varargs_2(0, "All", "of", "these", "are", "ignored", ".") == 0); + + assert(check_varargs_3(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) == 0); + + assert(check_varargs_4(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0) == 0); + + assert(check_varargs_5(0, 1.0, 1, 2.0, 2, 3.0, 3, 4.0, 4, 5, 5.0, 6, 6.0, 7, 7.0, 8, 8.0, + 9, 9.0, 10, 10.0) == 0); + + return 0; +} diff --git a/tests/run-make/c-static-dylib/Makefile b/tests/run-make/c-static-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4e23edb6c57a4e5ab344c1f8ac0843d38443c3df --- /dev/null +++ b/tests/run-make/c-static-dylib/Makefile @@ -0,0 +1,10 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,cfoo) + $(RUSTC) foo.rs -C prefer-dynamic + $(RUSTC) bar.rs + rm $(call NATIVE_STATICLIB,cfoo) + $(call RUN,bar) + $(call REMOVE_DYLIBS,foo) + $(call FAIL,bar) diff --git a/tests/run-make/c-static-dylib/bar.rs b/tests/run-make/c-static-dylib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b8c798ffdb4a99bbb9a5df89147fcfa12695a70e --- /dev/null +++ b/tests/run-make/c-static-dylib/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::rsfoo(); +} diff --git a/tests/run-make/c-static-dylib/cfoo.c b/tests/run-make/c-static-dylib/cfoo.c new file mode 100644 index 0000000000000000000000000000000000000000..9fe07f82f9ed1495b13e4e4dcd2e092115b01b25 --- /dev/null +++ b/tests/run-make/c-static-dylib/cfoo.c @@ -0,0 +1 @@ +int foo() { return 0; } diff --git a/tests/run-make/c-static-dylib/foo.rs b/tests/run-make/c-static-dylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..1e8af4d44040b293cdef26346344bc960703329c --- /dev/null +++ b/tests/run-make/c-static-dylib/foo.rs @@ -0,0 +1,10 @@ +#![crate_type = "dylib"] + +#[link(name = "cfoo", kind = "static")] +extern "C" { + fn foo(); +} + +pub fn rsfoo() { + unsafe { foo() } +} diff --git a/tests/run-make/c-static-rlib/Makefile b/tests/run-make/c-static-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4e351127cb67c7693248e54374489fb796013428 --- /dev/null +++ b/tests/run-make/c-static-rlib/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,cfoo) + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(call REMOVE_RLIBS,foo) + rm $(call NATIVE_STATICLIB,cfoo) + $(call RUN,bar) diff --git a/tests/run-make/c-static-rlib/bar.rs b/tests/run-make/c-static-rlib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b8c798ffdb4a99bbb9a5df89147fcfa12695a70e --- /dev/null +++ b/tests/run-make/c-static-rlib/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::rsfoo(); +} diff --git a/tests/run-make/c-static-rlib/cfoo.c b/tests/run-make/c-static-rlib/cfoo.c new file mode 100644 index 0000000000000000000000000000000000000000..9fe07f82f9ed1495b13e4e4dcd2e092115b01b25 --- /dev/null +++ b/tests/run-make/c-static-rlib/cfoo.c @@ -0,0 +1 @@ +int foo() { return 0; } diff --git a/tests/run-make/c-static-rlib/foo.rs b/tests/run-make/c-static-rlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..9c6d2080ef4d37c990b060efd425bfed41eb13c9 --- /dev/null +++ b/tests/run-make/c-static-rlib/foo.rs @@ -0,0 +1,10 @@ +#![crate_type = "rlib"] + +#[link(name = "cfoo", kind = "static")] +extern "C" { + fn foo(); +} + +pub fn rsfoo() { + unsafe { foo() } +} diff --git a/tests/run-make/c-unwind-abi-catch-lib-panic/Makefile b/tests/run-make/c-unwind-abi-catch-lib-panic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9c41a5a717e75a5f497c5bafdcc1e1fcad6d40ad --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-lib-panic/Makefile @@ -0,0 +1,31 @@ +# ignore-cross-compile +include ../tools.mk + +all: archive + # Compile `main.rs`, which will link into our library, and run it. + $(RUSTC) main.rs + $(call RUN,main) + +ifdef IS_MSVC +archive: add.o panic.o + # Now, create an archive using these two objects. + $(AR) crus $(TMPDIR)/add.lib $(TMPDIR)/add.o $(TMPDIR)/panic.o +else +archive: add.o panic.o + # Now, create an archive using these two objects. + $(AR) crus $(TMPDIR)/libadd.a $(TMPDIR)/add.o $(TMPDIR)/panic.o +endif + +# Compile `panic.rs` into an object file. +# +# Note that we invoke `rustc` directly, so we may emit an object rather +# than an archive. We'll do that later. +panic.o: + $(BARE_RUSTC) $(RUSTFLAGS) \ + --out-dir $(TMPDIR) \ + --emit=obj panic.rs + +# Compile `add.c` into an object file. +add.o: + $(call COMPILE_OBJ,$(TMPDIR)/add.o,add.c) + diff --git a/tests/run-make/c-unwind-abi-catch-lib-panic/add.c b/tests/run-make/c-unwind-abi-catch-lib-panic/add.c new file mode 100644 index 0000000000000000000000000000000000000000..444359451f6ecd0ff95756a737a0007e30414f53 --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-lib-panic/add.c @@ -0,0 +1,12 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif + +// An external function, defined in Rust. +extern void panic_if_greater_than_10(unsigned x); + +unsigned add_small_numbers(unsigned a, unsigned b) { + unsigned c = a + b; + panic_if_greater_than_10(c); + return c; +} diff --git a/tests/run-make/c-unwind-abi-catch-lib-panic/main.rs b/tests/run-make/c-unwind-abi-catch-lib-panic/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..78a71219c7811d5d74cd3018bf39387b645cb6f8 --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-lib-panic/main.rs @@ -0,0 +1,35 @@ +//! A test for calling `C-unwind` functions across foreign function boundaries. +//! +//! This test triggers a panic in a Rust library that our foreign function invokes. This shows +//! that we can unwind through the C code in that library, and catch the underlying panic. +#![feature(c_unwind)] + +use std::panic::{catch_unwind, AssertUnwindSafe}; + +fn main() { + // Call `add_small_numbers`, passing arguments that will NOT trigger a panic. + let (a, b) = (9, 1); + let c = unsafe { add_small_numbers(a, b) }; + assert_eq!(c, 10); + + // Call `add_small_numbers`, passing arguments that will trigger a panic, and catch it. + let caught_unwind = catch_unwind(AssertUnwindSafe(|| { + let (a, b) = (10, 1); + let _c = unsafe { add_small_numbers(a, b) }; + unreachable!("should have unwound instead of returned"); + })); + + // Assert that we did indeed panic, then unwrap and downcast the panic into the sum. + assert!(caught_unwind.is_err()); + let panic_obj = caught_unwind.unwrap_err(); + let msg = panic_obj.downcast_ref::().unwrap(); + assert_eq!(msg, "11"); +} + +#[link(name = "add", kind = "static")] +extern "C-unwind" { + /// An external function, defined in C. + /// + /// Returns the sum of two numbers, or panics if the sum is greater than 10. + fn add_small_numbers(a: u32, b: u32) -> u32; +} diff --git a/tests/run-make/c-unwind-abi-catch-lib-panic/panic.rs b/tests/run-make/c-unwind-abi-catch-lib-panic/panic.rs new file mode 100644 index 0000000000000000000000000000000000000000..a99a04d5c6f4b1df2866279648bd87e709b68875 --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-lib-panic/panic.rs @@ -0,0 +1,12 @@ +#![crate_type = "staticlib"] +#![feature(c_unwind)] + +/// This function will panic if `x` is greater than 10. +/// +/// This function is called by `add_small_numbers`. +#[no_mangle] +pub extern "C-unwind" fn panic_if_greater_than_10(x: u32) { + if x > 10 { + panic!("{}", x); // That is too big! + } +} diff --git a/tests/run-make/c-unwind-abi-catch-panic/Makefile b/tests/run-make/c-unwind-abi-catch-panic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4398ac2ee24c43dac9102c5b0997b70bd323a0da --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-panic/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,add) + $(RUSTC) main.rs + $(call RUN,main) || exit 1 diff --git a/tests/run-make/c-unwind-abi-catch-panic/add.c b/tests/run-make/c-unwind-abi-catch-panic/add.c new file mode 100644 index 0000000000000000000000000000000000000000..444359451f6ecd0ff95756a737a0007e30414f53 --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-panic/add.c @@ -0,0 +1,12 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif + +// An external function, defined in Rust. +extern void panic_if_greater_than_10(unsigned x); + +unsigned add_small_numbers(unsigned a, unsigned b) { + unsigned c = a + b; + panic_if_greater_than_10(c); + return c; +} diff --git a/tests/run-make/c-unwind-abi-catch-panic/main.rs b/tests/run-make/c-unwind-abi-catch-panic/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..15d38d72160583c407c2b82547021a1ed3585068 --- /dev/null +++ b/tests/run-make/c-unwind-abi-catch-panic/main.rs @@ -0,0 +1,44 @@ +//! A test for calling `C-unwind` functions across foreign function boundaries. +//! +//! This test triggers a panic when calling a foreign function that calls *back* into Rust. +#![feature(c_unwind)] + +use std::panic::{catch_unwind, AssertUnwindSafe}; + +fn main() { + // Call `add_small_numbers`, passing arguments that will NOT trigger a panic. + let (a, b) = (9, 1); + let c = unsafe { add_small_numbers(a, b) }; + assert_eq!(c, 10); + + // Call `add_small_numbers`, passing arguments that will trigger a panic, and catch it. + let caught_unwind = catch_unwind(AssertUnwindSafe(|| { + let (a, b) = (10, 1); + let _c = unsafe { add_small_numbers(a, b) }; + unreachable!("should have unwound instead of returned"); + })); + + // Assert that we did indeed panic, then unwrap and downcast the panic into the sum. + assert!(caught_unwind.is_err()); + let panic_obj = caught_unwind.unwrap_err(); + let msg = panic_obj.downcast_ref::().unwrap(); + assert_eq!(msg, "11"); +} + +#[link(name = "add", kind = "static")] +extern "C-unwind" { + /// An external function, defined in C. + /// + /// Returns the sum of two numbers, or panics if the sum is greater than 10. + fn add_small_numbers(a: u32, b: u32) -> u32; +} + +/// This function will panic if `x` is greater than 10. +/// +/// This function is called by `add_small_numbers`. +#[no_mangle] +pub extern "C-unwind" fn panic_if_greater_than_10(x: u32) { + if x > 10 { + panic!("{}", x); // That is too big! + } +} diff --git a/tests/run-make/cat-and-grep-sanity-check/Makefile b/tests/run-make/cat-and-grep-sanity-check/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..82351e22009b2fdcb761171e606592927be6975c --- /dev/null +++ b/tests/run-make/cat-and-grep-sanity-check/Makefile @@ -0,0 +1,46 @@ +include ../tools.mk + +all: + echo a | $(CGREP) a + ! echo b | $(CGREP) a + echo xyz | $(CGREP) x y z + ! echo abc | $(CGREP) b c d + printf "x\ny\nz" | $(CGREP) x y z + + echo AbCd | $(CGREP) -i a b C D + ! echo AbCd | $(CGREP) a b C D + + true | $(CGREP) -v nothing + ! echo nothing | $(CGREP) -v nothing + ! echo xyz | $(CGREP) -v w x y + ! echo xyz | $(CGREP) -v x y z + echo xyz | $(CGREP) -v a b c + + ! echo 'foo bar baz' | $(CGREP) 'foo baz' + echo 'foo bar baz' | $(CGREP) foo baz + echo 'x a `b` c y z' | $(CGREP) 'a `b` c' + + echo baaac | $(CGREP) -e 'ba*c' + echo bc | $(CGREP) -e 'ba*c' + ! echo aaac | $(CGREP) -e 'ba*c' + + echo aaa | $(CGREP) -e 'a+' + ! echo bbb | $(CGREP) -e 'a+' + + echo abc | $(CGREP) -e 'a|e|i|o|u' + ! echo fgh | $(CGREP) -e 'a|e|i|o|u' + echo abc | $(CGREP) -e '[aeiou]' + ! echo fgh | $(CGREP) -e '[aeiou]' + ! echo abc | $(CGREP) -e '[^aeiou]{3}' + echo fgh | $(CGREP) -e '[^aeiou]{3}' + echo ab cd ef gh | $(CGREP) -e '\bcd\b' + ! echo abcdefgh | $(CGREP) -e '\bcd\b' + echo xyz | $(CGREP) -e '...' + ! echo xy | $(CGREP) -e '...' + ! echo xyz | $(CGREP) -e '\.\.\.' + echo ... | $(CGREP) -e '\.\.\.' + + echo foo bar baz | $(CGREP) -e 'foo.*baz' + ! echo foo bar baz | $(CGREP) -ve 'foo.*baz' + ! echo foo bar baz | $(CGREP) -e 'baz.*foo' + echo foo bar baz | $(CGREP) -ve 'baz.*foo' diff --git a/tests/run-make/cdylib-dylib-linkage/Makefile b/tests/run-make/cdylib-dylib-linkage/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..51fbfef2d85f771059ba4a9edce0e567811242f7 --- /dev/null +++ b/tests/run-make/cdylib-dylib-linkage/Makefile @@ -0,0 +1,28 @@ +# ignore-cross-compile +include ../tools.mk + +TARGET_SYSROOT := $(shell $(RUSTC) --print sysroot)/lib/rustlib/$(TARGET)/lib + +ifdef IS_MSVC +LIBSTD := $(wildcard $(TARGET_SYSROOT)/libstd-*.dll.lib) +else +LIBSTD := $(wildcard $(TARGET_SYSROOT)/$(call DYLIB_GLOB,std)) +STD := $(basename $(patsubst lib%,%, $(notdir $(LIBSTD)))) +endif + +all: $(call RUN_BINFILE,foo) + $(call RUN,foo) + +ifdef IS_MSVC +CLIBS := $(TMPDIR)/foo.dll.lib $(TMPDIR)/bar.dll.lib $(LIBSTD) +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c $(CLIBS) $(call OUT_EXE,foo) +else +CLIBS := -lfoo -lbar -l$(STD) -L $(TMPDIR) -L $(TARGET_SYSROOT) +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c $(CLIBS) -o $(call RUN_BINFILE,foo) +endif + +$(call DYLIB,foo): + $(RUSTC) -C prefer-dynamic bar.rs + $(RUSTC) foo.rs diff --git a/tests/run-make/cdylib-dylib-linkage/bar.rs b/tests/run-make/cdylib-dylib-linkage/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b3a7539abaeffe6d4ac414f79e0448a582298b6d --- /dev/null +++ b/tests/run-make/cdylib-dylib-linkage/bar.rs @@ -0,0 +1,5 @@ +#![crate_type = "dylib"] + +pub fn bar() { + println!("hello!"); +} diff --git a/tests/run-make/cdylib-dylib-linkage/foo.c b/tests/run-make/cdylib-dylib-linkage/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..154f9682ef8f1dd678cdb5a3605a11cee1cb92bf --- /dev/null +++ b/tests/run-make/cdylib-dylib-linkage/foo.c @@ -0,0 +1,10 @@ +#include + +extern void foo(); +extern unsigned bar(unsigned a, unsigned b); + +int main() { + foo(); + assert(bar(1, 2) == 3); + return 0; +} diff --git a/tests/run-make/cdylib-dylib-linkage/foo.rs b/tests/run-make/cdylib-dylib-linkage/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c4069495aaff1670d9084e004844024f095c56b4 --- /dev/null +++ b/tests/run-make/cdylib-dylib-linkage/foo.rs @@ -0,0 +1,13 @@ +#![crate_type = "cdylib"] + +extern crate bar; + +#[no_mangle] +pub extern "C" fn foo() { + bar::bar(); +} + +#[no_mangle] +pub extern "C" fn bar(a: u32, b: u32) -> u32 { + a + b +} diff --git a/tests/run-make/cdylib-fewer-symbols/Makefile b/tests/run-make/cdylib-fewer-symbols/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4e08f979c36b4359c8ee6442f14a5ef61e548afb --- /dev/null +++ b/tests/run-make/cdylib-fewer-symbols/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +# Test that allocator-related symbols don't show up as exported from a cdylib as +# they're internal to Rust and not part of the public ABI. + +include ../tools.mk + +# ignore-windows +# FIXME: The __rdl_ and __rust_ symbol still remains, no matter using MSVC or GNU +# See https://github.com/rust-lang/rust/pull/46207#issuecomment-347561753 + +all: + $(RUSTC) foo.rs + nm -g "$(call DYLIB,foo)" | $(CGREP) -v __rdl_ __rde_ __rg_ __rust_ diff --git a/tests/run-make/cdylib-fewer-symbols/foo.rs b/tests/run-make/cdylib-fewer-symbols/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..af37bc8e9534d3cc5241224b6e07c80af86a4354 --- /dev/null +++ b/tests/run-make/cdylib-fewer-symbols/foo.rs @@ -0,0 +1,6 @@ +#![crate_type = "cdylib"] + +#[no_mangle] +pub extern "C" fn foo() -> u32 { + 3 +} diff --git a/tests/run-make/cdylib/Makefile b/tests/run-make/cdylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3c8b526955452c53efcf9632b20ae1158fea9a2c --- /dev/null +++ b/tests/run-make/cdylib/Makefile @@ -0,0 +1,20 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call RUN_BINFILE,foo) + $(call RUN,foo) + rm $(call DYLIB,foo) + $(RUSTC) foo.rs -C lto + $(call RUN,foo) + +ifdef IS_MSVC +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c $(TMPDIR)/foo.dll.lib $(call OUT_EXE,foo) +else +$(call RUN_BINFILE,foo): $(call DYLIB,foo) + $(CC) $(CFLAGS) foo.c -lfoo -o $(call RUN_BINFILE,foo) -L $(TMPDIR) +endif + +$(call DYLIB,foo): + $(RUSTC) bar.rs + $(RUSTC) foo.rs diff --git a/tests/run-make/cdylib/bar.rs b/tests/run-make/cdylib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..fe665abc7c1c13221d961cdda625aa31e68ee9ac --- /dev/null +++ b/tests/run-make/cdylib/bar.rs @@ -0,0 +1,5 @@ +#![crate_type = "rlib"] + +pub fn bar() { + println!("hello!"); +} diff --git a/tests/run-make/cdylib/foo.c b/tests/run-make/cdylib/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..154f9682ef8f1dd678cdb5a3605a11cee1cb92bf --- /dev/null +++ b/tests/run-make/cdylib/foo.c @@ -0,0 +1,10 @@ +#include + +extern void foo(); +extern unsigned bar(unsigned a, unsigned b); + +int main() { + foo(); + assert(bar(1, 2) == 3); + return 0; +} diff --git a/tests/run-make/cdylib/foo.rs b/tests/run-make/cdylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c4069495aaff1670d9084e004844024f095c56b4 --- /dev/null +++ b/tests/run-make/cdylib/foo.rs @@ -0,0 +1,13 @@ +#![crate_type = "cdylib"] + +extern crate bar; + +#[no_mangle] +pub extern "C" fn foo() { + bar::bar(); +} + +#[no_mangle] +pub extern "C" fn bar(a: u32, b: u32) -> u32 { + a + b +} diff --git a/tests/run-make/codegen-options-parsing/Makefile b/tests/run-make/codegen-options-parsing/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..56bb900b7d8e846ee6f13f2de23be84547c37dd3 --- /dev/null +++ b/tests/run-make/codegen-options-parsing/Makefile @@ -0,0 +1,32 @@ +# ignore-cross-compile +include ../tools.mk + +all: + #Option taking a number + $(RUSTC) -C codegen-units dummy.rs 2>&1 | \ + $(CGREP) 'codegen option `codegen-units` requires a number' + $(RUSTC) -C codegen-units= dummy.rs 2>&1 | \ + $(CGREP) 'incorrect value `` for codegen option `codegen-units` - a number was expected' + $(RUSTC) -C codegen-units=foo dummy.rs 2>&1 | \ + $(CGREP) 'incorrect value `foo` for codegen option `codegen-units` - a number was expected' + $(RUSTC) -C codegen-units=1 dummy.rs + #Option taking a string + $(RUSTC) -C extra-filename dummy.rs 2>&1 | \ + $(CGREP) 'codegen option `extra-filename` requires a string' + $(RUSTC) -C extra-filename= dummy.rs 2>&1 + $(RUSTC) -C extra-filename=foo dummy.rs 2>&1 + #Option taking no argument + $(RUSTC) -C lto= dummy.rs 2>&1 | \ + $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' + $(RUSTC) -C lto=1 dummy.rs 2>&1 | \ + $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' + $(RUSTC) -C lto=foo dummy.rs 2>&1 | \ + $(CGREP) 'codegen option `lto` - either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted' + $(RUSTC) -C lto dummy.rs + + # Should not link dead code... + $(RUSTC) --print link-args dummy.rs 2>&1 | \ + $(CGREP) -e '--gc-sections|-z[^ ]* [^ ]*|-dead_strip|/OPT:REF' + # ... unless you specifically ask to keep it + $(RUSTC) --print link-args -C link-dead-code dummy.rs 2>&1 | \ + $(CGREP) -ve '--gc-sections|-z[^ ]* [^ ]*|-dead_strip|/OPT:REF' diff --git a/tests/run-make/codegen-options-parsing/dummy.rs b/tests/run-make/codegen-options-parsing/dummy.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/codegen-options-parsing/dummy.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/compile-stdin/Makefile b/tests/run-make/compile-stdin/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2a495281c247fed5ac273170841cb31d18de5ad8 --- /dev/null +++ b/tests/run-make/compile-stdin/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + echo 'fn main(){}' | $(RUSTC) - + $(call RUN,rust_out) diff --git a/tests/run-make/compiler-lookup-paths-2/Makefile b/tests/run-make/compiler-lookup-paths-2/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d4ff7d8daabf94af918b1e3e9041daca12beb016 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths-2/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +all: + mkdir -p $(TMPDIR)/a $(TMPDIR)/b + $(RUSTC) a.rs && mv $(TMPDIR)/liba.rlib $(TMPDIR)/a + $(RUSTC) b.rs -L $(TMPDIR)/a && mv $(TMPDIR)/libb.rlib $(TMPDIR)/b + $(RUSTC) c.rs -L crate=$(TMPDIR)/b -L dependency=$(TMPDIR)/a \ + && exit 1 || exit 0 diff --git a/tests/run-make/compiler-lookup-paths-2/a.rs b/tests/run-make/compiler-lookup-paths-2/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..83be6e807e0b9bc42f55f3df77db7a1e99b3d93c --- /dev/null +++ b/tests/run-make/compiler-lookup-paths-2/a.rs @@ -0,0 +1 @@ +#![crate_type = "lib"] diff --git a/tests/run-make/compiler-lookup-paths-2/b.rs b/tests/run-make/compiler-lookup-paths-2/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..1be6cbc919d0d6fd7992edd1948545e9b931ac69 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths-2/b.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +extern crate a; diff --git a/tests/run-make/compiler-lookup-paths-2/c.rs b/tests/run-make/compiler-lookup-paths-2/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..e37bc2e1dcef1d1e83063c50dc1f0dbd9a6d5a45 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths-2/c.rs @@ -0,0 +1,3 @@ +#![crate_type = "lib"] +extern crate b; +extern crate a; diff --git a/tests/run-make/compiler-lookup-paths/Makefile b/tests/run-make/compiler-lookup-paths/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..310d6772c342cdfe23f1ac3eed2ac67306f08719 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/Makefile @@ -0,0 +1,41 @@ +include ../tools.mk + +# ignore-wasm32 (need a C compiler) +# ignore-wasm64 (need a C compiler) + +all: $(TMPDIR)/libnative.a + mkdir -p $(TMPDIR)/crate + mkdir -p $(TMPDIR)/native + mv $(TMPDIR)/libnative.a $(TMPDIR)/native + $(RUSTC) a.rs + mv $(TMPDIR)/liba.rlib $(TMPDIR)/crate + $(RUSTC) b.rs -L native=$(TMPDIR)/crate && exit 1 || exit 0 + $(RUSTC) b.rs -L dependency=$(TMPDIR)/crate && exit 1 || exit 0 + $(RUSTC) b.rs -L crate=$(TMPDIR)/crate + $(RUSTC) b.rs -L all=$(TMPDIR)/crate + $(RUSTC) c.rs -L native=$(TMPDIR)/crate && exit 1 || exit 0 + $(RUSTC) c.rs -L crate=$(TMPDIR)/crate && exit 1 || exit 0 + $(RUSTC) c.rs -L dependency=$(TMPDIR)/crate + $(RUSTC) c.rs -L all=$(TMPDIR)/crate + $(RUSTC) d.rs -L dependency=$(TMPDIR)/native && exit 1 || exit 0 + $(RUSTC) d.rs -L crate=$(TMPDIR)/native && exit 1 || exit 0 + $(RUSTC) d.rs -L native=$(TMPDIR)/native + $(RUSTC) d.rs -L all=$(TMPDIR)/native + # Deduplication tests: + # Same hash, no errors. + mkdir -p $(TMPDIR)/e1 + mkdir -p $(TMPDIR)/e2 + $(RUSTC) e.rs -o $(TMPDIR)/e1/libe.rlib + $(RUSTC) e.rs -o $(TMPDIR)/e2/libe.rlib + $(RUSTC) f.rs -L $(TMPDIR)/e1 -L $(TMPDIR)/e2 + $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L $(TMPDIR)/e2 + $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 + # Different hash, errors. + $(RUSTC) e2.rs -o $(TMPDIR)/e2/libe.rlib + $(RUSTC) f.rs -L $(TMPDIR)/e1 -L $(TMPDIR)/e2 && exit 1 || exit 0 + $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L $(TMPDIR)/e2 && exit 1 || exit 0 + $(RUSTC) f.rs -L crate=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 && exit 1 || exit 0 + # Native/dependency paths don't cause errors. + $(RUSTC) f.rs -L native=$(TMPDIR)/e1 -L $(TMPDIR)/e2 + $(RUSTC) f.rs -L dependency=$(TMPDIR)/e1 -L $(TMPDIR)/e2 + $(RUSTC) f.rs -L dependency=$(TMPDIR)/e1 -L crate=$(TMPDIR)/e2 diff --git a/tests/run-make/compiler-lookup-paths/a.rs b/tests/run-make/compiler-lookup-paths/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..83be6e807e0b9bc42f55f3df77db7a1e99b3d93c --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/a.rs @@ -0,0 +1 @@ +#![crate_type = "lib"] diff --git a/tests/run-make/compiler-lookup-paths/b.rs b/tests/run-make/compiler-lookup-paths/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..1be6cbc919d0d6fd7992edd1948545e9b931ac69 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/b.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +extern crate a; diff --git a/tests/run-make/compiler-lookup-paths/c.rs b/tests/run-make/compiler-lookup-paths/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..4c7ce01b6a02c7a4ad8bf335d5c408c522bd3ec4 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/c.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +extern crate b; diff --git a/tests/run-make/compiler-lookup-paths/d.rs b/tests/run-make/compiler-lookup-paths/d.rs new file mode 100644 index 0000000000000000000000000000000000000000..6cd9916b6f69d5c1a4d2d4b585f70aaf4a41a140 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/d.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] + +#[link(name = "native", kind = "static")] +extern "C" {} diff --git a/tests/run-make/compiler-lookup-paths/e.rs b/tests/run-make/compiler-lookup-paths/e.rs new file mode 100644 index 0000000000000000000000000000000000000000..18eb60aca97d2b0b4b348f3e46395f383c55b5bf --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/e.rs @@ -0,0 +1,2 @@ +#![crate_name = "e"] +#![crate_type = "rlib"] diff --git a/tests/run-make/compiler-lookup-paths/e2.rs b/tests/run-make/compiler-lookup-paths/e2.rs new file mode 100644 index 0000000000000000000000000000000000000000..cbf08b98e7ea15704d2db29e14cede4a0e82f60f --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/e2.rs @@ -0,0 +1,4 @@ +#![crate_name = "e"] +#![crate_type = "rlib"] + +pub fn f() {} diff --git a/tests/run-make/compiler-lookup-paths/f.rs b/tests/run-make/compiler-lookup-paths/f.rs new file mode 100644 index 0000000000000000000000000000000000000000..483deaaea4927d131c3a4c52e0c57e8aa83e191f --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/f.rs @@ -0,0 +1,2 @@ +#![crate_type = "rlib"] +extern crate e; diff --git a/tests/run-make/compiler-lookup-paths/native.c b/tests/run-make/compiler-lookup-paths/native.c new file mode 100644 index 0000000000000000000000000000000000000000..d11c69f812a8dfe9ea3db2474363c188c096c5b3 --- /dev/null +++ b/tests/run-make/compiler-lookup-paths/native.c @@ -0,0 +1 @@ +// intentionally empty diff --git a/tests/run-make/compiler-rt-works-on-mingw/Makefile b/tests/run-make/compiler-rt-works-on-mingw/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..74917570a01425bd1790e766a1e215b25cb3e47b --- /dev/null +++ b/tests/run-make/compiler-rt-works-on-mingw/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# only-windows-gnu + +all: + $(CXX) foo.cpp -c -o $(TMPDIR)/foo.o + $(AR) crus $(TMPDIR)/libfoo.a $(TMPDIR)/foo.o + $(RUSTC) foo.rs -lfoo -lstdc++ + $(call RUN,foo) diff --git a/tests/run-make/compiler-rt-works-on-mingw/foo.cpp b/tests/run-make/compiler-rt-works-on-mingw/foo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4c2fb9cdb8782b69d62487cd9f27db134cf2592f --- /dev/null +++ b/tests/run-make/compiler-rt-works-on-mingw/foo.cpp @@ -0,0 +1,4 @@ +extern "C" void foo() { + int *a = new int(3); + delete a; +} diff --git a/tests/run-make/compiler-rt-works-on-mingw/foo.rs b/tests/run-make/compiler-rt-works-on-mingw/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..7fdb815887118bce354981132c94de3d3283d71a --- /dev/null +++ b/tests/run-make/compiler-rt-works-on-mingw/foo.rs @@ -0,0 +1,10 @@ +extern "C" { + fn foo(); +} + +pub fn main() { + unsafe { + foo(); + } + assert_eq!(7f32.powi(3), 343f32); +} diff --git a/tests/run-make/const_fn_mir/Makefile b/tests/run-make/const_fn_mir/Makefile index ad5695093a1a21c3773d7d91490c97f8e5e07348..b2c268f04396c6497b157839bca1cb75b2b1f4f0 100644 --- a/tests/run-make/const_fn_mir/Makefile +++ b/tests/run-make/const_fn_mir/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) main.rs --emit=mir -o "$(TMPDIR)"/dump.mir diff --git a/tests/run-make/core-no-fp-fmt-parse/Makefile b/tests/run-make/core-no-fp-fmt-parse/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..837664d92b93842daf3707f07427cc641c77c41c --- /dev/null +++ b/tests/run-make/core-no-fp-fmt-parse/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) --edition=2021 -Dwarnings --crate-type=rlib ../../../library/core/src/lib.rs --cfg no_fp_fmt_parse diff --git a/tests/run-make/coverage/coverage_tools.mk b/tests/run-make/coverage/coverage_tools.mk index 0b6bbc33167c1315798170103b485cf10c79f7db..028c020a461d07cf7ea1a68c4e0d7b0534aba636 100644 --- a/tests/run-make/coverage/coverage_tools.mk +++ b/tests/run-make/coverage/coverage_tools.mk @@ -3,4 +3,4 @@ # # include ../coverage/coverage_tools.mk -include ../../run-make-fulldeps/tools.mk +include ../tools.mk diff --git a/tests/run-make/crate-data-smoke/Makefile b/tests/run-make/crate-data-smoke/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a453f65ff3ea24646f76f96f58fd015890e386e1 --- /dev/null +++ b/tests/run-make/crate-data-smoke/Makefile @@ -0,0 +1,10 @@ +include ../tools.mk + +all: + [ `$(RUSTC) --print crate-name crate.rs` = "foo" ] + [ `$(RUSTC) --print file-names crate.rs` = "$(call BIN,foo)" ] + [ `$(RUSTC) --print file-names --crate-type=lib \ + --test crate.rs` = "$(call BIN,foo)" ] + [ `$(RUSTC) --print file-names --test lib.rs` = "$(call BIN,mylib)" ] + $(RUSTC) --print file-names lib.rs + $(RUSTC) --print file-names rlib.rs diff --git a/tests/run-make/crate-data-smoke/crate.rs b/tests/run-make/crate-data-smoke/crate.rs new file mode 100644 index 0000000000000000000000000000000000000000..a48a6f51c423466c7018c7af294cb19bdcf1b246 --- /dev/null +++ b/tests/run-make/crate-data-smoke/crate.rs @@ -0,0 +1,7 @@ +#![crate_name = "foo"] + +// Querying about the crate metadata should *not* parse the entire crate, it +// only needs the crate attributes (which are guaranteed to be at the top) be +// sure that if we have an error like a missing module that we can still query +// about the crate id. +mod error; diff --git a/tests/run-make/crate-data-smoke/lib.rs b/tests/run-make/crate-data-smoke/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..8002f11ec871ba8d82eb650b3ac7bd1c8bdca78e --- /dev/null +++ b/tests/run-make/crate-data-smoke/lib.rs @@ -0,0 +1,2 @@ +#![crate_name = "mylib"] +#![crate_type = "lib"] diff --git a/tests/run-make/crate-data-smoke/rlib.rs b/tests/run-make/crate-data-smoke/rlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..47fcce4a7f67c176a4ca25c73583b38f016ed28f --- /dev/null +++ b/tests/run-make/crate-data-smoke/rlib.rs @@ -0,0 +1,2 @@ +#![crate_name = "mylib"] +#![crate_type = "rlib"] diff --git a/tests/run-make/crate-hash-rustc-version/Makefile b/tests/run-make/crate-hash-rustc-version/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f1d2a3604104508c87293f8bec81bd618fa20c53 --- /dev/null +++ b/tests/run-make/crate-hash-rustc-version/Makefile @@ -0,0 +1,38 @@ +# ignore-cross-compile +include ../tools.mk + +# Ensure that crates compiled with different rustc versions cannot +# be dynamically linked. + +FLAGS := -Cprefer-dynamic -Zsymbol-mangling-version=v0 +UNAME := $(shell uname) +ifeq ($(UNAME),Linux) + EXT=".so" + NM_CMD := nm -D +endif +ifeq ($(UNAME),Darwin) + EXT=".dylib" + NM_CMD := nm +endif + +ifndef NM_CMD +all: + exit 0 +else +all: + # a.rs is a dylib + $(RUSTC) a.rs --crate-type=dylib $(FLAGS) + # Write symbols to disk. + $(NM_CMD) $(call DYLIB,a) > $(TMPDIR)/symbolsbefore + # b.rs is a binary + $(RUSTC) b.rs --extern a=$(TMPDIR)/liba$(EXT) --crate-type=bin -Crpath $(FLAGS) + $(call RUN,b) + # Now re-compile a.rs with another rustc version + RUSTC_FORCE_RUSTC_VERSION=deadfeed $(RUSTC) a.rs --crate-type=dylib $(FLAGS) + # After compiling with a different rustc version, write symbols to disk again. + $(NM_CMD) $(call DYLIB,a) > $(TMPDIR)/symbolsafter + # As a sanity check, test if the symbols changed: + # If the symbols are identical, there's been an error. + if diff $(TMPDIR)/symbolsbefore $(TMPDIR)/symbolsafter; then exit 1; fi + $(call FAIL,b) +endif diff --git a/tests/run-make/crate-hash-rustc-version/a.rs b/tests/run-make/crate-hash-rustc-version/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..d65b5ce8e88316052d5847e7bae8e2cbb8253ebb --- /dev/null +++ b/tests/run-make/crate-hash-rustc-version/a.rs @@ -0,0 +1,4 @@ +pub fn foo(mut x: String) -> String { + x.push_str(", world!"); + x +} diff --git a/tests/run-make/crate-hash-rustc-version/b.rs b/tests/run-make/crate-hash-rustc-version/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..316ac26e73fa2fefa2e953fb9b1a4310285bf6ce --- /dev/null +++ b/tests/run-make/crate-hash-rustc-version/b.rs @@ -0,0 +1,8 @@ +extern crate a; + +use a::foo; + +fn main() { + let x = String::from("Hello"); + println!("{}", foo(x)); +} diff --git a/tests/run-make/crate-name-priority/Makefile b/tests/run-make/crate-name-priority/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4adaa75a71cf678a264bf39bf691bca07f0fd058 --- /dev/null +++ b/tests/run-make/crate-name-priority/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --crate-name bar + rm $(TMPDIR)/$(call BIN,bar) + $(RUSTC) foo1.rs + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo1.rs -o $(TMPDIR)/$(call BIN,bar1) + rm $(TMPDIR)/$(call BIN,bar1) diff --git a/tests/run-make/crate-name-priority/foo.rs b/tests/run-make/crate-name-priority/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/crate-name-priority/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/crate-name-priority/foo1.rs b/tests/run-make/crate-name-priority/foo1.rs new file mode 100644 index 0000000000000000000000000000000000000000..4ff3bd9516bd90de187b1ed7d4f1ac5ffb72cd5c --- /dev/null +++ b/tests/run-make/crate-name-priority/foo1.rs @@ -0,0 +1,3 @@ +#![crate_name = "foo"] + +fn main() {} diff --git a/tests/run-make/cross-lang-lto-clang/Makefile b/tests/run-make/cross-lang-lto-clang/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..acaebf439d65b5497f553772b8cadeb1ae955f5d --- /dev/null +++ b/tests/run-make/cross-lang-lto-clang/Makefile @@ -0,0 +1,25 @@ +# needs-matching-clang + +# This test makes sure that cross-language inlining actually works by checking +# the generated machine code. + +include ../tools.mk + +all: cpp-executable rust-executable + +cpp-executable: + $(RUSTC) -Clinker-plugin-lto=on -o $(TMPDIR)/librustlib-xlto.a -Copt-level=2 -Ccodegen-units=1 ./rustlib.rs + $(CLANG) -flto=thin -fuse-ld=lld -L $(TMPDIR) -lrustlib-xlto -o $(TMPDIR)/cmain ./cmain.c -O3 + # Make sure we don't find a call instruction to the function we expect to + # always be inlined. + "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/cmain | $(CGREP) -v -e "call.*rust_always_inlined" + # As a sanity check, make sure we do find a call instruction to a + # non-inlined function + "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/cmain | $(CGREP) -e "call.*rust_never_inlined" + +rust-executable: + $(CLANG) ./clib.c -flto=thin -c -o $(TMPDIR)/clib.o -O2 + (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) + $(RUSTC) -Clinker-plugin-lto=on -L$(TMPDIR) -Copt-level=2 -Clinker=$(CLANG) -Clink-arg=-fuse-ld=lld ./main.rs -o $(TMPDIR)/rsmain + "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -e "call.*c_never_inlined" + "$(LLVM_BIN_DIR)"/llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -v -e "call.*c_always_inlined" diff --git a/tests/run-make/cross-lang-lto-clang/clib.c b/tests/run-make/cross-lang-lto-clang/clib.c new file mode 100644 index 0000000000000000000000000000000000000000..90f33f24dc42425b38b394c08354c4ef3ecd9d9a --- /dev/null +++ b/tests/run-make/cross-lang-lto-clang/clib.c @@ -0,0 +1,9 @@ +#include + +uint32_t c_always_inlined() { + return 1234; +} + +__attribute__((noinline)) uint32_t c_never_inlined() { + return 12345; +} diff --git a/tests/run-make/cross-lang-lto-clang/cmain.c b/tests/run-make/cross-lang-lto-clang/cmain.c new file mode 100644 index 0000000000000000000000000000000000000000..e62a40117ce83a036da2becf0e4e3b55dc6ab2d9 --- /dev/null +++ b/tests/run-make/cross-lang-lto-clang/cmain.c @@ -0,0 +1,12 @@ +#include + +// A trivial function defined in Rust, returning a constant value. This should +// always be inlined. +uint32_t rust_always_inlined(); + + +uint32_t rust_never_inlined(); + +int main(int argc, char** argv) { + return rust_never_inlined() + rust_always_inlined(); +} diff --git a/tests/run-make/cross-lang-lto-clang/main.rs b/tests/run-make/cross-lang-lto-clang/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..8129dcb85d96a0442f390f86a63154f3ff580377 --- /dev/null +++ b/tests/run-make/cross-lang-lto-clang/main.rs @@ -0,0 +1,11 @@ +#[link(name = "xyz")] +extern "C" { + fn c_always_inlined() -> u32; + fn c_never_inlined() -> u32; +} + +fn main() { + unsafe { + println!("blub: {}", c_always_inlined() + c_never_inlined()); + } +} diff --git a/tests/run-make/cross-lang-lto-clang/rustlib.rs b/tests/run-make/cross-lang-lto-clang/rustlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..8a74d74a420bd556056268d427ca26493d02f447 --- /dev/null +++ b/tests/run-make/cross-lang-lto-clang/rustlib.rs @@ -0,0 +1,12 @@ +#![crate_type="staticlib"] + +#[no_mangle] +pub extern "C" fn rust_always_inlined() -> u32 { + 42 +} + +#[no_mangle] +#[inline(never)] +pub extern "C" fn rust_never_inlined() -> u32 { + 421 +} diff --git a/tests/run-make/cross-lang-lto-pgo-smoketest/Makefile b/tests/run-make/cross-lang-lto-pgo-smoketest/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..70085d9bde1d9a3e1c0422a0f0f9e246e5763af5 --- /dev/null +++ b/tests/run-make/cross-lang-lto-pgo-smoketest/Makefile @@ -0,0 +1,87 @@ +# needs-matching-clang + +# This test makes sure that cross-language inlining can be used in conjunction +# with profile-guided optimization. The test only tests that the whole workflow +# can be executed without anything crashing. It does not test whether PGO or +# xLTO have any specific effect on the generated code. + +include ../tools.mk + +COMMON_FLAGS=-Copt-level=3 -Ccodegen-units=1 + +# LLVM doesn't support instrumenting binaries that use SEH: +# https://bugs.llvm.org/show_bug.cgi?id=41279 +# +# Things work fine with -Cpanic=abort though. +ifdef IS_MSVC +COMMON_FLAGS+= -Cpanic=abort +endif + +all: cpp-executable rust-executable + +cpp-executable: + $(RUSTC) -Clinker-plugin-lto=on \ + -Cprofile-generate="$(TMPDIR)"/cpp-profdata \ + -o "$(TMPDIR)"/librustlib-xlto.a \ + $(COMMON_FLAGS) \ + ./rustlib.rs + $(CLANG) -flto=thin \ + -fprofile-generate="$(TMPDIR)"/cpp-profdata \ + -fuse-ld=lld \ + -L "$(TMPDIR)" \ + -lrustlib-xlto \ + -o "$(TMPDIR)"/cmain \ + -O3 \ + ./cmain.c + $(TMPDIR)/cmain + # Postprocess the profiling data so it can be used by the compiler + "$(LLVM_BIN_DIR)"/llvm-profdata merge \ + -o "$(TMPDIR)"/cpp-profdata/merged.profdata \ + "$(TMPDIR)"/cpp-profdata/default_*.profraw + $(RUSTC) -Clinker-plugin-lto=on \ + -Cprofile-use="$(TMPDIR)"/cpp-profdata/merged.profdata \ + -o "$(TMPDIR)"/librustlib-xlto.a \ + $(COMMON_FLAGS) \ + ./rustlib.rs + $(CLANG) -flto=thin \ + -fprofile-use="$(TMPDIR)"/cpp-profdata/merged.profdata \ + -fuse-ld=lld \ + -L "$(TMPDIR)" \ + -lrustlib-xlto \ + -o "$(TMPDIR)"/cmain \ + -O3 \ + ./cmain.c + +rust-executable: + exit + $(CLANG) ./clib.c -fprofile-generate="$(TMPDIR)"/rs-profdata -flto=thin -c -o $(TMPDIR)/clib.o -O3 + (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) + $(RUSTC) -Clinker-plugin-lto=on \ + -Cprofile-generate="$(TMPDIR)"/rs-profdata \ + -L$(TMPDIR) \ + $(COMMON_FLAGS) \ + -Clinker=$(CLANG) \ + -Clink-arg=-fuse-ld=lld \ + -o $(TMPDIR)/rsmain \ + ./main.rs + $(TMPDIR)/rsmain + # Postprocess the profiling data so it can be used by the compiler + "$(LLVM_BIN_DIR)"/llvm-profdata merge \ + -o "$(TMPDIR)"/rs-profdata/merged.profdata \ + "$(TMPDIR)"/rs-profdata/default_*.profraw + $(CLANG) ./clib.c \ + -fprofile-use="$(TMPDIR)"/rs-profdata/merged.profdata \ + -flto=thin \ + -c \ + -o $(TMPDIR)/clib.o \ + -O3 + rm "$(TMPDIR)"/libxyz.a + (cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o) + $(RUSTC) -Clinker-plugin-lto=on \ + -Cprofile-use="$(TMPDIR)"/rs-profdata/merged.profdata \ + -L$(TMPDIR) \ + $(COMMON_FLAGS) \ + -Clinker=$(CLANG) \ + -Clink-arg=-fuse-ld=lld \ + -o $(TMPDIR)/rsmain \ + ./main.rs diff --git a/tests/run-make/cross-lang-lto-pgo-smoketest/clib.c b/tests/run-make/cross-lang-lto-pgo-smoketest/clib.c new file mode 100644 index 0000000000000000000000000000000000000000..90f33f24dc42425b38b394c08354c4ef3ecd9d9a --- /dev/null +++ b/tests/run-make/cross-lang-lto-pgo-smoketest/clib.c @@ -0,0 +1,9 @@ +#include + +uint32_t c_always_inlined() { + return 1234; +} + +__attribute__((noinline)) uint32_t c_never_inlined() { + return 12345; +} diff --git a/tests/run-make/cross-lang-lto-pgo-smoketest/cmain.c b/tests/run-make/cross-lang-lto-pgo-smoketest/cmain.c new file mode 100644 index 0000000000000000000000000000000000000000..e3f24828be371c3828bece6ed9ad0b58715be781 --- /dev/null +++ b/tests/run-make/cross-lang-lto-pgo-smoketest/cmain.c @@ -0,0 +1,12 @@ +#include + +// A trivial function defined in Rust, returning a constant value. This should +// always be inlined. +uint32_t rust_always_inlined(); + + +uint32_t rust_never_inlined(); + +int main(int argc, char** argv) { + return (rust_never_inlined() + rust_always_inlined()) * 0; +} diff --git a/tests/run-make/cross-lang-lto-pgo-smoketest/main.rs b/tests/run-make/cross-lang-lto-pgo-smoketest/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..8129dcb85d96a0442f390f86a63154f3ff580377 --- /dev/null +++ b/tests/run-make/cross-lang-lto-pgo-smoketest/main.rs @@ -0,0 +1,11 @@ +#[link(name = "xyz")] +extern "C" { + fn c_always_inlined() -> u32; + fn c_never_inlined() -> u32; +} + +fn main() { + unsafe { + println!("blub: {}", c_always_inlined() + c_never_inlined()); + } +} diff --git a/tests/run-make/cross-lang-lto-pgo-smoketest/rustlib.rs b/tests/run-make/cross-lang-lto-pgo-smoketest/rustlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..8a74d74a420bd556056268d427ca26493d02f447 --- /dev/null +++ b/tests/run-make/cross-lang-lto-pgo-smoketest/rustlib.rs @@ -0,0 +1,12 @@ +#![crate_type="staticlib"] + +#[no_mangle] +pub extern "C" fn rust_always_inlined() -> u32 { + 42 +} + +#[no_mangle] +#[inline(never)] +pub extern "C" fn rust_never_inlined() -> u32 { + 421 +} diff --git a/tests/run-make/cross-lang-lto-upstream-rlibs/Makefile b/tests/run-make/cross-lang-lto-upstream-rlibs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6f1caa31a8061a5d7455b22b6764b67c36674da6 --- /dev/null +++ b/tests/run-make/cross-lang-lto-upstream-rlibs/Makefile @@ -0,0 +1,32 @@ +include ../tools.mk + +# ignore windows due to libLLVM being present in PATH and the PATH and library path being the same +# (so fixing it is harder). See #57765 for context +ifndef IS_WINDOWS + +# This test makes sure that we don't loose upstream object files when compiling +# staticlibs with -C linker-plugin-lto + +all: staticlib.rs upstream.rs + $(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1 + + # Check No LTO + $(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -L. -o $(TMPDIR)/staticlib.a + (cd $(TMPDIR); "$(LLVM_BIN_DIR)"/llvm-ar x ./staticlib.a) + # Make sure the upstream object file was included + ls $(TMPDIR)/upstream.*.rcgu.o + + # Cleanup + rm $(TMPDIR)/* + + # Check ThinLTO + $(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin + $(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin -L. -o $(TMPDIR)/staticlib.a + (cd $(TMPDIR); "$(LLVM_BIN_DIR)"/llvm-ar x ./staticlib.a) + ls $(TMPDIR)/upstream.*.rcgu.o + +else + +all: + +endif diff --git a/tests/run-make/cross-lang-lto-upstream-rlibs/staticlib.rs b/tests/run-make/cross-lang-lto-upstream-rlibs/staticlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..34951dda3b6ec0236d96b401aba1d20850331ff9 --- /dev/null +++ b/tests/run-make/cross-lang-lto-upstream-rlibs/staticlib.rs @@ -0,0 +1,8 @@ +#![crate_type="staticlib"] + +extern crate upstream; + +#[no_mangle] +pub extern "C" fn bar() { + upstream::foo(); +} diff --git a/tests/run-make/cross-lang-lto-upstream-rlibs/upstream.rs b/tests/run-make/cross-lang-lto-upstream-rlibs/upstream.rs new file mode 100644 index 0000000000000000000000000000000000000000..bd6820098eea436cb272676f18774e67d5ea4ecb --- /dev/null +++ b/tests/run-make/cross-lang-lto-upstream-rlibs/upstream.rs @@ -0,0 +1,3 @@ +#![crate_type = "rlib"] + +pub fn foo() {} diff --git a/tests/run-make/cross-lang-lto/Makefile b/tests/run-make/cross-lang-lto/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..92058f952a9fcaeaf509d60dea1fa7c88c665da6 --- /dev/null +++ b/tests/run-make/cross-lang-lto/Makefile @@ -0,0 +1,57 @@ + +include ../tools.mk + +# ignore windows due to libLLVM being present in PATH and the PATH and library path being the same +# (so fixing it is harder). See #57765 for context +ifndef IS_WINDOWS + +# This test makes sure that the object files we generate are actually +# LLVM bitcode files (as used by linker LTO plugins) when compiling with +# -Clinker-plugin-lto. + +# this only succeeds for bitcode files +ASSERT_IS_BITCODE_OBJ=("$(LLVM_BIN_DIR)"/llvm-bcanalyzer $(1)) +EXTRACT_OBJS=(cd $(TMPDIR); rm -f ./*.o; "$(LLVM_BIN_DIR)"/llvm-ar x $(1)) + +BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1 +BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1 --emit=obj + +all: staticlib staticlib-fat-lto staticlib-thin-lto rlib exe cdylib rdylib + +staticlib: lib.rs + $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib.a + $(call EXTRACT_OBJS, liblib.a) + for file in $(TMPDIR)/liblib.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done + +staticlib-fat-lto: lib.rs + $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-fat-lto.a -Clto=fat + $(call EXTRACT_OBJS, liblib-fat-lto.a) + for file in $(TMPDIR)/liblib-fat-lto.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done + +staticlib-thin-lto: lib.rs + $(BUILD_LIB) --crate-type=staticlib -o $(TMPDIR)/liblib-thin-lto.a -Clto=thin + $(call EXTRACT_OBJS, liblib-thin-lto.a) + for file in $(TMPDIR)/liblib-thin-lto.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done + +rlib: lib.rs + $(BUILD_LIB) --crate-type=rlib -o $(TMPDIR)/liblib.rlib + $(call EXTRACT_OBJS, liblib.rlib) + for file in $(TMPDIR)/liblib.*.rcgu.o; do $(call ASSERT_IS_BITCODE_OBJ, $$file); done + +cdylib: lib.rs + $(BUILD_LIB) --crate-type=cdylib --emit=obj -o $(TMPDIR)/cdylib.o + $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/cdylib.o) + +rdylib: lib.rs + $(BUILD_LIB) --crate-type=dylib --emit=obj -o $(TMPDIR)/rdylib.o + $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/rdylib.o) + +exe: lib.rs + $(BUILD_EXE) -o $(TMPDIR)/exe.o + $(call ASSERT_IS_BITCODE_OBJ, $(TMPDIR)/exe.o) + +else + +all: + +endif diff --git a/tests/run-make/cross-lang-lto/lib.rs b/tests/run-make/cross-lang-lto/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..94cfef6ada521c91aae49b732a80c174cfc46580 --- /dev/null +++ b/tests/run-make/cross-lang-lto/lib.rs @@ -0,0 +1,4 @@ +#[no_mangle] +pub extern "C" fn foo() { + println!("abc"); +} diff --git a/tests/run-make/cross-lang-lto/main.rs b/tests/run-make/cross-lang-lto/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..f6320bcb04aa8f747f266e1105886837414fd921 --- /dev/null +++ b/tests/run-make/cross-lang-lto/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World"); +} diff --git a/tests/run-make/debug-assertions/Makefile b/tests/run-make/debug-assertions/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e83337c597f5b2e4c6a66c9d2106d21ab0f7ccfc --- /dev/null +++ b/tests/run-make/debug-assertions/Makefile @@ -0,0 +1,26 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) debug.rs -C debug-assertions=no + $(call RUN,debug) good + $(RUSTC) debug.rs -C opt-level=0 + $(call RUN,debug) bad + $(RUSTC) debug.rs -C opt-level=1 + $(call RUN,debug) good + $(RUSTC) debug.rs -C opt-level=2 + $(call RUN,debug) good + $(RUSTC) debug.rs -C opt-level=3 + $(call RUN,debug) good + $(RUSTC) debug.rs -C opt-level=s + $(call RUN,debug) good + $(RUSTC) debug.rs -C opt-level=z + $(call RUN,debug) good + $(RUSTC) debug.rs -O + $(call RUN,debug) good + $(RUSTC) debug.rs + $(call RUN,debug) bad + $(RUSTC) debug.rs -C debug-assertions=yes -O + $(call RUN,debug) bad + $(RUSTC) debug.rs -C debug-assertions=yes -C opt-level=1 + $(call RUN,debug) bad diff --git a/tests/run-make/debug-assertions/debug.rs b/tests/run-make/debug-assertions/debug.rs new file mode 100644 index 0000000000000000000000000000000000000000..76ca60a71c8853e03c23809c15c5a59699c201e4 --- /dev/null +++ b/tests/run-make/debug-assertions/debug.rs @@ -0,0 +1,33 @@ +#![feature(rustc_attrs)] +#![deny(warnings)] + +use std::env; +use std::thread; + +fn main() { + let should_fail = env::args().nth(1) == Some("bad".to_string()); + + assert_eq!(thread::spawn(debug_assert_eq).join().is_err(), should_fail); + assert_eq!(thread::spawn(debug_assert).join().is_err(), should_fail); + assert_eq!(thread::spawn(overflow).join().is_err(), should_fail); +} + +fn debug_assert_eq() { + let mut hit1 = false; + let mut hit2 = false; + debug_assert_eq!({ hit1 = true; 1 }, { hit2 = true; 2 }); + assert!(!hit1); + assert!(!hit2); +} + +fn debug_assert() { + let mut hit = false; + debug_assert!({ hit = true; false }); + assert!(!hit); +} + +fn overflow() { + fn add(a: u8, b: u8) -> u8 { a + b } + + add(200u8, 200u8); +} diff --git a/tests/run-make/dep-graph/Makefile b/tests/run-make/dep-graph/Makefile index ae97b1672ae27cbed473a65d6368c93722f02ac2..d06333f4454b08b5c60647220dfd0eba3dfe9de1 100644 --- a/tests/run-make/dep-graph/Makefile +++ b/tests/run-make/dep-graph/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-cross-compile diff --git a/tests/run-make/dep-info-doesnt-run-much/Makefile b/tests/run-make/dep-info-doesnt-run-much/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b4dc44ad2be84bb0ca45684a418fcf36fdd05a56 --- /dev/null +++ b/tests/run-make/dep-info-doesnt-run-much/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) foo.rs --emit dep-info diff --git a/tests/run-make/dep-info-doesnt-run-much/foo.rs b/tests/run-make/dep-info-doesnt-run-much/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..316e681293efdf376b6925c2a31e33d791ebff3b --- /dev/null +++ b/tests/run-make/dep-info-doesnt-run-much/foo.rs @@ -0,0 +1,5 @@ +// We're only emitting dep info, so we shouldn't be running static analysis to +// figure out that this program is erroneous. +fn main() { + let a: u8 = "a"; +} diff --git a/tests/run-make/dep-info-spaces/Makefile b/tests/run-make/dep-info-spaces/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0cfe513e490a78c73c6b9e20473b9430a19cac65 --- /dev/null +++ b/tests/run-make/dep-info-spaces/Makefile @@ -0,0 +1,19 @@ +include ../tools.mk + +# ignore-windows +# ignore-freebsd +# FIXME: (windows: see `../dep-info/Makefile`) + +all: + cp lib.rs $(TMPDIR)/ + cp 'foo foo.rs' $(TMPDIR)/ + cp bar.rs $(TMPDIR)/ + $(RUSTC) --emit link,dep-info --crate-type=lib $(TMPDIR)/lib.rs + sleep 1 + touch $(TMPDIR)/'foo foo.rs' + -rm -f $(TMPDIR)/done + $(MAKE) -drf Makefile.foo + rm $(TMPDIR)/done + pwd + $(MAKE) -drf Makefile.foo + rm $(TMPDIR)/done && exit 1 || exit 0 diff --git a/tests/run-make/dep-info-spaces/Makefile.foo b/tests/run-make/dep-info-spaces/Makefile.foo new file mode 100644 index 0000000000000000000000000000000000000000..80a5d4333cdc22f4d4766c3a0a0291c232b6d55a --- /dev/null +++ b/tests/run-make/dep-info-spaces/Makefile.foo @@ -0,0 +1,7 @@ +LIB := $(shell $(RUSTC) --print file-names --crate-type=lib $(TMPDIR)/lib.rs) + +$(TMPDIR)/$(LIB): + $(RUSTC) --emit link,dep-info --crate-type=lib $(TMPDIR)/lib.rs + touch $(TMPDIR)/done + +-include $(TMPDIR)/lib.d diff --git a/tests/run-make/dep-info-spaces/bar.rs b/tests/run-make/dep-info-spaces/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/dep-info-spaces/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/dep-info-spaces/foo foo.rs b/tests/run-make/dep-info-spaces/foo foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b76b4321d62aa8e066b24d213c79ccc8230b8d7b --- /dev/null +++ b/tests/run-make/dep-info-spaces/foo foo.rs @@ -0,0 +1 @@ +pub fn foo() {} diff --git a/tests/run-make/dep-info-spaces/lib.rs b/tests/run-make/dep-info-spaces/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..6264e7b67ec6d7033092b48c40663c8536c3be9b --- /dev/null +++ b/tests/run-make/dep-info-spaces/lib.rs @@ -0,0 +1,4 @@ +#[path="foo foo.rs"] +pub mod foo; + +pub mod bar; diff --git a/tests/run-make/dep-info/Makefile b/tests/run-make/dep-info/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c76f43a8eed5143fae1e08994dead7703e2c4cd0 --- /dev/null +++ b/tests/run-make/dep-info/Makefile @@ -0,0 +1,25 @@ +include ../tools.mk + +# ignore-windows +# ignore-freebsd +# FIXME: on windows `rustc --dep-info` produces Makefile dependency with +# windows native paths (e.g. `c:\path\to\libfoo.a`) +# but msys make seems to fail to recognize such paths, so test fails. + +all: + cp *.rs $(TMPDIR) + $(RUSTC) --emit dep-info,link --crate-type=lib $(TMPDIR)/lib.rs + sleep 2 + touch $(TMPDIR)/foo.rs + -rm -f $(TMPDIR)/done + $(MAKE) -drf Makefile.foo + sleep 2 + rm $(TMPDIR)/done + pwd + $(MAKE) -drf Makefile.foo + rm $(TMPDIR)/done && exit 1 || exit 0 + + # When a source file is deleted `make` should still work + rm $(TMPDIR)/bar.rs + cp $(TMPDIR)/lib2.rs $(TMPDIR)/lib.rs + $(MAKE) -drf Makefile.foo diff --git a/tests/run-make/dep-info/Makefile.foo b/tests/run-make/dep-info/Makefile.foo new file mode 100644 index 0000000000000000000000000000000000000000..e5df31f88c1e155a452f0baa34733870d8e7fdc1 --- /dev/null +++ b/tests/run-make/dep-info/Makefile.foo @@ -0,0 +1,7 @@ +LIB := $(shell $(RUSTC) --print file-names --crate-type=lib lib.rs) + +$(TMPDIR)/$(LIB): + $(RUSTC) --emit dep-info,link --crate-type=lib lib.rs + touch $(TMPDIR)/done + +-include $(TMPDIR)/foo.d diff --git a/tests/run-make/dep-info/bar.rs b/tests/run-make/dep-info/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/dep-info/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/dep-info/foo.rs b/tests/run-make/dep-info/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b76b4321d62aa8e066b24d213c79ccc8230b8d7b --- /dev/null +++ b/tests/run-make/dep-info/foo.rs @@ -0,0 +1 @@ +pub fn foo() {} diff --git a/tests/run-make/dep-info/lib.rs b/tests/run-make/dep-info/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..eb8631259d43d4e5828b91c7349e0e22986a4a92 --- /dev/null +++ b/tests/run-make/dep-info/lib.rs @@ -0,0 +1,4 @@ +#![crate_name = "foo"] + +pub mod foo; +pub mod bar; diff --git a/tests/run-make/dep-info/lib2.rs b/tests/run-make/dep-info/lib2.rs new file mode 100644 index 0000000000000000000000000000000000000000..f4fda9c93c5ffdf1c0251e3180751d9c964afca2 --- /dev/null +++ b/tests/run-make/dep-info/lib2.rs @@ -0,0 +1,3 @@ +#![crate_name = "foo"] + +pub mod foo; diff --git a/tests/run-make/doctests-keep-binaries/Makefile b/tests/run-make/doctests-keep-binaries/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6254e93d3334f7c5986bcb2c808a56108256fe24 --- /dev/null +++ b/tests/run-make/doctests-keep-binaries/Makefile @@ -0,0 +1,22 @@ +# ignore-cross-compile +include ../tools.mk + +# Check that valid binaries are persisted by running them, regardless of whether the --run or --no-run option is used. + +all: run no_run + +run: + mkdir -p $(TMPDIR)/doctests + $(RUSTC) --crate-type rlib t.rs + $(RUSTDOC) -Zunstable-options --test --persist-doctests $(TMPDIR)/doctests --extern t=$(TMPDIR)/libt.rlib t.rs + $(TMPDIR)/doctests/t_rs_2_0/rust_out + $(TMPDIR)/doctests/t_rs_8_0/rust_out + rm -rf $(TMPDIR)/doctests + +no_run: + mkdir -p $(TMPDIR)/doctests + $(RUSTC) --crate-type rlib t.rs + $(RUSTDOC) -Zunstable-options --test --persist-doctests $(TMPDIR)/doctests --extern t=$(TMPDIR)/libt.rlib t.rs --no-run + $(TMPDIR)/doctests/t_rs_2_0/rust_out + $(TMPDIR)/doctests/t_rs_8_0/rust_out + rm -rf $(TMPDIR)/doctests diff --git a/tests/run-make/doctests-keep-binaries/t.rs b/tests/run-make/doctests-keep-binaries/t.rs new file mode 100644 index 0000000000000000000000000000000000000000..c38cf0a0b25d4020b3a61cb10e759846c2dc2d24 --- /dev/null +++ b/tests/run-make/doctests-keep-binaries/t.rs @@ -0,0 +1,11 @@ +/// Fungle the foople. +/// ``` +/// t::foople(); +/// ``` +pub fn foople() {} + +/// Flomble the florp +/// ``` +/// t::florp(); +/// ``` +pub fn florp() {} diff --git a/tests/run-make/dump-mono-stats/Makefile b/tests/run-make/dump-mono-stats/Makefile index fe1112fb0a4a8463827cb7cb2e3e9ebbf30cc80b..196f84be6ecaaec1fd24dc4323c3042bc16afe81 100644 --- a/tests/run-make/dump-mono-stats/Makefile +++ b/tests/run-make/dump-mono-stats/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type lib foo.rs -Z dump-mono-stats=$(TMPDIR) -Zdump-mono-stats-format=json diff --git a/tests/run-make/duplicate-output-flavors/Makefile b/tests/run-make/duplicate-output-flavors/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e33279966c97187be0c905c72e015b60c66345ce --- /dev/null +++ b/tests/run-make/duplicate-output-flavors/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=rlib,rlib foo.rs diff --git a/tests/run-make/duplicate-output-flavors/foo.rs b/tests/run-make/duplicate-output-flavors/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/duplicate-output-flavors/foo.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/dylib-chain/Makefile b/tests/run-make/dylib-chain/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f1fea99c5ee91c52a2482a9eccbf7074a337e012 --- /dev/null +++ b/tests/run-make/dylib-chain/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) m1.rs -C prefer-dynamic + $(RUSTC) m2.rs -C prefer-dynamic + $(RUSTC) m3.rs -C prefer-dynamic + $(RUSTC) m4.rs + $(call RUN,m4) + $(call REMOVE_DYLIBS,m1) + $(call REMOVE_DYLIBS,m2) + $(call REMOVE_DYLIBS,m3) + $(call FAIL,m4) diff --git a/tests/run-make/dylib-chain/m1.rs b/tests/run-make/dylib-chain/m1.rs new file mode 100644 index 0000000000000000000000000000000000000000..08c3f37522cea485302e562d93a4cee561b84a41 --- /dev/null +++ b/tests/run-make/dylib-chain/m1.rs @@ -0,0 +1,2 @@ +#![crate_type = "dylib"] +pub fn m1() {} diff --git a/tests/run-make/dylib-chain/m2.rs b/tests/run-make/dylib-chain/m2.rs new file mode 100644 index 0000000000000000000000000000000000000000..62176ddc9f35ffa6dc40ffd851294aa5a6bb4623 --- /dev/null +++ b/tests/run-make/dylib-chain/m2.rs @@ -0,0 +1,4 @@ +#![crate_type = "dylib"] +extern crate m1; + +pub fn m2() { m1::m1() } diff --git a/tests/run-make/dylib-chain/m3.rs b/tests/run-make/dylib-chain/m3.rs new file mode 100644 index 0000000000000000000000000000000000000000..d213aeda9ac19a1fed5288d5ed8cdf8dc81104be --- /dev/null +++ b/tests/run-make/dylib-chain/m3.rs @@ -0,0 +1,4 @@ +#![crate_type = "dylib"] +extern crate m2; + +pub fn m3() { m2::m2() } diff --git a/tests/run-make/dylib-chain/m4.rs b/tests/run-make/dylib-chain/m4.rs new file mode 100644 index 0000000000000000000000000000000000000000..fa8ec6079deace3f04d68dc79b920927ada6f385 --- /dev/null +++ b/tests/run-make/dylib-chain/m4.rs @@ -0,0 +1,3 @@ +extern crate m3; + +fn main() { m3::m3() } diff --git a/tests/run-make/emit-named-files/Makefile b/tests/run-make/emit-named-files/Makefile index e081fa4793bb1bca3d8aec4c79f139d9041719a4..2b97b841fc00d82ed1a1376518bf77f5c6b7854d 100644 --- a/tests/run-make/emit-named-files/Makefile +++ b/tests/run-make/emit-named-files/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUT=$(TMPDIR)/emit diff --git a/tests/run-make/emit-path-unhashed/Makefile b/tests/run-make/emit-path-unhashed/Makefile index c144d4aa92f67fd610d6b9b8a2889233f2e69953..74047fe5f86310ead6d197f0f2944cc65372515f 100644 --- a/tests/run-make/emit-path-unhashed/Makefile +++ b/tests/run-make/emit-path-unhashed/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUT=$(TMPDIR)/emit diff --git a/tests/run-make/emit-shared-files/Makefile b/tests/run-make/emit-shared-files/Makefile index cad0c9e5b81531ef28e432f6e9716b5b22a9078e..27c72b003686d653bf177e4db41d4c775a291440 100644 --- a/tests/run-make/emit-shared-files/Makefile +++ b/tests/run-make/emit-shared-files/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk INVOCATION_ONLY = $(TMPDIR)/invocation-only TOOLCHAIN_ONLY = $(TMPDIR)/toolchain-only diff --git a/tests/run-make/emit-stack-sizes/Makefile b/tests/run-make/emit-stack-sizes/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f636ebd28f2ea15be0838d8a549df39418d855c2 --- /dev/null +++ b/tests/run-make/emit-stack-sizes/Makefile @@ -0,0 +1,12 @@ +include ../tools.mk + +# ignore-windows +# ignore-macos +# +# This feature only works when the output object format is ELF so we ignore +# macOS and Windows + +# check that the .stack_sizes section is generated +all: + $(RUSTC) -C opt-level=3 -Z emit-stack-sizes --emit=obj foo.rs + size -A $(TMPDIR)/foo.o | $(CGREP) .stack_sizes diff --git a/tests/run-make/emit-stack-sizes/foo.rs b/tests/run-make/emit-stack-sizes/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..ee51ae32886e318b1a1430085723d7b37fd19cf2 --- /dev/null +++ b/tests/run-make/emit-stack-sizes/foo.rs @@ -0,0 +1,3 @@ +#![crate_type = "lib"] + +pub fn foo() {} diff --git a/tests/run-make/emit/Makefile b/tests/run-make/emit/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b3ca0b79fb0cf8c06e5cc780127ddad9baeea6de --- /dev/null +++ b/tests/run-make/emit/Makefile @@ -0,0 +1,22 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) -Copt-level=0 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=1 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=2 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=3 --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=s --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=z --emit=llvm-bc,llvm-ir,asm,obj,link test-24876.rs + $(RUSTC) -Copt-level=0 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 + $(RUSTC) -Copt-level=1 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 + $(RUSTC) -Copt-level=2 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 + $(RUSTC) -Copt-level=3 --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 + $(RUSTC) -Copt-level=s --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 + $(RUSTC) -Copt-level=z --emit=llvm-bc,llvm-ir,asm,obj,link test-26235.rs + $(call RUN,test-26235) || exit 1 diff --git a/tests/run-make/emit/test-24876.rs b/tests/run-make/emit/test-24876.rs new file mode 100644 index 0000000000000000000000000000000000000000..734e2ee4bd419443bb44a006b36069404906a2ad --- /dev/null +++ b/tests/run-make/emit/test-24876.rs @@ -0,0 +1,9 @@ +// Checks for issue #24876 + +fn main() { + let mut v = 0; + for i in 0..0 { + v += i; + } + println!("{}", v) +} diff --git a/tests/run-make/emit/test-26235.rs b/tests/run-make/emit/test-26235.rs new file mode 100644 index 0000000000000000000000000000000000000000..07d975f3317cade625b6add7064f6b83df15c0c4 --- /dev/null +++ b/tests/run-make/emit/test-26235.rs @@ -0,0 +1,46 @@ +// Checks for issue #26235 + +fn main() { + use std::thread; + + type Key = u32; + const NUM_THREADS: usize = 2; + + #[derive(Clone,Copy)] + struct Stats { + upsert: S, + delete: S, + insert: S, + update: S + }; + + impl Stats where S: Copy { + fn dot(self, s: Stats, f: F) -> Stats where F: Fn(S, T) -> B { + let Stats { upsert: u1, delete: d1, insert: i1, update: p1 } = self; + let Stats { upsert: u2, delete: d2, insert: i2, update: p2 } = s; + Stats { upsert: f(u1, u2), delete: f(d1, d2), insert: f(i1, i2), update: f(p1, p2) } + } + + fn new(init: S) -> Self { + Stats { upsert: init, delete: init, insert: init, update: init } + } + } + + fn make_threads() -> Vec> { + let mut t = Vec::with_capacity(NUM_THREADS); + for _ in 0..NUM_THREADS { + t.push(thread::spawn(move || {})); + } + t + } + + let stats = [Stats::new(0); NUM_THREADS]; + make_threads(); + + { + let Stats { ref upsert, ref delete, ref insert, ref update } = stats.iter().fold( + Stats::new(0), |res, &s| res.dot(s, |x: Key, y: Key| x.wrapping_add(y))); + println!("upserts: {}, deletes: {}, inserts: {}, updates: {}", + upsert, delete, insert, update); + } +} diff --git a/tests/run-make/env-dep-info/Makefile b/tests/run-make/env-dep-info/Makefile index 1675a61b1673b5dfc3cc98bcff211355cde8e8c5..bc0ffc2df1e0b2bb5bbbfc5183c5bf82a5b5d2c7 100644 --- a/tests/run-make/env-dep-info/Makefile +++ b/tests/run-make/env-dep-info/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # FIXME(eddyb) provide `HOST_RUSTC` and `TARGET_RUSTC` # instead of hardcoding them everywhere they're needed. diff --git a/tests/run-make/error-found-staticlib-instead-crate/Makefile b/tests/run-make/error-found-staticlib-instead-crate/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0eae41d720ccc0f3c5a60a32fc169f6fc64d46c4 --- /dev/null +++ b/tests/run-make/error-found-staticlib-instead-crate/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) foo.rs --crate-type staticlib + $(RUSTC) bar.rs 2>&1 | $(CGREP) "found staticlib" diff --git a/tests/run-make/error-found-staticlib-instead-crate/bar.rs b/tests/run-make/error-found-staticlib-instead-crate/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..fe35f1f8e2ead2e1ea2d06c1aa4ce426d2a8a6aa --- /dev/null +++ b/tests/run-make/error-found-staticlib-instead-crate/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::foo(); +} diff --git a/tests/run-make/error-found-staticlib-instead-crate/foo.rs b/tests/run-make/error-found-staticlib-instead-crate/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b76b4321d62aa8e066b24d213c79ccc8230b8d7b --- /dev/null +++ b/tests/run-make/error-found-staticlib-instead-crate/foo.rs @@ -0,0 +1 @@ +pub fn foo() {} diff --git a/tests/run-make/error-writing-dependencies/Makefile b/tests/run-make/error-writing-dependencies/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a5d30a647f81744f7a1f0389a3086b77249db4ce --- /dev/null +++ b/tests/run-make/error-writing-dependencies/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +all: + # Let's get a nice error message + $(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | \ + $(CGREP) "error writing dependencies" + # Make sure the filename shows up + $(BARE_RUSTC) foo.rs --emit dep-info --out-dir foo/bar/baz 2>&1 | $(CGREP) "baz" diff --git a/tests/run-make/error-writing-dependencies/foo.rs b/tests/run-make/error-writing-dependencies/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/error-writing-dependencies/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/exit-code/Makefile b/tests/run-make/exit-code/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6458b71688fff01462744b76cb62d58d0315ceaa --- /dev/null +++ b/tests/run-make/exit-code/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) success.rs; [ $$? -eq 0 ] + $(RUSTC) --invalid-arg-foo; [ $$? -eq 1 ] + $(RUSTC) compile-error.rs; [ $$? -eq 1 ] + $(RUSTC) -Ztreat-err-as-bug compile-error.rs; [ $$? -eq 101 ] + $(RUSTDOC) -o $(TMPDIR)/exit-code success.rs; [ $$? -eq 0 ] + $(RUSTDOC) --invalid-arg-foo; [ $$? -eq 1 ] + $(RUSTDOC) compile-error.rs; [ $$? -eq 1 ] + $(RUSTDOC) lint-failure.rs; [ $$? -eq 1 ] diff --git a/tests/run-make/exit-code/compile-error.rs b/tests/run-make/exit-code/compile-error.rs new file mode 100644 index 0000000000000000000000000000000000000000..a96c197606cceb2fcf47e9fad4d930179942b6fc --- /dev/null +++ b/tests/run-make/exit-code/compile-error.rs @@ -0,0 +1,3 @@ +fn main() { + compile_error!("kaboom"); +} diff --git a/tests/run-make/exit-code/lint-failure.rs b/tests/run-make/exit-code/lint-failure.rs new file mode 100644 index 0000000000000000000000000000000000000000..df876ec237ff35dabe26c154b856e716ec26a929 --- /dev/null +++ b/tests/run-make/exit-code/lint-failure.rs @@ -0,0 +1,6 @@ +#![deny(broken_intra_doc_links)] + +/// [intradoc::failure] +pub fn main() { + println!("Hello, world!"); +} diff --git a/tests/run-make/exit-code/success.rs b/tests/run-make/exit-code/success.rs new file mode 100644 index 0000000000000000000000000000000000000000..55b8e42b6e2017adfee18d031178cbbaead8894d --- /dev/null +++ b/tests/run-make/exit-code/success.rs @@ -0,0 +1,4 @@ +/// Main function +fn main() { + println!("Hello, world!"); +} diff --git a/tests/run-make/export-executable-symbols/Makefile b/tests/run-make/export-executable-symbols/Makefile index daa77c99dcdd62d39498bb849b203d294941032f..c4d29aa2bf4500370d64a8940a65729f61e55311 100644 --- a/tests/run-make/export-executable-symbols/Makefile +++ b/tests/run-make/export-executable-symbols/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-wasm32 # ignore-wasm64 diff --git a/tests/run-make/extern-diff-internal-name/Makefile b/tests/run-make/extern-diff-internal-name/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..250f82dfac08e580f337f9b36bc46a24850a022b --- /dev/null +++ b/tests/run-make/extern-diff-internal-name/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) lib.rs + $(RUSTC) test.rs --extern foo=$(TMPDIR)/libbar.rlib diff --git a/tests/run-make/extern-diff-internal-name/lib.rs b/tests/run-make/extern-diff-internal-name/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..ad96f70866e4f1269e95cf7f99118e0f47dee551 --- /dev/null +++ b/tests/run-make/extern-diff-internal-name/lib.rs @@ -0,0 +1,2 @@ +#![crate_name = "bar"] +#![crate_type = "rlib"] diff --git a/tests/run-make/extern-diff-internal-name/test.rs b/tests/run-make/extern-diff-internal-name/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..4c53dc28a80e62338a6e6597cc43129798a7f360 --- /dev/null +++ b/tests/run-make/extern-diff-internal-name/test.rs @@ -0,0 +1,5 @@ +#[macro_use] +extern crate foo; + +fn main() { +} diff --git a/tests/run-make/extern-flag-disambiguates/Makefile b/tests/run-make/extern-flag-disambiguates/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e54a537ecd062e421e71de2fd3e1b25936b945b2 --- /dev/null +++ b/tests/run-make/extern-flag-disambiguates/Makefile @@ -0,0 +1,26 @@ +# ignore-cross-compile +include ../tools.mk + +# Attempt to build this dependency tree: +# +# A.1 A.2 +# |\ | +# | \ | +# B \ C +# \ | / +# \|/ +# D +# +# Note that A.1 and A.2 are crates with the same name. + +all: + $(RUSTC) -C metadata=1 -C extra-filename=-1 a.rs + $(RUSTC) -C metadata=2 -C extra-filename=-2 a.rs + $(RUSTC) b.rs --extern a=$(TMPDIR)/liba-1.rlib + $(RUSTC) c.rs --extern a=$(TMPDIR)/liba-2.rlib + @echo before + $(RUSTC) --cfg before d.rs --extern a=$(TMPDIR)/liba-1.rlib + $(call RUN,d) + @echo after + $(RUSTC) --cfg after d.rs --extern a=$(TMPDIR)/liba-1.rlib + $(call RUN,d) diff --git a/tests/run-make/extern-flag-disambiguates/a.rs b/tests/run-make/extern-flag-disambiguates/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..2b1a3190150fe4e411f71bdc6d081ce11a7f72c6 --- /dev/null +++ b/tests/run-make/extern-flag-disambiguates/a.rs @@ -0,0 +1,6 @@ +#![crate_name = "a"] +#![crate_type = "rlib"] + +static FOO: usize = 3; + +pub fn token() -> &'static usize { &FOO } diff --git a/tests/run-make/extern-flag-disambiguates/b.rs b/tests/run-make/extern-flag-disambiguates/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..1d7a7339ce27e37d7f87cb9cdd2cb10d8018ada6 --- /dev/null +++ b/tests/run-make/extern-flag-disambiguates/b.rs @@ -0,0 +1,9 @@ +#![crate_name = "b"] +#![crate_type = "rlib"] + +extern crate a; + +static FOO: usize = 3; + +pub fn token() -> &'static usize { &FOO } +pub fn a_token() -> &'static usize { a::token() } diff --git a/tests/run-make/extern-flag-disambiguates/c.rs b/tests/run-make/extern-flag-disambiguates/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..3f9d143ed2dc46a397d5bff89dc3a463c0391b5e --- /dev/null +++ b/tests/run-make/extern-flag-disambiguates/c.rs @@ -0,0 +1,9 @@ +#![crate_name = "c"] +#![crate_type = "rlib"] + +extern crate a; + +static FOO: usize = 3; + +pub fn token() -> &'static usize { &FOO } +pub fn a_token() -> &'static usize { a::token() } diff --git a/tests/run-make/extern-flag-disambiguates/d.rs b/tests/run-make/extern-flag-disambiguates/d.rs new file mode 100644 index 0000000000000000000000000000000000000000..249c6a107ff39a193429f74152a85888eb57eeb9 --- /dev/null +++ b/tests/run-make/extern-flag-disambiguates/d.rs @@ -0,0 +1,11 @@ +#[cfg(before)] extern crate a; +extern crate b; +extern crate c; +#[cfg(after)] extern crate a; + +fn t(a: &'static usize) -> usize { a as *const _ as usize } + +fn main() { + assert_eq!(t(a::token()), t(b::a_token())); + assert!(t(a::token()) != t(c::a_token())); +} diff --git a/tests/run-make/extern-flag-fun/Makefile b/tests/run-make/extern-flag-fun/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..687cdfd76755b483b09552637b5cc8fbd19131d6 --- /dev/null +++ b/tests/run-make/extern-flag-fun/Makefile @@ -0,0 +1,20 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) bar.rs --crate-type=rlib + $(RUSTC) bar.rs --crate-type=rlib -C extra-filename=-a + $(RUSTC) bar-alt.rs --crate-type=rlib + $(RUSTC) foo.rs --extern bar=no-exist && exit 1 || exit 0 + $(RUSTC) foo.rs --extern bar=foo.rs && exit 1 || exit 0 + $(RUSTC) foo.rs \ + --extern bar=$(TMPDIR)/libbar.rlib \ + --extern bar=$(TMPDIR)/libbar-alt.rlib \ + && exit 1 || exit 0 + $(RUSTC) foo.rs \ + --extern bar=$(TMPDIR)/libbar.rlib \ + --extern bar=$(TMPDIR)/libbar-a.rlib + $(RUSTC) foo.rs --extern bar=$(TMPDIR)/libbar.rlib + # Try to be sneaky and load a private crate from with a non-private name. + $(RUSTC) rustc.rs -Zforce-unstable-if-unmarked --crate-type=rlib + $(RUSTC) gated_unstable.rs --extern alloc=$(TMPDIR)/librustc.rlib 2>&1 | $(CGREP) 'rustc_private' diff --git a/tests/run-make/extern-flag-fun/bar-alt.rs b/tests/run-make/extern-flag-fun/bar-alt.rs new file mode 100644 index 0000000000000000000000000000000000000000..cdc6c27d800bdf61531058e432b2217e45a34dc7 --- /dev/null +++ b/tests/run-make/extern-flag-fun/bar-alt.rs @@ -0,0 +1 @@ +pub fn f() {} diff --git a/tests/run-make/extern-flag-fun/bar.rs b/tests/run-make/extern-flag-fun/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..d11c69f812a8dfe9ea3db2474363c188c096c5b3 --- /dev/null +++ b/tests/run-make/extern-flag-fun/bar.rs @@ -0,0 +1 @@ +// intentionally empty diff --git a/tests/run-make/extern-flag-fun/foo.rs b/tests/run-make/extern-flag-fun/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..0edda7d7b8842debbdd5417ed08d904c00d9c956 --- /dev/null +++ b/tests/run-make/extern-flag-fun/foo.rs @@ -0,0 +1,3 @@ +extern crate bar; + +fn main() {} diff --git a/tests/run-make/extern-flag-fun/gated_unstable.rs b/tests/run-make/extern-flag-fun/gated_unstable.rs new file mode 100644 index 0000000000000000000000000000000000000000..03600c830fff6e53672d531ee063e85ffc297a63 --- /dev/null +++ b/tests/run-make/extern-flag-fun/gated_unstable.rs @@ -0,0 +1,3 @@ +extern crate alloc; + +fn main() {} diff --git a/tests/run-make/extern-flag-fun/rustc.rs b/tests/run-make/extern-flag-fun/rustc.rs new file mode 100644 index 0000000000000000000000000000000000000000..b76b4321d62aa8e066b24d213c79ccc8230b8d7b --- /dev/null +++ b/tests/run-make/extern-flag-fun/rustc.rs @@ -0,0 +1 @@ +pub fn foo() {} diff --git a/tests/run-make/extern-flag-pathless/Makefile b/tests/run-make/extern-flag-pathless/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..701bfcd28c8a8fe0f69b8731177eb0d69e4d0626 --- /dev/null +++ b/tests/run-make/extern-flag-pathless/Makefile @@ -0,0 +1,19 @@ +# ignore-cross-compile +include ../tools.mk + +# Test mixing pathless --extern with paths. + +all: + $(RUSTC) bar-static.rs --crate-name=bar --crate-type=rlib + $(RUSTC) bar-dynamic.rs --crate-name=bar --crate-type=dylib -C prefer-dynamic + # rlib preferred over dylib + $(RUSTC) foo.rs --extern bar + $(call RUN,foo) | $(CGREP) 'static' + $(RUSTC) foo.rs --extern bar=$(TMPDIR)/libbar.rlib --extern bar + $(call RUN,foo) | $(CGREP) 'static' + # explicit --extern overrides pathless + $(RUSTC) foo.rs --extern bar=$(call DYLIB,bar) --extern bar + $(call RUN,foo) | $(CGREP) 'dynamic' + # prefer-dynamic does what it says + $(RUSTC) foo.rs --extern bar -C prefer-dynamic + $(call RUN,foo) | $(CGREP) 'dynamic' diff --git a/tests/run-make/extern-flag-pathless/bar-dynamic.rs b/tests/run-make/extern-flag-pathless/bar-dynamic.rs new file mode 100644 index 0000000000000000000000000000000000000000..e2d68d517ff9729fdabdc5149c1c86636b438f68 --- /dev/null +++ b/tests/run-make/extern-flag-pathless/bar-dynamic.rs @@ -0,0 +1,3 @@ +pub fn f() { + println!("dynamic"); +} diff --git a/tests/run-make/extern-flag-pathless/bar-static.rs b/tests/run-make/extern-flag-pathless/bar-static.rs new file mode 100644 index 0000000000000000000000000000000000000000..240d8bde4d186761401f23b82dcaf7c2e540f50c --- /dev/null +++ b/tests/run-make/extern-flag-pathless/bar-static.rs @@ -0,0 +1,3 @@ +pub fn f() { + println!("static"); +} diff --git a/tests/run-make/extern-flag-pathless/foo.rs b/tests/run-make/extern-flag-pathless/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..1ea64da7dad26a6b7c04068e5080b0411a164000 --- /dev/null +++ b/tests/run-make/extern-flag-pathless/foo.rs @@ -0,0 +1,3 @@ +fn main() { + bar::f(); +} diff --git a/tests/run-make/extern-flag-rename-transitive/Makefile b/tests/run-make/extern-flag-rename-transitive/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d16a8e20868efe2b8eaa3d4be15eaebbf254009f --- /dev/null +++ b/tests/run-make/extern-flag-rename-transitive/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(RUSTC) baz.rs --extern a=$(TMPDIR)/libfoo.rlib + diff --git a/tests/run-make/extern-flag-rename-transitive/bar.rs b/tests/run-make/extern-flag-rename-transitive/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..94446a07d6c5496af473304fe6bce96f5a7403e8 --- /dev/null +++ b/tests/run-make/extern-flag-rename-transitive/bar.rs @@ -0,0 +1,3 @@ +#![crate_type = "rlib"] + +extern crate foo; diff --git a/tests/run-make/extern-flag-rename-transitive/baz.rs b/tests/run-make/extern-flag-rename-transitive/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..c3908db34299deb1f7242f869933c24f1e166861 --- /dev/null +++ b/tests/run-make/extern-flag-rename-transitive/baz.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] + +extern crate a; +extern crate bar; diff --git a/tests/run-make/extern-flag-rename-transitive/foo.rs b/tests/run-make/extern-flag-rename-transitive/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/extern-flag-rename-transitive/foo.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/extern-fn-generic/Makefile b/tests/run-make/extern-fn-generic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7dceea6cb887cf924cbf991ac91d1c416cd6ff36 --- /dev/null +++ b/tests/run-make/extern-fn-generic/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) testcrate.rs + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-generic/test.c b/tests/run-make/extern-fn-generic/test.c new file mode 100644 index 0000000000000000000000000000000000000000..a8504ff2afb06077bd2262fffc3fea5bf6084fe3 --- /dev/null +++ b/tests/run-make/extern-fn-generic/test.c @@ -0,0 +1,16 @@ +#include + +typedef struct TestStruct { + uint8_t x; + int32_t y; +} TestStruct; + +typedef int callback(TestStruct s); + +uint32_t call(callback *c) { + TestStruct s; + s.x = 'a'; + s.y = 3; + + return c(s); +} diff --git a/tests/run-make/extern-fn-generic/test.rs b/tests/run-make/extern-fn-generic/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..c9baa489881b1b3a6d6e90571a162fa89233315b --- /dev/null +++ b/tests/run-make/extern-fn-generic/test.rs @@ -0,0 +1,20 @@ +extern crate testcrate; + +extern "C" fn bar(ts: testcrate::TestStruct) -> T { + ts.y +} + +#[link(name = "test", kind = "static")] +extern "C" { + fn call(c: extern "C" fn(testcrate::TestStruct) -> i32) -> i32; +} + +fn main() { + // Let's test calling it cross crate + let back = unsafe { testcrate::call(testcrate::foo::) }; + assert_eq!(3, back); + + // And just within this crate + let back = unsafe { call(bar::) }; + assert_eq!(3, back); +} diff --git a/tests/run-make/extern-fn-generic/testcrate.rs b/tests/run-make/extern-fn-generic/testcrate.rs new file mode 100644 index 0000000000000000000000000000000000000000..39f76e59ca0c0edcd42b6178f4759319437c7d4a --- /dev/null +++ b/tests/run-make/extern-fn-generic/testcrate.rs @@ -0,0 +1,16 @@ +#![crate_type = "lib"] + +#[repr(C)] +pub struct TestStruct { + pub x: u8, + pub y: T, +} + +pub extern "C" fn foo(ts: TestStruct) -> T { + ts.y +} + +#[link(name = "test", kind = "static")] +extern "C" { + pub fn call(c: extern "C" fn(TestStruct) -> i32) -> i32; +} diff --git a/tests/run-make/extern-fn-mangle/Makefile b/tests/run-make/extern-fn-mangle/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3cbbf3839969f1ada665724fbc4d3c43a9c82529 --- /dev/null +++ b/tests/run-make/extern-fn-mangle/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-mangle/test.c b/tests/run-make/extern-fn-mangle/test.c new file mode 100644 index 0000000000000000000000000000000000000000..e94d75083b8ffd7bdf72fed6d9f814bb90c0ad0f --- /dev/null +++ b/tests/run-make/extern-fn-mangle/test.c @@ -0,0 +1,8 @@ +#include + +uint32_t foo(); +uint32_t bar(); + +uint32_t add() { + return foo() + bar(); +} diff --git a/tests/run-make/extern-fn-mangle/test.rs b/tests/run-make/extern-fn-mangle/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..40b08f1ed709e348ebe73eb2c7602a68f79220e0 --- /dev/null +++ b/tests/run-make/extern-fn-mangle/test.rs @@ -0,0 +1,19 @@ +#[no_mangle] +pub extern "C" fn foo() -> i32 { + 3 +} + +#[no_mangle] +pub extern "C" fn bar() -> i32 { + 5 +} + +#[link(name = "test", kind = "static")] +extern "C" { + fn add() -> i32; +} + +fn main() { + let back = unsafe { add() }; + assert_eq!(8, back); +} diff --git a/tests/run-make/extern-fn-reachable/Makefile b/tests/run-make/extern-fn-reachable/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3297251bfd1aadd3a91ff27e6e5ff31d4ac2eccf --- /dev/null +++ b/tests/run-make/extern-fn-reachable/Makefile @@ -0,0 +1,26 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows-msvc + +NM=nm -D + +ifeq ($(UNAME),Darwin) +NM=nm -gU +endif + +ifdef IS_WINDOWS +NM=nm -g +endif + +# This overrides the LD_LIBRARY_PATH for RUN +TARGET_RPATH_DIR:=$(TARGET_RPATH_DIR):$(TMPDIR) + +all: + $(RUSTC) dylib.rs -o $(TMPDIR)/libdylib.so -C prefer-dynamic + + [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun1)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun2)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun3)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun4)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/libdylib.so | grep -v __imp_ | grep -c fun5)" -eq "1" ] diff --git a/tests/run-make/extern-fn-reachable/dylib.rs b/tests/run-make/extern-fn-reachable/dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..cd01793487051a7bf5e37b893f3e0ef1bc652a9b --- /dev/null +++ b/tests/run-make/extern-fn-reachable/dylib.rs @@ -0,0 +1,14 @@ +#![crate_type = "dylib"] +#![allow(dead_code)] + +#[no_mangle] pub extern "C" fn fun1() {} +#[no_mangle] extern "C" fn fun2() {} + +mod foo { + #[no_mangle] pub extern "C" fn fun3() {} +} +pub mod bar { + #[no_mangle] pub extern "C" fn fun4() {} +} + +#[no_mangle] pub fn fun5() {} diff --git a/tests/run-make/extern-fn-struct-passing-abi/Makefile b/tests/run-make/extern-fn-struct-passing-abi/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3cbbf3839969f1ada665724fbc4d3c43a9c82529 --- /dev/null +++ b/tests/run-make/extern-fn-struct-passing-abi/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-struct-passing-abi/test.c b/tests/run-make/extern-fn-struct-passing-abi/test.c new file mode 100644 index 0000000000000000000000000000000000000000..136b07129e1df3518679cef224113b5c67382d29 --- /dev/null +++ b/tests/run-make/extern-fn-struct-passing-abi/test.c @@ -0,0 +1,314 @@ +#include +#include + +struct Rect { + int32_t a; + int32_t b; + int32_t c; + int32_t d; +}; + +struct BiggerRect { + struct Rect s; + int32_t a; + int32_t b; +}; + +struct FloatRect { + int32_t a; + int32_t b; + double c; +}; + +struct Huge { + int32_t a; + int32_t b; + int32_t c; + int32_t d; + int32_t e; +}; + +struct FloatPoint { + double x; + double y; +}; + +struct FloatOne { + double x; +}; + +struct IntOdd { + int8_t a; + int8_t b; + int8_t c; +}; + +// System V x86_64 ABI: +// a, b, c, d, e should be in registers +// s should be byval pointer +// +// Win64 ABI: +// a, b, c, d should be in registers +// e should be on the stack +// s should be byval pointer +void byval_rect(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(c == 3); + assert(d == 4); + assert(e == 5); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); +} + +// System V x86_64 ABI: +// a, b, c, d, e, f should be in registers +// s should be byval pointer on the stack +// +// Win64 ABI: +// a, b, c, d should be in registers +// e, f should be on the stack +// s should be byval pointer on the stack +void byval_many_rect(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, + int32_t f, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(c == 3); + assert(d == 4); + assert(e == 5); + assert(f == 6); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); +} + +// System V x86_64 ABI: +// a, b, c, d, e, f, g should be in sse registers +// s should be split across 2 registers +// t should be byval pointer +// +// Win64 ABI: +// a, b, c, d should be in sse registers +// e, f, g should be on the stack +// s should be on the stack (treated as 2 i64's) +// t should be on the stack (treated as an i64 and a double) +void byval_rect_floats(float a, float b, double c, float d, float e, + float f, double g, struct Rect s, struct FloatRect t) { + assert(a == 1.); + assert(b == 2.); + assert(c == 3.); + assert(d == 4.); + assert(e == 5.); + assert(f == 6.); + assert(g == 7.); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); + assert(t.a == 3489); + assert(t.b == 3490); + assert(t.c == 8.); +} + +// System V x86_64 ABI: +// a, b, d, e, f should be in registers +// c passed via sse registers +// s should be byval pointer +// +// Win64 ABI: +// a, b, d should be in registers +// c passed via sse registers +// e, f should be on the stack +// s should be byval pointer +void byval_rect_with_float(int32_t a, int32_t b, float c, int32_t d, + int32_t e, int32_t f, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(c == 3.); + assert(d == 4); + assert(e == 5); + assert(f == 6); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); +} + +// System V x86_64 ABI: +// a, b, d, e, f should be byval pointer (on the stack) +// g passed via register (fixes #41375) +// +// Win64 ABI: +// a, b, d, e, f, g should be byval pointer +void byval_rect_with_many_huge(struct Huge a, struct Huge b, struct Huge c, + struct Huge d, struct Huge e, struct Huge f, + struct Rect g) { + assert(g.a == 123); + assert(g.b == 456); + assert(g.c == 789); + assert(g.d == 420); +} + +// System V x86_64 & Win64 ABI: +// a, b should be in registers +// s should be split across 2 integer registers +void split_rect(int32_t a, int32_t b, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); +} + +// System V x86_64 & Win64 ABI: +// a, b should be in sse registers +// s should be split across integer & sse registers +void split_rect_floats(float a, float b, struct FloatRect s) { + assert(a == 1.); + assert(b == 2.); + assert(s.a == 3489); + assert(s.b == 3490); + assert(s.c == 8.); +} + +// System V x86_64 ABI: +// a, b, d, f should be in registers +// c, e passed via sse registers +// s should be split across 2 registers +// +// Win64 ABI: +// a, b, d should be in registers +// c passed via sse registers +// e, f should be on the stack +// s should be on the stack (treated as 2 i64's) +void split_rect_with_floats(int32_t a, int32_t b, float c, + int32_t d, float e, int32_t f, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(c == 3.); + assert(d == 4); + assert(e == 5.); + assert(f == 6); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); +} + +// System V x86_64 & Win64 ABI: +// a, b, c should be in registers +// s should be split across 2 registers +// t should be a byval pointer +void split_and_byval_rect(int32_t a, int32_t b, int32_t c, struct Rect s, struct Rect t) { + assert(a == 1); + assert(b == 2); + assert(c == 3); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); + assert(t.a == 553); + assert(t.b == 554); + assert(t.c == 555); + assert(t.d == 556); +} + +// System V x86_64 & Win64 ABI: +// a, b should in registers +// s and return should be split across 2 registers +struct Rect split_ret_byval_struct(int32_t a, int32_t b, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); + return s; +} + +// System V x86_64 & Win64 ABI: +// a, b, c, d should be in registers +// return should be in a hidden sret pointer +// s should be a byval pointer +struct BiggerRect sret_byval_struct(int32_t a, int32_t b, int32_t c, int32_t d, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(c == 3); + assert(d == 4); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); + + struct BiggerRect t; + t.s = s; t.a = 27834; t.b = 7657; + return t; +} + +// System V x86_64 & Win64 ABI: +// a, b should be in registers +// return should be in a hidden sret pointer +// s should be split across 2 registers +struct BiggerRect sret_split_struct(int32_t a, int32_t b, struct Rect s) { + assert(a == 1); + assert(b == 2); + assert(s.a == 553); + assert(s.b == 554); + assert(s.c == 555); + assert(s.d == 556); + + struct BiggerRect t; + t.s = s; t.a = 27834; t.b = 7657; + return t; +} + +// System V x86_64 & Win64 ABI: +// s should be byval pointer (since sizeof(s) > 16) +// return should in a hidden sret pointer +struct Huge huge_struct(struct Huge s) { + assert(s.a == 5647); + assert(s.b == 5648); + assert(s.c == 5649); + assert(s.d == 5650); + assert(s.e == 5651); + + return s; +} + +// System V x86_64 ABI: +// p should be in registers +// return should be in registers +// +// Win64 ABI and 64-bit PowerPC ELFv1 ABI: +// p should be a byval pointer +// return should be in a hidden sret pointer +struct FloatPoint float_point(struct FloatPoint p) { + assert(p.x == 5.); + assert(p.y == -3.); + + return p; +} + +// 64-bit PowerPC ELFv1 ABI: +// f1 should be in a register +// return should be in a hidden sret pointer +struct FloatOne float_one(struct FloatOne f1) { + assert(f1.x == 7.); + + return f1; +} + +// 64-bit PowerPC ELFv1 ABI: +// i should be in the least-significant bits of a register +// return should be in a hidden sret pointer +struct IntOdd int_odd(struct IntOdd i) { + assert(i.a == 1); + assert(i.b == 2); + assert(i.c == 3); + + return i; +} diff --git a/tests/run-make/extern-fn-struct-passing-abi/test.rs b/tests/run-make/extern-fn-struct-passing-abi/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..afe0f52ef0b288f432a0efda8fa4d31733c1c22e --- /dev/null +++ b/tests/run-make/extern-fn-struct-passing-abi/test.rs @@ -0,0 +1,138 @@ +// Passing structs via FFI should work regardless of whether +// they get passed in multiple registers, byval pointers or the stack + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct Rect { + a: i32, + b: i32, + c: i32, + d: i32, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct BiggerRect { + s: Rect, + a: i32, + b: i32, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct FloatRect { + a: i32, + b: i32, + c: f64, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct Huge { + a: i32, + b: i32, + c: i32, + d: i32, + e: i32, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct FloatPoint { + x: f64, + y: f64, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct FloatOne { + x: f64, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +#[repr(C)] +struct IntOdd { + a: i8, + b: i8, + c: i8, +} + +#[link(name = "test", kind = "static")] +extern "C" { + fn byval_rect(a: i32, b: i32, c: i32, d: i32, e: i32, s: Rect); + + fn byval_many_rect(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32, s: Rect); + + fn byval_rect_floats( + a: f32, + b: f32, + c: f64, + d: f32, + e: f32, + f: f32, + g: f64, + s: Rect, + t: FloatRect, + ); + + fn byval_rect_with_float(a: i32, b: i32, c: f32, d: i32, e: i32, f: i32, s: Rect); + + fn byval_rect_with_many_huge(a: Huge, b: Huge, c: Huge, d: Huge, e: Huge, f: Huge, g: Rect); + + fn split_rect(a: i32, b: i32, s: Rect); + + fn split_rect_floats(a: f32, b: f32, s: FloatRect); + + fn split_rect_with_floats(a: i32, b: i32, c: f32, d: i32, e: f32, f: i32, s: Rect); + + fn split_and_byval_rect(a: i32, b: i32, c: i32, s: Rect, t: Rect); + + fn split_ret_byval_struct(a: i32, b: i32, s: Rect) -> Rect; + + fn sret_byval_struct(a: i32, b: i32, c: i32, d: i32, s: Rect) -> BiggerRect; + + fn sret_split_struct(a: i32, b: i32, s: Rect) -> BiggerRect; + + fn huge_struct(s: Huge) -> Huge; + + fn float_point(p: FloatPoint) -> FloatPoint; + + fn float_one(f: FloatOne) -> FloatOne; + + fn int_odd(i: IntOdd) -> IntOdd; +} + +fn main() { + let s = Rect { a: 553, b: 554, c: 555, d: 556 }; + let t = BiggerRect { s: s, a: 27834, b: 7657 }; + let u = FloatRect { a: 3489, b: 3490, c: 8. }; + let v = Huge { a: 5647, b: 5648, c: 5649, d: 5650, e: 5651 }; + let p = FloatPoint { x: 5., y: -3. }; + let f1 = FloatOne { x: 7. }; + let i = IntOdd { a: 1, b: 2, c: 3 }; + + unsafe { + byval_rect(1, 2, 3, 4, 5, s); + byval_many_rect(1, 2, 3, 4, 5, 6, s); + byval_rect_floats(1., 2., 3., 4., 5., 6., 7., s, u); + byval_rect_with_float(1, 2, 3.0, 4, 5, 6, s); + byval_rect_with_many_huge(v, v, v, v, v, v, Rect { a: 123, b: 456, c: 789, d: 420 }); + split_rect(1, 2, s); + split_rect_floats(1., 2., u); + split_rect_with_floats(1, 2, 3.0, 4, 5.0, 6, s); + split_and_byval_rect(1, 2, 3, s, s); + split_rect(1, 2, s); + assert_eq!(huge_struct(v), v); + assert_eq!(split_ret_byval_struct(1, 2, s), s); + assert_eq!(sret_byval_struct(1, 2, 3, 4, s), t); + assert_eq!(sret_split_struct(1, 2, s), t); + assert_eq!(float_point(p), p); + assert_eq!(int_odd(i), i); + + // MSVC/GCC/Clang are not consistent in the ABI of single-float aggregates. + // x86_64: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82028 + // i686: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82041 + #[cfg(not(all(windows, target_env = "gnu")))] + assert_eq!(float_one(f1), f1); + } +} diff --git a/tests/run-make/extern-fn-with-extern-types/Makefile b/tests/run-make/extern-fn-with-extern-types/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..07ec503aaaea556339fc1dce62a32e97a9d6f2e4 --- /dev/null +++ b/tests/run-make/extern-fn-with-extern-types/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,ctest) + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-with-extern-types/ctest.c b/tests/run-make/extern-fn-with-extern-types/ctest.c new file mode 100644 index 0000000000000000000000000000000000000000..3b6fb4cfce984ebb83879f9cf8fae81dc5ca5280 --- /dev/null +++ b/tests/run-make/extern-fn-with-extern-types/ctest.c @@ -0,0 +1,16 @@ +#include +#include + +typedef struct data { + uint32_t magic; +} data; + +data* data_create(uint32_t magic) { + static data d; + d.magic = magic; + return &d; +} + +uint32_t data_get(data* p) { + return p->magic; +} diff --git a/tests/run-make/extern-fn-with-extern-types/test.rs b/tests/run-make/extern-fn-with-extern-types/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..90a6ebaf1aa6caec96ffaaf15383561778ebcf9b --- /dev/null +++ b/tests/run-make/extern-fn-with-extern-types/test.rs @@ -0,0 +1,17 @@ +#![feature(extern_types)] + +#[link(name = "ctest", kind = "static")] +extern "C" { + type data; + + fn data_create(magic: u32) -> *mut data; + fn data_get(data: *mut data) -> u32; +} + +const MAGIC: u32 = 0xdeadbeef; +fn main() { + unsafe { + let data = data_create(MAGIC); + assert_eq!(data_get(data), MAGIC); + } +} diff --git a/tests/run-make/extern-fn-with-packed-struct/Makefile b/tests/run-make/extern-fn-with-packed-struct/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3cbbf3839969f1ada665724fbc4d3c43a9c82529 --- /dev/null +++ b/tests/run-make/extern-fn-with-packed-struct/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-with-packed-struct/test.c b/tests/run-make/extern-fn-with-packed-struct/test.c new file mode 100644 index 0000000000000000000000000000000000000000..c89f8272b1e8376a4a5b29440bf48c94dd8f3ee3 --- /dev/null +++ b/tests/run-make/extern-fn-with-packed-struct/test.c @@ -0,0 +1,26 @@ +// Pragma needed cause of gcc bug on windows: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 + +#include + +#ifdef _MSC_VER +#pragma pack(push,1) +struct Foo { + char a; + short b; + char c; +}; +#else +#pragma pack(1) +struct __attribute__((packed)) Foo { + char a; + short b; + char c; +}; +#endif + +struct Foo foo(struct Foo foo) { + assert(foo.a == 1); + assert(foo.b == 2); + assert(foo.c == 3); + return foo; +} diff --git a/tests/run-make/extern-fn-with-packed-struct/test.rs b/tests/run-make/extern-fn-with-packed-struct/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..2f261efb5105d94248ff296ab42cf41b07d15f20 --- /dev/null +++ b/tests/run-make/extern-fn-with-packed-struct/test.rs @@ -0,0 +1,20 @@ +#[repr(C, packed)] +#[derive(Copy, Clone, Debug, PartialEq)] +struct Foo { + a: i8, + b: i16, + c: i8, +} + +#[link(name = "test", kind = "static")] +extern "C" { + fn foo(f: Foo) -> Foo; +} + +fn main() { + unsafe { + let a = Foo { a: 1, b: 2, c: 3 }; + let b = foo(a); + assert_eq!(a, b); + } +} diff --git a/tests/run-make/extern-fn-with-union/Makefile b/tests/run-make/extern-fn-with-union/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e6c8c9936791b86a00f883b5e56d33403eb64e04 --- /dev/null +++ b/tests/run-make/extern-fn-with-union/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,ctest) + $(RUSTC) testcrate.rs + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/extern-fn-with-union/ctest.c b/tests/run-make/extern-fn-with-union/ctest.c new file mode 100644 index 0000000000000000000000000000000000000000..86cb64537236e1611f877a64a32a1b52d06c5904 --- /dev/null +++ b/tests/run-make/extern-fn-with-union/ctest.c @@ -0,0 +1,10 @@ +#include +#include + +typedef union TestUnion { + uint64_t bits; +} TestUnion; + +uint64_t give_back(TestUnion tu) { + return tu.bits; +} diff --git a/tests/run-make/extern-fn-with-union/test.rs b/tests/run-make/extern-fn-with-union/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..438fbddf31fb287c7d96989c1afdcd7cf6f16a52 --- /dev/null +++ b/tests/run-make/extern-fn-with-union/test.rs @@ -0,0 +1,19 @@ +extern crate testcrate; + +use std::mem; + +extern "C" { + fn give_back(tu: testcrate::TestUnion) -> u64; +} + +fn main() { + let magic: u64 = 0xDEADBEEF; + + // Let's test calling it cross crate + let back = unsafe { testcrate::give_back(mem::transmute(magic)) }; + assert_eq!(magic, back); + + // And just within this crate + let back = unsafe { give_back(mem::transmute(magic)) }; + assert_eq!(magic, back); +} diff --git a/tests/run-make/extern-fn-with-union/testcrate.rs b/tests/run-make/extern-fn-with-union/testcrate.rs new file mode 100644 index 0000000000000000000000000000000000000000..28d91ff37c360fc4975b087749748ee363786b80 --- /dev/null +++ b/tests/run-make/extern-fn-with-union/testcrate.rs @@ -0,0 +1,11 @@ +#![crate_type = "lib"] + +#[repr(C)] +pub struct TestUnion { + _val: u64, +} + +#[link(name = "ctest", kind = "static")] +extern "C" { + pub fn give_back(tu: TestUnion) -> u64; +} diff --git a/tests/run-make/extern-multiple-copies/Makefile b/tests/run-make/extern-multiple-copies/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b0b84278edac38da337ef0c46b1f183f1375c057 --- /dev/null +++ b/tests/run-make/extern-multiple-copies/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo1.rs + $(RUSTC) foo2.rs + mkdir $(TMPDIR)/foo + cp $(TMPDIR)/libfoo1.rlib $(TMPDIR)/foo/libfoo1.rlib + $(RUSTC) bar.rs --extern foo1=$(TMPDIR)/libfoo1.rlib -L $(TMPDIR)/foo diff --git a/tests/run-make/extern-multiple-copies/bar.rs b/tests/run-make/extern-multiple-copies/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c6b3595f677532f653c9ebc30f86673231877c1b --- /dev/null +++ b/tests/run-make/extern-multiple-copies/bar.rs @@ -0,0 +1,6 @@ +extern crate foo2; // foo2 first to exhibit the bug +extern crate foo1; + +fn main() { + /* ... */ +} diff --git a/tests/run-make/extern-multiple-copies/foo1.rs b/tests/run-make/extern-multiple-copies/foo1.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/extern-multiple-copies/foo1.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/extern-multiple-copies/foo2.rs b/tests/run-make/extern-multiple-copies/foo2.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/extern-multiple-copies/foo2.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/extern-multiple-copies2/Makefile b/tests/run-make/extern-multiple-copies2/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..708b1c1b5409f2de01b9031d485f5469b5ba46c8 --- /dev/null +++ b/tests/run-make/extern-multiple-copies2/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo1.rs + $(RUSTC) foo2.rs + mkdir $(TMPDIR)/foo + cp $(TMPDIR)/libfoo1.rlib $(TMPDIR)/foo/libfoo1.rlib + $(RUSTC) bar.rs \ + --extern foo1=$(TMPDIR)/foo/libfoo1.rlib \ + --extern foo2=$(TMPDIR)/libfoo2.rlib diff --git a/tests/run-make/extern-multiple-copies2/bar.rs b/tests/run-make/extern-multiple-copies2/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b3088152d6ab831771fe2b7f4df0ae70f9079a44 --- /dev/null +++ b/tests/run-make/extern-multiple-copies2/bar.rs @@ -0,0 +1,8 @@ +#[macro_use] +extern crate foo2; // foo2 first to exhibit the bug +#[macro_use] +extern crate foo1; + +fn main() { + foo2::foo2(foo1::A); +} diff --git a/tests/run-make/extern-multiple-copies2/foo1.rs b/tests/run-make/extern-multiple-copies2/foo1.rs new file mode 100644 index 0000000000000000000000000000000000000000..4c778e52ff4da7b5b0bbd3b46e925a864c7b086c --- /dev/null +++ b/tests/run-make/extern-multiple-copies2/foo1.rs @@ -0,0 +1,7 @@ +#![crate_type = "rlib"] + +pub struct A; + +pub fn foo1(a: A) { + drop(a); +} diff --git a/tests/run-make/extern-multiple-copies2/foo2.rs b/tests/run-make/extern-multiple-copies2/foo2.rs new file mode 100644 index 0000000000000000000000000000000000000000..2be103507dfd88d5c0d8597f8c837e3d517c6e49 --- /dev/null +++ b/tests/run-make/extern-multiple-copies2/foo2.rs @@ -0,0 +1,8 @@ +#![crate_type = "rlib"] + +#[macro_use] +extern crate foo1; + +pub fn foo2(a: foo1::A) { + foo1::foo1(a); +} diff --git a/tests/run-make/extern-overrides-distribution/Makefile b/tests/run-make/extern-overrides-distribution/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..bfd0dd6991ba742314a03781b35cd310e23c7cda --- /dev/null +++ b/tests/run-make/extern-overrides-distribution/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) libc.rs -Cmetadata=foo + $(RUSTC) main.rs --extern libc=$(TMPDIR)/liblibc.rlib diff --git a/tests/run-make/extern-overrides-distribution/libc.rs b/tests/run-make/extern-overrides-distribution/libc.rs new file mode 100644 index 0000000000000000000000000000000000000000..ee51ae32886e318b1a1430085723d7b37fd19cf2 --- /dev/null +++ b/tests/run-make/extern-overrides-distribution/libc.rs @@ -0,0 +1,3 @@ +#![crate_type = "lib"] + +pub fn foo() {} diff --git a/tests/run-make/extern-overrides-distribution/main.rs b/tests/run-make/extern-overrides-distribution/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..1290a8c56701c5c61253117ccf0ec2fffe81d240 --- /dev/null +++ b/tests/run-make/extern-overrides-distribution/main.rs @@ -0,0 +1,5 @@ +extern crate libc; + +fn main() { + libc::foo(); +} diff --git a/tests/run-make/extra-filename-with-temp-outputs/Makefile b/tests/run-make/extra-filename-with-temp-outputs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..64745bef5b869682867fdb2a967eb82fc0b4f3b1 --- /dev/null +++ b/tests/run-make/extra-filename-with-temp-outputs/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) -C extra-filename=bar foo.rs -C save-temps + rm $(TMPDIR)/foobar.foo*0.rcgu.o + rm $(TMPDIR)/$(call BIN,foobar) diff --git a/tests/run-make/extra-filename-with-temp-outputs/foo.rs b/tests/run-make/extra-filename-with-temp-outputs/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/extra-filename-with-temp-outputs/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/fmt-write-bloat/Makefile b/tests/run-make/fmt-write-bloat/Makefile index 536157754867c47d5abcbd8e37bc6b08667db133..70e04b9af51fe27799cb7c8815d390e6d4c2afe9 100644 --- a/tests/run-make/fmt-write-bloat/Makefile +++ b/tests/run-make/fmt-write-bloat/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-windows diff --git a/tests/run-make/foreign-double-unwind/Makefile b/tests/run-make/foreign-double-unwind/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f20fe3ce66e823c91da1709f2b32c1817f87979c --- /dev/null +++ b/tests/run-make/foreign-double-unwind/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +all: foo + $(call RUN,foo) | $(CGREP) -v unreachable + +foo: foo.rs $(call NATIVE_STATICLIB,foo) + $(RUSTC) $< -lfoo $(EXTRARSCXXFLAGS) + +$(TMPDIR)/libfoo.o: foo.cpp + $(call COMPILE_OBJ_CXX,$@,$<) diff --git a/tests/run-make/foreign-double-unwind/foo.cpp b/tests/run-make/foreign-double-unwind/foo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..69a8f11c2db78e9bf83352b73f558b0f6c2f9f74 --- /dev/null +++ b/tests/run-make/foreign-double-unwind/foo.cpp @@ -0,0 +1,33 @@ +#include +#include + +void println(const char* s) { + puts(s); + fflush(stdout); +} + +struct outer_exception {}; +struct inner_exception {}; + +extern "C" { + void throw_cxx_exception() { + if (std::uncaught_exception()) { + println("throwing inner C++ exception"); + throw inner_exception(); + } else { + println("throwing outer C++ exception"); + throw outer_exception(); + } + } + + void cxx_catch_callback(void (*cb)()) { + try { + cb(); + println("unreachable: callback returns"); + } catch (outer_exception) { + println("unreachable: caught outer exception in catch (...)"); + } catch (inner_exception) { + println("unreachable: caught inner exception in catch (...)"); + } + } +} diff --git a/tests/run-make/foreign-double-unwind/foo.rs b/tests/run-make/foreign-double-unwind/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..cae8aa9402d88f7c5e6534b1dbf6936da438c90a --- /dev/null +++ b/tests/run-make/foreign-double-unwind/foo.rs @@ -0,0 +1,26 @@ +// Tests that C++ double unwinding through Rust code will be properly guarded +// against instead of exhibiting undefined behaviour. + +#![feature(c_unwind)] + +extern "C-unwind" { + fn throw_cxx_exception(); + fn cxx_catch_callback(cb: extern "C-unwind" fn()); +} + +struct ThrowOnDrop; + +impl Drop for ThrowOnDrop { + fn drop(&mut self) { + unsafe { throw_cxx_exception() }; + } +} + +extern "C-unwind" fn test_double_unwind() { + let _a = ThrowOnDrop; + let _b = ThrowOnDrop; +} + +fn main() { + unsafe { cxx_catch_callback(test_double_unwind) }; +} diff --git a/tests/run-make/foreign-exceptions/Makefile b/tests/run-make/foreign-exceptions/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a8e20ffb1f4985d9f26c1b170cad749359dfec23 --- /dev/null +++ b/tests/run-make/foreign-exceptions/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +all: foo + $(call RUN,foo) + +foo: foo.rs $(call NATIVE_STATICLIB,foo) + $(RUSTC) $< -lfoo $(EXTRARSCXXFLAGS) + +$(TMPDIR)/libfoo.o: foo.cpp + $(call COMPILE_OBJ_CXX,$@,$<) diff --git a/tests/run-make/foreign-exceptions/foo.cpp b/tests/run-make/foreign-exceptions/foo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8182021a2cce453996a4389f23ff936d8ae8b971 --- /dev/null +++ b/tests/run-make/foreign-exceptions/foo.cpp @@ -0,0 +1,60 @@ +#include +#include +#include + +void println(const char* s) { + puts(s); + fflush(stdout); +} + +struct exception {}; +struct rust_panic {}; + +struct drop_check { + bool* ok; + ~drop_check() { + println("~drop_check"); + + if (ok) + *ok = true; + } +}; + +extern "C" { + void rust_catch_callback(void (*cb)(), bool* rust_ok); + + void throw_cxx_exception() { + println("throwing C++ exception"); + throw exception(); + } + + void test_cxx_exception() { + bool rust_ok = false; + try { + rust_catch_callback(throw_cxx_exception, &rust_ok); + assert(false && "unreachable"); + } catch (exception e) { + println("caught C++ exception"); + assert(rust_ok); + return; + } + assert(false && "did not catch thrown C++ exception"); + } + + void cxx_catch_callback(void (*cb)(), bool* cxx_ok) { + drop_check x; + x.ok = NULL; + try { + cb(); + } catch (rust_panic e) { + assert(false && "shouldn't be able to catch a rust panic"); + } catch (...) { + println("caught foreign exception in catch (...)"); + // Foreign exceptions are caught by catch (...). We only set the ok + // flag if we successfully caught the panic. The destructor of + // drop_check will then set the flag to true if it is executed. + x.ok = cxx_ok; + throw; + } + } +} diff --git a/tests/run-make/foreign-exceptions/foo.rs b/tests/run-make/foreign-exceptions/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..dd3b7c76f28675b8d0d77321f9607193fe843119 --- /dev/null +++ b/tests/run-make/foreign-exceptions/foo.rs @@ -0,0 +1,59 @@ +// Tests that C++ exceptions can unwind through Rust code run destructors and +// are caught by catch_unwind. Also tests that Rust panics can unwind through +// C++ code. + +#![feature(c_unwind)] + +use std::panic::{catch_unwind, AssertUnwindSafe}; + +struct DropCheck<'a>(&'a mut bool); +impl<'a> Drop for DropCheck<'a> { + fn drop(&mut self) { + println!("DropCheck::drop"); + *self.0 = true; + } +} + +extern "C" { + fn test_cxx_exception(); +} + +extern "C-unwind" { + fn cxx_catch_callback(cb: extern "C-unwind" fn(), ok: *mut bool); +} + +#[no_mangle] +extern "C-unwind" fn rust_catch_callback(cb: extern "C-unwind" fn(), rust_ok: &mut bool) { + let _drop = DropCheck(rust_ok); + cb(); + unreachable!("should have unwound instead of returned"); +} + +fn test_rust_panic() { + extern "C-unwind" fn callback() { + println!("throwing rust panic"); + panic!(1234i32); + } + + let mut dropped = false; + let mut cxx_ok = false; + let caught_unwind = catch_unwind(AssertUnwindSafe(|| { + let _drop = DropCheck(&mut dropped); + unsafe { + cxx_catch_callback(callback, &mut cxx_ok); + } + unreachable!("should have unwound instead of returned"); + })); + println!("caught rust panic"); + assert!(dropped); + assert!(caught_unwind.is_err()); + let panic_obj = caught_unwind.unwrap_err(); + let panic_int = *panic_obj.downcast_ref::().unwrap(); + assert_eq!(panic_int, 1234); + assert!(cxx_ok); +} + +fn main() { + unsafe { test_cxx_exception() }; + test_rust_panic(); +} diff --git a/tests/run-make/foreign-rust-exceptions/Makefile b/tests/run-make/foreign-rust-exceptions/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0d007bf1c49a4141ad4acc3fe5a3d68a13649381 --- /dev/null +++ b/tests/run-make/foreign-rust-exceptions/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +# ignore-i686-pc-windows-gnu + +# This test doesn't work on 32-bit MinGW as cdylib has its own copy of unwinder +# so cross-DLL unwinding does not work. + +include ../tools.mk + +all: + $(RUSTC) bar.rs --crate-type=cdylib + $(RUSTC) foo.rs + $(call RUN,foo) 2>&1 | $(CGREP) "Rust cannot catch foreign exceptions" diff --git a/tests/run-make/foreign-rust-exceptions/bar.rs b/tests/run-make/foreign-rust-exceptions/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..5f9efe323609b8d857fb90de218fcfb93e72ba42 --- /dev/null +++ b/tests/run-make/foreign-rust-exceptions/bar.rs @@ -0,0 +1,7 @@ +#![crate_type = "cdylib"] +#![feature(c_unwind)] + +#[no_mangle] +extern "C-unwind" fn panic() { + panic!(); +} diff --git a/tests/run-make/foreign-rust-exceptions/foo.rs b/tests/run-make/foreign-rust-exceptions/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..266987c5b6d63b117c1deeeb37535b917e52730e --- /dev/null +++ b/tests/run-make/foreign-rust-exceptions/foo.rs @@ -0,0 +1,13 @@ +#![feature(c_unwind)] + +#[cfg_attr(not(windows), link(name = "bar"))] +#[cfg_attr(windows, link(name = "bar.dll"))] +extern "C-unwind" { + fn panic(); +} + +fn main() { + let _ = std::panic::catch_unwind(|| { + unsafe { panic() }; + }); +} diff --git a/tests/run-make/fpic/Makefile b/tests/run-make/fpic/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c38dd8d6e8c4b74dfefa3a5fb0b90bb8961b9aad --- /dev/null +++ b/tests/run-make/fpic/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows +# ignore-macos + +# Test for #39529. +# `-z text` causes ld to error if there are any non-PIC sections + +all: + $(RUSTC) hello.rs -C link-args=-Wl,-z,text diff --git a/tests/run-make/fpic/hello.rs b/tests/run-make/fpic/hello.rs new file mode 100644 index 0000000000000000000000000000000000000000..45590d86ba6c51f0babffb0b43e3e2f44d2f9e07 --- /dev/null +++ b/tests/run-make/fpic/hello.rs @@ -0,0 +1 @@ +fn main() { } diff --git a/tests/run-make/glibc-staticlib-args/Makefile b/tests/run-make/glibc-staticlib-args/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..cad6c049e4594e3d182d0916fc3d5f91d246bc52 --- /dev/null +++ b/tests/run-make/glibc-staticlib-args/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +# only-gnu +# only-linux + +include ../tools.mk + +# This ensures that std::env::args works in a library called from C on glibc Linux. + +all: + $(RUSTC) --crate-type=staticlib library.rs + $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(call RUN,program) diff --git a/tests/run-make/glibc-staticlib-args/library.rs b/tests/run-make/glibc-staticlib-args/library.rs new file mode 100644 index 0000000000000000000000000000000000000000..5ab627a2ac1a282531a92a42cdacce95b489f6bd --- /dev/null +++ b/tests/run-make/glibc-staticlib-args/library.rs @@ -0,0 +1,4 @@ +#[no_mangle] +pub extern "C" fn args_check() { + assert_ne!(std::env::args_os().count(), 0); +} diff --git a/tests/run-make/glibc-staticlib-args/program.c b/tests/run-make/glibc-staticlib-args/program.c new file mode 100644 index 0000000000000000000000000000000000000000..30f6974b75086ac6c67b50621f65832e1c3e8bce --- /dev/null +++ b/tests/run-make/glibc-staticlib-args/program.c @@ -0,0 +1,6 @@ +void args_check(); + +int main() { + args_check(); + return 0; +} diff --git a/tests/run-make/hir-tree/Makefile b/tests/run-make/hir-tree/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b0450ea4bc5fddae4b62bf1c2281eb427a156193 --- /dev/null +++ b/tests/run-make/hir-tree/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +# Test that hir-tree output doesn't crash and includes +# the string constant we would expect to see. + +all: + $(RUSTC) -o $(TMPDIR)/input.hir -Z unpretty=hir-tree input.rs + $(CGREP) '"Hello, Rustaceans!\n"' < $(TMPDIR)/input.hir diff --git a/tests/run-make/hir-tree/input.rs b/tests/run-make/hir-tree/input.rs new file mode 100644 index 0000000000000000000000000000000000000000..9d1a4e9e47d718f0355edc7eef18090bcc6fc152 --- /dev/null +++ b/tests/run-make/hir-tree/input.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, Rustaceans!"); +} diff --git a/tests/run-make/include_bytes_deps/Makefile b/tests/run-make/include_bytes_deps/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..696dfd207bbff7e04d0a9ed2f287a776b9f74167 --- /dev/null +++ b/tests/run-make/include_bytes_deps/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +# ignore-freebsd + +all: + $(RUSTC) --emit dep-info main.rs + $(CGREP) "input.txt" "input.bin" "input.md" < $(TMPDIR)/main.d diff --git a/tests/run-make/include_bytes_deps/input.bin b/tests/run-make/include_bytes_deps/input.bin new file mode 100644 index 0000000000000000000000000000000000000000..cd0875583aabe89ee197ea133980a9085d08e497 --- /dev/null +++ b/tests/run-make/include_bytes_deps/input.bin @@ -0,0 +1 @@ +Hello world! diff --git a/tests/run-make/include_bytes_deps/input.md b/tests/run-make/include_bytes_deps/input.md new file mode 100644 index 0000000000000000000000000000000000000000..2a19b7405f795f88e9346104f4a843251e6eef2d --- /dev/null +++ b/tests/run-make/include_bytes_deps/input.md @@ -0,0 +1 @@ +# Hello, world! diff --git a/tests/run-make/include_bytes_deps/input.txt b/tests/run-make/include_bytes_deps/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..cd0875583aabe89ee197ea133980a9085d08e497 --- /dev/null +++ b/tests/run-make/include_bytes_deps/input.txt @@ -0,0 +1 @@ +Hello world! diff --git a/tests/run-make/include_bytes_deps/main.rs b/tests/run-make/include_bytes_deps/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..2fd55699d44ddce99163b985a1f73468190ba115 --- /dev/null +++ b/tests/run-make/include_bytes_deps/main.rs @@ -0,0 +1,10 @@ +#[doc = include_str!("input.md")] +pub struct SomeStruct; + +pub fn main() { + const INPUT_TXT: &'static str = include_str!("input.txt"); + const INPUT_BIN: &'static [u8] = include_bytes!("input.bin"); + + println!("{}", INPUT_TXT); + println!("{:?}", INPUT_BIN); +} diff --git a/tests/run-make/incr-add-rust-src-component/Makefile b/tests/run-make/incr-add-rust-src-component/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fd09c2299f98e8d97eb65ad19825a80ca7ae5c0d --- /dev/null +++ b/tests/run-make/incr-add-rust-src-component/Makefile @@ -0,0 +1,45 @@ +# ignore-cross-compile +include ../tools.mk + +# rust-lang/rust#70924: Test that if we add rust-src component in between two +# incremental compiles, the compiler does not ICE on the second. + +# This test uses `ln -s` rather than copying to save testing time, but its +# usage doesn't work on windows. So ignore windows. + +# ignore-windows + +SYSROOT:=$(shell $(RUSTC) --print sysroot) +FAKEROOT=$(TMPDIR)/fakeroot +INCR=$(TMPDIR)/incr + +# Make a local copy of the sysroot; then remove the rust-src part of it, if +# present, for the *first* build. Then put in a facsimile of the rust-src +# component for the second build, in order to expose the ICE from issue #70924. +# +# Note that it is much easier to just do `cp -a $(SYSROOT)/* $(FAKEROOT)` as a +# first step, but I am concerned that would be too expensive in a unit test +# compared to making symbolic links. +# +# Anyway, the pattern you'll see here is: For every prefix in +# root/lib/rustlib/src, link all of prefix parent content, then remove the +# prefix, then loop on the next prefix. This way, we basically create a copy of +# the context around root/lib/rustlib/src, and can freely add/remove the src +# component itself. +all: + mkdir $(FAKEROOT) + ln -s $(SYSROOT)/* $(FAKEROOT) + rm -f $(FAKEROOT)/lib + mkdir $(FAKEROOT)/lib + ln -s $(SYSROOT)/lib/* $(FAKEROOT)/lib + rm -f $(FAKEROOT)/lib/rustlib + mkdir $(FAKEROOT)/lib/rustlib + ln -s $(SYSROOT)/lib/rustlib/* $(FAKEROOT)/lib/rustlib + rm -f $(FAKEROOT)/lib/rustlib/src + mkdir $(FAKEROOT)/lib/rustlib/src + ln -s $(SYSROOT)/lib/rustlib/src/* $(FAKEROOT)/lib/rustlib/src + rm -f $(FAKEROOT)/lib/rustlib/src/rust + $(RUSTC) --sysroot $(FAKEROOT) -C incremental=$(INCR) main.rs + mkdir -p $(FAKEROOT)/lib/rustlib/src/rust/src/libstd + touch $(FAKEROOT)/lib/rustlib/src/rust/src/libstd/lib.rs + $(RUSTC) --sysroot $(FAKEROOT) -C incremental=$(INCR) main.rs diff --git a/tests/run-make/incr-add-rust-src-component/main.rs b/tests/run-make/incr-add-rust-src-component/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..f6320bcb04aa8f747f266e1105886837414fd921 --- /dev/null +++ b/tests/run-make/incr-add-rust-src-component/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World"); +} diff --git a/tests/run-make/incr-foreign-head-span/Makefile b/tests/run-make/incr-foreign-head-span/Makefile index 712965eaa883af043370b01940ffbb8dc1fef6e2..9d6102cdd72dcabb247d780d2f4495c5a3b746e0 100644 --- a/tests/run-make/incr-foreign-head-span/Makefile +++ b/tests/run-make/incr-foreign-head-span/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-none no-std is not supported # ignore-nvptx64-nvidia-cuda FIXME: can't find crate for 'std' diff --git a/tests/run-make/incr-prev-body-beyond-eof/Makefile b/tests/run-make/incr-prev-body-beyond-eof/Makefile index 24eea3acaeacd4a1f4ec798f95c9fff3dc19dc20..aa47552f52c938b709b379c6c14b943c5bdce5c8 100644 --- a/tests/run-make/incr-prev-body-beyond-eof/Makefile +++ b/tests/run-make/incr-prev-body-beyond-eof/Makefile @@ -1,7 +1,7 @@ # ignore-none no-std is not supported # ignore-nvptx64-nvidia-cuda FIXME: can't find crate for `std` -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # Tests that we don't ICE during incremental compilation after modifying a # function span such that its previous end line exceeds the number of lines diff --git a/tests/run-make/incremental-session-fail/Makefile b/tests/run-make/incremental-session-fail/Makefile index 6ce1370927bc1eb776da0deb2514064f22cfaee2..f43eece2eb70906f368e226c9c3c1f78465eeb2e 100644 --- a/tests/run-make/incremental-session-fail/Makefile +++ b/tests/run-make/incremental-session-fail/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk SESSION_DIR := $(TMPDIR)/session OUTPUT_FILE := $(TMPDIR)/build-output diff --git a/tests/run-make/inline-always-many-cgu/Makefile b/tests/run-make/inline-always-many-cgu/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9945821db289121aa60849b7a878aded3777928d --- /dev/null +++ b/tests/run-make/inline-always-many-cgu/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +all: + $(RUSTC) foo.rs --emit llvm-ir -C codegen-units=2 + if cat $(TMPDIR)/*.ll | $(CGREP) -e '\bcall\b'; then \ + echo "found call instruction when one wasn't expected"; \ + exit 1; \ + fi diff --git a/tests/run-make/inline-always-many-cgu/foo.rs b/tests/run-make/inline-always-many-cgu/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..65fe69c16fe7c0b34297eeb040859246c5b9ca4d --- /dev/null +++ b/tests/run-make/inline-always-many-cgu/foo.rs @@ -0,0 +1,15 @@ +#![crate_type = "lib"] + +pub mod a { + #[inline(always)] + pub fn foo() { + } + + pub fn bar() { + } +} + +#[no_mangle] +pub fn bar() { + a::foo(); +} diff --git a/tests/run-make/interdependent-c-libraries/Makefile b/tests/run-make/interdependent-c-libraries/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..53a696d82bf12794cddc4e973f63fe6d0d0372eb --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/Makefile @@ -0,0 +1,15 @@ +# ignore-cross-compile +include ../tools.mk + +# The rust crate foo will link to the native library foo, while the rust crate +# bar will link to the native library bar. There is also a dependency between +# the native library bar to the natibe library foo. +# +# This test ensures that the ordering of -lfoo and -lbar on the command line is +# correct to complete the linkage. If passed as "-lfoo -lbar", then the 'foo' +# library will be stripped out, and the linkage will fail. + +all: $(call NATIVE_STATICLIB,foo) $(call NATIVE_STATICLIB,bar) + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(RUSTC) main.rs --print link-args diff --git a/tests/run-make/interdependent-c-libraries/bar.c b/tests/run-make/interdependent-c-libraries/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..812c97535287233599c6f936f6cd97be7f3ea5e6 --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/bar.c @@ -0,0 +1,3 @@ +void foo(); + +void bar() { foo(); } diff --git a/tests/run-make/interdependent-c-libraries/bar.rs b/tests/run-make/interdependent-c-libraries/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..3c2c3f218149480293e1f27a9028c052b2157c80 --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/bar.rs @@ -0,0 +1,14 @@ +#![crate_type = "rlib"] + +extern crate foo; + +#[link(name = "bar", kind = "static")] +extern "C" { + fn bar(); +} + +pub fn doit() { + unsafe { + bar(); + } +} diff --git a/tests/run-make/interdependent-c-libraries/foo.c b/tests/run-make/interdependent-c-libraries/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..85e6cd8c3909a7e67c41750f5210b1463dd7a90c --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/foo.c @@ -0,0 +1 @@ +void foo() {} diff --git a/tests/run-make/interdependent-c-libraries/foo.rs b/tests/run-make/interdependent-c-libraries/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..a69809726c693b689216d6a3b8ed703a336a21f2 --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/foo.rs @@ -0,0 +1,12 @@ +#![crate_type = "rlib"] + +#[link(name = "foo", kind = "static")] +extern "C" { + fn foo(); +} + +pub fn doit() { + unsafe { + foo(); + } +} diff --git a/tests/run-make/interdependent-c-libraries/main.rs b/tests/run-make/interdependent-c-libraries/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..2aba427df474380f006af18b35f76e475a8f9079 --- /dev/null +++ b/tests/run-make/interdependent-c-libraries/main.rs @@ -0,0 +1,6 @@ +extern crate foo; +extern crate bar; + +fn main() { + bar::doit(); +} diff --git a/tests/run-make/intrinsic-unreachable/Makefile b/tests/run-make/intrinsic-unreachable/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ff9cc57098c6bff2d203170fdd3fdafa2057f77e --- /dev/null +++ b/tests/run-make/intrinsic-unreachable/Makefile @@ -0,0 +1,12 @@ +include ../tools.mk + +# needs-asm-support +# ignore-windows-msvc +# +# Because of Windows exception handling, the code is not necessarily any shorter. +# https://github.com/llvm-mirror/llvm/commit/64b2297786f7fd6f5fa24cdd4db0298fbf211466 + +all: + $(RUSTC) -O --emit asm exit-ret.rs + $(RUSTC) -O --emit asm exit-unreachable.rs + test `wc -l < $(TMPDIR)/exit-unreachable.s` -lt `wc -l < $(TMPDIR)/exit-ret.s` diff --git a/tests/run-make/intrinsic-unreachable/exit-ret.rs b/tests/run-make/intrinsic-unreachable/exit-ret.rs new file mode 100644 index 0000000000000000000000000000000000000000..e7b9694d9f2ad6f20a2fb17d70f45b0550451f5c --- /dev/null +++ b/tests/run-make/intrinsic-unreachable/exit-ret.rs @@ -0,0 +1,14 @@ +#![crate_type="lib"] +use std::arch::asm; + +#[deny(unreachable_code)] +pub fn exit(n: usize) -> i32 { + unsafe { + // Pretend this asm is an exit() syscall. + asm!("/*{0}*/", in(reg) n); + } + // This return value is just here to generate some extra code for a return + // value, making it easier for the test script to detect whether the + // compiler deleted it. + 42 +} diff --git a/tests/run-make/intrinsic-unreachable/exit-unreachable.rs b/tests/run-make/intrinsic-unreachable/exit-unreachable.rs new file mode 100644 index 0000000000000000000000000000000000000000..ec85db733df04d59a3c461d3eb6c64f252c2f15c --- /dev/null +++ b/tests/run-make/intrinsic-unreachable/exit-unreachable.rs @@ -0,0 +1,18 @@ +#![feature(core_intrinsics)] +#![crate_type="lib"] +use std::arch::asm; + +use std::intrinsics; + +#[allow(unreachable_code)] +pub fn exit(n: usize) -> i32 { + unsafe { + // Pretend this asm is an exit() syscall. + asm!("/*{0}*/", in(reg) n); + intrinsics::unreachable() + } + // This return value is just here to generate some extra code for a return + // value, making it easier for the test script to detect whether the + // compiler deleted it. + 42 +} diff --git a/tests/run-make/invalid-library/Makefile b/tests/run-make/invalid-library/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..910d9af7b056498902f44fecc98278e607ce8a75 --- /dev/null +++ b/tests/run-make/invalid-library/Makefile @@ -0,0 +1,6 @@ +include ../tools.mk + +all: + touch $(TMPDIR)/lib.rmeta + $(AR) crus $(TMPDIR)/libfoo-ffffffff-1.0.rlib $(TMPDIR)/lib.rmeta + $(RUSTC) foo.rs 2>&1 | $(CGREP) "found invalid metadata" diff --git a/tests/run-make/invalid-library/foo.rs b/tests/run-make/invalid-library/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe --- /dev/null +++ b/tests/run-make/invalid-library/foo.rs @@ -0,0 +1,3 @@ +extern crate foo; + +fn main() {} diff --git a/tests/run-make/invalid-so/Makefile b/tests/run-make/invalid-so/Makefile index 5b82ecd207dda42bff095b9041f99baa973ccf96..e36c7040bc6cadeff30b3ba777842c132c2b364e 100644 --- a/tests/run-make/invalid-so/Makefile +++ b/tests/run-make/invalid-so/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk DYLIB_NAME := $(shell echo | $(RUSTC) --crate-name foo --crate-type dylib --print file-names -) diff --git a/tests/run-make/invalid-staticlib/Makefile b/tests/run-make/invalid-staticlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3f0f74ce3cb02c61e196b83baaea6ea5ef8d49ee --- /dev/null +++ b/tests/run-make/invalid-staticlib/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + touch $(TMPDIR)/libfoo.a + echo | $(RUSTC) - --crate-type=rlib -lstatic=foo 2>&1 | $(CGREP) "failed to add native library" diff --git a/tests/run-make/issue-10971-temps-dir/Makefile b/tests/run-make/issue-10971-temps-dir/Makefile index e589bbffe60b9eeb3e9c9f622de63db479f11a5f..6e1649a58d23179643d3a82bf5216176b5dda871 100644 --- a/tests/run-make/issue-10971-temps-dir/Makefile +++ b/tests/run-make/issue-10971-temps-dir/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # Regression test for issue #10971 # Running two invocations in parallel would overwrite each other's temp files. diff --git a/tests/run-make/issue-11908/Makefile b/tests/run-make/issue-11908/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..38586662fc75bea7b2d44dee02759f8048af45d2 --- /dev/null +++ b/tests/run-make/issue-11908/Makefile @@ -0,0 +1,22 @@ +# ignore-cross-compile +# This test ensures that if you have the same rlib or dylib at two locations +# in the same path that you don't hit an assertion in the compiler. +# +# Note that this relies on `liburl` to be in the path somewhere else, +# and then our aux-built libraries will collide with liburl (they have +# the same version listed) + +include ../tools.mk + +all: + mkdir $(TMPDIR)/other + $(RUSTC) foo.rs --crate-type=dylib -C prefer-dynamic + mv $(call DYLIB,foo) $(TMPDIR)/other + $(RUSTC) foo.rs --crate-type=dylib -C prefer-dynamic + $(RUSTC) bar.rs -L $(TMPDIR)/other + rm -rf $(TMPDIR) + mkdir -p $(TMPDIR)/other + $(RUSTC) foo.rs --crate-type=rlib + mv $(TMPDIR)/libfoo.rlib $(TMPDIR)/other + $(RUSTC) foo.rs --crate-type=rlib + $(RUSTC) bar.rs -L $(TMPDIR)/other diff --git a/tests/run-make/issue-11908/bar.rs b/tests/run-make/issue-11908/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe --- /dev/null +++ b/tests/run-make/issue-11908/bar.rs @@ -0,0 +1,3 @@ +extern crate foo; + +fn main() {} diff --git a/tests/run-make/issue-11908/foo.rs b/tests/run-make/issue-11908/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..82b2dfe9fdb5152d916ac847baaa15e7f801745e --- /dev/null +++ b/tests/run-make/issue-11908/foo.rs @@ -0,0 +1 @@ +#![crate_name = "foo"] diff --git a/tests/run-make/issue-14500/Makefile b/tests/run-make/issue-14500/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..eeab48de3b9500100646d3f7463c2fd75561d930 --- /dev/null +++ b/tests/run-make/issue-14500/Makefile @@ -0,0 +1,15 @@ +include ../tools.mk + +# ignore-cross-compile + +# Test to make sure that reachable extern fns are always available in final +# productcs, including when LTO is used. In this test, the `foo` crate has a +# reahable symbol, and is a dependency of the `bar` crate. When the `bar` crate +# is compiled with LTO, it shouldn't strip the symbol from `foo`, and that's the +# only way that `foo.c` will successfully compile. + +all: + $(RUSTC) foo.rs --crate-type=rlib + $(RUSTC) bar.rs --crate-type=staticlib -C lto -L. -o $(TMPDIR)/libbar.a + $(CC) foo.c $(TMPDIR)/libbar.a $(EXTRACFLAGS) $(call OUT_EXE,foo) + $(call RUN,foo) diff --git a/tests/run-make/issue-14500/bar.rs b/tests/run-make/issue-14500/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..49af74e1b748908873bf49dfcd2239724b7ab495 --- /dev/null +++ b/tests/run-make/issue-14500/bar.rs @@ -0,0 +1 @@ +extern crate foo; diff --git a/tests/run-make/issue-14500/foo.c b/tests/run-make/issue-14500/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..2353d400df3038297225eb9f5c3c4eee01dea913 --- /dev/null +++ b/tests/run-make/issue-14500/foo.c @@ -0,0 +1,7 @@ +extern void foo(); +extern char FOO_STATIC; + +int main() { + foo(); + return (int)FOO_STATIC; +} diff --git a/tests/run-make/issue-14500/foo.rs b/tests/run-make/issue-14500/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..7c19c1f2c678a632c43cd1db85bca5b8e2b38cca --- /dev/null +++ b/tests/run-make/issue-14500/foo.rs @@ -0,0 +1,5 @@ +#[no_mangle] +pub extern "C" fn foo() {} + +#[no_mangle] +pub static FOO_STATIC: u8 = 0; diff --git a/tests/run-make/issue-14698/Makefile b/tests/run-make/issue-14698/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a1cfb5abab5411ef8daa57a54102416675af4500 --- /dev/null +++ b/tests/run-make/issue-14698/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + TMP=fake TMPDIR=fake $(RUSTC) foo.rs 2>&1 | $(CGREP) "couldn't create a temp dir:" diff --git a/tests/run-make/issue-14698/foo.rs b/tests/run-make/issue-14698/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/issue-14698/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/issue-15460/Makefile b/tests/run-make/issue-15460/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a36a085fa6f186994bdce233b8d47b6afb0320fa --- /dev/null +++ b/tests/run-make/issue-15460/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,foo) + $(RUSTC) foo.rs -C extra-filename=-383hf8 -C prefer-dynamic + $(RUSTC) bar.rs + $(call RUN,bar) diff --git a/tests/run-make/issue-15460/bar.rs b/tests/run-make/issue-15460/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..e66aeb6bd39e6cfa627555237f8b774f656bfeb0 --- /dev/null +++ b/tests/run-make/issue-15460/bar.rs @@ -0,0 +1,4 @@ +extern crate foo; +fn main() { + unsafe { foo::foo() } +} diff --git a/tests/run-make/issue-15460/foo.c b/tests/run-make/issue-15460/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..fdf595b574e3397280431138651de0bfd5c85c6f --- /dev/null +++ b/tests/run-make/issue-15460/foo.c @@ -0,0 +1,6 @@ +// ignore-license + +#ifdef _WIN32 +__declspec(dllexport) +#endif +void foo() {} diff --git a/tests/run-make/issue-15460/foo.rs b/tests/run-make/issue-15460/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b4eaa0b31c5be9bc67602cfeb1e60c2e09f4e71d --- /dev/null +++ b/tests/run-make/issue-15460/foo.rs @@ -0,0 +1,6 @@ +#![crate_type = "dylib"] + +#[link(name = "foo", kind = "static")] +extern "C" { + pub fn foo(); +} diff --git a/tests/run-make/issue-18943/Makefile b/tests/run-make/issue-18943/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fc40d756d6f21650a7e641741638a4be60bfecb4 --- /dev/null +++ b/tests/run-make/issue-18943/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +# Regression test for ICE #18943 when compiling as lib + +all: + $(RUSTC) foo.rs --crate-type lib + $(call REMOVE_RLIBS,foo) && exit 0 || exit 1 diff --git a/tests/run-make/issue-18943/foo.rs b/tests/run-make/issue-18943/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..d18400dd3a54b6e23c3d89e8550d782c458a8cb9 --- /dev/null +++ b/tests/run-make/issue-18943/foo.rs @@ -0,0 +1,5 @@ +trait Foo { } + +trait Bar { } + +impl<'a> Foo for Bar + 'a { } diff --git a/tests/run-make/issue-20626/Makefile b/tests/run-make/issue-20626/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..63eee910a9c3a33bd335495e0f44b44888def7a0 --- /dev/null +++ b/tests/run-make/issue-20626/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +# Test output to be four +# The original error only occurred when printing, not when comparing using assert! + +all: + $(RUSTC) foo.rs -O + [ `$(call RUN,foo)` = "4" ] diff --git a/tests/run-make/issue-20626/foo.rs b/tests/run-make/issue-20626/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..a474e234e72d0b5b83cdd340bd8071867f3b5651 --- /dev/null +++ b/tests/run-make/issue-20626/foo.rs @@ -0,0 +1,13 @@ +fn identity(a: &u32) -> &u32 { a } + +fn print_foo(f: &fn(&u32) -> &u32, x: &u32) { + print!("{}", (*f)(x)); +} + +fn main() { + let x = &4; + let f: fn(&u32) -> &u32 = identity; + + // Didn't print 4 on optimized builds + print_foo(&f, x); +} diff --git a/tests/run-make/issue-22131/Makefile b/tests/run-make/issue-22131/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4f33a4659cc1ea98bca11a590c3e3b657313667f --- /dev/null +++ b/tests/run-make/issue-22131/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: foo.rs + $(RUSTC) --cfg 'feature="bar"' --crate-type lib foo.rs + $(RUSTDOC) --test --cfg 'feature="bar"' \ + -L $(TMPDIR) foo.rs |\ + $(CGREP) 'foo.rs - foo (line 1) ... ok' diff --git a/tests/run-make/issue-22131/foo.rs b/tests/run-make/issue-22131/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..33255d76879f33c84785a988bdc2c44a8047266d --- /dev/null +++ b/tests/run-make/issue-22131/foo.rs @@ -0,0 +1,5 @@ +/// ```rust +/// assert_eq!(foo::foo(), 1); +/// ``` +#[cfg(feature = "bar")] +pub fn foo() -> i32 { 1 } diff --git a/tests/run-make/issue-24445/Makefile b/tests/run-make/issue-24445/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a13910aa73ed0824cd131c429843a1ecdd8ad40c --- /dev/null +++ b/tests/run-make/issue-24445/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +# only-linux + +all: + $(RUSTC) foo.rs + $(CC) foo.c -lfoo -L $(TMPDIR) -Wl,--gc-sections -lpthread -ldl -o $(TMPDIR)/foo + $(call RUN,foo) + $(CC) foo.c -lfoo -L $(TMPDIR) -Wl,--gc-sections -lpthread -ldl -pie -fPIC -o $(TMPDIR)/foo + $(call RUN,foo) diff --git a/tests/run-make/issue-24445/foo.c b/tests/run-make/issue-24445/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..bb4036b06e13b79a32ec78ae04db97590f54b2cc --- /dev/null +++ b/tests/run-make/issue-24445/foo.c @@ -0,0 +1,6 @@ +void foo(); + +int main() { + foo(); + return 0; +} diff --git a/tests/run-make/issue-24445/foo.rs b/tests/run-make/issue-24445/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b67f3847cd4986ed227286b2e32a234ef0561191 --- /dev/null +++ b/tests/run-make/issue-24445/foo.rs @@ -0,0 +1,15 @@ +#![crate_type = "staticlib"] + +struct Destroy; +impl Drop for Destroy { + fn drop(&mut self) { println!("drop"); } +} + +thread_local! { + static X: Destroy = Destroy +} + +#[no_mangle] +pub extern "C" fn foo() { + X.with(|_| ()); +} diff --git a/tests/run-make/issue-25581/Makefile b/tests/run-make/issue-25581/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3cbbf3839969f1ada665724fbc4d3c43a9c82529 --- /dev/null +++ b/tests/run-make/issue-25581/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) test.rs + $(call RUN,test) || exit 1 diff --git a/tests/run-make/issue-25581/test.c b/tests/run-make/issue-25581/test.c new file mode 100644 index 0000000000000000000000000000000000000000..52fbf78510a88f98951ec1ca0fbf53883329b307 --- /dev/null +++ b/tests/run-make/issue-25581/test.c @@ -0,0 +1,15 @@ +#include +#include + +struct ByteSlice { + uint8_t *data; + size_t len; +}; + +size_t slice_len(struct ByteSlice bs) { + return bs.len; +} + +uint8_t slice_elem(struct ByteSlice bs, size_t idx) { + return bs.data[idx]; +} diff --git a/tests/run-make/issue-25581/test.rs b/tests/run-make/issue-25581/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..ba6749c9722241dd4a89b19de8db4b010006df7f --- /dev/null +++ b/tests/run-make/issue-25581/test.rs @@ -0,0 +1,18 @@ +#[link(name = "test", kind = "static")] +extern "C" { + fn slice_len(s: &[u8]) -> usize; + fn slice_elem(s: &[u8], idx: usize) -> u8; +} + +fn main() { + let data = [1, 2, 3, 4, 5]; + + unsafe { + assert_eq!(data.len(), slice_len(&data) as usize); + assert_eq!(data[0], slice_elem(&data, 0)); + assert_eq!(data[1], slice_elem(&data, 1)); + assert_eq!(data[2], slice_elem(&data, 2)); + assert_eq!(data[3], slice_elem(&data, 3)); + assert_eq!(data[4], slice_elem(&data, 4)); + } +} diff --git a/tests/run-make/issue-26006/Makefile b/tests/run-make/issue-26006/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b679c121530ad32e9b326c83ec7ce73193db0918 --- /dev/null +++ b/tests/run-make/issue-26006/Makefile @@ -0,0 +1,17 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows + +OUT := $(TMPDIR)/out + +all: time + +time: libc + mkdir -p $(OUT)/time $(OUT)/time/deps + ln -sf $(OUT)/libc/liblibc.rlib $(OUT)/time/deps/ + $(RUSTC) in/time/lib.rs -Ldependency=$(OUT)/time/deps/ + +libc: + mkdir -p $(OUT)/libc + $(RUSTC) in/libc/lib.rs --crate-name=libc -Cmetadata=foo -o $(OUT)/libc/liblibc.rlib diff --git a/tests/run-make/issue-26006/in/libc/lib.rs b/tests/run-make/issue-26006/in/libc/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..23f2bf51800a388226e02d77dc0e4af5d1b6dff8 --- /dev/null +++ b/tests/run-make/issue-26006/in/libc/lib.rs @@ -0,0 +1,3 @@ +#![crate_type="rlib"] + +pub fn something(){} diff --git a/tests/run-make/issue-26006/in/time/lib.rs b/tests/run-make/issue-26006/in/time/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..87f2f824a36695c6c440d6c70ea203513c9d1cd3 --- /dev/null +++ b/tests/run-make/issue-26006/in/time/lib.rs @@ -0,0 +1,4 @@ +#![feature(rustc_private)] +extern crate libc; + +fn main(){} diff --git a/tests/run-make/issue-26092/Makefile b/tests/run-make/issue-26092/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..96822e7690bef71ea3e9ca7487836e98cf348955 --- /dev/null +++ b/tests/run-make/issue-26092/Makefile @@ -0,0 +1,6 @@ +include ../tools.mk + +# This test ensures that rustc does not panic with `-o ""` option. + +all: + $(RUSTC) -o "" blank.rs 2>&1 | $(CGREP) -i 'panic' && exit 1 || exit 0 diff --git a/tests/run-make/issue-26092/blank.rs b/tests/run-make/issue-26092/blank.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/issue-26092/blank.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/issue-28595/Makefile b/tests/run-make/issue-28595/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..258f9788aafa784144f76a7fd78da421909a29b2 --- /dev/null +++ b/tests/run-make/issue-28595/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,a) $(call NATIVE_STATICLIB,b) + $(RUSTC) a.rs + $(RUSTC) b.rs + $(call RUN,b) diff --git a/tests/run-make/issue-28595/a.c b/tests/run-make/issue-28595/a.c new file mode 100644 index 0000000000000000000000000000000000000000..7bfd83cca210a92f53d831ff0eab2eedf45051d1 --- /dev/null +++ b/tests/run-make/issue-28595/a.c @@ -0,0 +1 @@ +void a(void) {} diff --git a/tests/run-make/issue-28595/a.rs b/tests/run-make/issue-28595/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..07863cf64d6e9de0766f1816b22ddf9028b9b6a5 --- /dev/null +++ b/tests/run-make/issue-28595/a.rs @@ -0,0 +1,6 @@ +#![crate_type = "rlib"] + +#[link(name = "a", kind = "static")] +extern "C" { + pub fn a(); +} diff --git a/tests/run-make/issue-28595/b.c b/tests/run-make/issue-28595/b.c new file mode 100644 index 0000000000000000000000000000000000000000..6aecb5f9e04c0058b0ed06452d700897a38b5951 --- /dev/null +++ b/tests/run-make/issue-28595/b.c @@ -0,0 +1,5 @@ +extern void a(void); + +void b(void) { + a(); +} diff --git a/tests/run-make/issue-28595/b.rs b/tests/run-make/issue-28595/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..1f389859fad73414695390b5b61fd999a0b43c11 --- /dev/null +++ b/tests/run-make/issue-28595/b.rs @@ -0,0 +1,12 @@ +extern crate a; + +#[link(name = "b", kind = "static")] +extern "C" { + pub fn b(); +} + +fn main() { + unsafe { + b(); + } +} diff --git a/tests/run-make/issue-28766/Makefile b/tests/run-make/issue-28766/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..96d0bdc2b2aea99d05264ad289d2bf6bae114ad2 --- /dev/null +++ b/tests/run-make/issue-28766/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) -O foo.rs + $(RUSTC) -O -L $(TMPDIR) main.rs diff --git a/tests/run-make/issue-28766/foo.rs b/tests/run-make/issue-28766/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..1dcabe42dc11672121f1e50c935f5b178d295a1b --- /dev/null +++ b/tests/run-make/issue-28766/foo.rs @@ -0,0 +1,8 @@ +#![crate_type="lib"] +pub struct Foo(()); + +impl Foo { + pub fn new() -> Foo { + Foo(()) + } +} diff --git a/tests/run-make/issue-28766/main.rs b/tests/run-make/issue-28766/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..de12b1fd9dc3de2933f3462af407b2174f456328 --- /dev/null +++ b/tests/run-make/issue-28766/main.rs @@ -0,0 +1,7 @@ +#![crate_type="lib"] +extern crate foo; +use foo::Foo; + +pub fn crash() -> Box { + Box::new(Foo::new()) +} diff --git a/tests/run-make/issue-30063/Makefile b/tests/run-make/issue-30063/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8a69ca79f515066a7a5155547acd4c7bb5bef26f --- /dev/null +++ b/tests/run-make/issue-30063/Makefile @@ -0,0 +1,36 @@ +# ignore-cross-compile +include ../tools.mk + +all: + rm -f $(TMPDIR)/foo-output + $(RUSTC) -C codegen-units=4 -o $(TMPDIR)/foo-output foo.rs + rm $(TMPDIR)/foo-output + + rm -f $(TMPDIR)/asm-output + $(RUSTC) -C codegen-units=4 --emit=asm -o $(TMPDIR)/asm-output foo.rs + rm $(TMPDIR)/asm-output + + rm -f $(TMPDIR)/bc-output + $(RUSTC) -C codegen-units=4 --emit=llvm-bc -o $(TMPDIR)/bc-output foo.rs + rm $(TMPDIR)/bc-output + + rm -f $(TMPDIR)/ir-output + $(RUSTC) -C codegen-units=4 --emit=llvm-ir -o $(TMPDIR)/ir-output foo.rs + rm $(TMPDIR)/ir-output + + rm -f $(TMPDIR)/link-output + $(RUSTC) -C codegen-units=4 --emit=link -o $(TMPDIR)/link-output foo.rs + rm $(TMPDIR)/link-output + + rm -f $(TMPDIR)/obj-output + $(RUSTC) -C codegen-units=4 --emit=obj -o $(TMPDIR)/obj-output foo.rs + rm $(TMPDIR)/obj-output + + rm -f $(TMPDIR)/dep-output + $(RUSTC) -C codegen-units=4 --emit=dep-info -o $(TMPDIR)/dep-output foo.rs + rm $(TMPDIR)/dep-output + +# # (This case doesn't work yet, and may be fundamentally wrong-headed anyway.) +# rm -f $(TMPDIR)/multi-output +# $(RUSTC) -C codegen-units=4 --emit=asm,obj -o $(TMPDIR)/multi-output foo.rs +# rm $(TMPDIR)/multi-output diff --git a/tests/run-make/issue-30063/foo.rs b/tests/run-make/issue-30063/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..45590d86ba6c51f0babffb0b43e3e2f44d2f9e07 --- /dev/null +++ b/tests/run-make/issue-30063/foo.rs @@ -0,0 +1 @@ +fn main() { } diff --git a/tests/run-make/issue-33329/Makefile b/tests/run-make/issue-33329/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9c149440d8ec4347235df47086b86712b859c27f --- /dev/null +++ b/tests/run-make/issue-33329/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) --target x86_64_unknown-linux-musl main.rs 2>&1 | $(CGREP) \ + "error: Error loading target specification: Could not find specification for target" diff --git a/tests/run-make/issue-33329/main.rs b/tests/run-make/issue-33329/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/issue-33329/main.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/issue-35164/Makefile b/tests/run-make/issue-35164/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..38aa6f1265f1e2ec267fe32c1ff0fd237a70c76c --- /dev/null +++ b/tests/run-make/issue-35164/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) main.rs --error-format json 2>&1 | $(CGREP) -e '"byte_start":23\b' '"byte_end":29\b' diff --git a/tests/run-make/issue-35164/main.rs b/tests/run-make/issue-35164/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..1333d63224c0730f4f32aad8e3243ad33e1c54aa --- /dev/null +++ b/tests/run-make/issue-35164/main.rs @@ -0,0 +1,5 @@ +mod submodule; + +fn main() { + submodule::foo(); +} diff --git a/tests/run-make/issue-35164/submodule/mod.rs b/tests/run-make/issue-35164/submodule/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..a9045b242fb3db2b21d5191f1fcc6b170619f642 --- /dev/null +++ b/tests/run-make/issue-35164/submodule/mod.rs @@ -0,0 +1,3 @@ +pub fn foo() { + let _MyFoo = 2; +} diff --git a/tests/run-make/issue-36710/Makefile b/tests/run-make/issue-36710/Makefile index c6b71f5fbd49fd7f87c2b2f8e8986e65ee2f4216..7b91107a234957bf24a744e67fd083812428952a 100644 --- a/tests/run-make/issue-36710/Makefile +++ b/tests/run-make/issue-36710/Makefile @@ -1,3 +1,4 @@ +# ignore-cross-compile # ignore-none no-std is not supported # ignore-wasm32 FIXME: don't attempt to compile C++ to WASM # ignore-wasm64 FIXME: don't attempt to compile C++ to WASM @@ -6,7 +7,7 @@ # (see dist-i586-gnu-i586-i686-musl Dockerfile) # ignore-sgx -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: foo $(call RUN,foo) diff --git a/tests/run-make/issue-37839/Makefile b/tests/run-make/issue-37839/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6bad27b7bdcd2d95b9e09b78225ee70ab6830aa9 --- /dev/null +++ b/tests/run-make/issue-37839/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) a.rs && $(RUSTC) b.rs + $(BARE_RUSTC) c.rs -L dependency=$(TMPDIR) --extern b=$(TMPDIR)/libb.rlib \ + --out-dir=$(TMPDIR) diff --git a/tests/run-make/issue-37839/a.rs b/tests/run-make/issue-37839/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..b5dffac3ff6a1f9e446767ef0358f31d00300178 --- /dev/null +++ b/tests/run-make/issue-37839/a.rs @@ -0,0 +1,2 @@ +#![allow(unused)] +#![crate_type = "proc-macro"] diff --git a/tests/run-make/issue-37839/b.rs b/tests/run-make/issue-37839/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..355d2b165274bfbbd24d24e0b995f32700619796 --- /dev/null +++ b/tests/run-make/issue-37839/b.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +#[macro_use] extern crate a; diff --git a/tests/run-make/issue-37839/c.rs b/tests/run-make/issue-37839/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..4c7ce01b6a02c7a4ad8bf335d5c408c522bd3ec4 --- /dev/null +++ b/tests/run-make/issue-37839/c.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +extern crate b; diff --git a/tests/run-make/issue-37893/Makefile b/tests/run-make/issue-37893/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..44e4a321a30a5b499e738a75200466a34d30e1a9 --- /dev/null +++ b/tests/run-make/issue-37893/Makefile @@ -0,0 +1,5 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) a.rs && $(RUSTC) b.rs && $(RUSTC) c.rs diff --git a/tests/run-make/issue-37893/a.rs b/tests/run-make/issue-37893/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..b5dffac3ff6a1f9e446767ef0358f31d00300178 --- /dev/null +++ b/tests/run-make/issue-37893/a.rs @@ -0,0 +1,2 @@ +#![allow(unused)] +#![crate_type = "proc-macro"] diff --git a/tests/run-make/issue-37893/b.rs b/tests/run-make/issue-37893/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..355d2b165274bfbbd24d24e0b995f32700619796 --- /dev/null +++ b/tests/run-make/issue-37893/b.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +#[macro_use] extern crate a; diff --git a/tests/run-make/issue-37893/c.rs b/tests/run-make/issue-37893/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..b9c2155728cb78a85c9d0fade17ed425a3ed597a --- /dev/null +++ b/tests/run-make/issue-37893/c.rs @@ -0,0 +1,3 @@ +#![crate_type = "staticlib"] +extern crate b; +extern crate a; diff --git a/tests/run-make/issue-38237/Makefile b/tests/run-make/issue-38237/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..80dddc5bd1331a505348d496b5519de6ce2f1531 --- /dev/null +++ b/tests/run-make/issue-38237/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs; $(RUSTC) bar.rs + $(RUSTDOC) baz.rs -L $(TMPDIR) -o $(TMPDIR) diff --git a/tests/run-make/issue-38237/bar.rs b/tests/run-make/issue-38237/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..2b839f3a3b334d68f42ca90eeea5a3d45b8f4279 --- /dev/null +++ b/tests/run-make/issue-38237/bar.rs @@ -0,0 +1,4 @@ +#![crate_type = "lib"] + +#[derive(Debug)] +pub struct S; diff --git a/tests/run-make/issue-38237/baz.rs b/tests/run-make/issue-38237/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..cd2425f9b692bd2dc291cf2a47a10862cb23b04b --- /dev/null +++ b/tests/run-make/issue-38237/baz.rs @@ -0,0 +1,8 @@ +extern crate foo; +extern crate bar; + +pub struct Bar; +impl ::std::ops::Deref for Bar { + type Target = bar::S; + fn deref(&self) -> &Self::Target { unimplemented!() } +} diff --git a/tests/run-make/issue-38237/foo.rs b/tests/run-make/issue-38237/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..a106e4fde5cc362ce54139640576adbfd0502c90 --- /dev/null +++ b/tests/run-make/issue-38237/foo.rs @@ -0,0 +1,9 @@ +#![crate_type = "proc-macro"] + +extern crate proc_macro; + +#[proc_macro_derive(A)] +pub fn derive(ts: proc_macro::TokenStream) -> proc_macro::TokenStream { ts } + +#[derive(Debug)] +struct S; diff --git a/tests/run-make/issue-40535/Makefile b/tests/run-make/issue-40535/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..155c88252144ddf00a0794d290f43cda73c95073 --- /dev/null +++ b/tests/run-make/issue-40535/Makefile @@ -0,0 +1,13 @@ +include ../tools.mk + +# The ICE occurred in the following situation: +# * `foo` declares `extern crate bar, baz`, depends only on `bar` (forgetting `baz` in `Cargo.toml`) +# * `bar` declares and depends on `extern crate baz` +# * All crates built in metadata-only mode (`cargo check`) +all: + # cc https://github.com/rust-lang/rust/issues/40623 + $(RUSTC) baz.rs --emit=metadata + $(RUSTC) bar.rs --emit=metadata --extern baz=$(TMPDIR)/libbaz.rmeta + $(RUSTC) foo.rs --emit=metadata --extern bar=$(TMPDIR)/libbar.rmeta 2>&1 | \ + $(CGREP) -v "unexpectedly panicked" + # ^ Succeeds if it doesn't find the ICE message diff --git a/tests/run-make/issue-40535/bar.rs b/tests/run-make/issue-40535/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b02b28f59d9eff76dcabc33d1c19c8079813cc38 --- /dev/null +++ b/tests/run-make/issue-40535/bar.rs @@ -0,0 +1,3 @@ +#![crate_type = "lib"] + +extern crate baz; diff --git a/tests/run-make/issue-40535/baz.rs b/tests/run-make/issue-40535/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..83be6e807e0b9bc42f55f3df77db7a1e99b3d93c --- /dev/null +++ b/tests/run-make/issue-40535/baz.rs @@ -0,0 +1 @@ +#![crate_type = "lib"] diff --git a/tests/run-make/issue-40535/foo.rs b/tests/run-make/issue-40535/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..270202664257b85a8e627d7d33b30fee14707226 --- /dev/null +++ b/tests/run-make/issue-40535/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "lib"] + +extern crate bar; +extern crate baz; diff --git a/tests/run-make/issue-46239/Makefile b/tests/run-make/issue-46239/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0006ced25156ae9dd3b5a2cdb7e578f8f9c1cd75 --- /dev/null +++ b/tests/run-make/issue-46239/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) main.rs -C opt-level=1 + $(call RUN,main) diff --git a/tests/run-make/issue-46239/main.rs b/tests/run-make/issue-46239/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..b7df5cf4d81287528f010ae7494dd41c18253401 --- /dev/null +++ b/tests/run-make/issue-46239/main.rs @@ -0,0 +1,8 @@ +fn project(x: &(T,)) -> &T { &x.0 } + +fn dummy() {} + +fn main() { + let f = (dummy as fn(),); + (*project(&f))(); +} diff --git a/tests/run-make/issue-47384/Makefile b/tests/run-make/issue-47384/Makefile index 0aadf6c88c98f37f3cee632fb88bd33eef54394d..afc77cb275aaacd390bd40135b15f6d4934bf22f 100644 --- a/tests/run-make/issue-47384/Makefile +++ b/tests/run-make/issue-47384/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-linux # ignore-cross-compile diff --git a/tests/run-make/issue-47551/Makefile b/tests/run-make/issue-47551/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5a6ac725701b3ce2d3566de4fa506f1fc0e37988 --- /dev/null +++ b/tests/run-make/issue-47551/Makefile @@ -0,0 +1,9 @@ +# only-linux +# ignore-32bit + +include ../tools.mk + +all: + $(RUSTC) eh_frame-terminator.rs + $(call RUN,eh_frame-terminator) | $(CGREP) '1122334455667788' + objdump --dwarf=frames $(TMPDIR)/eh_frame-terminator | $(CGREP) 'ZERO terminator' diff --git a/tests/run-make/issue-47551/eh_frame-terminator.rs b/tests/run-make/issue-47551/eh_frame-terminator.rs new file mode 100644 index 0000000000000000000000000000000000000000..a2c7a31b7c329b7654e806575805d70ec24eb9d8 --- /dev/null +++ b/tests/run-make/issue-47551/eh_frame-terminator.rs @@ -0,0 +1,22 @@ +// run-pass + +#[derive(Clone, Copy)] +struct Foo { + array: [u64; 10240], +} + +impl Foo { + const fn new() -> Self { + Self { + array: [0x1122_3344_5566_7788; 10240] + } + } +} + +static BAR: [Foo; 10240] = [Foo::new(); 10240]; + +fn main() { + let bt = std::backtrace::Backtrace::force_capture(); + println!("Hello, world! {:?}", bt); + println!("{:x}", BAR[0].array[0]); +} diff --git a/tests/run-make/issue-51671/Makefile b/tests/run-make/issue-51671/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c93645369928c4dce0ac7dd2399b456687a54f3b --- /dev/null +++ b/tests/run-make/issue-51671/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# ignore-windows-msvc + +all: + $(RUSTC) --emit=obj app.rs + nm $(TMPDIR)/app.o | $(CGREP) rust_begin_unwind + nm $(TMPDIR)/app.o | $(CGREP) rust_eh_personality + nm $(TMPDIR)/app.o | $(CGREP) __rg_oom diff --git a/tests/run-make/issue-51671/app.rs b/tests/run-make/issue-51671/app.rs new file mode 100644 index 0000000000000000000000000000000000000000..e9dc1e9744fb143a2c406f72de9425a33fde97b8 --- /dev/null +++ b/tests/run-make/issue-51671/app.rs @@ -0,0 +1,20 @@ +#![crate_type = "bin"] +#![feature(lang_items, alloc_error_handler)] +#![no_main] +#![no_std] + +use core::alloc::Layout; +use core::panic::PanicInfo; + +#[panic_handler] +fn panic(_: &PanicInfo) -> ! { + loop {} +} + +#[lang = "eh_personality"] +fn eh() {} + +#[alloc_error_handler] +fn oom(_: Layout) -> ! { + loop {} +} diff --git a/tests/run-make/issue-53964/Makefile b/tests/run-make/issue-53964/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6bd83021374d915d15dfe8224ef7aae5c076d14a --- /dev/null +++ b/tests/run-make/issue-53964/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) panic.rs + $(RUSTC) -C panic=abort --emit=obj app.rs -L $(TMPDIR) diff --git a/tests/run-make/issue-53964/app.rs b/tests/run-make/issue-53964/app.rs new file mode 100644 index 0000000000000000000000000000000000000000..8127b9578bfee96f8d2c383ed794597d1e4804bc --- /dev/null +++ b/tests/run-make/issue-53964/app.rs @@ -0,0 +1,8 @@ +#![crate_type = "bin"] +#![no_main] +#![no_std] + +#![deny(unused_extern_crates)] + +// `panic` provides a `panic_handler` so it shouldn't trip the `unused_extern_crates` lint +extern crate panic; diff --git a/tests/run-make/issue-53964/panic.rs b/tests/run-make/issue-53964/panic.rs new file mode 100644 index 0000000000000000000000000000000000000000..a878120507172ef6007097c94e3ba184ee797c09 --- /dev/null +++ b/tests/run-make/issue-53964/panic.rs @@ -0,0 +1,10 @@ +#![crate_type = "lib"] +#![feature(panic_handler)] +#![no_std] + +use core::panic::PanicInfo; + +#[panic_handler] +fn panic(_: &PanicInfo) -> ! { + loop {} +} diff --git a/tests/run-make/issue-64153/Makefile b/tests/run-make/issue-64153/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f42ea620fb9d13313b4ab3e1e22bc84bccf3b5cb --- /dev/null +++ b/tests/run-make/issue-64153/Makefile @@ -0,0 +1,26 @@ +include ../tools.mk + +# `llvm-objdump`'s output looks different on windows than on other platforms. +# It should be enough to check on Unix platforms, so: +# ignore-windows + +# Staticlibs don't include Rust object files from upstream crates if the same +# code was already pulled into the lib via LTO. However, the bug described in +# https://github.com/rust-lang/rust/issues/64153 lead to this exclusion not +# working properly if the upstream crate was compiled with an explicit filename +# (via `-o`). +# +# This test makes sure that functions defined in the upstream crates do not +# appear twice in the final staticlib when listing all the symbols from it. + +all: + $(RUSTC) --crate-type rlib upstream.rs -o $(TMPDIR)/libupstream.rlib -Ccodegen-units=1 + $(RUSTC) --crate-type staticlib downstream.rs -Clto -Ccodegen-units=1 -o $(TMPDIR)/libdownstream.a + # Dump all the symbols from the staticlib into `syms` + "$(LLVM_BIN_DIR)"/llvm-objdump -t $(TMPDIR)/libdownstream.a > $(TMPDIR)/syms + # Count the global instances of `issue64153_test_function`. There'll be 2 + # if the `upstream` object file got erroneously included twice. + # The line we are testing for with the regex looks something like: + # 0000000000000000 g F .text.issue64153_test_function 00000023 issue64153_test_function + grep -c -e "[[:space:]]g[[:space:]]*F[[:space:]].*issue64153_test_function" $(TMPDIR)/syms > $(TMPDIR)/count + [ "$$(cat $(TMPDIR)/count)" -eq "1" ] diff --git a/tests/run-make/issue-64153/downstream.rs b/tests/run-make/issue-64153/downstream.rs new file mode 100644 index 0000000000000000000000000000000000000000..e03704665d46c40d1f840b37d3843e1c61ad5a42 --- /dev/null +++ b/tests/run-make/issue-64153/downstream.rs @@ -0,0 +1,6 @@ +extern crate upstream; + +#[no_mangle] +pub extern "C" fn foo() { + print!("1 + 1 = {}", upstream::issue64153_test_function(1)); +} diff --git a/tests/run-make/issue-64153/upstream.rs b/tests/run-make/issue-64153/upstream.rs new file mode 100644 index 0000000000000000000000000000000000000000..861a00298ea3963d396193c1312703d8a5994f9a --- /dev/null +++ b/tests/run-make/issue-64153/upstream.rs @@ -0,0 +1,6 @@ +// Make this function extern "C", public, and no-mangle, so that it gets +// exported from the downstream staticlib. +#[no_mangle] +pub extern "C" fn issue64153_test_function(x: u32) -> u32 { + x + 1 +} diff --git a/tests/run-make/issue-68794-textrel-on-minimal-lib/Makefile b/tests/run-make/issue-68794-textrel-on-minimal-lib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6140b39c0e2aa816d0e6132802a45b504b475e93 --- /dev/null +++ b/tests/run-make/issue-68794-textrel-on-minimal-lib/Makefile @@ -0,0 +1,18 @@ +# ignore-cross-compile +# Regression test for issue #68794 +# +# Verify that no text relocations are accidentally introduced by linking a +# minimal rust staticlib. +# +# The test links a rust static library into a shared library, and checks that +# the linker doesn't have to flag the resulting file as containing TEXTRELs. + +include ../tools.mk + +# only-linux + +all: + $(RUSTC) foo.rs + $(CC) bar.c $(call STATICLIB,foo) -fPIC -shared -o $(call DYLIB,bar) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + readelf -d $(call DYLIB,bar) | grep TEXTREL; test $$? -eq 1 diff --git a/tests/run-make/issue-68794-textrel-on-minimal-lib/bar.c b/tests/run-make/issue-68794-textrel-on-minimal-lib/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..bb4036b06e13b79a32ec78ae04db97590f54b2cc --- /dev/null +++ b/tests/run-make/issue-68794-textrel-on-minimal-lib/bar.c @@ -0,0 +1,6 @@ +void foo(); + +int main() { + foo(); + return 0; +} diff --git a/tests/run-make/issue-68794-textrel-on-minimal-lib/foo.rs b/tests/run-make/issue-68794-textrel-on-minimal-lib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..a3e865b638ed44fa2f7a17f1d540ef029e6cc2c3 --- /dev/null +++ b/tests/run-make/issue-68794-textrel-on-minimal-lib/foo.rs @@ -0,0 +1,8 @@ +#![crate_type = "staticlib"] + +#[no_mangle] +pub extern "C" fn foo(x: u32) { + // using the println! makes it so that enough code from the standard + // library is included (see issue #68794) + println!("foo: {}", x); +} diff --git a/tests/run-make/issue-69368/Makefile b/tests/run-make/issue-69368/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b1229d1b07fc725f4a9bcc5cf8e6166b9d8932c9 --- /dev/null +++ b/tests/run-make/issue-69368/Makefile @@ -0,0 +1,19 @@ +# ignore-cross-compile +include ../tools.mk + +# Test that previously triggered a linker failure with root cause +# similar to one found in the issue #69368. +# +# The crate that provides oom lang item is missing some other lang +# items. Necessary to prevent the use of start-group / end-group. +# +# The weak lang items are defined in a separate compilation units, +# so that linker could omit them if not used. +# +# The crates that need those weak lang items are dependencies of +# crates that provide them. + +all: + $(RUSTC) a.rs + $(RUSTC) b.rs + $(RUSTC) c.rs diff --git a/tests/run-make/issue-69368/a.rs b/tests/run-make/issue-69368/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..a54f429550e7435ed53fd6bc9f6361efceb9ee07 --- /dev/null +++ b/tests/run-make/issue-69368/a.rs @@ -0,0 +1,26 @@ +#![crate_type = "rlib"] +#![feature(lang_items)] +#![feature(panic_unwind)] +#![no_std] + +extern crate panic_unwind; + +#[panic_handler] +pub fn panic_handler(_: &core::panic::PanicInfo) -> ! { + loop {} +} + +#[no_mangle] +extern "C" fn __rust_drop_panic() -> ! { + loop {} +} + +#[no_mangle] +extern "C" fn __rust_foreign_exception() -> ! { + loop {} +} + +#[lang = "eh_personality"] +fn eh_personality() { + loop {} +} diff --git a/tests/run-make/issue-69368/b.rs b/tests/run-make/issue-69368/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..4d6af0266563bddc124cb1e5710bd744ce027e4d --- /dev/null +++ b/tests/run-make/issue-69368/b.rs @@ -0,0 +1,8 @@ +#![crate_type = "rlib"] +#![feature(alloc_error_handler)] +#![no_std] + +#[alloc_error_handler] +pub fn error_handler(_: core::alloc::Layout) -> ! { + panic!(); +} diff --git a/tests/run-make/issue-69368/c.rs b/tests/run-make/issue-69368/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..729c4249a053a8324b3688223b882284af798e16 --- /dev/null +++ b/tests/run-make/issue-69368/c.rs @@ -0,0 +1,34 @@ +#![crate_type = "bin"] +#![feature(start)] +#![no_std] + +extern crate alloc; +extern crate a; +extern crate b; + +use alloc::vec::Vec; +use core::alloc::*; + +struct Allocator; + +unsafe impl GlobalAlloc for Allocator { + unsafe fn alloc(&self, _: Layout) -> *mut u8 { + loop {} + } + + unsafe fn dealloc(&self, _: *mut u8, _: Layout) { + loop {} + } +} + +#[global_allocator] +static ALLOCATOR: Allocator = Allocator; + +#[start] +fn main(argc: isize, _argv: *const *const u8) -> isize { + let mut v = Vec::new(); + for i in 0..argc { + v.push(i); + } + v.iter().sum() +} diff --git a/tests/run-make/issue-71519/Makefile b/tests/run-make/issue-71519/Makefile index 57497f5205384cc5883a6809b4c29feb75cfd921..0ee83328bb6892dcc6eae6bfc3911be80b3d95c6 100644 --- a/tests/run-make/issue-71519/Makefile +++ b/tests/run-make/issue-71519/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-msvc # needs-rust-lld diff --git a/tests/run-make/issue-7349/Makefile b/tests/run-make/issue-7349/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..dc073b77fe128423cefa3d82c968fd3b403f4d33 --- /dev/null +++ b/tests/run-make/issue-7349/Makefile @@ -0,0 +1,11 @@ +include ../tools.mk + +# Test to make sure that inner functions within a polymorphic outer function +# don't get re-codegened when the outer function is monomorphized. The test +# code monomorphizes the outer functions several times, but the magic constants +# used in the inner functions should each appear only once in the generated IR. + +all: + $(RUSTC) foo.rs --emit=llvm-ir + [ "$$(grep -c 'ret i32 8675309' "$(TMPDIR)/foo.ll")" -eq "1" ] + [ "$$(grep -c 'ret i32 11235813' "$(TMPDIR)/foo.ll")" -eq "1" ] diff --git a/tests/run-make/issue-7349/foo.rs b/tests/run-make/issue-7349/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..246a12595808b3efa96bf7dbb4e2f14813eacb49 --- /dev/null +++ b/tests/run-make/issue-7349/foo.rs @@ -0,0 +1,22 @@ +fn outer() { + #[allow(dead_code)] + fn inner() -> u32 { + 8675309 + } + inner(); +} + +extern "C" fn outer_foreign() { + #[allow(dead_code)] + fn inner() -> u32 { + 11235813 + } + inner(); +} + +fn main() { + outer::(); + outer::(); + outer_foreign::(); + outer_foreign::(); +} diff --git a/tests/run-make/issue-83045/Makefile b/tests/run-make/issue-83045/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7053da00f6b1086f4ccfe5e0a0f354172dc16e47 --- /dev/null +++ b/tests/run-make/issue-83045/Makefile @@ -0,0 +1,33 @@ +include ../tools.mk + +# This test case creates a situation where the crate loader would run +# into an ICE when confronted with an invalid setup where it cannot +# find the dependency of a direct dependency. +# +# The test case makes sure that the compiler produces the expected +# error message but does not ICE immediately after. +# +# See https://github.com/rust-lang/rust/issues/83045 + +# This is a platform-independent issue, no need to waste time testing +# everywhere. +# only-x86_64 +# only-linux + +# NOTE: We use BARE_RUSTC below so that the compiler can't find liba.rlib +# If we used RUSTC the additional '-L TMPDIR' option would allow rustc to +# actually find the crate. +# +# We check that we get the expected error message +# But that we do not get an ICE + +all: + $(RUSTC) --crate-name=a --crate-type=rlib a.rs --verbose + $(RUSTC) --crate-name=b --crate-type=rlib --extern a=$(TMPDIR)/liba.rlib b.rs --verbose + $(BARE_RUSTC) --out-dir $(TMPDIR) \ + --extern b=$(TMPDIR)/libb.rlib \ + --crate-type=rlib \ + --edition=2018 \ + c.rs 2>&1 | tee $(TMPDIR)/output.txt || exit 0 + $(CGREP) E0519 < $(TMPDIR)/output.txt + $(CGREP) -v "internal compiler error" < $(TMPDIR)/output.txt diff --git a/tests/run-make/issue-83045/a.rs b/tests/run-make/issue-83045/a.rs new file mode 100644 index 0000000000000000000000000000000000000000..66d9f758e9dde91e34fa87eb0b33161b1cac5e68 --- /dev/null +++ b/tests/run-make/issue-83045/a.rs @@ -0,0 +1 @@ +// empty on purpose diff --git a/tests/run-make/issue-83045/b.rs b/tests/run-make/issue-83045/b.rs new file mode 100644 index 0000000000000000000000000000000000000000..f4876cfa45736b96a43220f327316a896bed5cc5 --- /dev/null +++ b/tests/run-make/issue-83045/b.rs @@ -0,0 +1 @@ +extern crate a; diff --git a/tests/run-make/issue-83045/c.rs b/tests/run-make/issue-83045/c.rs new file mode 100644 index 0000000000000000000000000000000000000000..e0c4525499ed7150a9cb3e5167ed7b37a7ce5ebe --- /dev/null +++ b/tests/run-make/issue-83045/c.rs @@ -0,0 +1 @@ +use b as _; diff --git a/tests/run-make/issue-83112-incr-test-moved-file/Makefile b/tests/run-make/issue-83112-incr-test-moved-file/Makefile index 2f796e5b2fc0754e1552584c220ff4dfc76704df..a00088cd9d61bae39a5f2c5eb36fa4800b7e5bbc 100644 --- a/tests/run-make/issue-83112-incr-test-moved-file/Makefile +++ b/tests/run-make/issue-83112-incr-test-moved-file/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-none no-std is not supported # ignore-nvptx64-nvidia-cuda FIXME: can't find crate for 'std' diff --git a/tests/run-make/issue-84395-lto-embed-bitcode/Makefile b/tests/run-make/issue-84395-lto-embed-bitcode/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..95c8d08a18bc7b6ba26eebb62eee757eabb52b57 --- /dev/null +++ b/tests/run-make/issue-84395-lto-embed-bitcode/Makefile @@ -0,0 +1,11 @@ +# needs-matching-clang + +# This test makes sure the embed bitcode in elf created with +# lto-embed-bitcode=optimized is valid llvm BC module. + +include ../tools.mk + +all: + $(RUSTC) test.rs --target $(TARGET) -Clink-arg=-fuse-ld=lld -Clinker-plugin-lto -Clinker=$(CLANG) -Clink-arg=-Wl,--plugin-opt=-lto-embed-bitcode=optimized -Zemit-thin-lto=no + $(LLVM_BIN_DIR)/objcopy --dump-section .llvmbc=$(TMPDIR)/test.bc $(TMPDIR)/test + $(LLVM_BIN_DIR)/llvm-dis $(TMPDIR)/test.bc diff --git a/tests/run-make/issue-84395-lto-embed-bitcode/test.rs b/tests/run-make/issue-84395-lto-embed-bitcode/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..47ad8c634112b312f330c58f581a654f46618be7 --- /dev/null +++ b/tests/run-make/issue-84395-lto-embed-bitcode/test.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World!"); +} diff --git a/tests/run-make/issue-85019-moved-src-dir/Makefile b/tests/run-make/issue-85019-moved-src-dir/Makefile index 3606d4fdf57ce3b500412597a15395c5ef40cf0c..dec289058f9365614085924a7661692504032f44 100644 --- a/tests/run-make/issue-85019-moved-src-dir/Makefile +++ b/tests/run-make/issue-85019-moved-src-dir/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk INCR=$(TMPDIR)/incr FIRST_SRC=$(TMPDIR)/first_src diff --git a/tests/run-make/issue-85401-static-mir/Makefile b/tests/run-make/issue-85401-static-mir/Makefile index 99590166bca3e14a3a70e51ba3289a76a2f92ce0..47a36b6e453554d11e2e8bfa02f568f9c00e0492 100644 --- a/tests/run-make/issue-85401-static-mir/Makefile +++ b/tests/run-make/issue-85401-static-mir/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # Regression test for issue #85401 # Verify that we do not ICE when trying to access MIR for statics, diff --git a/tests/run-make/issue-85441/Makefile b/tests/run-make/issue-85441/Makefile index f04b07d51fa63d42af85289fabd9078711f7f82c..987d7f7d4a76fc6d745e61b571b7db1f9969e461 100644 --- a/tests/run-make/issue-85441/Makefile +++ b/tests/run-make/issue-85441/Makefile @@ -1,6 +1,6 @@ # only-windows-msvc -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # Tests that WS2_32.dll is not unnecessarily linked, see issue #85441 diff --git a/tests/run-make/issue-88756-default-output/Makefile b/tests/run-make/issue-88756-default-output/Makefile index 275c35c26293544de51ff52908a3dc7a5d92f5b6..d1c3d0fe08249017d31979ace3de97c157b2ec61 100644 --- a/tests/run-make/issue-88756-default-output/Makefile +++ b/tests/run-make/issue-88756-default-output/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(BARE_RUSTDOC) 2>&1 | sed -E 's@/nightly/|/beta/|/stable/|/1\.[0-9]+\.[0-9]+/@/$$CHANNEL/@g' | diff - output-default.stdout diff --git a/tests/run-make/issue-96498/Makefile b/tests/run-make/issue-96498/Makefile index ce2b1b1ff7c3da2ef2eec5ad20843b79bfe44a82..efdd328c671edcf4d9ee11932dbe9a81ef92732a 100644 --- a/tests/run-make/issue-96498/Makefile +++ b/tests/run-make/issue-96498/Makefile @@ -1,7 +1,7 @@ # only-windows # needs-rust-lld -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # Ensure that LLD can link all: diff --git a/tests/run-make/issue-97463-abi-param-passing/Makefile b/tests/run-make/issue-97463-abi-param-passing/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7ce7aaeec57a06238c32cf77509ea330072f8163 --- /dev/null +++ b/tests/run-make/issue-97463-abi-param-passing/Makefile @@ -0,0 +1,15 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-msvc + +# The issue exercised by this test, rust-lang/rust#97463, explicitly needs `-O` +# flags (like `-O3`) to reproduce. Thus, we call $(CC) instead of nicer +# alternatives provided by tools.mk like using `COMPILE_OBJ` or using a +# `NATIVE_STATICLIB` dependency. + +all: + $(CC) -c -O3 -o $(TMPDIR)/bad.o bad.c + $(AR) rcs $(TMPDIR)/libbad.a $(TMPDIR)/bad.o + $(RUSTC) param_passing.rs -L$(TMPDIR) -lbad -C opt-level=3 + $(call RUN,param_passing) diff --git a/tests/run-make/issue-97463-abi-param-passing/bad.c b/tests/run-make/issue-97463-abi-param-passing/bad.c new file mode 100644 index 0000000000000000000000000000000000000000..013314ab20dc40409762e5c983e24cbf5712107b --- /dev/null +++ b/tests/run-make/issue-97463-abi-param-passing/bad.c @@ -0,0 +1,24 @@ +#include +#include +#include + + +struct bloc { + uint16_t a; + uint16_t b; + uint16_t c; +}; + +uint16_t c_read_value(uint32_t a, uint32_t b, uint32_t c) { + struct bloc *data = malloc(sizeof(struct bloc)); + + data->a = a & 0xFFFF; + data->b = b & 0xFFFF; + data->c = c & 0xFFFF; + + printf("C struct: a = %u, b = %u, c = %u\n", + (unsigned) data->a, (unsigned) data->b, (unsigned) data->c); + printf("C function returns %u\n", (unsigned) data->b); + + return data->b; /* leak data */ +} diff --git a/tests/run-make/issue-97463-abi-param-passing/param_passing.rs b/tests/run-make/issue-97463-abi-param-passing/param_passing.rs new file mode 100644 index 0000000000000000000000000000000000000000..c11f3cc72bdf26238dc19242ce0266c9c8e64a6e --- /dev/null +++ b/tests/run-make/issue-97463-abi-param-passing/param_passing.rs @@ -0,0 +1,38 @@ +// NOTE: Exposing the bug encoded in this test is sensitive to +// LLVM optimization choices. See additional note below for an +// example. + +#[link(name = "bad")] +extern "C" { + pub fn c_read_value(a: u32, b: u32, c: u32) -> u16; +} + +fn main() { + const C1: usize = 0x327b23c6; + const C2: usize = C1 & 0xFFFF; + + let r1: usize = 0x0; + let r2: usize = C1; + let r3: usize = 0x0; + let value: u16 = unsafe { c_read_value(r1 as u32, r2 as u32, r3 as u32) }; + + // NOTE: as an example of the sensitivity of this test to optimization choices, + // uncommenting this block of code makes the bug go away on pnkfelix's machine. + // (But observing via `dbg!` doesn't hide the bug. At least sometimes.) + /* + println!("{}", value); + println!("{}", value as usize); + println!("{}", usize::from(value)); + println!("{}", (value as usize) & 0xFFFF); + */ + + let d1 = value; + let d2 = value as usize; + let d3 = usize::from(value); + let d4 = (value as usize) & 0xFFFF; + + let d = (&d1, &d2, &d3, &d4); + let d_ = (d1, d2, d3, d4); + + assert_eq!(((&(C2 as u16), &C2, &C2, &C2), (C2 as u16, C2, C2, C2)), (d, d_)); +} diff --git a/tests/run-make/issue64319/Makefile b/tests/run-make/issue64319/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..56346cbcc154c7bfcac13ac5ebe889bd67237e23 --- /dev/null +++ b/tests/run-make/issue64319/Makefile @@ -0,0 +1,40 @@ +# ignore-cross-compile +include ../tools.mk + +# Different optimization levels imply different values for `-Zshare-generics`, +# so try out a whole bunch of combinations to make sure everything is compatible +all: + # First up, try some defaults + $(RUSTC) --crate-type rlib foo.rs + $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 + + # Next try mixing up some things explicitly + $(RUSTC) --crate-type rlib foo.rs -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no + $(RUSTC) --crate-type rlib foo.rs -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes + $(RUSTC) --crate-type rlib foo.rs -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no + $(RUSTC) --crate-type rlib foo.rs -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes + + # Now combine a whole bunch of options together + $(RUSTC) --crate-type rlib foo.rs + $(RUSTC) --crate-type dylib bar.rs + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 + $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -C opt-level=1 -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 + $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -C opt-level=2 -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 + $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -C opt-level=3 -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -C opt-level=s + $(RUSTC) --crate-type dylib bar.rs -C opt-level=s -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -C opt-level=s -Z share-generics=yes + $(RUSTC) --crate-type dylib bar.rs -C opt-level=z + $(RUSTC) --crate-type dylib bar.rs -C opt-level=z -Z share-generics=no + $(RUSTC) --crate-type dylib bar.rs -C opt-level=z -Z share-generics=yes diff --git a/tests/run-make/issue64319/bar.rs b/tests/run-make/issue64319/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..3895c0b6cdbb3d760b7df23c8934eca5da0210e8 --- /dev/null +++ b/tests/run-make/issue64319/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +pub fn bar() { + foo::foo(); +} diff --git a/tests/run-make/issue64319/foo.rs b/tests/run-make/issue64319/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c54a238e9add7f8ae13a1602df43d48467bf2b57 --- /dev/null +++ b/tests/run-make/issue64319/foo.rs @@ -0,0 +1,9 @@ +pub fn foo() { + bar::(); +} + +pub fn bar() { + baz(); +} + +fn baz() {} diff --git a/tests/run-make/jobserver-error/Makefile b/tests/run-make/jobserver-error/Makefile index 3b9104fc35484d504403ae3b6cddd6079007b0ed..39946ae5edbfae2b138e98320d92ea2dc3522a71 100644 --- a/tests/run-make/jobserver-error/Makefile +++ b/tests/run-make/jobserver-error/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-linux diff --git a/tests/run-make/libs-through-symlinks/Makefile b/tests/run-make/libs-through-symlinks/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..592eae663a49afc129b82f34b132d589b61230bd --- /dev/null +++ b/tests/run-make/libs-through-symlinks/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows + +NAME := $(shell $(RUSTC) --print file-names foo.rs) + +all: + mkdir -p $(TMPDIR)/outdir + $(RUSTC) foo.rs -o $(TMPDIR)/outdir/$(NAME) + ln -nsf outdir/$(NAME) $(TMPDIR) + RUSTC_LOG=rustc_metadata::loader $(RUSTC) bar.rs diff --git a/tests/run-make/libs-through-symlinks/bar.rs b/tests/run-make/libs-through-symlinks/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..bb7b36c496efa95b70a3d4c6f53dcd0dd2a0fabe --- /dev/null +++ b/tests/run-make/libs-through-symlinks/bar.rs @@ -0,0 +1,3 @@ +extern crate foo; + +fn main() {} diff --git a/tests/run-make/libs-through-symlinks/foo.rs b/tests/run-make/libs-through-symlinks/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..8e3df2c6d4e512eee51487c129bb032c3c33a7ef --- /dev/null +++ b/tests/run-make/libs-through-symlinks/foo.rs @@ -0,0 +1,2 @@ +#![crate_type = "rlib"] +#![crate_name = "foo"] diff --git a/tests/run-make/libtest-json/Makefile b/tests/run-make/libtest-json/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..417637cf072767d85d48e10e6d0dd996b995c63c --- /dev/null +++ b/tests/run-make/libtest-json/Makefile @@ -0,0 +1,19 @@ +# ignore-cross-compile +include ../tools.mk + +# Test expected libtest's JSON output + +OUTPUT_FILE_DEFAULT := $(TMPDIR)/libtest-json-output-default.json +OUTPUT_FILE_STDOUT_SUCCESS := $(TMPDIR)/libtest-json-output-stdout-success.json + +all: f.rs validate_json.py output-default.json output-stdout-success.json + $(RUSTC) --test f.rs + RUST_BACKTRACE=0 $(call RUN,f) -Z unstable-options --test-threads=1 --format=json > $(OUTPUT_FILE_DEFAULT) || true + RUST_BACKTRACE=0 $(call RUN,f) -Z unstable-options --test-threads=1 --format=json --show-output > $(OUTPUT_FILE_STDOUT_SUCCESS) || true + + cat $(OUTPUT_FILE_DEFAULT) | "$(PYTHON)" validate_json.py + cat $(OUTPUT_FILE_STDOUT_SUCCESS) | "$(PYTHON)" validate_json.py + + # Normalize the actual output and compare to expected output file + cat $(OUTPUT_FILE_DEFAULT) | sed 's/"exec_time": [0-9.]*/"exec_time": $$TIME/' | diff output-default.json - + cat $(OUTPUT_FILE_STDOUT_SUCCESS) | sed 's/"exec_time": [0-9.]*/"exec_time": $$TIME/' | diff output-stdout-success.json - diff --git a/tests/run-make/libtest-json/f.rs b/tests/run-make/libtest-json/f.rs new file mode 100644 index 0000000000000000000000000000000000000000..edfe25086ae9a83e5f07145ffdd27bb59e8e6331 --- /dev/null +++ b/tests/run-make/libtest-json/f.rs @@ -0,0 +1,22 @@ +#[test] +fn a() { + println!("print from successful test"); + // Should pass +} + +#[test] +fn b() { + assert!(false); +} + +#[test] +#[should_panic] +fn c() { + assert!(false); +} + +#[test] +#[ignore = "msg"] +fn d() { + assert!(false); +} diff --git a/tests/run-make/libtest-json/output-default.json b/tests/run-make/libtest-json/output-default.json new file mode 100644 index 0000000000000000000000000000000000000000..ad22b66eda69ffddfecce85d399558b857a22e02 --- /dev/null +++ b/tests/run-make/libtest-json/output-default.json @@ -0,0 +1,10 @@ +{ "type": "suite", "event": "started", "test_count": 4 } +{ "type": "test", "event": "started", "name": "a" } +{ "type": "test", "name": "a", "event": "ok" } +{ "type": "test", "event": "started", "name": "b" } +{ "type": "test", "name": "b", "event": "failed", "stdout": "thread 'b' panicked at 'assertion failed: false', f.rs:9:5\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" } +{ "type": "test", "event": "started", "name": "c" } +{ "type": "test", "name": "c", "event": "ok" } +{ "type": "test", "event": "started", "name": "d" } +{ "type": "test", "name": "d", "event": "ignored", "message": "msg" } +{ "type": "suite", "event": "failed", "passed": 2, "failed": 1, "ignored": 1, "measured": 0, "filtered_out": 0, "exec_time": $TIME } diff --git a/tests/run-make/libtest-json/output-stdout-success.json b/tests/run-make/libtest-json/output-stdout-success.json new file mode 100644 index 0000000000000000000000000000000000000000..ec98172eb1c4ee63b2aa607fb0ca87cd2b815b9d --- /dev/null +++ b/tests/run-make/libtest-json/output-stdout-success.json @@ -0,0 +1,10 @@ +{ "type": "suite", "event": "started", "test_count": 4 } +{ "type": "test", "event": "started", "name": "a" } +{ "type": "test", "name": "a", "event": "ok", "stdout": "print from successful test\n" } +{ "type": "test", "event": "started", "name": "b" } +{ "type": "test", "name": "b", "event": "failed", "stdout": "thread 'b' panicked at 'assertion failed: false', f.rs:9:5\nnote: run with `RUST_BACKTRACE=1` environment variable to display a backtrace\n" } +{ "type": "test", "event": "started", "name": "c" } +{ "type": "test", "name": "c", "event": "ok", "stdout": "thread 'c' panicked at 'assertion failed: false', f.rs:15:5\n" } +{ "type": "test", "event": "started", "name": "d" } +{ "type": "test", "name": "d", "event": "ignored", "message": "msg" } +{ "type": "suite", "event": "failed", "passed": 2, "failed": 1, "ignored": 1, "measured": 0, "filtered_out": 0, "exec_time": $TIME } diff --git a/tests/run-make/libtest-json/validate_json.py b/tests/run-make/libtest-json/validate_json.py new file mode 100755 index 0000000000000000000000000000000000000000..657f732f2bffd8804718c2e716c5754c55eb8536 --- /dev/null +++ b/tests/run-make/libtest-json/validate_json.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +import sys +import json + +# Try to decode line in order to ensure it is a valid JSON document +for line in sys.stdin: + json.loads(line) diff --git a/tests/run-make/libtest-thread-limit/Makefile b/tests/run-make/libtest-thread-limit/Makefile index d43a89e60cab8b10419e11c8d0a6885999b6457a..9496fa30159a6c350a65b42c2371f2bdf5ff5386 100644 --- a/tests/run-make/libtest-thread-limit/Makefile +++ b/tests/run-make/libtest-thread-limit/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-linux diff --git a/tests/run-make/link-arg/Makefile b/tests/run-make/link-arg/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..103527c3e14d9093a71784e6989d31c705fc6882 --- /dev/null +++ b/tests/run-make/link-arg/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk +RUSTC_FLAGS = -C link-arg="-lfoo" -C link-arg="-lbar" --print link-args + +all: + $(RUSTC) $(RUSTC_FLAGS) empty.rs | $(CGREP) lfoo lbar diff --git a/tests/run-make/link-arg/empty.rs b/tests/run-make/link-arg/empty.rs new file mode 100644 index 0000000000000000000000000000000000000000..45590d86ba6c51f0babffb0b43e3e2f44d2f9e07 --- /dev/null +++ b/tests/run-make/link-arg/empty.rs @@ -0,0 +1 @@ +fn main() { } diff --git a/tests/run-make/link-args-order/Makefile b/tests/run-make/link-args-order/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c562cc1b396fa3851249a868f809ee32f780aa8f --- /dev/null +++ b/tests/run-make/link-args-order/Makefile @@ -0,0 +1,10 @@ +# ignore-msvc + +include ../tools.mk + +RUSTC_FLAGS = -C linker-flavor=ld -C link-arg=a -C link-args="b c" -C link-args="d e" -C link-arg=f +RUSTC_FLAGS_PRE = -C linker-flavor=ld -Z pre-link-arg=a -Z pre-link-args="b c" -Z pre-link-args="d e" -Z pre-link-arg=f + +all: + $(RUSTC) $(RUSTC_FLAGS) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"' + $(RUSTC) $(RUSTC_FLAGS_PRE) empty.rs 2>&1 | $(CGREP) '"a" "b" "c" "d" "e" "f"' diff --git a/tests/run-make/link-args-order/empty.rs b/tests/run-make/link-args-order/empty.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/link-args-order/empty.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/link-cfg/Makefile b/tests/run-make/link-cfg/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a40997011443c4e94021848b66dd1eef66a86ad7 --- /dev/null +++ b/tests/run-make/link-cfg/Makefile @@ -0,0 +1,23 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call DYLIB,return1) $(call DYLIB,return2) $(call NATIVE_STATICLIB,return3) + ls $(TMPDIR) + $(BARE_RUSTC) --print cfg --target x86_64-unknown-linux-musl | $(CGREP) crt-static + + $(RUSTC) no-deps.rs --cfg foo + $(call RUN,no-deps) + $(RUSTC) no-deps.rs --cfg bar + $(call RUN,no-deps) + + $(RUSTC) dep.rs + $(RUSTC) with-deps.rs --cfg foo + $(call RUN,with-deps) + $(RUSTC) with-deps.rs --cfg bar + $(call RUN,with-deps) + + $(RUSTC) dep-with-staticlib.rs + $(RUSTC) with-staticlib-deps.rs --cfg foo + $(call RUN,with-staticlib-deps) + $(RUSTC) with-staticlib-deps.rs --cfg bar + $(call RUN,with-staticlib-deps) diff --git a/tests/run-make/link-cfg/dep-with-staticlib.rs b/tests/run-make/link-cfg/dep-with-staticlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..5ad66475d003ff3aab72a63392daf5d8e84fb81a --- /dev/null +++ b/tests/run-make/link-cfg/dep-with-staticlib.rs @@ -0,0 +1,8 @@ +#![feature(link_cfg)] +#![crate_type = "rlib"] + +#[link(name = "return1", cfg(foo))] +#[link(name = "return3", kind = "static", cfg(bar))] +extern "C" { + pub fn my_function() -> i32; +} diff --git a/tests/run-make/link-cfg/dep.rs b/tests/run-make/link-cfg/dep.rs new file mode 100644 index 0000000000000000000000000000000000000000..40de77f05b3f67ba8f6ba43e210a4b0e3ac463fa --- /dev/null +++ b/tests/run-make/link-cfg/dep.rs @@ -0,0 +1,8 @@ +#![feature(link_cfg)] +#![crate_type = "rlib"] + +#[link(name = "return1", cfg(foo))] +#[link(name = "return2", cfg(bar))] +extern "C" { + pub fn my_function() -> i32; +} diff --git a/tests/run-make/link-cfg/no-deps.rs b/tests/run-make/link-cfg/no-deps.rs new file mode 100644 index 0000000000000000000000000000000000000000..ba5a8711a2610aa10fbb0681f813fa653d5a2f30 --- /dev/null +++ b/tests/run-make/link-cfg/no-deps.rs @@ -0,0 +1,20 @@ +#![feature(link_cfg)] + +#[link(name = "return1", cfg(foo))] +#[link(name = "return2", cfg(bar))] +extern "C" { + fn my_function() -> i32; +} + +fn main() { + unsafe { + let v = my_function(); + if cfg!(foo) { + assert_eq!(v, 1); + } else if cfg!(bar) { + assert_eq!(v, 2); + } else { + panic!("unknown"); + } + } +} diff --git a/tests/run-make/link-cfg/return1.c b/tests/run-make/link-cfg/return1.c new file mode 100644 index 0000000000000000000000000000000000000000..41c2809ade38e9bb4d766662d3d7d54aad068434 --- /dev/null +++ b/tests/run-make/link-cfg/return1.c @@ -0,0 +1,6 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int my_function() { + return 1; +} diff --git a/tests/run-make/link-cfg/return2.c b/tests/run-make/link-cfg/return2.c new file mode 100644 index 0000000000000000000000000000000000000000..622aeaa294c6b9cc3139f01150116f551ecb4619 --- /dev/null +++ b/tests/run-make/link-cfg/return2.c @@ -0,0 +1,6 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int my_function() { + return 2; +} diff --git a/tests/run-make/link-cfg/return3.c b/tests/run-make/link-cfg/return3.c new file mode 100644 index 0000000000000000000000000000000000000000..f29dc60d5e892deb5c48275b008d6f2ee9b38999 --- /dev/null +++ b/tests/run-make/link-cfg/return3.c @@ -0,0 +1,6 @@ +#ifdef _WIN32 +__declspec(dllexport) +#endif +int my_function() { + return 3; +} diff --git a/tests/run-make/link-cfg/with-deps.rs b/tests/run-make/link-cfg/with-deps.rs new file mode 100644 index 0000000000000000000000000000000000000000..48b7828152eb964d9afa9c177a6ec22cc99356a0 --- /dev/null +++ b/tests/run-make/link-cfg/with-deps.rs @@ -0,0 +1,14 @@ +extern crate dep; + +fn main() { + unsafe { + let v = dep::my_function(); + if cfg!(foo) { + assert_eq!(v, 1); + } else if cfg!(bar) { + assert_eq!(v, 2); + } else { + panic!("unknown"); + } + } +} diff --git a/tests/run-make/link-cfg/with-staticlib-deps.rs b/tests/run-make/link-cfg/with-staticlib-deps.rs new file mode 100644 index 0000000000000000000000000000000000000000..23e5926a73ce36e0e3a0636895a79b2cb2dbd5c0 --- /dev/null +++ b/tests/run-make/link-cfg/with-staticlib-deps.rs @@ -0,0 +1,14 @@ +extern crate dep_with_staticlib; + +fn main() { + unsafe { + let v = dep_with_staticlib::my_function(); + if cfg!(foo) { + assert_eq!(v, 1); + } else if cfg!(bar) { + assert_eq!(v, 3); + } else { + panic!("unknown"); + } + } +} diff --git a/tests/run-make/link-dedup/Makefile b/tests/run-make/link-dedup/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..eff18ab48ab4f216f2e08207b8fef693608ab898 --- /dev/null +++ b/tests/run-make/link-dedup/Makefile @@ -0,0 +1,12 @@ +# ignore-msvc + +include ../tools.mk + +all: + $(RUSTC) depa.rs + $(RUSTC) depb.rs + $(RUSTC) depc.rs + $(RUSTC) empty.rs --cfg bar 2>&1 | $(CGREP) '"-ltesta" "-ltestb" "-ltesta"' + $(RUSTC) empty.rs 2>&1 | $(CGREP) '"-ltesta"' + $(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltestb"' + $(RUSTC) empty.rs 2>&1 | $(CGREP) -v '"-ltesta" "-ltesta" "-ltesta"' diff --git a/tests/run-make/link-dedup/depa.rs b/tests/run-make/link-dedup/depa.rs new file mode 100644 index 0000000000000000000000000000000000000000..19178c5bd49573296acba514aa1a2c3b2fe9d5a3 --- /dev/null +++ b/tests/run-make/link-dedup/depa.rs @@ -0,0 +1,10 @@ +#![crate_type = "rlib"] + +#[link(name = "testa")] +extern "C" {} + +#[link(name = "testa")] +extern "C" {} + +#[link(name = "testa")] +extern "C" {} diff --git a/tests/run-make/link-dedup/depb.rs b/tests/run-make/link-dedup/depb.rs new file mode 100644 index 0000000000000000000000000000000000000000..b1be21fe005e6b74fed700e37a8d80d7f85269fe --- /dev/null +++ b/tests/run-make/link-dedup/depb.rs @@ -0,0 +1,8 @@ +#![feature(link_cfg)] +#![crate_type = "rlib"] + +#[link(name = "testb", cfg(foo))] +extern "C" {} + +#[link(name = "testb", cfg(bar))] +extern "C" {} diff --git a/tests/run-make/link-dedup/depc.rs b/tests/run-make/link-dedup/depc.rs new file mode 100644 index 0000000000000000000000000000000000000000..8dcb3dee5a2a4012db4926fa7a6e44e87e7fe669 --- /dev/null +++ b/tests/run-make/link-dedup/depc.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] + +#[link(name = "testa")] +extern "C" {} diff --git a/tests/run-make/link-dedup/empty.rs b/tests/run-make/link-dedup/empty.rs new file mode 100644 index 0000000000000000000000000000000000000000..e00ae18f4af39d5e8ad669ad6e01680849a1d8ba --- /dev/null +++ b/tests/run-make/link-dedup/empty.rs @@ -0,0 +1,5 @@ +extern crate depa; +extern crate depb; +extern crate depc; + +fn main() {} diff --git a/tests/run-make/link-path-order/Makefile b/tests/run-make/link-path-order/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a3831a63ac7e5d66dd5a51b0626d59f35023ed35 --- /dev/null +++ b/tests/run-make/link-path-order/Makefile @@ -0,0 +1,19 @@ +# ignore-cross-compile +include ../tools.mk + +# Verifies that the -L arguments given to the linker is in the same order +# as the -L arguments on the rustc command line. + +CORRECT_DIR=$(TMPDIR)/correct +WRONG_DIR=$(TMPDIR)/wrong + +F := $(call NATIVE_STATICLIB_FILE,foo) + +all: $(call NATIVE_STATICLIB,correct) $(call NATIVE_STATICLIB,wrong) + mkdir -p $(CORRECT_DIR) $(WRONG_DIR) + mv $(call NATIVE_STATICLIB,correct) $(CORRECT_DIR)/$(F) + mv $(call NATIVE_STATICLIB,wrong) $(WRONG_DIR)/$(F) + $(RUSTC) main.rs -o $(TMPDIR)/should_succeed -L $(CORRECT_DIR) -L $(WRONG_DIR) + $(call RUN,should_succeed) + $(RUSTC) main.rs -o $(TMPDIR)/should_fail -L $(WRONG_DIR) -L $(CORRECT_DIR) + $(call FAIL,should_fail) diff --git a/tests/run-make/link-path-order/correct.c b/tests/run-make/link-path-order/correct.c new file mode 100644 index 0000000000000000000000000000000000000000..3064af952f898dd0af82955b866136b66867c114 --- /dev/null +++ b/tests/run-make/link-path-order/correct.c @@ -0,0 +1 @@ +int should_return_one() { return 1; } diff --git a/tests/run-make/link-path-order/main.rs b/tests/run-make/link-path-order/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..8024e343d19a74fdad927c1d898958a92505bf46 --- /dev/null +++ b/tests/run-make/link-path-order/main.rs @@ -0,0 +1,16 @@ +#![feature(rustc_private)] + +extern crate libc; + +#[link(name = "foo", kind = "static")] +extern "C" { + fn should_return_one() -> libc::c_int; +} + +fn main() { + let result = unsafe { should_return_one() }; + + if result != 1 { + std::process::exit(255); + } +} diff --git a/tests/run-make/link-path-order/wrong.c b/tests/run-make/link-path-order/wrong.c new file mode 100644 index 0000000000000000000000000000000000000000..64275b3ad6bb0f78f4edd2abee386e200c445bff --- /dev/null +++ b/tests/run-make/link-path-order/wrong.c @@ -0,0 +1 @@ +int should_return_one() { return 0; } diff --git a/tests/run-make/linkage-attr-on-static/Makefile b/tests/run-make/linkage-attr-on-static/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ef50a7ef9f13c12224cf6509a9bd3f6ed625503b --- /dev/null +++ b/tests/run-make/linkage-attr-on-static/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,foo) + $(RUSTC) bar.rs + $(call RUN,bar) || exit 1 diff --git a/tests/run-make/linkage-attr-on-static/bar.rs b/tests/run-make/linkage-attr-on-static/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..68607cbb6572108b0e5013533ada08ebc0c4cd92 --- /dev/null +++ b/tests/run-make/linkage-attr-on-static/bar.rs @@ -0,0 +1,16 @@ +#![feature(linkage)] + +#[no_mangle] +#[linkage = "external"] +static BAZ: i32 = 21; + +#[link(name = "foo", kind = "static")] +extern "C" { + fn what() -> i32; +} + +fn main() { + unsafe { + assert_eq!(what(), BAZ); + } +} diff --git a/tests/run-make/linkage-attr-on-static/foo.c b/tests/run-make/linkage-attr-on-static/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..78a6934f57f76766182836819f92e94c3d513a4c --- /dev/null +++ b/tests/run-make/linkage-attr-on-static/foo.c @@ -0,0 +1,7 @@ +#include + +extern int32_t BAZ; + +int32_t what() { + return BAZ; +} diff --git a/tests/run-make/llvm-outputs/Makefile b/tests/run-make/llvm-outputs/Makefile index a3f25eba0b2eaf10282f5db1dd5d5d2a8d96211d..cccf1dd66fb938789c0b89961abc00244fd9b778 100644 --- a/tests/run-make/llvm-outputs/Makefile +++ b/tests/run-make/llvm-outputs/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: echo 'fn main() {}' | $(BARE_RUSTC) - --out-dir=$(TMPDIR)/random_directory_that_does_not_exist_ir/ --emit=llvm-ir diff --git a/tests/run-make/long-linker-command-lines-cmd-exe/Makefile b/tests/run-make/long-linker-command-lines-cmd-exe/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e43aab7f8e0fdd9ede947974a3f60ae1434d7998 --- /dev/null +++ b/tests/run-make/long-linker-command-lines-cmd-exe/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs -g + cp foo.bat $(TMPDIR)/ + OUT_DIR="$(TMPDIR)" RUSTC="$(RUSTC_ORIGINAL)" $(call RUN,foo) diff --git a/tests/run-make/long-linker-command-lines-cmd-exe/foo.bat b/tests/run-make/long-linker-command-lines-cmd-exe/foo.bat new file mode 100644 index 0000000000000000000000000000000000000000..a9350f12bbb6d6e889d6a244daf87cb3aab3107d --- /dev/null +++ b/tests/run-make/long-linker-command-lines-cmd-exe/foo.bat @@ -0,0 +1 @@ +%MY_LINKER% %* diff --git a/tests/run-make/long-linker-command-lines-cmd-exe/foo.rs b/tests/run-make/long-linker-command-lines-cmd-exe/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..74d7b9b07f697b6859e15be829691dcb3b1a92b5 --- /dev/null +++ b/tests/run-make/long-linker-command-lines-cmd-exe/foo.rs @@ -0,0 +1,101 @@ +// Like the `long-linker-command-lines` test this test attempts to blow +// a command line limit for running the linker. Unlike that test, however, +// this test is testing `cmd.exe` specifically rather than the OS. +// +// Unfortunately `cmd.exe` has a 8192 limit which is relatively small +// in the grand scheme of things and anyone sripting rustc's linker +// is probably using a `*.bat` script and is likely to hit this limit. +// +// This test uses a `foo.bat` script as the linker which just simply +// delegates back to this program. The compiler should use a lower +// limit for arguments before passing everything via `@`, which +// means that everything should still succeed here. + +use std::env; +use std::fs::{self, File}; +use std::io::{BufWriter, Write, Read}; +use std::path::PathBuf; +use std::process::Command; + +fn main() { + if !cfg!(windows) { + return + } + + let tmpdir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); + let ok = tmpdir.join("ok"); + let not_ok = tmpdir.join("not_ok"); + if env::var("YOU_ARE_A_LINKER").is_ok() { + match env::args_os().find(|a| a.to_string_lossy().contains("@")) { + Some(file) => { + let file = file.to_str().unwrap(); + fs::copy(&file[1..], &ok).unwrap(); + } + None => { File::create(¬_ok).unwrap(); } + } + return + } + + let rustc = env::var_os("RUSTC").unwrap_or("rustc".into()); + let me = env::current_exe().unwrap(); + let bat = me.parent() + .unwrap() + .join("foo.bat"); + let bat_linker = format!("linker={}", bat.display()); + for i in (1..).map(|i| i * 10) { + println!("attempt: {}", i); + + let file = tmpdir.join("bar.rs"); + let mut f = BufWriter::new(File::create(&file).unwrap()); + let mut lib_name = String::new(); + for _ in 0..i { + lib_name.push_str("foo"); + } + for j in 0..i { + writeln!(f, "#[link(name = \"{}{}\")]", lib_name, j).unwrap(); + } + writeln!(f, "extern {{}}\nfn main() {{}}").unwrap(); + f.into_inner().unwrap(); + + drop(fs::remove_file(&ok)); + drop(fs::remove_file(¬_ok)); + let status = Command::new(&rustc) + .arg(&file) + .arg("-C").arg(&bat_linker) + .arg("--out-dir").arg(&tmpdir) + .env("YOU_ARE_A_LINKER", "1") + .env("MY_LINKER", &me) + .status() + .unwrap(); + + if !status.success() { + panic!("rustc didn't succeed: {}", status); + } + + if !ok.exists() { + assert!(not_ok.exists()); + continue + } + + let mut contents = Vec::new(); + File::open(&ok).unwrap().read_to_end(&mut contents).unwrap(); + + for j in 0..i { + let exp = format!("{}{}", lib_name, j); + let exp = if cfg!(target_env = "msvc") { + let mut out = Vec::with_capacity(exp.len() * 2); + for c in exp.encode_utf16() { + // encode in little endian + out.push(c as u8); + out.push((c >> 8) as u8); + } + out + } else { + exp.into_bytes() + }; + assert!(contents.windows(exp.len()).any(|w| w == &exp[..])); + } + + break + } +} diff --git a/tests/run-make/long-linker-command-lines/Makefile b/tests/run-make/long-linker-command-lines/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f864ea74f4a95940273adcc148f9464b4dd00783 --- /dev/null +++ b/tests/run-make/long-linker-command-lines/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs -g -O + RUSTC="$(RUSTC_ORIGINAL)" $(call RUN,foo) diff --git a/tests/run-make/long-linker-command-lines/foo.rs b/tests/run-make/long-linker-command-lines/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..db238c0cf1a92627b8a574a6e87e66144ec1a976 --- /dev/null +++ b/tests/run-make/long-linker-command-lines/foo.rs @@ -0,0 +1,106 @@ +// This is a test which attempts to blow out the system limit with how many +// arguments can be passed to a process. This'll successively call rustc with +// larger and larger argument lists in an attempt to find one that's way too +// big for the system at hand. This file itself is then used as a "linker" to +// detect when the process creation succeeds. +// +// Eventually we should see an argument that looks like `@` as we switch from +// passing literal arguments to passing everything in the file. + +use std::collections::HashSet; +use std::env; +use std::fs::{self, File}; +use std::io::{BufWriter, Write}; +use std::path::{Path, PathBuf}; +use std::process::Command; + +fn write_test_case(file: &Path, n: usize) -> HashSet { + let mut libs = HashSet::new(); + let mut f = BufWriter::new(File::create(&file).unwrap()); + let mut prefix = String::new(); + for _ in 0..n { + prefix.push_str("foo"); + } + for i in 0..n { + writeln!(f, "#[link(name = \"S{}{}S\")]", prefix, i).unwrap(); + libs.insert(format!("{}{}", prefix, i)); + } + writeln!(f, "extern \"C\" {{}}\nfn main() {{}}").unwrap(); + f.into_inner().unwrap(); + + libs +} + +fn read_linker_args(path: &Path) -> String { + let contents = fs::read(path).unwrap(); + if cfg!(target_env = "msvc") { + let mut i = contents.chunks(2).map(|c| { + c[0] as u16 | ((c[1] as u16) << 8) + }); + assert_eq!(i.next(), Some(0xfeff), "Expected UTF-16 BOM"); + String::from_utf16(&i.collect::>()).unwrap() + } else { + String::from_utf8(contents).unwrap() + } +} + +fn main() { + let tmpdir = PathBuf::from(env::var_os("TMPDIR").unwrap()); + let ok = tmpdir.join("ok"); + if env::var("YOU_ARE_A_LINKER").is_ok() { + if let Some(file) = env::args_os().find(|a| a.to_string_lossy().contains("@")) { + let file = file.to_str().expect("non-utf8 file argument"); + fs::copy(&file[1..], &ok).unwrap(); + } + return + } + + let rustc = env::var_os("RUSTC").unwrap_or("rustc".into()); + let me_as_linker = format!("linker={}", env::current_exe().unwrap().display()); + for i in (1..).map(|i| i * 100) { + println!("attempt: {}", i); + let file = tmpdir.join("bar.rs"); + let mut expected_libs = write_test_case(&file, i); + + drop(fs::remove_file(&ok)); + let output = Command::new(&rustc) + .arg(&file) + .arg("-C").arg(&me_as_linker) + .arg("--out-dir").arg(&tmpdir) + .env("YOU_ARE_A_LINKER", "1") + .output() + .unwrap(); + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + panic!("status: {}\nstdout:\n{}\nstderr:\n{}", + output.status, + String::from_utf8_lossy(&output.stdout), + stderr.lines().map(|l| { + if l.len() > 200 { + format!("{}...\n", &l[..200]) + } else { + format!("{}\n", l) + } + }).collect::()); + } + + if !ok.exists() { + continue + } + + let linker_args = read_linker_args(&ok); + for arg in linker_args.split('S') { + expected_libs.remove(arg); + } + + assert!( + expected_libs.is_empty(), + "expected but missing libraries: {:#?}\nlinker arguments: \n{}", + expected_libs, + linker_args, + ); + + break + } +} diff --git a/tests/run-make/longjmp-across-rust/Makefile b/tests/run-make/longjmp-across-rust/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5fd2d4f855ffe174d04770c4a49dd5b16addca64 --- /dev/null +++ b/tests/run-make/longjmp-across-rust/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,foo) + $(RUSTC) main.rs + $(call RUN,main) diff --git a/tests/run-make/longjmp-across-rust/foo.c b/tests/run-make/longjmp-across-rust/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..bd71cc4d777128b9877043b7b928eee0b9592343 --- /dev/null +++ b/tests/run-make/longjmp-across-rust/foo.c @@ -0,0 +1,18 @@ +#include +#include + +static jmp_buf ENV; + +extern void test_middle(); + +void test_start(void(*f)()) { + if (setjmp(ENV) != 0) + return; + f(); + assert(0); +} + +void test_end() { + longjmp(ENV, 1); + assert(0); +} diff --git a/tests/run-make/longjmp-across-rust/main.rs b/tests/run-make/longjmp-across-rust/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..cc1d5b126dd35c229fa0268e6df5a9da8b1fc238 --- /dev/null +++ b/tests/run-make/longjmp-across-rust/main.rs @@ -0,0 +1,29 @@ +#[link(name = "foo", kind = "static")] +extern "C" { + fn test_start(f: extern "C" fn()); + fn test_end(); +} + +fn main() { + unsafe { + test_start(test_middle); + } +} + +struct A; + +impl Drop for A { + fn drop(&mut self) {} +} + +extern "C" fn test_middle() { + let _a = A; + foo(); +} + +fn foo() { + let _a = A; + unsafe { + test_end(); + } +} diff --git a/tests/run-make/ls-metadata/Makefile b/tests/run-make/ls-metadata/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..123dd64e15cbd5619653d8faa3d63de667545e3b --- /dev/null +++ b/tests/run-make/ls-metadata/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs + $(RUSTC) -Z ls $(TMPDIR)/foo + touch $(TMPDIR)/bar + $(RUSTC) -Z ls $(TMPDIR)/bar diff --git a/tests/run-make/ls-metadata/foo.rs b/tests/run-make/ls-metadata/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/ls-metadata/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/lto-dylib-dep/Makefile b/tests/run-make/lto-dylib-dep/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a9344597d081e2dcd03d6d1523336492826035f4 --- /dev/null +++ b/tests/run-make/lto-dylib-dep/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +# Test that we don't run into an assertion when using a Rust dylib dependency +# while compiling with full LTO. +# See https://github.com/rust-lang/rust/issues/59137 + +all: + $(RUSTC) a_dylib.rs --crate-type=dylib -C prefer-dynamic + $(RUSTC) main.rs -C lto + $(call RUN,main) diff --git a/tests/run-make/lto-dylib-dep/a_dylib.rs b/tests/run-make/lto-dylib-dep/a_dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..e63457e6eb9535041a23a3a3c1987fd874646e01 --- /dev/null +++ b/tests/run-make/lto-dylib-dep/a_dylib.rs @@ -0,0 +1,3 @@ +pub fn foo() { + println!("bar"); +} diff --git a/tests/run-make/lto-dylib-dep/main.rs b/tests/run-make/lto-dylib-dep/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..4fb3c4730b2c64d106dd33651e709a8664cf6091 --- /dev/null +++ b/tests/run-make/lto-dylib-dep/main.rs @@ -0,0 +1,5 @@ +extern crate a_dylib; + +fn main() { + a_dylib::foo(); +} diff --git a/tests/run-make/lto-empty/Makefile b/tests/run-make/lto-empty/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..1b795c4b73805c9729440cdaa69bd84ea61ea32d --- /dev/null +++ b/tests/run-make/lto-empty/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +include ../tools.mk + +all: cdylib-fat cdylib-thin + +cdylib-fat: + $(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat + $(RUSTC) lib.rs -C lto=fat -C opt-level=3 -C incremental=$(TMPDIR)/inc-fat + +cdylib-thin: + $(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin + $(RUSTC) lib.rs -C lto=thin -C opt-level=3 -C incremental=$(TMPDIR)/inc-thin + diff --git a/tests/run-make/lto-empty/lib.rs b/tests/run-make/lto-empty/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..e3663c79078f4f0823ebbb7baf5fc65a1512c15a --- /dev/null +++ b/tests/run-make/lto-empty/lib.rs @@ -0,0 +1 @@ +#![crate_type = "cdylib"] diff --git a/tests/run-make/lto-no-link-whole-rlib/Makefile b/tests/run-make/lto-no-link-whole-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3e82322e72d34fec4f84c63789d326fe39c11eca --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,foo) $(call NATIVE_STATICLIB,bar) + $(RUSTC) lib1.rs + $(RUSTC) lib2.rs + $(RUSTC) main.rs -Clto + $(call RUN,main) + diff --git a/tests/run-make/lto-no-link-whole-rlib/bar.c b/tests/run-make/lto-no-link-whole-rlib/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..b2501193029ba9f5bf35b5948d64c9c8f06093c5 --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/bar.c @@ -0,0 +1,3 @@ +int foo() { + return 2; +} diff --git a/tests/run-make/lto-no-link-whole-rlib/foo.c b/tests/run-make/lto-no-link-whole-rlib/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..75010458eceb0861d4ac8e4ee8e126789a61940a --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/foo.c @@ -0,0 +1,3 @@ +int foo() { + return 1; +} diff --git a/tests/run-make/lto-no-link-whole-rlib/lib1.rs b/tests/run-make/lto-no-link-whole-rlib/lib1.rs new file mode 100644 index 0000000000000000000000000000000000000000..f70bb338223e0b96b4d1c086b4f89e75e5468172 --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/lib1.rs @@ -0,0 +1,10 @@ +#![crate_type = "rlib"] + +#[link(name = "foo", kind = "static")] +extern "C" { + fn foo() -> i32; +} + +pub fn foo1() -> i32 { + unsafe { foo() } +} diff --git a/tests/run-make/lto-no-link-whole-rlib/lib2.rs b/tests/run-make/lto-no-link-whole-rlib/lib2.rs new file mode 100644 index 0000000000000000000000000000000000000000..2dec2a2718e83a197c6656c1aed89f752ee1dfe3 --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/lib2.rs @@ -0,0 +1,12 @@ +#![crate_type = "rlib"] + +extern crate lib1; + +#[link(name = "bar", kind = "static")] +extern "C" { + fn foo() -> i32; +} + +pub fn foo2() -> i32 { + unsafe { foo() } +} diff --git a/tests/run-make/lto-no-link-whole-rlib/main.rs b/tests/run-make/lto-no-link-whole-rlib/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..0c658808e6e5da77c06495903a327ad48c2b430f --- /dev/null +++ b/tests/run-make/lto-no-link-whole-rlib/main.rs @@ -0,0 +1,7 @@ +extern crate lib1; +extern crate lib2; + +fn main() { + assert_eq!(lib1::foo1(), 2); + assert_eq!(lib2::foo2(), 2); +} diff --git a/tests/run-make/lto-readonly-lib/Makefile b/tests/run-make/lto-readonly-lib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..11d944e3e3d4bb8bd440017a63ab52205f0fb4df --- /dev/null +++ b/tests/run-make/lto-readonly-lib/Makefile @@ -0,0 +1,13 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) lib.rs + + # the compiler needs to copy and modify the rlib file when performing + # LTO, so we should ensure that it can cope with the original rlib + # being read-only. + chmod 444 $(TMPDIR)/*.rlib + + $(RUSTC) main.rs -C lto + $(call RUN,main) diff --git a/tests/run-make/lto-readonly-lib/lib.rs b/tests/run-make/lto-readonly-lib/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/lto-readonly-lib/lib.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/lto-readonly-lib/main.rs b/tests/run-make/lto-readonly-lib/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..69da798b3eb95bfc6c1a03036be3468689f5e9e4 --- /dev/null +++ b/tests/run-make/lto-readonly-lib/main.rs @@ -0,0 +1,3 @@ +extern crate lib; + +fn main() {} diff --git a/tests/run-make/lto-smoke-c/Makefile b/tests/run-make/lto-smoke-c/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f1ba3d95da2920e5cb47fd6898b593c03a30407c --- /dev/null +++ b/tests/run-make/lto-smoke-c/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +# Apparently older versions of GCC segfault if -g is passed... +CC := $(CC:-g=) + +all: + $(RUSTC) foo.rs -C lto + $(CC) bar.c $(call STATICLIB,foo) \ + $(call OUT_EXE,bar) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(call RUN,bar) diff --git a/tests/run-make/lto-smoke-c/bar.c b/tests/run-make/lto-smoke-c/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..bb4036b06e13b79a32ec78ae04db97590f54b2cc --- /dev/null +++ b/tests/run-make/lto-smoke-c/bar.c @@ -0,0 +1,6 @@ +void foo(); + +int main() { + foo(); + return 0; +} diff --git a/tests/run-make/lto-smoke-c/foo.rs b/tests/run-make/lto-smoke-c/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..2e59432cdb16feca35d30166b94ab591a1568125 --- /dev/null +++ b/tests/run-make/lto-smoke-c/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "staticlib"] + +#[no_mangle] +pub extern "C" fn foo() {} diff --git a/tests/run-make/lto-smoke/Makefile b/tests/run-make/lto-smoke/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..13a09fce73404670565a48a54aa49ccabe58b405 --- /dev/null +++ b/tests/run-make/lto-smoke/Makefile @@ -0,0 +1,31 @@ +# ignore-cross-compile +include ../tools.mk + +all: noparam bool_true bool_false thin fat + +noparam: + $(RUSTC) lib.rs + $(RUSTC) main.rs -C lto + $(call RUN,main) + +bool_true: + $(RUSTC) lib.rs + $(RUSTC) main.rs -C lto=yes + $(call RUN,main) + + +bool_false: + $(RUSTC) lib.rs + $(RUSTC) main.rs -C lto=off + $(call RUN,main) + +thin: + $(RUSTC) lib.rs + $(RUSTC) main.rs -C lto=thin + $(call RUN,main) + +fat: + $(RUSTC) lib.rs + $(RUSTC) main.rs -C lto=fat + $(call RUN,main) + diff --git a/tests/run-make/lto-smoke/lib.rs b/tests/run-make/lto-smoke/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/lto-smoke/lib.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/lto-smoke/main.rs b/tests/run-make/lto-smoke/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..69da798b3eb95bfc6c1a03036be3468689f5e9e4 --- /dev/null +++ b/tests/run-make/lto-smoke/main.rs @@ -0,0 +1,3 @@ +extern crate lib; + +fn main() {} diff --git a/tests/run-make/macos-deployment-target/Makefile b/tests/run-make/macos-deployment-target/Makefile index 70fca04365378e4af715d7948589000a591399e4..d0cf836bcdfcc8455656b42e471bfe890a416a8b 100644 --- a/tests/run-make/macos-deployment-target/Makefile +++ b/tests/run-make/macos-deployment-target/Makefile @@ -4,7 +4,7 @@ # This is important since its a compatibility hazard. The linker will # generate load commands differently based on what minimum OS it can assume. -include ../../run-make-fulldeps/tools.mk +include ../tools.mk ifeq ($(strip $(shell uname -m)),arm64) GREP_PATTERN = "minos 11.0" diff --git a/tests/run-make/macos-fat-archive/Makefile b/tests/run-make/macos-fat-archive/Makefile index cc99375db6902410e10d0359ad6191c1084cbd97..b6582c809e8b4df1ebb507e918b6f81adb4c563f 100644 --- a/tests/run-make/macos-fat-archive/Makefile +++ b/tests/run-make/macos-fat-archive/Makefile @@ -1,6 +1,6 @@ # only-macos --include ../../run-make-fulldeps/tools.mk +include ../tools.mk "$(TMPDIR)"/libnative-library.a: native-library.c $(CC) -arch arm64 -arch x86_64 native-library.c -c -o "$(TMPDIR)"/native-library.o diff --git a/tests/run-make/manual-crate-name/Makefile b/tests/run-make/manual-crate-name/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c00e20c7c57d64bd22af7642bca3ce590784b41b --- /dev/null +++ b/tests/run-make/manual-crate-name/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) --crate-name foo bar.rs + rm $(TMPDIR)/libfoo.rlib diff --git a/tests/run-make/manual-crate-name/bar.rs b/tests/run-make/manual-crate-name/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1bfaa6cab5d9be9e67e4cfacc8eb4e6110f6358 --- /dev/null +++ b/tests/run-make/manual-crate-name/bar.rs @@ -0,0 +1 @@ +#![crate_type = "rlib"] diff --git a/tests/run-make/manual-link/Makefile b/tests/run-make/manual-link/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8dbf0460fff50d1361125b05cddf2d6993952824 --- /dev/null +++ b/tests/run-make/manual-link/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(TMPDIR)/libbar.a + $(RUSTC) foo.rs -lstatic=bar + $(RUSTC) main.rs + $(call RUN,main) diff --git a/tests/run-make/manual-link/bar.c b/tests/run-make/manual-link/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..e42599986781fe984a2c1427a3373cf439a34f60 --- /dev/null +++ b/tests/run-make/manual-link/bar.c @@ -0,0 +1 @@ +void bar() {} diff --git a/tests/run-make/manual-link/foo.c b/tests/run-make/manual-link/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..e42599986781fe984a2c1427a3373cf439a34f60 --- /dev/null +++ b/tests/run-make/manual-link/foo.c @@ -0,0 +1 @@ +void bar() {} diff --git a/tests/run-make/manual-link/foo.rs b/tests/run-make/manual-link/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c1f28236ffd2ba8ad7fefd61c31f154a6ebcdd2f --- /dev/null +++ b/tests/run-make/manual-link/foo.rs @@ -0,0 +1,11 @@ +#![crate_type = "rlib"] + +extern "C" { + fn bar(); +} + +pub fn foo() { + unsafe { + bar(); + } +} diff --git a/tests/run-make/manual-link/main.rs b/tests/run-make/manual-link/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..fe35f1f8e2ead2e1ea2d06c1aa4ce426d2a8a6aa --- /dev/null +++ b/tests/run-make/manual-link/main.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::foo(); +} diff --git a/tests/run-make/many-crates-but-no-match/Makefile b/tests/run-make/many-crates-but-no-match/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ca0ab8e9e5f412c8f58327837639b4605664bd16 --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/Makefile @@ -0,0 +1,35 @@ +include ../tools.mk + +# Modelled after ui/changing-crates.rs test, but this one puts +# more than one (mismatching) candidate crate into the search path, +# which did not appear directly expressible in UI testing infrastructure. +# +# Note that we move the built libraries into target direcrtories rather than +# use the `--out-dir` option because the `../tools.mk` file already bakes a +# use of `--out-dir` into the definition of $(RUSTC). + +A1=$(TMPDIR)/a1 +A2=$(TMPDIR)/a2 +A3=$(TMPDIR)/a3 + +# A hack to match distinct lines of output from a single run. +LOG=$(TMPDIR)/log.txt + +all: + mkdir -p $(A1) $(A2) $(A3) + $(RUSTC) --crate-type=rlib crateA1.rs + mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A1) + $(RUSTC) --crate-type=rlib -L $(A1) crateB.rs + $(RUSTC) --crate-type=rlib crateA2.rs + mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A2) + $(RUSTC) --crate-type=rlib crateA3.rs + mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A3) + # Ensure crateC fails to compile since A1 is "missing" and A2/A3 hashes do not match + $(RUSTC) -L $(A2) -L $(A3) crateC.rs >$(LOG) 2>&1 || true + $(CGREP) \ + 'found possibly newer version of crate `crateA` which `crateB` depends on' \ + 'note: perhaps that crate needs to be recompiled?' \ + 'crate `crateA`:' \ + 'crate `crateB`:' \ + < $(LOG) + # the 'crate `crateA`' will match two entries. diff --git a/tests/run-make/many-crates-but-no-match/crateA1.rs b/tests/run-make/many-crates-but-no-match/crateA1.rs new file mode 100644 index 0000000000000000000000000000000000000000..3fed5a38e2caeb6f4e93f718a7c0118eb335db5b --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/crateA1.rs @@ -0,0 +1,4 @@ +#![crate_name="crateA"] + +// Base crate +pub fn func() {} diff --git a/tests/run-make/many-crates-but-no-match/crateA2.rs b/tests/run-make/many-crates-but-no-match/crateA2.rs new file mode 100644 index 0000000000000000000000000000000000000000..8db07a015ff2a3c993152ae0341c86674de002c1 --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/crateA2.rs @@ -0,0 +1,4 @@ +#![crate_name="crateA"] + +// Base crate +pub fn func() { println!("hello"); } diff --git a/tests/run-make/many-crates-but-no-match/crateA3.rs b/tests/run-make/many-crates-but-no-match/crateA3.rs new file mode 100644 index 0000000000000000000000000000000000000000..a1e8e40a38c2a5a37373259a3b4007453aa90517 --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/crateA3.rs @@ -0,0 +1,4 @@ +#![crate_name="crateA"] + +// Base crate +pub fn foo() { println!("world!"); } diff --git a/tests/run-make/many-crates-but-no-match/crateB.rs b/tests/run-make/many-crates-but-no-match/crateB.rs new file mode 100644 index 0000000000000000000000000000000000000000..4ccd65d653eddf5af3e5a0700b0e0a1e3299de0a --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/crateB.rs @@ -0,0 +1 @@ +extern crate crateA; diff --git a/tests/run-make/many-crates-but-no-match/crateC.rs b/tests/run-make/many-crates-but-no-match/crateC.rs new file mode 100644 index 0000000000000000000000000000000000000000..a8b817ec6810b5d73e592d6abee2b9ef4c6418b0 --- /dev/null +++ b/tests/run-make/many-crates-but-no-match/crateC.rs @@ -0,0 +1,3 @@ +extern crate crateB; + +fn main() {} diff --git a/tests/run-make/metadata-flag-frobs-symbols/Makefile b/tests/run-make/metadata-flag-frobs-symbols/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..53d7d0657695f65184d1ae04501a156feb866acb --- /dev/null +++ b/tests/run-make/metadata-flag-frobs-symbols/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs -C metadata=a -C extra-filename=-a + $(RUSTC) foo.rs -C metadata=b -C extra-filename=-b + $(RUSTC) bar.rs \ + --extern foo1=$(TMPDIR)/libfoo-a.rlib \ + --extern foo2=$(TMPDIR)/libfoo-b.rlib \ + --print link-args + $(call RUN,bar) diff --git a/tests/run-make/metadata-flag-frobs-symbols/bar.rs b/tests/run-make/metadata-flag-frobs-symbols/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..1e6957a3694b60bd0b86bced1d9867e7d4fc4754 --- /dev/null +++ b/tests/run-make/metadata-flag-frobs-symbols/bar.rs @@ -0,0 +1,8 @@ +extern crate foo1; +extern crate foo2; + +fn main() { + let a = foo1::foo(); + let b = foo2::foo(); + assert!(a as *const _ != b as *const _); +} diff --git a/tests/run-make/metadata-flag-frobs-symbols/foo.rs b/tests/run-make/metadata-flag-frobs-symbols/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..696aed2fa1db4109b521a5ea4c5e745a8345617c --- /dev/null +++ b/tests/run-make/metadata-flag-frobs-symbols/foo.rs @@ -0,0 +1,6 @@ +#![crate_name = "foo"] +#![crate_type = "rlib"] + +static FOO: usize = 3; + +pub fn foo() -> &'static usize { &FOO } diff --git a/tests/run-make/min-global-align/Makefile b/tests/run-make/min-global-align/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..82f38749e009284169ec95737368efc7f2736067 --- /dev/null +++ b/tests/run-make/min-global-align/Makefile @@ -0,0 +1,22 @@ +include ../tools.mk + +# only-linux + +# This tests ensure that global variables respect the target minimum alignment. +# The three bools `STATIC_BOOL`, `STATIC_MUT_BOOL`, and `CONST_BOOL` all have +# type-alignment of 1, but some targets require greater global alignment. + +SRC = min_global_align.rs +LL = $(TMPDIR)/min_global_align.ll + +all: +# Most targets are happy with default alignment -- take i686 for example. +ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) + $(RUSTC) --target=i686-unknown-linux-gnu --emit=llvm-ir $(SRC) + [ "$$(grep -c 'align 1' "$(LL)")" -eq "3" ] +endif +# SystemZ requires even alignment for PC-relative addressing. +ifeq ($(filter systemz,$(LLVM_COMPONENTS)),systemz) + $(RUSTC) --target=s390x-unknown-linux-gnu --emit=llvm-ir $(SRC) + [ "$$(grep -c 'align 2' "$(LL)")" -eq "3" ] +endif diff --git a/tests/run-make/min-global-align/min_global_align.rs b/tests/run-make/min-global-align/min_global_align.rs new file mode 100644 index 0000000000000000000000000000000000000000..135792e9372050750a24ba94808880210b230f0d --- /dev/null +++ b/tests/run-make/min-global-align/min_global_align.rs @@ -0,0 +1,32 @@ +#![feature(no_core, lang_items)] +#![crate_type = "rlib"] +#![no_core] + +pub static STATIC_BOOL: bool = true; + +pub static mut STATIC_MUT_BOOL: bool = true; + +const CONST_BOOL: bool = true; +pub static CONST_BOOL_REF: &'static bool = &CONST_BOOL; + +#[lang = "sized"] +trait Sized {} + +#[lang = "copy"] +trait Copy {} +impl Copy for bool {} +impl Copy for &bool {} + +#[lang = "freeze"] +trait Freeze {} + +// No `UnsafeCell`, so everything is `Freeze`. +impl Freeze for T {} + +#[lang = "sync"] +trait Sync {} +impl Sync for bool {} +impl Sync for &'static bool {} + +#[lang = "drop_in_place"] +pub unsafe fn drop_in_place(_: *mut T) {} diff --git a/tests/run-make/mingw-export-call-convention/Makefile b/tests/run-make/mingw-export-call-convention/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4a60059cc5441815bf4b3a03ca80c58cd32a0f39 --- /dev/null +++ b/tests/run-make/mingw-export-call-convention/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# only-windows-gnu + +all: + $(RUSTC) foo.rs + # FIXME: we should make sure __stdcall calling convention is used here + # but that only works with LLD right now + nm -g "$(call IMPLIB,foo)" | $(CGREP) bar diff --git a/tests/run-make/mingw-export-call-convention/foo.rs b/tests/run-make/mingw-export-call-convention/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..1fec00311ef06b526d4dfa9ef067fe419bc42898 --- /dev/null +++ b/tests/run-make/mingw-export-call-convention/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "cdylib"] + +#[no_mangle] +pub extern "system" fn bar() {} diff --git a/tests/run-make/mismatching-target-triples/Makefile b/tests/run-make/mismatching-target-triples/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..409388e041478693d38f407ba183a23717db9fc4 --- /dev/null +++ b/tests/run-make/mismatching-target-triples/Makefile @@ -0,0 +1,11 @@ +include ../tools.mk + +# Issue #10814 +# +# these are no_std to avoid having to have the standard library or any +# linkers/assemblers for the relevant platform + +all: + $(RUSTC) foo.rs --target=i686-unknown-linux-gnu + $(RUSTC) bar.rs --target=x86_64-unknown-linux-gnu 2>&1 \ + | $(CGREP) 'couldn'"'"'t find crate `foo` with expected target triple x86_64-unknown-linux-gnu' diff --git a/tests/run-make/mismatching-target-triples/bar.rs b/tests/run-make/mismatching-target-triples/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..b2c2fc1c41074ce59dc372165f0bb28e0bb8bc02 --- /dev/null +++ b/tests/run-make/mismatching-target-triples/bar.rs @@ -0,0 +1,3 @@ +#![feature(no_core)] +#![no_core] +extern crate foo; diff --git a/tests/run-make/mismatching-target-triples/foo.rs b/tests/run-make/mismatching-target-triples/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..6fa0549144807bf6e11f3bf82b35127b8a96a9fc --- /dev/null +++ b/tests/run-make/mismatching-target-triples/foo.rs @@ -0,0 +1,3 @@ +#![feature(no_core)] +#![no_core] +#![crate_type = "lib"] diff --git a/tests/run-make/missing-crate-dependency/Makefile b/tests/run-make/missing-crate-dependency/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7c271ab8a90deba3a1c2b741f9e1f5ee006374dd --- /dev/null +++ b/tests/run-make/missing-crate-dependency/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +all: + $(RUSTC) --crate-type=rlib crateA.rs + $(RUSTC) --crate-type=rlib crateB.rs + $(call REMOVE_RLIBS,crateA) + # Ensure crateC fails to compile since dependency crateA is missing + $(RUSTC) crateC.rs 2>&1 | \ + $(CGREP) 'can'"'"'t find crate for `crateA` which `crateB` depends on' diff --git a/tests/run-make/missing-crate-dependency/crateA.rs b/tests/run-make/missing-crate-dependency/crateA.rs new file mode 100644 index 0000000000000000000000000000000000000000..31433cb60b8a648926e2f8ce0d7da0962783b5f6 --- /dev/null +++ b/tests/run-make/missing-crate-dependency/crateA.rs @@ -0,0 +1,2 @@ +// Base crate +pub fn func() {} diff --git a/tests/run-make/missing-crate-dependency/crateB.rs b/tests/run-make/missing-crate-dependency/crateB.rs new file mode 100644 index 0000000000000000000000000000000000000000..4ccd65d653eddf5af3e5a0700b0e0a1e3299de0a --- /dev/null +++ b/tests/run-make/missing-crate-dependency/crateB.rs @@ -0,0 +1 @@ +extern crate crateA; diff --git a/tests/run-make/missing-crate-dependency/crateC.rs b/tests/run-make/missing-crate-dependency/crateC.rs new file mode 100644 index 0000000000000000000000000000000000000000..a8b817ec6810b5d73e592d6abee2b9ef4c6418b0 --- /dev/null +++ b/tests/run-make/missing-crate-dependency/crateC.rs @@ -0,0 +1,3 @@ +extern crate crateB; + +fn main() {} diff --git a/tests/run-make/mixing-deps/Makefile b/tests/run-make/mixing-deps/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c2a5a2a0abbed9f1702cf2722c1a2501762b3e8b --- /dev/null +++ b/tests/run-make/mixing-deps/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) both.rs -C prefer-dynamic + $(RUSTC) dylib.rs -C prefer-dynamic + $(RUSTC) prog.rs + $(call RUN,prog) diff --git a/tests/run-make/mixing-deps/both.rs b/tests/run-make/mixing-deps/both.rs new file mode 100644 index 0000000000000000000000000000000000000000..6a58187633f48312916c9300d333e5321aae86d4 --- /dev/null +++ b/tests/run-make/mixing-deps/both.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] +#![crate_type = "dylib"] + +pub static foo: isize = 4; diff --git a/tests/run-make/mixing-deps/dylib.rs b/tests/run-make/mixing-deps/dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..88976d5b663f32de3aeed99064cfd1db19efd3e7 --- /dev/null +++ b/tests/run-make/mixing-deps/dylib.rs @@ -0,0 +1,6 @@ +#![crate_type = "dylib"] +extern crate both; + +use std::mem; + +pub fn addr() -> usize { unsafe { mem::transmute(&both::foo) } } diff --git a/tests/run-make/mixing-deps/prog.rs b/tests/run-make/mixing-deps/prog.rs new file mode 100644 index 0000000000000000000000000000000000000000..188981dc1a31adea0075e610d49b7d810d371e74 --- /dev/null +++ b/tests/run-make/mixing-deps/prog.rs @@ -0,0 +1,9 @@ +extern crate dylib; +extern crate both; + +use std::mem; + +fn main() { + assert_eq!(unsafe { mem::transmute::<&isize, usize>(&both::foo) }, + dylib::addr()); +} diff --git a/tests/run-make/mixing-formats/Makefile b/tests/run-make/mixing-formats/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d01978a159953c8392362fae235e3bc4ff7b263e --- /dev/null +++ b/tests/run-make/mixing-formats/Makefile @@ -0,0 +1,75 @@ +# ignore-cross-compile +include ../tools.mk + +# Testing various mixings of rlibs and dylibs. Makes sure that it's possible to +# link an rlib to a dylib. The dependency tree among the file looks like: +# +# foo +# / \ +# bar1 bar2 +# / \ / +# baz baz2 +# +# This is generally testing the permutations of the foo/bar1/bar2 layer against +# the baz/baz2 layer + +all: + # Building just baz + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic + $(RUSTC) --crate-type=bin baz.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=rlib bar1.rs + $(RUSTC) --crate-type=dylib,rlib baz.rs -C prefer-dynamic + $(RUSTC) --crate-type=bin baz.rs + rm $(TMPDIR)/* + # Building baz2 + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib baz2.rs && exit 1 || exit 0 + $(RUSTC) --crate-type=bin baz2.rs && exit 1 || exit 0 + rm $(TMPDIR)/* + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=rlib bar1.rs + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=rlib bar2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=rlib foo.rs + $(RUSTC) --crate-type=rlib bar1.rs + $(RUSTC) --crate-type=rlib bar2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=rlib bar1.rs + $(RUSTC) --crate-type=rlib bar2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs -C prefer-dynamic + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=rlib bar2.rs + $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=rlib bar1.rs + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=bin baz2.rs + rm $(TMPDIR)/* + $(RUSTC) --crate-type=dylib foo.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar1.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib bar2.rs -C prefer-dynamic + $(RUSTC) --crate-type=dylib,rlib baz2.rs + $(RUSTC) --crate-type=bin baz2.rs diff --git a/tests/run-make/mixing-formats/bar1.rs b/tests/run-make/mixing-formats/bar1.rs new file mode 100644 index 0000000000000000000000000000000000000000..49af74e1b748908873bf49dfcd2239724b7ab495 --- /dev/null +++ b/tests/run-make/mixing-formats/bar1.rs @@ -0,0 +1 @@ +extern crate foo; diff --git a/tests/run-make/mixing-formats/bar2.rs b/tests/run-make/mixing-formats/bar2.rs new file mode 100644 index 0000000000000000000000000000000000000000..49af74e1b748908873bf49dfcd2239724b7ab495 --- /dev/null +++ b/tests/run-make/mixing-formats/bar2.rs @@ -0,0 +1 @@ +extern crate foo; diff --git a/tests/run-make/mixing-formats/baz.rs b/tests/run-make/mixing-formats/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..99a73159ea4bd6078b65daed227e3627e4b4b5a1 --- /dev/null +++ b/tests/run-make/mixing-formats/baz.rs @@ -0,0 +1,3 @@ +extern crate bar1; + +fn main() {} diff --git a/tests/run-make/mixing-formats/baz2.rs b/tests/run-make/mixing-formats/baz2.rs new file mode 100644 index 0000000000000000000000000000000000000000..d0fab1e4cdf61f47a73e4e361ad160793a101e40 --- /dev/null +++ b/tests/run-make/mixing-formats/baz2.rs @@ -0,0 +1,4 @@ +extern crate bar1; +extern crate bar2; + +fn main() {} diff --git a/tests/run-make/mixing-formats/foo.rs b/tests/run-make/mixing-formats/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..d11c69f812a8dfe9ea3db2474363c188c096c5b3 --- /dev/null +++ b/tests/run-make/mixing-formats/foo.rs @@ -0,0 +1 @@ +// intentionally empty diff --git a/tests/run-make/mixing-libs/Makefile b/tests/run-make/mixing-libs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e8262b284011b750bb762f37628ac8de918d4473 --- /dev/null +++ b/tests/run-make/mixing-libs/Makefile @@ -0,0 +1,10 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) rlib.rs + $(RUSTC) dylib.rs + $(RUSTC) rlib.rs --crate-type=dylib + $(RUSTC) dylib.rs + $(call REMOVE_DYLIBS,rlib) + $(RUSTC) prog.rs && exit 1 || exit 0 diff --git a/tests/run-make/mixing-libs/dylib.rs b/tests/run-make/mixing-libs/dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..6856887501c2664a513126a4bc9479611e09b730 --- /dev/null +++ b/tests/run-make/mixing-libs/dylib.rs @@ -0,0 +1,4 @@ +#![crate_type = "dylib"] +extern crate rlib; + +pub fn dylib() { rlib::rlib() } diff --git a/tests/run-make/mixing-libs/prog.rs b/tests/run-make/mixing-libs/prog.rs new file mode 100644 index 0000000000000000000000000000000000000000..14ce5c951a7b7a8882036e1d8292c78429def9a7 --- /dev/null +++ b/tests/run-make/mixing-libs/prog.rs @@ -0,0 +1,7 @@ +extern crate dylib; +extern crate rlib; + +fn main() { + dylib::dylib(); + rlib::rlib(); +} diff --git a/tests/run-make/mixing-libs/rlib.rs b/tests/run-make/mixing-libs/rlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..96dcd16bb9301087e225b49a952cd5a476d7da3c --- /dev/null +++ b/tests/run-make/mixing-libs/rlib.rs @@ -0,0 +1,2 @@ +#![crate_type = "rlib"] +pub fn rlib() {} diff --git a/tests/run-make/msvc-opt-minsize/Makefile b/tests/run-make/msvc-opt-minsize/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..32e6e28018f7ab962cf3a23ee25479cb356529dd --- /dev/null +++ b/tests/run-make/msvc-opt-minsize/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs -Copt-level=z 2>&1 + $(call RUN,foo) diff --git a/tests/run-make/msvc-opt-minsize/foo.rs b/tests/run-make/msvc-opt-minsize/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..3f5496c08ee259a52be03d4b1867b32e54315575 --- /dev/null +++ b/tests/run-make/msvc-opt-minsize/foo.rs @@ -0,0 +1,19 @@ +#![feature(test)] +extern crate test; + +fn foo(x: i32, y: i32) -> i64 { + (x + y) as i64 +} + +#[inline(never)] +fn bar() { + let _f = Box::new(0); + // This call used to trigger an LLVM bug in opt-level z where the base + // pointer gets corrupted, see issue #45034 + let y: fn(i32, i32) -> i64 = test::black_box(foo); + test::black_box(y(1, 2)); +} + +fn main() { + bar(); +} diff --git a/tests/run-make/multiple-emits/Makefile b/tests/run-make/multiple-emits/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d1f297644854f017558aaa0274b9756b2004d03a --- /dev/null +++ b/tests/run-make/multiple-emits/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + $(RUSTC) foo.rs --emit=asm,llvm-ir -o $(TMPDIR)/out 2>&1 + rm $(TMPDIR)/out.ll $(TMPDIR)/out.s + $(RUSTC) foo.rs --emit=asm,llvm-ir -o $(TMPDIR)/out2.ext 2>&1 + rm $(TMPDIR)/out2.ll $(TMPDIR)/out2.s diff --git a/tests/run-make/multiple-emits/foo.rs b/tests/run-make/multiple-emits/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/multiple-emits/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/native-link-modifier-bundle/Makefile b/tests/run-make/native-link-modifier-bundle/Makefile index e8a1121bfcd975c1023de411450ab6f200e0bc40..527720922fe58a3e6b2a220dd82830edde4b7a33 100644 --- a/tests/run-make/native-link-modifier-bundle/Makefile +++ b/tests/run-make/native-link-modifier-bundle/Makefile @@ -1,7 +1,7 @@ # ignore-cross-compile # ignore-windows-msvc -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # We're using the llvm-nm instead of the system nm to ensure it is compatible # with the LLVM bitcode generated by rustc. diff --git a/tests/run-make/native-link-modifier-verbatim-linker/Makefile b/tests/run-make/native-link-modifier-verbatim-linker/Makefile index 666e4084ce295d4cc16b80d61b2b6bacecd53006..256dc2d0664ee452c7bc896799f47003f7927ca1 100644 --- a/tests/run-make/native-link-modifier-verbatim-linker/Makefile +++ b/tests/run-make/native-link-modifier-verbatim-linker/Makefile @@ -1,7 +1,7 @@ # ignore-cross-compile # ignore-macos -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: # Verbatim allows specify precise name. diff --git a/tests/run-make/native-link-modifier-verbatim-rustc/Makefile b/tests/run-make/native-link-modifier-verbatim-rustc/Makefile index 6f01f37804a2ac5e2dd0f738e95a5dc21bdd3cea..dfd6ec50fc008551062ff75c9d267f2ccadcc1f0 100644 --- a/tests/run-make/native-link-modifier-verbatim-rustc/Makefile +++ b/tests/run-make/native-link-modifier-verbatim-rustc/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: # Verbatim allows specify precise name. diff --git a/tests/run-make/native-link-modifier-whole-archive/Makefile b/tests/run-make/native-link-modifier-whole-archive/Makefile index f26bd864ced313b3bd5583a6ff2ee94b346c55c3..5eb7a416f918afdad7226e757fd8d4e2a9290f07 100644 --- a/tests/run-make/native-link-modifier-whole-archive/Makefile +++ b/tests/run-make/native-link-modifier-whole-archive/Makefile @@ -8,7 +8,7 @@ # that code would never make it into the final executable and we'd thus be missing some # of the output. -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(TMPDIR)/$(call BIN,directly_linked) \ $(TMPDIR)/$(call BIN,directly_linked_test_plus_whole_archive) \ diff --git a/tests/run-make/no-builtins-lto/Makefile b/tests/run-make/no-builtins-lto/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c8f05d9918b9123452d8f7b8d19f1985027cf85a --- /dev/null +++ b/tests/run-make/no-builtins-lto/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +all: + # Compile a `#![no_builtins]` rlib crate + $(RUSTC) no_builtins.rs + # Build an executable that depends on that crate using LTO. The no_builtins crate doesn't + # participate in LTO, so its rlib must be explicitly linked into the final binary. Verify this by + # grepping the linker arguments. + $(RUSTC) main.rs -C lto --print link-args | $(CGREP) 'libno_builtins.rlib' diff --git a/tests/run-make/no-builtins-lto/main.rs b/tests/run-make/no-builtins-lto/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..890c999c8ccf7c1340f20f9b0e16113718553512 --- /dev/null +++ b/tests/run-make/no-builtins-lto/main.rs @@ -0,0 +1,3 @@ +extern crate no_builtins; + +fn main() {} diff --git a/tests/run-make/no-builtins-lto/no_builtins.rs b/tests/run-make/no-builtins-lto/no_builtins.rs new file mode 100644 index 0000000000000000000000000000000000000000..5d001031a57fa0ca5ec98d2948ea28c492db0571 --- /dev/null +++ b/tests/run-make/no-builtins-lto/no_builtins.rs @@ -0,0 +1,2 @@ +#![crate_type = "lib"] +#![no_builtins] diff --git a/tests/run-make/no-duplicate-libs/Makefile b/tests/run-make/no-duplicate-libs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4be8c0262941aa4f8ded4fc24627acee6868bf28 --- /dev/null +++ b/tests/run-make/no-duplicate-libs/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +ifdef IS_MSVC +# FIXME(#27979) +all: +else +all: $(call STATICLIB,foo) $(call STATICLIB,bar) + $(RUSTC) main.rs + $(call RUN,main) +endif diff --git a/tests/run-make/no-duplicate-libs/bar.c b/tests/run-make/no-duplicate-libs/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..e369526572d6fe00a2be0991b523b2a40faae12f --- /dev/null +++ b/tests/run-make/no-duplicate-libs/bar.c @@ -0,0 +1,5 @@ +extern void foo(); + +void bar() { + foo(); +} diff --git a/tests/run-make/no-duplicate-libs/foo.c b/tests/run-make/no-duplicate-libs/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..85e6cd8c3909a7e67c41750f5210b1463dd7a90c --- /dev/null +++ b/tests/run-make/no-duplicate-libs/foo.c @@ -0,0 +1 @@ +void foo() {} diff --git a/tests/run-make/no-duplicate-libs/main.rs b/tests/run-make/no-duplicate-libs/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..b25ef35ada68ebe68e65dc191751f5c0f62fb274 --- /dev/null +++ b/tests/run-make/no-duplicate-libs/main.rs @@ -0,0 +1,10 @@ +#[link(name = "foo")] // linker should drop this library, no symbols used +#[link(name = "bar")] // symbol comes from this library +#[link(name = "foo")] // now linker picks up `foo` b/c `bar` library needs it +extern "C" { + fn bar(); +} + +fn main() { + unsafe { bar() } +} diff --git a/tests/run-make/no-input-file/Makefile b/tests/run-make/no-input-file/Makefile index 2f02159229d3cea987bd1f2be80a33914802e86e..a754573a52410777e7eaa815268286c0b46baed5 100644 --- a/tests/run-make/no-input-file/Makefile +++ b/tests/run-make/no-input-file/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --print crate-name 2>&1 | diff - no-input-file.stderr diff --git a/tests/run-make/no-intermediate-extras/Makefile b/tests/run-make/no-intermediate-extras/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..83b5cedcf2a65c81196821e8102458af2c7576a7 --- /dev/null +++ b/tests/run-make/no-intermediate-extras/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +# Regression test for issue #10973 + +include ../tools.mk + +all: + $(RUSTC) --crate-type=rlib --test foo.rs + rm $(TMPDIR)/foo.bc && exit 1 || exit 0 diff --git a/tests/run-make/no-intermediate-extras/foo.rs b/tests/run-make/no-intermediate-extras/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..d11c69f812a8dfe9ea3db2474363c188c096c5b3 --- /dev/null +++ b/tests/run-make/no-intermediate-extras/foo.rs @@ -0,0 +1 @@ +// intentionally empty diff --git a/tests/run-make/obey-crate-type-flag/Makefile b/tests/run-make/obey-crate-type-flag/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ecbb2e620ed38a3bff46568f314a8fffc054cfee --- /dev/null +++ b/tests/run-make/obey-crate-type-flag/Makefile @@ -0,0 +1,14 @@ +# ignore-cross-compile +include ../tools.mk + +# check that rustc builds all crate_type attributes +# delete rlib +# delete whatever dylib is made for this system +# check that rustc only builds --crate-type flags, ignoring attributes +# fail if an rlib was built +all: + $(RUSTC) test.rs + $(call REMOVE_RLIBS,test) + $(call REMOVE_DYLIBS,test) + $(RUSTC) --crate-type dylib test.rs + $(call REMOVE_RLIBS,test) && exit 1 || exit 0 diff --git a/tests/run-make/obey-crate-type-flag/test.rs b/tests/run-make/obey-crate-type-flag/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..8a768f9de902488183b79d3cd12450c56def85a0 --- /dev/null +++ b/tests/run-make/obey-crate-type-flag/test.rs @@ -0,0 +1,2 @@ +#![crate_type = "rlib"] +#![crate_type = "dylib"] diff --git a/tests/run-make/output-filename-conflicts-with-directory/Makefile b/tests/run-make/output-filename-conflicts-with-directory/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..45221356cd97fe0b0cb23ff465098254b21d9e1e --- /dev/null +++ b/tests/run-make/output-filename-conflicts-with-directory/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + cp foo.rs $(TMPDIR)/foo.rs + mkdir $(TMPDIR)/foo + $(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo 2>&1 \ + | $(CGREP) -e "the generated executable for the input file \".*foo\.rs\" conflicts with the existing directory \".*foo\"" diff --git a/tests/run-make/output-filename-conflicts-with-directory/foo.rs b/tests/run-make/output-filename-conflicts-with-directory/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/output-filename-conflicts-with-directory/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/output-filename-overwrites-input/Makefile b/tests/run-make/output-filename-overwrites-input/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..605b86b253ea3beff3f99a0271f5ac354c12360a --- /dev/null +++ b/tests/run-make/output-filename-overwrites-input/Makefile @@ -0,0 +1,14 @@ +# ignore-cross-compile +include ../tools.mk + +all: + cp foo.rs $(TMPDIR)/foo + $(RUSTC) $(TMPDIR)/foo -o $(TMPDIR)/foo 2>&1 \ + | $(CGREP) -e "the input file \".*foo\" would be overwritten by the generated executable" + cp bar.rs $(TMPDIR)/bar.rlib + $(RUSTC) $(TMPDIR)/bar.rlib -o $(TMPDIR)/bar.rlib 2>&1 \ + | $(CGREP) -e "the input file \".*bar.rlib\" would be overwritten by the generated executable" + $(RUSTC) foo.rs 2>&1 && $(RUSTC) -Z ls $(TMPDIR)/foo 2>&1 + cp foo.rs $(TMPDIR)/foo.rs + $(RUSTC) $(TMPDIR)/foo.rs -o $(TMPDIR)/foo.rs 2>&1 \ + | $(CGREP) -e "the input file \".*foo.rs\" would be overwritten by the generated executable" diff --git a/tests/run-make/output-filename-overwrites-input/bar.rs b/tests/run-make/output-filename-overwrites-input/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..83be6e807e0b9bc42f55f3df77db7a1e99b3d93c --- /dev/null +++ b/tests/run-make/output-filename-overwrites-input/bar.rs @@ -0,0 +1 @@ +#![crate_type = "lib"] diff --git a/tests/run-make/output-filename-overwrites-input/foo.rs b/tests/run-make/output-filename-overwrites-input/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/output-filename-overwrites-input/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/output-type-permutations/Makefile b/tests/run-make/output-type-permutations/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..035033b9fddd327c8fb7d1ae98334fc5c63ef348 --- /dev/null +++ b/tests/run-make/output-type-permutations/Makefile @@ -0,0 +1,147 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs --crate-type=rlib,dylib,staticlib + $(call REMOVE_RLIBS,bar) + $(call REMOVE_DYLIBS,bar) + rm $(call STATICLIB,bar) + rm -f $(TMPDIR)/{lib,}bar.{dll.exp,dll.lib,pdb,dll.a} + # Check that $(TMPDIR) is empty. + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --crate-type=bin + rm $(TMPDIR)/$(call BIN,bar) + rm -f $(TMPDIR)/bar.pdb + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit=asm,llvm-ir,llvm-bc,obj,link + rm $(TMPDIR)/bar.ll + rm $(TMPDIR)/bar.bc + rm $(TMPDIR)/bar.s + rm $(TMPDIR)/bar.o + rm $(TMPDIR)/$(call BIN,bar) + rm -f $(TMPDIR)/bar.pdb + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit asm -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit asm=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit=asm=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit llvm-bc -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit llvm-bc=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit=llvm-bc=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit llvm-ir -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit=llvm-ir=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit obj -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit obj=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --emit=obj=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit link -o $(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --emit link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --emit=link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + rm -f $(TMPDIR)/foo.pdb + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --crate-type=rlib --emit link=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --crate-type=rlib --emit=link=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --crate-type=dylib -o $(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --crate-type=dylib --emit link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --crate-type=dylib --emit=link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + rm -f $(TMPDIR)/{lib,}foo.{dll.exp,dll.lib,pdb,dll.a,exe.a} + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] || (ls -1 $(TMPDIR) && exit 1) + + $(RUSTC) foo.rs --crate-type=staticlib -o $(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --crate-type=staticlib --emit link=$(TMPDIR)/foo + rm $(TMPDIR)/foo + $(RUSTC) foo.rs --crate-type=staticlib --emit=link=$(TMPDIR)/foo + rm $(TMPDIR)/foo + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --crate-type=bin -o $(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --crate-type=bin --emit link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + $(RUSTC) foo.rs --crate-type=bin --emit=link=$(TMPDIR)/$(call BIN,foo) + rm $(TMPDIR)/$(call BIN,foo) + rm -f $(TMPDIR)/foo.pdb + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit llvm-ir=$(TMPDIR)/ir \ + --emit link \ + --crate-type=rlib + rm $(TMPDIR)/ir + rm $(TMPDIR)/libbar.rlib + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit asm=$(TMPDIR)/asm \ + --emit llvm-ir=$(TMPDIR)/ir \ + --emit llvm-bc=$(TMPDIR)/bc \ + --emit obj=$(TMPDIR)/obj \ + --emit link=$(TMPDIR)/link \ + --crate-type=staticlib + rm $(TMPDIR)/asm + rm $(TMPDIR)/ir + rm $(TMPDIR)/bc + rm $(TMPDIR)/obj + rm $(TMPDIR)/link + $(RUSTC) foo.rs --emit=asm=$(TMPDIR)/asm \ + --emit llvm-ir=$(TMPDIR)/ir \ + --emit=llvm-bc=$(TMPDIR)/bc \ + --emit obj=$(TMPDIR)/obj \ + --emit=link=$(TMPDIR)/link \ + --crate-type=staticlib + rm $(TMPDIR)/asm + rm $(TMPDIR)/ir + rm $(TMPDIR)/bc + rm $(TMPDIR)/obj + rm $(TMPDIR)/link + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] + + $(RUSTC) foo.rs --emit=asm,llvm-ir,llvm-bc,obj,link --crate-type=staticlib + rm $(TMPDIR)/bar.ll + rm $(TMPDIR)/bar.s + rm $(TMPDIR)/bar.o + rm $(call STATICLIB,bar) + mv $(TMPDIR)/bar.bc $(TMPDIR)/foo.bc + # Don't check that the $(TMPDIR) is empty - we left `foo.bc` for later + # comparison. + + $(RUSTC) foo.rs --emit=llvm-bc,link --crate-type=rlib + cmp $(TMPDIR)/foo.bc $(TMPDIR)/bar.bc + rm $(TMPDIR)/bar.bc + rm $(TMPDIR)/foo.bc + $(call REMOVE_RLIBS,bar) + [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ] diff --git a/tests/run-make/output-type-permutations/foo.rs b/tests/run-make/output-type-permutations/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f0a2cc6ad75e606e43b2195aca79aff1ec838754 --- /dev/null +++ b/tests/run-make/output-type-permutations/foo.rs @@ -0,0 +1,3 @@ +#![crate_name = "bar"] + +fn main() {} diff --git a/tests/run-make/output-with-hyphens/Makefile b/tests/run-make/output-with-hyphens/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..846c9a66a89a07a0473f58eef4c06f5f9cf6e24f --- /dev/null +++ b/tests/run-make/output-with-hyphens/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo-bar.rs --crate-type bin + [ -f $(TMPDIR)/$(call BIN,foo-bar) ] + $(RUSTC) foo-bar.rs --crate-type lib + [ -f $(TMPDIR)/libfoo_bar.rlib ] diff --git a/tests/run-make/output-with-hyphens/foo-bar.rs b/tests/run-make/output-with-hyphens/foo-bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/output-with-hyphens/foo-bar.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/override-aliased-flags/Makefile b/tests/run-make/override-aliased-flags/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..db1ff1ff9816142e08ff69ed8530803c1270162e --- /dev/null +++ b/tests/run-make/override-aliased-flags/Makefile @@ -0,0 +1,23 @@ +# ignore-cross-compile +include ../tools.mk + +# FIXME: it would be good to check that it's actually the rightmost flags +# that are used when multiple flags are specified, but I can't think of a +# reliable way to check this. + +all: + # Test that `-O` and `-C opt-level` can be specified multiple times. + # The rightmost flag will be used over any previous flags. + $(RUSTC) -O -O main.rs + $(RUSTC) -O -C opt-level=0 main.rs + $(RUSTC) -C opt-level=0 -O main.rs + $(RUSTC) -C opt-level=0 -C opt-level=2 main.rs + $(RUSTC) -C opt-level=2 -C opt-level=0 main.rs + + # Test that `-g` and `-C debuginfo` can be specified multiple times. + # The rightmost flag will be used over any previous flags. + $(RUSTC) -g -g main.rs + $(RUSTC) -g -C debuginfo=0 main.rs + $(RUSTC) -C debuginfo=0 -g main.rs + $(RUSTC) -C debuginfo=0 -C debuginfo=2 main.rs + $(RUSTC) -C debuginfo=2 -C debuginfo=0 main.rs diff --git a/tests/run-make/override-aliased-flags/main.rs b/tests/run-make/override-aliased-flags/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/override-aliased-flags/main.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/overwrite-input/Makefile b/tests/run-make/overwrite-input/Makefile index 03b03eb147def024bb61991d7e82a82b6d7de7f0..c62b5aab190db45be35620eca4d84a08b25b93ee 100644 --- a/tests/run-make/overwrite-input/Makefile +++ b/tests/run-make/overwrite-input/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) main.rs -o main.rs 2> $(TMPDIR)/file.stderr || echo "failed successfully" diff --git a/tests/run-make/panic-impl-transitive/Makefile b/tests/run-make/panic-impl-transitive/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9a271a22e10dd48546c4642bd167cd634f4bc781 --- /dev/null +++ b/tests/run-make/panic-impl-transitive/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +# NOTE we use --emit=llvm-ir to avoid running the linker (linking will fail because there's no main +# in this crate) +all: + $(RUSTC) panic-impl-provider.rs + $(RUSTC) panic-impl-consumer.rs -C panic=abort --emit=llvm-ir -L $(TMPDIR) diff --git a/tests/run-make/panic-impl-transitive/panic-impl-consumer.rs b/tests/run-make/panic-impl-transitive/panic-impl-consumer.rs new file mode 100644 index 0000000000000000000000000000000000000000..82a98b12d041d316d2868475c4add8bc812c2931 --- /dev/null +++ b/tests/run-make/panic-impl-transitive/panic-impl-consumer.rs @@ -0,0 +1,5 @@ +#![no_std] +#![no_main] + +// this crate provides the `panic_impl` lang item so we don't need to define it here +extern crate panic_impl_provider; diff --git a/tests/run-make/panic-impl-transitive/panic-impl-provider.rs b/tests/run-make/panic-impl-transitive/panic-impl-provider.rs new file mode 100644 index 0000000000000000000000000000000000000000..f1b9873c83a34d836f6377dbeea3925c67218350 --- /dev/null +++ b/tests/run-make/panic-impl-transitive/panic-impl-provider.rs @@ -0,0 +1,9 @@ +#![crate_type = "rlib"] +#![no_std] + +use core::panic::PanicInfo; + +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + loop {} +} diff --git a/tests/run-make/pass-linker-flags-from-dep/Makefile b/tests/run-make/pass-linker-flags-from-dep/Makefile index b9426326aea409393098cd99b85ecdd62ea131f9..b57389bb7d491169024304de279b9773653d9909 100644 --- a/tests/run-make/pass-linker-flags-from-dep/Makefile +++ b/tests/run-make/pass-linker-flags-from-dep/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: # Build deps diff --git a/tests/run-make/pass-linker-flags/Makefile b/tests/run-make/pass-linker-flags/Makefile index a3efb8df6ac383028fda3520ce991188ac48f17b..6ddbcbb1b08e6ab11e7c8a80e8206b8712143e50 100644 --- a/tests/run-make/pass-linker-flags/Makefile +++ b/tests/run-make/pass-linker-flags/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) rs.rs -Z unstable-options -l static=l1 -l link-arg=a1 -l static=l2 -l link-arg=a2 -l dylib=d1 -l link-arg=a3 --print link-args | $(CGREP) -e 'l1.*a1.*l2.*a2.*d1.*a3' diff --git a/tests/run-make/pass-non-c-like-enum-to-c/Makefile b/tests/run-make/pass-non-c-like-enum-to-c/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..bd441d321bfabb8a0c67f14ca266d371e9743a73 --- /dev/null +++ b/tests/run-make/pass-non-c-like-enum-to-c/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) nonclike.rs -L$(TMPDIR) -ltest + $(call RUN,nonclike) diff --git a/tests/run-make/pass-non-c-like-enum-to-c/nonclike.rs b/tests/run-make/pass-non-c-like-enum-to-c/nonclike.rs new file mode 100644 index 0000000000000000000000000000000000000000..517286a868d8ccd5600a41db5cff85b7eaf4320f --- /dev/null +++ b/tests/run-make/pass-non-c-like-enum-to-c/nonclike.rs @@ -0,0 +1,21 @@ +#[repr(C, u8)] +pub enum TT { + AA(u64, u64), + BB, +} + +#[repr(C,u8)] +pub enum T { + A(u64), + B, +} + +extern "C" { + pub fn t_add(a: T, b: T) -> u64; + pub fn tt_add(a: TT, b: TT) -> u64; +} + +fn main() { + assert_eq!(33, unsafe { tt_add(TT::AA(1,2), TT::AA(10,20)) }); + assert_eq!(11, unsafe { t_add(T::A(1), T::A(10)) }); +} diff --git a/tests/run-make/pass-non-c-like-enum-to-c/test.c b/tests/run-make/pass-non-c-like-enum-to-c/test.c new file mode 100644 index 0000000000000000000000000000000000000000..99511b2530f0693979ed0ddaeb0d69e500759452 --- /dev/null +++ b/tests/run-make/pass-non-c-like-enum-to-c/test.c @@ -0,0 +1,85 @@ +#include + +/* This is the code generated by cbindgen 0.12.1 for the `enum TT` + * type in nonclike.rs . */ +enum TT_Tag { + AA, + BB, +}; +typedef uint8_t TT_Tag; + +typedef struct { + uint64_t _0; + uint64_t _1; +} AA_Body; + +typedef struct { + TT_Tag tag; + union { + AA_Body aa; + }; +} TT; + +/* This is the code generated by cbindgen 0.12.1 for the `enum T` type + * in nonclike.rs . */ +enum T_Tag { + A, + B, +}; +typedef uint8_t T_Tag; + +typedef struct { + uint64_t _0; +} A_Body; + +typedef struct { + T_Tag tag; + union { + A_Body a; + }; +} T; + +uint64_t tt_add(TT a, TT b) { + if (a.tag == AA && b.tag == AA) { + return a.aa._0 + a.aa._1 + b.aa._0 + b.aa._1; + } else if (a.tag == AA) { + return a.aa._0 + a.aa._1; + } else if (b.tag == BB) { + return b.aa._0 + b.aa._1; + } else { + return 0; + } +} + +uint64_t t_add(T a, T b) { + if (a.tag == A && b.tag == A) { + return a.a._0 + b.a._0; + } else if (a.tag == AA) { + return a.a._0; + } else if (b.tag == BB) { + return b.a._0; + } else { + return 0; + } +} + +TT tt_new(uint64_t a, uint64_t b) { + TT tt = { + .tag = AA, + .aa = { + ._0 = a, + ._1 = b, + }, + }; + return tt; +} + +T t_new(uint64_t a) { + T t = { + .tag = A, + .a = { + ._0 = a, + }, + }; + return t; +} diff --git a/tests/run-make/pgo-branch-weights/Makefile b/tests/run-make/pgo-branch-weights/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c60206a1f341c1b426b9f9156384f1097e713fb1 --- /dev/null +++ b/tests/run-make/pgo-branch-weights/Makefile @@ -0,0 +1,34 @@ +# needs-profiler-support +# ignore-windows-gnu + +# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works +# properly. Since we only have GCC on the CI ignore the test for now. + +include ../tools.mk + +# For some very small programs GNU ld seems to not properly handle +# instrumentation sections correctly. Neither Gold nor LLD have that problem. +ifeq ($(UNAME),Linux) +ifneq (,$(findstring x86,$(TARGET))) +COMMON_FLAGS=-Clink-args=-fuse-ld=gold +endif +endif + + +all: + # We don't compile `opaque` with either optimizations or instrumentation. + $(RUSTC) $(COMMON_FLAGS) opaque.rs || exit 1 + # Compile the test program with instrumentation + mkdir -p "$(TMPDIR)/prof_data_dir" || exit 1 + $(RUSTC) $(COMMON_FLAGS) interesting.rs \ + -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O -Ccodegen-units=1 || exit 1 + $(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O || exit 1 + # The argument below generates to the expected branch weights + $(call RUN,main aaaaaaaaaaaa2bbbbbbbbbbbb2bbbbbbbbbbbbbbbbcc) || exit 1 + "$(LLVM_BIN_DIR)/llvm-profdata" merge \ + -o "$(TMPDIR)/prof_data_dir/merged.profdata" \ + "$(TMPDIR)/prof_data_dir" || exit 1 + $(RUSTC) $(COMMON_FLAGS) interesting.rs \ + -Cprofile-use="$(TMPDIR)/prof_data_dir/merged.profdata" -O \ + -Ccodegen-units=1 --emit=llvm-ir || exit 1 + cat "$(TMPDIR)/interesting.ll" | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make/pgo-branch-weights/filecheck-patterns.txt b/tests/run-make/pgo-branch-weights/filecheck-patterns.txt new file mode 100644 index 0000000000000000000000000000000000000000..70d5a645c14545d999519f90d537f0ef8c5430b5 --- /dev/null +++ b/tests/run-make/pgo-branch-weights/filecheck-patterns.txt @@ -0,0 +1,24 @@ + +# First, establish that certain !prof labels are attached to the expected +# functions and branching instructions. + +CHECK: define void @function_called_twice(i32 {{.*}} !prof [[function_called_twice_id:![0-9]+]] { +CHECK: br i1 {{.*}}, label {{.*}}, label {{.*}}, !prof [[branch_weights0:![0-9]+]] + +CHECK: define void @function_called_42_times(i32{{.*}} %c) {{.*}} !prof [[function_called_42_times_id:![0-9]+]] { +CHECK: switch i32 %c, label {{.*}} [ +CHECK-NEXT: i32 97, label {{.*}} +CHECK-NEXT: i32 98, label {{.*}} +CHECK-NEXT: ], !prof [[branch_weights1:![0-9]+]] + +CHECK: define void @function_called_never(i32 {{.*}} !prof [[function_called_never_id:![0-9]+]] { + + + +# Now check that those !prof tags hold the expected counts + +CHECK: [[function_called_twice_id]] = !{!"function_entry_count", i64 2} +CHECK: [[branch_weights0]] = !{!"branch_weights", i32 2, i32 0} +CHECK: [[function_called_42_times_id]] = !{!"function_entry_count", i64 42} +CHECK: [[branch_weights1]] = !{!"branch_weights", i32 2, i32 12, i32 28} +CHECK: [[function_called_never_id]] = !{!"function_entry_count", i64 0} diff --git a/tests/run-make/pgo-branch-weights/interesting.rs b/tests/run-make/pgo-branch-weights/interesting.rs new file mode 100644 index 0000000000000000000000000000000000000000..a26d6fd69d14086c5bf062c579c57bd322d0f601 --- /dev/null +++ b/tests/run-make/pgo-branch-weights/interesting.rs @@ -0,0 +1,40 @@ +#![crate_name="interesting"] +#![crate_type="rlib"] + +extern crate opaque; + +#[no_mangle] +#[inline(never)] +pub fn function_called_twice(c: char) { + if c == '2' { + // This branch is taken twice + opaque::f1(); + } else { + // This branch is never taken + opaque::f2(); + } +} + +#[no_mangle] +#[inline(never)] +pub fn function_called_42_times(c: char) { + if c == 'a' { + // This branch is taken 12 times + opaque::f1(); + } else { + + if c == 'b' { + // This branch is taken 28 times + opaque::f2(); + } else { + // This branch is taken 2 times + opaque::f3(); + } + } +} + +#[no_mangle] +#[inline(never)] +pub fn function_called_never(_: char) { + opaque::f1(); +} diff --git a/tests/run-make/pgo-branch-weights/main.rs b/tests/run-make/pgo-branch-weights/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..619cf9c698c9e577322ec7923bd25aed1ebd0e72 --- /dev/null +++ b/tests/run-make/pgo-branch-weights/main.rs @@ -0,0 +1,17 @@ +extern crate interesting; + +fn main() { + let arg = std::env::args().skip(1).next().unwrap(); + + for c in arg.chars() { + if c == '2' { + interesting::function_called_twice(c); + } else { + interesting::function_called_42_times(c); + } + + if c == '0' { + interesting::function_called_never(c); + } + } +} diff --git a/tests/run-make/pgo-branch-weights/opaque.rs b/tests/run-make/pgo-branch-weights/opaque.rs new file mode 100644 index 0000000000000000000000000000000000000000..72f93c9feab6ff37fd5bc86ab0b8bc03fc0c3e6d --- /dev/null +++ b/tests/run-make/pgo-branch-weights/opaque.rs @@ -0,0 +1,6 @@ +#![crate_name="opaque"] +#![crate_type="rlib"] + +pub fn f1() {} +pub fn f2() {} +pub fn f3() {} diff --git a/tests/run-make/pgo-gen-lto/Makefile b/tests/run-make/pgo-gen-lto/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3f2f6a838b51ce8a21330d45b11e906331580f9b --- /dev/null +++ b/tests/run-make/pgo-gen-lto/Makefile @@ -0,0 +1,14 @@ +# needs-profiler-support +# ignore-windows-gnu + +# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works +# properly. Since we only have GCC on the CI ignore the test for now. + +include ../tools.mk + +COMPILE_FLAGS=-Copt-level=3 -Clto=fat -Cprofile-generate="$(TMPDIR)" + +all: + $(RUSTC) $(COMPILE_FLAGS) test.rs + $(call RUN,test) || exit 1 + [ -e "$(TMPDIR)"/default_*.profraw ] || (echo "No .profraw file"; exit 1) diff --git a/tests/run-make/pgo-gen-lto/test.rs b/tests/run-make/pgo-gen-lto/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/pgo-gen-lto/test.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/pgo-gen-no-imp-symbols/Makefile b/tests/run-make/pgo-gen-no-imp-symbols/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7f72b11b611ed4926abe37a3f8bc92e1dae3b665 --- /dev/null +++ b/tests/run-make/pgo-gen-no-imp-symbols/Makefile @@ -0,0 +1,13 @@ +# needs-profiler-support + +include ../tools.mk + +COMPILE_FLAGS=-O -Ccodegen-units=1 -Cprofile-generate="$(TMPDIR)" + +all: + $(RUSTC) $(COMPILE_FLAGS) --emit=llvm-ir test.rs + # We expect symbols starting with "__llvm_profile_". + $(CGREP) "__llvm_profile_" < $(TMPDIR)/test.ll + # We do NOT expect the "__imp_" version of these symbols. + $(CGREP) -v "__imp___llvm_profile_" < $(TMPDIR)/test.ll # 64 bit + $(CGREP) -v "__imp____llvm_profile_" < $(TMPDIR)/test.ll # 32 bit diff --git a/tests/run-make/pgo-gen-no-imp-symbols/test.rs b/tests/run-make/pgo-gen-no-imp-symbols/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/pgo-gen-no-imp-symbols/test.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/pgo-gen/Makefile b/tests/run-make/pgo-gen/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4623a74957b0f88b10eeced50c4f23179ace435f --- /dev/null +++ b/tests/run-make/pgo-gen/Makefile @@ -0,0 +1,14 @@ +# needs-profiler-support +# ignore-windows-gnu + +# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works +# properly. Since we only have GCC on the CI ignore the test for now. + +include ../tools.mk + +COMPILE_FLAGS=-g -Cprofile-generate="$(TMPDIR)" + +all: + $(RUSTC) $(COMPILE_FLAGS) test.rs + $(call RUN,test) || exit 1 + [ -e "$(TMPDIR)"/default_*.profraw ] || (echo "No .profraw file"; exit 1) diff --git a/tests/run-make/pgo-gen/test.rs b/tests/run-make/pgo-gen/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/pgo-gen/test.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/pgo-indirect-call-promotion/Makefile b/tests/run-make/pgo-indirect-call-promotion/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..45302215cc64e6e46c6f37821d54905946ad5224 --- /dev/null +++ b/tests/run-make/pgo-indirect-call-promotion/Makefile @@ -0,0 +1,26 @@ +# needs-profiler-support +# ignore-windows-gnu + +# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works +# properly. Since we only have GCC on the CI ignore the test for now. + +include ../tools.mk + +all: + # We don't compile `opaque` with either optimizations or instrumentation. + # We don't compile `opaque` with either optimizations or instrumentation. + $(RUSTC) $(COMMON_FLAGS) opaque.rs + # Compile the test program with instrumentation + mkdir -p "$(TMPDIR)"/prof_data_dir + $(RUSTC) $(COMMON_FLAGS) interesting.rs \ + -Cprofile-generate="$(TMPDIR)"/prof_data_dir -O -Ccodegen-units=1 + $(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)"/prof_data_dir -O + # The argument below generates to the expected branch weights + $(call RUN,main) || exit 1 + "$(LLVM_BIN_DIR)"/llvm-profdata merge \ + -o "$(TMPDIR)"/prof_data_dir/merged.profdata \ + "$(TMPDIR)"/prof_data_dir + $(RUSTC) $(COMMON_FLAGS) interesting.rs \ + -Cprofile-use="$(TMPDIR)"/prof_data_dir/merged.profdata -O \ + -Ccodegen-units=1 --emit=llvm-ir + cat "$(TMPDIR)"/interesting.ll | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make/pgo-indirect-call-promotion/filecheck-patterns.txt b/tests/run-make/pgo-indirect-call-promotion/filecheck-patterns.txt new file mode 100644 index 0000000000000000000000000000000000000000..e19c78350e9d98e8d5db50429a3387957dc14f7f --- /dev/null +++ b/tests/run-make/pgo-indirect-call-promotion/filecheck-patterns.txt @@ -0,0 +1,16 @@ +CHECK: define void @call_a_bunch_of_functions({{.*}} { + +# Make sure that indirect call promotion inserted a check against the most +# frequently called function. +CHECK: %{{.*}} = icmp eq {{void \(\)\*|ptr}} %{{.*}}, @function_called_always + +# Check that the call to `function_called_always` was inlined, so that we +# directly call `opaque_f1` from the upstream crate. +CHECK: call void @opaque_f1() + + +# Same checks as above, repeated for the trait object case + +CHECK: define void @call_a_bunch_of_trait_methods({{.*}} +CHECK: %{{.*}} = icmp eq {{void \(\{\}\*\)\*|ptr}} %{{.*}}, {{.*}}@foo +CHECK: tail call void @opaque_f2() diff --git a/tests/run-make/pgo-indirect-call-promotion/interesting.rs b/tests/run-make/pgo-indirect-call-promotion/interesting.rs new file mode 100644 index 0000000000000000000000000000000000000000..4fd096d626dec5837b90f5ccc8f9790526208143 --- /dev/null +++ b/tests/run-make/pgo-indirect-call-promotion/interesting.rs @@ -0,0 +1,56 @@ +#![crate_name="interesting"] +#![crate_type="rlib"] + +extern crate opaque; + +#[no_mangle] +pub fn function_called_always() { + opaque::opaque_f1(); +} + +#[no_mangle] +pub fn function_called_never() { + opaque::opaque_f2(); +} + +#[no_mangle] +pub fn call_a_bunch_of_functions(fns: &[fn()]) { + + // Indirect call promotion transforms the below into something like + // + // for f in fns { + // if f == function_called_always { + // function_called_always() + // } else { + // f(); + // } + // } + // + // where `function_called_always` actually gets inlined too. + + for f in fns { + f(); + } +} + + +pub trait Foo { + fn foo(&self); +} + +impl Foo for u32 { + + #[no_mangle] + fn foo(&self) { + opaque::opaque_f2(); + } +} + +#[no_mangle] +pub fn call_a_bunch_of_trait_methods(trait_objects: &[&dyn Foo]) { + + // Same as above, just with vtables in between + for x in trait_objects { + x.foo(); + } +} diff --git a/tests/run-make/pgo-indirect-call-promotion/main.rs b/tests/run-make/pgo-indirect-call-promotion/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..27181f30710bbbbe05fcc0a4b7525d8699381217 --- /dev/null +++ b/tests/run-make/pgo-indirect-call-promotion/main.rs @@ -0,0 +1,14 @@ +extern crate interesting; + +fn main() { + // function pointer case + let fns: Vec<_> = std::iter::repeat(interesting::function_called_always as fn()) + .take(1000) + .collect(); + interesting::call_a_bunch_of_functions(&fns[..]); + + // Trait object case + let trait_objects = vec![0u32; 1000]; + let trait_objects: Vec<_> = trait_objects.iter().map(|x| x as &dyn interesting::Foo).collect(); + interesting::call_a_bunch_of_trait_methods(&trait_objects[..]); +} diff --git a/tests/run-make/pgo-indirect-call-promotion/opaque.rs b/tests/run-make/pgo-indirect-call-promotion/opaque.rs new file mode 100644 index 0000000000000000000000000000000000000000..9628d711c505cab1a34cf8d9d3b8ab8e9823a5e6 --- /dev/null +++ b/tests/run-make/pgo-indirect-call-promotion/opaque.rs @@ -0,0 +1,7 @@ +#![crate_name="opaque"] +#![crate_type="rlib"] + +#[no_mangle] +pub fn opaque_f1() {} +#[no_mangle] +pub fn opaque_f2() {} diff --git a/tests/run-make/pgo-use/Makefile b/tests/run-make/pgo-use/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3bac9b77aa39c452110ad64e0a51eb39e66dee76 --- /dev/null +++ b/tests/run-make/pgo-use/Makefile @@ -0,0 +1,46 @@ +# needs-profiler-support +# ignore-windows-gnu + +# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works +# properly. Since we only have GCC on the CI ignore the test for now. + +include ../tools.mk + +# This test makes sure that PGO profiling data leads to cold functions being +# marked as `cold` and hot functions with `inlinehint`. +# The test program contains an `if` were actual execution only ever takes the +# `else` branch. Accordingly, we expect the function that is never called to +# be marked as cold. +# +# Disable the pre-inlining pass (i.e. a pass that does some inlining before +# it adds the profiling instrumentation). Disabling this pass leads to +# rather predictable IR which we need for this test to be stable. + +COMMON_FLAGS=-Copt-level=2 -Ccodegen-units=1 -Cllvm-args=-disable-preinline + +ifeq ($(UNAME),Darwin) +# macOS does not have the `tac` command, but `tail -r` does the same thing +TAC := tail -r +else +# some other platforms don't support the `-r` flag for `tail`, so use `tac` +TAC := tac +endif + +all: + # Compile the test program with instrumentation + $(RUSTC) $(COMMON_FLAGS) -Cprofile-generate="$(TMPDIR)" main.rs + # Run it in order to generate some profiling data + $(call RUN,main some-argument) || exit 1 + # Postprocess the profiling data so it can be used by the compiler + "$(LLVM_BIN_DIR)"/llvm-profdata merge \ + -o "$(TMPDIR)"/merged.profdata \ + "$(TMPDIR)"/default_*.profraw + # Compile the test program again, making use of the profiling data + $(RUSTC) $(COMMON_FLAGS) -Cprofile-use="$(TMPDIR)"/merged.profdata --emit=llvm-ir main.rs + # Check that the generate IR contains some things that we expect + # + # We feed the file into LLVM FileCheck tool *in reverse* so that we see the + # line with the function name before the line with the function attributes. + # FileCheck only supports checking that something matches on the next line, + # but not if something matches on the previous line. + $(TAC) "$(TMPDIR)"/main.ll | "$(LLVM_FILECHECK)" filecheck-patterns.txt diff --git a/tests/run-make/pgo-use/filecheck-patterns.txt b/tests/run-make/pgo-use/filecheck-patterns.txt new file mode 100644 index 0000000000000000000000000000000000000000..6da34f88f2a7400c24741840a62fd335e94374c6 --- /dev/null +++ b/tests/run-make/pgo-use/filecheck-patterns.txt @@ -0,0 +1,11 @@ +# Add a check that the IR contains some expected metadata +CHECK: !{!"ProfileFormat", !"InstrProf"} +CHECK: !"ProfileSummary" + +# Make sure that the hot function is marked with `inlinehint` +CHECK: define {{.*}} @hot_function +CHECK-NEXT: Function Attrs:{{.*}}inlinehint + +# Make sure that the cold function is marked with `cold` +CHECK: define {{.*}} @cold_function +CHECK-NEXT: Function Attrs:{{.*}}cold diff --git a/tests/run-make/pgo-use/main.rs b/tests/run-make/pgo-use/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..eb9192c87e6f05b213bb62781d253119190e6d6a --- /dev/null +++ b/tests/run-make/pgo-use/main.rs @@ -0,0 +1,23 @@ +#[no_mangle] +pub fn cold_function(c: u8) { + println!("cold {}", c); +} + +#[no_mangle] +pub fn hot_function(c: u8) { + std::env::set_var(format!("var{}", c), format!("hot {}", c)); +} + +fn main() { + let arg = std::env::args().skip(1).next().unwrap(); + + for i in 0 .. 1000_000 { + let some_value = arg.as_bytes()[i % arg.len()]; + if some_value == b'!' { + // This branch is never taken at runtime + cold_function(some_value); + } else { + hot_function(some_value); + } + } +} diff --git a/tests/run-make/pointer-auth-link-with-c/Makefile b/tests/run-make/pointer-auth-link-with-c/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7acea03802cb39d23406f0da5a93f7dc6e7b79a0 --- /dev/null +++ b/tests/run-make/pointer-auth-link-with-c/Makefile @@ -0,0 +1,14 @@ +include ../tools.mk + +# only-aarch64 + +all: + $(COMPILE_OBJ) $(TMPDIR)/test.o test.c + $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o + $(RUSTC) -Z branch-protection=bti,pac-ret,leaf test.rs + $(call RUN,test) + + $(COMPILE_OBJ) $(TMPDIR)/test.o test.c -mbranch-protection=bti+pac-ret+leaf + $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o + $(RUSTC) -Z branch-protection=bti,pac-ret,leaf test.rs + $(call RUN,test) diff --git a/tests/run-make/pointer-auth-link-with-c/test.c b/tests/run-make/pointer-auth-link-with-c/test.c new file mode 100644 index 0000000000000000000000000000000000000000..9fe07f82f9ed1495b13e4e4dcd2e092115b01b25 --- /dev/null +++ b/tests/run-make/pointer-auth-link-with-c/test.c @@ -0,0 +1 @@ +int foo() { return 0; } diff --git a/tests/run-make/pointer-auth-link-with-c/test.rs b/tests/run-make/pointer-auth-link-with-c/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..615ad0aeb3d0e52c2030dc082a074bc96180027a --- /dev/null +++ b/tests/run-make/pointer-auth-link-with-c/test.rs @@ -0,0 +1,8 @@ +#[link(name = "test")] +extern "C" { + fn foo() -> i32; +} + +fn main() { + unsafe {foo();} +} diff --git a/tests/run-make/prefer-dylib/Makefile b/tests/run-make/prefer-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..cc26e70ae67cad25cba4136010ba34e9a87719de --- /dev/null +++ b/tests/run-make/prefer-dylib/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib -C prefer-dynamic + $(RUSTC) foo.rs -C prefer-dynamic + $(call RUN,foo) + rm $(TMPDIR)/*bar* + $(call FAIL,foo) diff --git a/tests/run-make/prefer-dylib/bar.rs b/tests/run-make/prefer-dylib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/prefer-dylib/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/prefer-dylib/foo.rs b/tests/run-make/prefer-dylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c --- /dev/null +++ b/tests/run-make/prefer-dylib/foo.rs @@ -0,0 +1,5 @@ +extern crate bar; + +fn main() { + bar::bar(); +} diff --git a/tests/run-make/prefer-rlib/Makefile b/tests/run-make/prefer-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2e86b9c1dd7e0c69de413706e729f9a5b2e6093f --- /dev/null +++ b/tests/run-make/prefer-rlib/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) bar.rs --crate-type=dylib --crate-type=rlib + ls $(TMPDIR)/$(call RLIB_GLOB,bar) + $(RUSTC) foo.rs + rm $(TMPDIR)/*bar* + $(call RUN,foo) diff --git a/tests/run-make/prefer-rlib/bar.rs b/tests/run-make/prefer-rlib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/prefer-rlib/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/prefer-rlib/foo.rs b/tests/run-make/prefer-rlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c --- /dev/null +++ b/tests/run-make/prefer-rlib/foo.rs @@ -0,0 +1,5 @@ +extern crate bar; + +fn main() { + bar::bar(); +} diff --git a/tests/run-make/pretty-print-to-file/Makefile b/tests/run-make/pretty-print-to-file/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ca11b8c47f06f341cc32f2f0345ada75121a6857 --- /dev/null +++ b/tests/run-make/pretty-print-to-file/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTC) -o $(TMPDIR)/input.out -Zunpretty=normal input.rs + diff -u $(TMPDIR)/input.out input.pp diff --git a/tests/run-make/pretty-print-to-file/input.pp b/tests/run-make/pretty-print-to-file/input.pp new file mode 100644 index 0000000000000000000000000000000000000000..e3f03242a6e3700f646295c329fb7b55a944a88d --- /dev/null +++ b/tests/run-make/pretty-print-to-file/input.pp @@ -0,0 +1,3 @@ + +#[crate_type = "lib"] +pub fn foo() -> i32 { 45 } diff --git a/tests/run-make/pretty-print-to-file/input.rs b/tests/run-make/pretty-print-to-file/input.rs new file mode 100644 index 0000000000000000000000000000000000000000..aa828155b205a27a93e2afb9f42bbd6c6b736452 --- /dev/null +++ b/tests/run-make/pretty-print-to-file/input.rs @@ -0,0 +1,5 @@ +#[crate_type="lib"] + +pub fn +foo() -> i32 +{ 45 } diff --git a/tests/run-make/print-calling-conventions/Makefile b/tests/run-make/print-calling-conventions/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..27b87e610862d65f8502817fad2578d42a9782ca --- /dev/null +++ b/tests/run-make/print-calling-conventions/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTC) --print calling-conventions diff --git a/tests/run-make/print-cfg/Makefile b/tests/run-make/print-cfg/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..126f5768c90f20b8c8cba03368424d076c27de07 --- /dev/null +++ b/tests/run-make/print-cfg/Makefile @@ -0,0 +1,20 @@ +# needs-llvm-components: x86 arm + +include ../tools.mk + +all: default + $(RUSTC) --target x86_64-pc-windows-gnu --print cfg | $(CGREP) windows + $(RUSTC) --target x86_64-pc-windows-gnu --print cfg | $(CGREP) x86_64 + $(RUSTC) --target i686-pc-windows-msvc --print cfg | $(CGREP) msvc + $(RUSTC) --target i686-apple-darwin --print cfg | $(CGREP) macos + $(RUSTC) --target i686-unknown-linux-gnu --print cfg | $(CGREP) gnu + $(RUSTC) --target arm-unknown-linux-gnueabihf --print cfg | $(CGREP) target_abi= + $(RUSTC) --target arm-unknown-linux-gnueabihf --print cfg | $(CGREP) eabihf + +ifdef IS_WINDOWS +default: + $(RUSTC) --print cfg | $(CGREP) windows +else +default: + $(RUSTC) --print cfg | $(CGREP) unix +endif diff --git a/tests/run-make/print-target-list/Makefile b/tests/run-make/print-target-list/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f23c40d4281e32c4c9875dbe31ece959934917e2 --- /dev/null +++ b/tests/run-make/print-target-list/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +# Checks that all the targets returned by `rustc --print target-list` are valid +# target specifications +all: + for target in $(shell $(BARE_RUSTC) --print target-list); do \ + $(BARE_RUSTC) --target $$target --print sysroot; \ + done diff --git a/tests/run-make/profile/Makefile b/tests/run-make/profile/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fffc051adbf8e152639036b7fecda6d9eae71395 --- /dev/null +++ b/tests/run-make/profile/Makefile @@ -0,0 +1,12 @@ +# needs-profiler-support + +include ../tools.mk + +all: + $(RUSTC) -g -Z profile test.rs + $(call RUN,test) || exit 1 + [ -e "$(TMPDIR)/test.gcno" ] || (echo "No .gcno file"; exit 1) + [ -e "$(TMPDIR)/test.gcda" ] || (echo "No .gcda file"; exit 1) + $(RUSTC) -g -Z profile -Z profile-emit=$(TMPDIR)/abc/abc.gcda test.rs + $(call RUN,test) || exit 1 + [ -e "$(TMPDIR)/abc/abc.gcda" ] || (echo "gcda file not emitted to defined path"; exit 1) diff --git a/tests/run-make/profile/test.rs b/tests/run-make/profile/test.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/profile/test.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/prune-link-args/Makefile b/tests/run-make/prune-link-args/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c21ba6ace38d6043073617d0f8934d3781fda4d5 --- /dev/null +++ b/tests/run-make/prune-link-args/Makefile @@ -0,0 +1,10 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows + +# Notice the space in the end, this emulates the output of pkg-config +RUSTC_FLAGS = -C link-args="-lc " + +all: + $(RUSTC) $(RUSTC_FLAGS) empty.rs diff --git a/tests/run-make/prune-link-args/empty.rs b/tests/run-make/prune-link-args/empty.rs new file mode 100644 index 0000000000000000000000000000000000000000..45590d86ba6c51f0babffb0b43e3e2f44d2f9e07 --- /dev/null +++ b/tests/run-make/prune-link-args/empty.rs @@ -0,0 +1 @@ +fn main() { } diff --git a/tests/run-make/raw-dylib-alt-calling-convention/Makefile b/tests/run-make/raw-dylib-alt-calling-convention/Makefile index 03f8778d25de6a67575c7e61dc3c3be4966ad2b2..1744c431f9c99960f962c4942906e53535e02fc5 100644 --- a/tests/run-make/raw-dylib-alt-calling-convention/Makefile +++ b/tests/run-make/raw-dylib-alt-calling-convention/Makefile @@ -3,7 +3,7 @@ # only-x86 # only-windows -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type lib --crate-name raw_dylib_alt_calling_convention_test lib.rs diff --git a/tests/run-make/raw-dylib-c/Makefile b/tests/run-make/raw-dylib-c/Makefile index f47ab24f4fbfaa7f5a4af6fc9f5f2634afd4535e..06e7935c02646a50dc5b1377d9e4c953ed2bfd93 100644 --- a/tests/run-make/raw-dylib-c/Makefile +++ b/tests/run-make/raw-dylib-c/Makefile @@ -2,7 +2,7 @@ # only-windows -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type lib --crate-name raw_dylib_test lib.rs diff --git a/tests/run-make/raw-dylib-cross-compilation/Makefile b/tests/run-make/raw-dylib-cross-compilation/Makefile index 2a714f3a11fea1da4cd281568b24d7f565c507cd..a8f97edd68936a41dadeed418f09e1041454a08a 100644 --- a/tests/run-make/raw-dylib-cross-compilation/Makefile +++ b/tests/run-make/raw-dylib-cross-compilation/Makefile @@ -7,7 +7,7 @@ # i686 dlltool.exe can't product x64 binaries. # ignore-i686-pc-windows-gnu -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: # Build as x86 and make sure that we have x86 objects only. diff --git a/tests/run-make/raw-dylib-import-name-type/Makefile b/tests/run-make/raw-dylib-import-name-type/Makefile index fcc60e88e1a43b9db7fb543cb3c242c06296442e..67152329807cf04aca79f0fabb44fbd10aac0259 100644 --- a/tests/run-make/raw-dylib-import-name-type/Makefile +++ b/tests/run-make/raw-dylib-import-name-type/Makefile @@ -3,7 +3,7 @@ # only-x86 # only-windows --include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type bin driver.rs -L "$(TMPDIR)" diff --git a/tests/run-make/raw-dylib-inline-cross-dylib/Makefile b/tests/run-make/raw-dylib-inline-cross-dylib/Makefile index 722a49b02cb3bc499d8da6512e3f7a1a7a91babb..6d1d04bfd37d2acd34a9a8bb9f455c875ab97c30 100644 --- a/tests/run-make/raw-dylib-inline-cross-dylib/Makefile +++ b/tests/run-make/raw-dylib-inline-cross-dylib/Makefile @@ -2,7 +2,7 @@ # only-windows -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # We'd be using the llvm-objdump instead of the system objdump to ensure compatibility # with the LLVM bitcode generated by rustc but on Windows piping/IO redirection under MSYS2 is wonky with llvm-objdump. diff --git a/tests/run-make/raw-dylib-link-ordinal/Makefile b/tests/run-make/raw-dylib-link-ordinal/Makefile index b55a94dbc46f253eda6eaad3d1b1e84866a1755b..374a0b59de322fa6b41b778d1890d43773154313 100644 --- a/tests/run-make/raw-dylib-link-ordinal/Makefile +++ b/tests/run-make/raw-dylib-link-ordinal/Makefile @@ -2,7 +2,7 @@ # only-windows -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type lib --crate-name raw_dylib_test lib.rs diff --git a/tests/run-make/raw-dylib-stdcall-ordinal/Makefile b/tests/run-make/raw-dylib-stdcall-ordinal/Makefile index b9deb7729c22b9896484ca2c0a716962ca4dabcf..178c15ab3dee42d97cd7fb33ce0d836285c5adf0 100644 --- a/tests/run-make/raw-dylib-stdcall-ordinal/Makefile +++ b/tests/run-make/raw-dylib-stdcall-ordinal/Makefile @@ -3,7 +3,7 @@ # only-x86 # only-windows -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --crate-type lib --crate-name raw_dylib_test lib.rs diff --git a/tests/run-make/redundant-libs/Makefile b/tests/run-make/redundant-libs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0a48b2b2801367d7bd65b3627621875056978cdf --- /dev/null +++ b/tests/run-make/redundant-libs/Makefile @@ -0,0 +1,24 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows-msvc + +# rustc will remove one of the two redundant references to foo below. Depending +# on which one gets removed, we'll get a linker error on SOME platforms (like +# Linux). On these platforms, when a library is referenced, the linker will +# only pull in the symbols needed _at that point in time_. If a later library +# depends on additional symbols from the library, they will not have been pulled +# in, and you'll get undefined symbols errors. +# +# So in this example, we need to ensure that rustc keeps the _later_ reference +# to foo, and not the former one. +RUSTC_FLAGS = \ + -l static=bar \ + -l foo \ + -l static=baz \ + -l foo \ + --print link-args + +all: $(call DYLIB,foo) $(call STATICLIB,bar) $(call STATICLIB,baz) + $(RUSTC) $(RUSTC_FLAGS) main.rs + $(call RUN,main) diff --git a/tests/run-make/redundant-libs/bar.c b/tests/run-make/redundant-libs/bar.c new file mode 100644 index 0000000000000000000000000000000000000000..e42599986781fe984a2c1427a3373cf439a34f60 --- /dev/null +++ b/tests/run-make/redundant-libs/bar.c @@ -0,0 +1 @@ +void bar() {} diff --git a/tests/run-make/redundant-libs/baz.c b/tests/run-make/redundant-libs/baz.c new file mode 100644 index 0000000000000000000000000000000000000000..a4e2c2b717fdbeddb398c8753330e7b50c5540c9 --- /dev/null +++ b/tests/run-make/redundant-libs/baz.c @@ -0,0 +1,7 @@ +extern void foo1(); +extern void foo2(); + +void baz() { + foo1(); + foo2(); +} diff --git a/tests/run-make/redundant-libs/foo.c b/tests/run-make/redundant-libs/foo.c new file mode 100644 index 0000000000000000000000000000000000000000..339ee86c99eaecec44f7c2c50cb15b3ef350b319 --- /dev/null +++ b/tests/run-make/redundant-libs/foo.c @@ -0,0 +1,2 @@ +void foo1() {} +void foo2() {} diff --git a/tests/run-make/redundant-libs/main.rs b/tests/run-make/redundant-libs/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..90d185ff51dbdbd691db4689785b71322352f2cf --- /dev/null +++ b/tests/run-make/redundant-libs/main.rs @@ -0,0 +1,11 @@ +extern "C" { + fn bar(); + fn baz(); +} + +fn main() { + unsafe { + bar(); + baz(); + } +} diff --git a/tests/run-make/relocation-model/Makefile b/tests/run-make/relocation-model/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8cc5205ed51b492becdbfc9171dc5a3dec5fcc4f --- /dev/null +++ b/tests/run-make/relocation-model/Makefile @@ -0,0 +1,20 @@ +# ignore-cross-compile +include ../tools.mk + +all: others + $(RUSTC) -C relocation-model=dynamic-no-pic foo.rs + $(call RUN,foo) + + $(RUSTC) -C relocation-model=default foo.rs + $(call RUN,foo) + + $(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs --emit=link,obj + +ifdef IS_MSVC +# FIXME(#28026) +others: +else +others: + $(RUSTC) -C relocation-model=static foo.rs + $(call RUN,foo) +endif diff --git a/tests/run-make/relocation-model/foo.rs b/tests/run-make/relocation-model/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..da0f5d925d1078ed68c271eb7a378a34f77d7d2e --- /dev/null +++ b/tests/run-make/relocation-model/foo.rs @@ -0,0 +1 @@ +pub fn main() {} diff --git a/tests/run-make/relro-levels/Makefile b/tests/run-make/relro-levels/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e0402f59f12dde3d48740b78ba4d570545b6a000 --- /dev/null +++ b/tests/run-make/relro-levels/Makefile @@ -0,0 +1,22 @@ +# ignore-cross-compile +include ../tools.mk + +# only-linux +# +# This tests the different -Zrelro-level values, and makes sure that they work properly. + +all: + # Ensure that binaries built with the full relro level links them with both + # RELRO and BIND_NOW for doing eager symbol resolving. + $(RUSTC) -Zrelro-level=full hello.rs + readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO + readelf -d $(TMPDIR)/hello | grep -q BIND_NOW + + $(RUSTC) -Zrelro-level=partial hello.rs + readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO + + # Ensure that we're *not* built with RELRO when setting it to off. We do + # not want to check for BIND_NOW however, as the linker might have that + # enabled by default. + $(RUSTC) -Zrelro-level=off hello.rs + ! readelf -l $(TMPDIR)/hello | grep -q GNU_RELRO diff --git a/tests/run-make/relro-levels/hello.rs b/tests/run-make/relro-levels/hello.rs new file mode 100644 index 0000000000000000000000000000000000000000..e7a11a969c037e00a796aafeff6258501ec15e9a --- /dev/null +++ b/tests/run-make/relro-levels/hello.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/tests/run-make/remap-path-prefix-dwarf/Makefile b/tests/run-make/remap-path-prefix-dwarf/Makefile index fbaea7b68fe568421a5e6fc33e03495240edca8d..c9ede1b60274e8545d4d7973e4d953b578c35d30 100644 --- a/tests/run-make/remap-path-prefix-dwarf/Makefile +++ b/tests/run-make/remap-path-prefix-dwarf/Makefile @@ -6,7 +6,7 @@ SRC_DIR := $(abspath .) SRC_DIR_PARENT := $(abspath ..) -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: \ abs_input_outside_working_dir \ diff --git a/tests/run-make/remap-path-prefix/Makefile b/tests/run-make/remap-path-prefix/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2a7378fdf9ed5c80c76a5e3ac96734d35886b221 --- /dev/null +++ b/tests/run-make/remap-path-prefix/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# ignore-windows + +# Checks if remapping works if the remap-from string contains path to the working directory plus more +all: + $(RUSTC) --remap-path-prefix $$PWD/auxiliary=/the/aux --crate-type=lib --emit=metadata auxiliary/lib.rs + grep "/the/aux/lib.rs" $(TMPDIR)/liblib.rmeta || exit 1 + ! grep "$$PWD/auxiliary" $(TMPDIR)/liblib.rmeta || exit 1 diff --git a/tests/run-make/remap-path-prefix/auxiliary/lib.rs b/tests/run-make/remap-path-prefix/auxiliary/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..019c786a9023e40fc85577d5cbc78bbcf483464b --- /dev/null +++ b/tests/run-make/remap-path-prefix/auxiliary/lib.rs @@ -0,0 +1,3 @@ +pub fn lib() { + panic!("calm"); +} diff --git a/tests/run-make/repr128-dwarf/Makefile b/tests/run-make/repr128-dwarf/Makefile index 2b03c22c0d0d2a80ad3bb73f2d22c42a26934c48..3f933042724a39e495b8c5cdb07965f990c639f7 100644 --- a/tests/run-make/repr128-dwarf/Makefile +++ b/tests/run-make/repr128-dwarf/Makefile @@ -2,7 +2,7 @@ # This test should be replaced with one in tests/debuginfo once GDB or LLDB support 128-bit # enums. -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) -Cdebuginfo=2 lib.rs -o $(TMPDIR)/repr128.rlib diff --git a/tests/run-make/reproducible-build-2/Makefile b/tests/run-make/reproducible-build-2/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..68fcac8b47f5f6caefabbb7b3703857fc1782766 --- /dev/null +++ b/tests/run-make/reproducible-build-2/Makefile @@ -0,0 +1,27 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-musl +# ignore-windows +# Objects are reproducible but their path is not. + +all: \ + fat_lto \ + sysroot + +fat_lto: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs -C lto=fat + cp $(TMPDIR)/reproducible-build $(TMPDIR)/reproducible-build-a + $(RUSTC) reproducible-build.rs -C lto=fat + cmp "$(TMPDIR)/reproducible-build-a" "$(TMPDIR)/reproducible-build" || exit 1 + +sysroot: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(shell $(RUSTC) --print sysroot) --remap-path-prefix=$(shell $(RUSTC) --print sysroot)=/sysroot + cp -R $(shell $(RUSTC) --print sysroot) $(TMPDIR)/sysroot + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib + $(RUSTC) reproducible-build.rs --crate-type rlib --sysroot $(TMPDIR)/sysroot --remap-path-prefix=$(TMPDIR)/sysroot=/sysroot + cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 diff --git a/tests/run-make/reproducible-build-2/linker.rs b/tests/run-make/reproducible-build-2/linker.rs new file mode 100644 index 0000000000000000000000000000000000000000..998d1f328596c8a16cc5d6e4677542d4d06e4f41 --- /dev/null +++ b/tests/run-make/reproducible-build-2/linker.rs @@ -0,0 +1,44 @@ +use std::env; +use std::path::Path; +use std::fs::File; +use std::io::{Read, Write}; + +fn main() { + let mut dst = env::current_exe().unwrap(); + dst.pop(); + dst.push("linker-arguments1"); + if dst.exists() { + dst.pop(); + dst.push("linker-arguments2"); + assert!(!dst.exists()); + } + + let mut out = String::new(); + for arg in env::args().skip(1) { + let path = Path::new(&arg); + if !path.is_file() { + out.push_str(&arg); + out.push_str("\n"); + continue + } + + let mut contents = Vec::new(); + File::open(path).unwrap().read_to_end(&mut contents).unwrap(); + + out.push_str(&format!("{}: {}\n", arg, hash(&contents))); + } + + File::create(dst).unwrap().write_all(out.as_bytes()).unwrap(); +} + +// fnv hash for now +fn hash(contents: &[u8]) -> u64 { + let mut hash = 0xcbf29ce484222325; + + for byte in contents { + hash = hash ^ (*byte as u64); + hash = hash.wrapping_mul(0x100000001b3); + } + + hash +} diff --git a/tests/run-make/reproducible-build-2/reproducible-build-aux.rs b/tests/run-make/reproducible-build-2/reproducible-build-aux.rs new file mode 100644 index 0000000000000000000000000000000000000000..8105b3d2bda3df7d16e54f5cbac35bc61a6c74e0 --- /dev/null +++ b/tests/run-make/reproducible-build-2/reproducible-build-aux.rs @@ -0,0 +1,28 @@ +#![crate_type="lib"] + +pub static STATIC: i32 = 1234; + +pub struct Struct { + _t1: std::marker::PhantomData, + _t2: std::marker::PhantomData, +} + +pub fn regular_fn(_: i32) {} + +pub fn generic_fn() {} + +impl Drop for Struct { + fn drop(&mut self) {} +} + +pub enum Enum { + Variant1, + Variant2(u32), + Variant3 { x: u32 } +} + +pub struct TupleStruct(pub i8, pub i16, pub i32, pub i64); + +pub trait Trait { + fn foo(&self); +} diff --git a/tests/run-make/reproducible-build-2/reproducible-build.rs b/tests/run-make/reproducible-build-2/reproducible-build.rs new file mode 100644 index 0000000000000000000000000000000000000000..a6c04774c869a26dc110e270393ffbb0475ec34f --- /dev/null +++ b/tests/run-make/reproducible-build-2/reproducible-build.rs @@ -0,0 +1,116 @@ +// This test case makes sure that two identical invocations of the compiler +// (i.e., same code base, same compile-flags, same compiler-versions, etc.) +// produce the same output. In the past, symbol names of monomorphized functions +// were not deterministic (which we want to avoid). +// +// The test tries to exercise as many different paths into symbol name +// generation as possible: +// +// - regular functions +// - generic functions +// - methods +// - statics +// - closures +// - enum variant constructors +// - tuple struct constructors +// - drop glue +// - FnOnce adapters +// - Trait object shims +// - Fn Pointer shims + +#![allow(dead_code, warnings)] + +extern crate reproducible_build_aux; + +static STATIC: i32 = 1234; + +pub struct Struct { + x: T1, + y: T2, +} + +fn regular_fn(_: i32) {} + +fn generic_fn() {} + +impl Drop for Struct { + fn drop(&mut self) {} +} + +pub enum Enum { + Variant1, + Variant2(u32), + Variant3 { x: u32 } +} + +struct TupleStruct(i8, i16, i32, i64); + +impl TupleStruct { + pub fn bar(&self) {} +} + +trait Trait { + fn foo(&self); +} + +impl Trait for u64 { + fn foo(&self) {} +} + +impl reproducible_build_aux::Trait for TupleStruct { + fn foo(&self) {} +} + +fn main() { + regular_fn(STATIC); + generic_fn::(); + generic_fn::>(); + generic_fn::, reproducible_build_aux::Struct>(); + + let dropped = Struct { + x: "", + y: 'a', + }; + + let _ = Enum::Variant1; + let _ = Enum::Variant2(0); + let _ = Enum::Variant3 { x: 0 }; + let _ = TupleStruct(1, 2, 3, 4); + + let closure = |x| { + x + 1i32 + }; + + fn inner i32>(f: F) -> i32 { + f(STATIC) + } + + println!("{}", inner(closure)); + + let object_shim: &Trait = &0u64; + object_shim.foo(); + + fn with_fn_once_adapter(f: F) { + f(0); + } + + with_fn_once_adapter(|_:i32| { }); + + reproducible_build_aux::regular_fn(STATIC); + reproducible_build_aux::generic_fn::(); + reproducible_build_aux::generic_fn::>(); + reproducible_build_aux::generic_fn::, + reproducible_build_aux::Struct>(); + + let _ = reproducible_build_aux::Enum::Variant1; + let _ = reproducible_build_aux::Enum::Variant2(0); + let _ = reproducible_build_aux::Enum::Variant3 { x: 0 }; + let _ = reproducible_build_aux::TupleStruct(1, 2, 3, 4); + + let object_shim: &reproducible_build_aux::Trait = &TupleStruct(0, 1, 2, 3); + object_shim.foo(); + + let pointer_shim: &Fn(i32) = ®ular_fn; + + TupleStruct(1, 2, 3, 4).bar(); +} diff --git a/tests/run-make/reproducible-build/Makefile b/tests/run-make/reproducible-build/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f5d17a234c0ac23632d74db2e2d819ee385630d9 --- /dev/null +++ b/tests/run-make/reproducible-build/Makefile @@ -0,0 +1,140 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-musl +# Objects are reproducible but their path is not. + +all: \ + smoke \ + debug \ + opt \ + link_paths \ + remap_paths \ + different_source_dirs_rlib \ + remap_cwd_rlib \ + remap_cwd_to_empty \ + extern_flags + +# TODO: Builds of `bin` crate types are not deterministic with debuginfo=2 on +# Windows. +# See: https://github.com/rust-lang/rust/pull/87320#issuecomment-920105533 +# Issue: https://github.com/rust-lang/rust/issues/88982 +# +# different_source_dirs_bin \ +# remap_cwd_bin \ + +smoke: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) linker.rs -O + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) + diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" + +debug: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) linker.rs -O + $(RUSTC) reproducible-build-aux.rs -g + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -g + diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" + +opt: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) linker.rs -O + $(RUSTC) reproducible-build-aux.rs -O + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O + $(RUSTC) reproducible-build.rs -C linker=$(call RUN_BINFILE,linker) -O + diff -u "$(TMPDIR)/linker-arguments1" "$(TMPDIR)/linker-arguments2" + +link_paths: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs --crate-type rlib -L /b + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib + $(RUSTC) reproducible-build.rs --crate-type rlib -L /a + cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 + +remap_paths: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/a=/c + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib + $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=/b=/c + cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 + +different_source_dirs_bin: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + mkdir $(TMPDIR)/test + cp reproducible-build.rs $(TMPDIR)/test + $(RUSTC) reproducible-build.rs --crate-type bin --remap-path-prefix=$$PWD=/b + cp $(TMPDIR)/reproducible-build $(TMPDIR)/foo + (cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \ + --remap-path-prefix=$(TMPDIR)/test=/b \ + --crate-type bin) + cmp "$(TMPDIR)/reproducible-build" "$(TMPDIR)/foo" || exit 1 + +different_source_dirs_rlib: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + mkdir $(TMPDIR)/test + cp reproducible-build.rs $(TMPDIR)/test + $(RUSTC) reproducible-build.rs --crate-type rlib --remap-path-prefix=$$PWD=/b + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib + (cd $(TMPDIR)/test && $(RUSTC) reproducible-build.rs \ + --remap-path-prefix=$(TMPDIR)/test=/b \ + --crate-type rlib) + cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 + +remap_cwd_bin: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + mkdir $(TMPDIR)/test + cp reproducible-build.rs $(TMPDIR)/test + $(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \ + -Z remap-cwd-prefix=. + cp $(TMPDIR)/reproducible-build $(TMPDIR)/first + (cd $(TMPDIR)/test && \ + $(RUSTC) reproducible-build.rs --crate-type bin -C debuginfo=2 \ + -Z remap-cwd-prefix=.) + cmp "$(TMPDIR)/first" "$(TMPDIR)/reproducible-build" || exit 1 + +remap_cwd_rlib: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + mkdir $(TMPDIR)/test + cp reproducible-build.rs $(TMPDIR)/test + $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ + -Z remap-cwd-prefix=. + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib + (cd $(TMPDIR)/test && \ + $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ + -Z remap-cwd-prefix=.) + cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1 + +remap_cwd_to_empty: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + mkdir $(TMPDIR)/test + cp reproducible-build.rs $(TMPDIR)/test + $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ + -Z remap-cwd-prefix= + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfirst.rlib + (cd $(TMPDIR)/test && \ + $(RUSTC) reproducible-build.rs --crate-type rlib -C debuginfo=2 \ + -Z remap-cwd-prefix=) + cmp "$(TMPDIR)/libfirst.rlib" "$(TMPDIR)/libreproducible_build.rlib" || exit 1 + +extern_flags: + rm -rf $(TMPDIR) && mkdir $(TMPDIR) + $(RUSTC) reproducible-build-aux.rs + $(RUSTC) reproducible-build.rs \ + --extern reproducible_build_aux=$(TMPDIR)/libreproducible_build_aux.rlib \ + --crate-type rlib + cp $(TMPDIR)/libreproducible_build_aux.rlib $(TMPDIR)/libbar.rlib + cp $(TMPDIR)/libreproducible_build.rlib $(TMPDIR)/libfoo.rlib + $(RUSTC) reproducible-build.rs \ + --extern reproducible_build_aux=$(TMPDIR)/libbar.rlib \ + --crate-type rlib + cmp "$(TMPDIR)/libreproducible_build.rlib" "$(TMPDIR)/libfoo.rlib" || exit 1 diff --git a/tests/run-make/reproducible-build/linker.rs b/tests/run-make/reproducible-build/linker.rs new file mode 100644 index 0000000000000000000000000000000000000000..3dda6f190e448ae6c513d0f31e27e4e94a574673 --- /dev/null +++ b/tests/run-make/reproducible-build/linker.rs @@ -0,0 +1,50 @@ +use std::env; +use std::path::Path; +use std::fs::File; +use std::io::{Read, Write}; + +fn main() { + let mut dst = env::current_exe().unwrap(); + dst.pop(); + dst.push("linker-arguments1"); + if dst.exists() { + dst.pop(); + dst.push("linker-arguments2"); + assert!(!dst.exists()); + } + + let mut out = String::new(); + for arg in env::args().skip(1) { + let path = Path::new(&arg); + if !path.is_file() { + out.push_str(&arg); + out.push_str("\n"); + continue + } + + let mut contents = Vec::new(); + File::open(path).unwrap().read_to_end(&mut contents).unwrap(); + + // This file is produced during linking in a temporary directory. + let arg = if arg.ends_with("/symbols.o") || arg.ends_with("\\symbols.o") { + "symbols.o" + } else { + &*arg + }; + out.push_str(&format!("{}: {}\n", arg, hash(&contents))); + } + + File::create(dst).unwrap().write_all(out.as_bytes()).unwrap(); +} + +// fnv hash for now +fn hash(contents: &[u8]) -> u64 { + let mut hash = 0xcbf29ce484222325; + + for byte in contents { + hash = hash ^ (*byte as u64); + hash = hash.wrapping_mul(0x100000001b3); + } + + hash +} diff --git a/tests/run-make/reproducible-build/reproducible-build-aux.rs b/tests/run-make/reproducible-build/reproducible-build-aux.rs new file mode 100644 index 0000000000000000000000000000000000000000..8105b3d2bda3df7d16e54f5cbac35bc61a6c74e0 --- /dev/null +++ b/tests/run-make/reproducible-build/reproducible-build-aux.rs @@ -0,0 +1,28 @@ +#![crate_type="lib"] + +pub static STATIC: i32 = 1234; + +pub struct Struct { + _t1: std::marker::PhantomData, + _t2: std::marker::PhantomData, +} + +pub fn regular_fn(_: i32) {} + +pub fn generic_fn() {} + +impl Drop for Struct { + fn drop(&mut self) {} +} + +pub enum Enum { + Variant1, + Variant2(u32), + Variant3 { x: u32 } +} + +pub struct TupleStruct(pub i8, pub i16, pub i32, pub i64); + +pub trait Trait { + fn foo(&self); +} diff --git a/tests/run-make/reproducible-build/reproducible-build.rs b/tests/run-make/reproducible-build/reproducible-build.rs new file mode 100644 index 0000000000000000000000000000000000000000..a6c04774c869a26dc110e270393ffbb0475ec34f --- /dev/null +++ b/tests/run-make/reproducible-build/reproducible-build.rs @@ -0,0 +1,116 @@ +// This test case makes sure that two identical invocations of the compiler +// (i.e., same code base, same compile-flags, same compiler-versions, etc.) +// produce the same output. In the past, symbol names of monomorphized functions +// were not deterministic (which we want to avoid). +// +// The test tries to exercise as many different paths into symbol name +// generation as possible: +// +// - regular functions +// - generic functions +// - methods +// - statics +// - closures +// - enum variant constructors +// - tuple struct constructors +// - drop glue +// - FnOnce adapters +// - Trait object shims +// - Fn Pointer shims + +#![allow(dead_code, warnings)] + +extern crate reproducible_build_aux; + +static STATIC: i32 = 1234; + +pub struct Struct { + x: T1, + y: T2, +} + +fn regular_fn(_: i32) {} + +fn generic_fn() {} + +impl Drop for Struct { + fn drop(&mut self) {} +} + +pub enum Enum { + Variant1, + Variant2(u32), + Variant3 { x: u32 } +} + +struct TupleStruct(i8, i16, i32, i64); + +impl TupleStruct { + pub fn bar(&self) {} +} + +trait Trait { + fn foo(&self); +} + +impl Trait for u64 { + fn foo(&self) {} +} + +impl reproducible_build_aux::Trait for TupleStruct { + fn foo(&self) {} +} + +fn main() { + regular_fn(STATIC); + generic_fn::(); + generic_fn::>(); + generic_fn::, reproducible_build_aux::Struct>(); + + let dropped = Struct { + x: "", + y: 'a', + }; + + let _ = Enum::Variant1; + let _ = Enum::Variant2(0); + let _ = Enum::Variant3 { x: 0 }; + let _ = TupleStruct(1, 2, 3, 4); + + let closure = |x| { + x + 1i32 + }; + + fn inner i32>(f: F) -> i32 { + f(STATIC) + } + + println!("{}", inner(closure)); + + let object_shim: &Trait = &0u64; + object_shim.foo(); + + fn with_fn_once_adapter(f: F) { + f(0); + } + + with_fn_once_adapter(|_:i32| { }); + + reproducible_build_aux::regular_fn(STATIC); + reproducible_build_aux::generic_fn::(); + reproducible_build_aux::generic_fn::>(); + reproducible_build_aux::generic_fn::, + reproducible_build_aux::Struct>(); + + let _ = reproducible_build_aux::Enum::Variant1; + let _ = reproducible_build_aux::Enum::Variant2(0); + let _ = reproducible_build_aux::Enum::Variant3 { x: 0 }; + let _ = reproducible_build_aux::TupleStruct(1, 2, 3, 4); + + let object_shim: &reproducible_build_aux::Trait = &TupleStruct(0, 1, 2, 3); + object_shim.foo(); + + let pointer_shim: &Fn(i32) = ®ular_fn; + + TupleStruct(1, 2, 3, 4).bar(); +} diff --git a/tests/run-make/resolve-rename/Makefile b/tests/run-make/resolve-rename/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..00f83a5d6b2d47d8aa5e995f860fd5fad886fd2d --- /dev/null +++ b/tests/run-make/resolve-rename/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + $(RUSTC) -C extra-filename=-hash foo.rs + $(RUSTC) bar.rs + mv $(TMPDIR)/libfoo-hash.rlib $(TMPDIR)/libfoo-another-hash.rlib + $(RUSTC) baz.rs diff --git a/tests/run-make/resolve-rename/bar.rs b/tests/run-make/resolve-rename/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..4a09ce355e684b0d65a83fecaa65e53937cd27b9 --- /dev/null +++ b/tests/run-make/resolve-rename/bar.rs @@ -0,0 +1,5 @@ +#![crate_type = "rlib"] + +extern crate foo; + +pub fn bar() { foo::foo() } diff --git a/tests/run-make/resolve-rename/baz.rs b/tests/run-make/resolve-rename/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..9176073ef97f48717582483f4843a6329a08099e --- /dev/null +++ b/tests/run-make/resolve-rename/baz.rs @@ -0,0 +1,5 @@ +#![crate_type = "rlib"] + +extern crate bar; + +pub fn baz() { bar::bar() } diff --git a/tests/run-make/resolve-rename/foo.rs b/tests/run-make/resolve-rename/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..bd6820098eea436cb272676f18774e67d5ea4ecb --- /dev/null +++ b/tests/run-make/resolve-rename/foo.rs @@ -0,0 +1,3 @@ +#![crate_type = "rlib"] + +pub fn foo() {} diff --git a/tests/run-make/return-non-c-like-enum-from-c/Makefile b/tests/run-make/return-non-c-like-enum-from-c/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..bd441d321bfabb8a0c67f14ca266d371e9743a73 --- /dev/null +++ b/tests/run-make/return-non-c-like-enum-from-c/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,test) + $(RUSTC) nonclike.rs -L$(TMPDIR) -ltest + $(call RUN,nonclike) diff --git a/tests/run-make/return-non-c-like-enum-from-c/nonclike.rs b/tests/run-make/return-non-c-like-enum-from-c/nonclike.rs new file mode 100644 index 0000000000000000000000000000000000000000..ea22a2a56e09b44b9d7243ac5d1bf48b2b4f4feb --- /dev/null +++ b/tests/run-make/return-non-c-like-enum-from-c/nonclike.rs @@ -0,0 +1,31 @@ +#[repr(C, u8)] +pub enum TT { + AA(u64, u64), + BB, +} + +#[repr(C,u8)] +pub enum T { + A(u64), + B, +} + +extern "C" { + pub fn t_new(a: u64) -> T; + pub fn tt_new(a: u64, b: u64) -> TT; +} + +fn main() { + if let TT::AA(a, b) = unsafe { tt_new(10, 11) } { + assert_eq!(10, a); + assert_eq!(11, b); + } else { + panic!("expected TT::AA"); + } + + if let T::A(a) = unsafe { t_new(10) } { + assert_eq!(10, a); + } else { + panic!("expected T::A"); + } +} diff --git a/tests/run-make/return-non-c-like-enum-from-c/test.c b/tests/run-make/return-non-c-like-enum-from-c/test.c new file mode 100644 index 0000000000000000000000000000000000000000..3ad135bab4a1e986c33ba940427ab52548d3688b --- /dev/null +++ b/tests/run-make/return-non-c-like-enum-from-c/test.c @@ -0,0 +1,61 @@ +#include + +/* This is the code generated by cbindgen 0.12.1 for the `enum TT` + * type in nonclike.rs . */ +enum TT_Tag { + AA, + BB, +}; +typedef uint8_t TT_Tag; + +typedef struct { + uint64_t _0; + uint64_t _1; +} AA_Body; + +typedef struct { + TT_Tag tag; + union { + AA_Body aa; + }; +} TT; + +/* This is the code generated by cbindgen 0.12.1 for the `enum T` type + * in nonclike.rs . */ +enum T_Tag { + A, + B, +}; +typedef uint8_t T_Tag; + +typedef struct { + uint64_t _0; +} A_Body; + +typedef struct { + T_Tag tag; + union { + A_Body a; + }; +} T; + +TT tt_new(uint64_t a, uint64_t b) { + TT tt = { + .tag = AA, + .aa = { + ._0 = a, + ._1 = b, + }, + }; + return tt; +} + +T t_new(uint64_t a) { + T t = { + .tag = A, + .a = { + ._0 = a, + }, + }; + return t; +} diff --git a/tests/run-make/return-non-c-like-enum/Makefile b/tests/run-make/return-non-c-like-enum/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0c8d8bf3acc60e599f9b61bc9a080fb02f182e7b --- /dev/null +++ b/tests/run-make/return-non-c-like-enum/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) --crate-type=staticlib nonclike.rs + $(CC) test.c $(call STATICLIB,nonclike) $(call OUT_EXE,test) \ + $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(call RUN,test) diff --git a/tests/run-make/return-non-c-like-enum/nonclike.rs b/tests/run-make/return-non-c-like-enum/nonclike.rs new file mode 100644 index 0000000000000000000000000000000000000000..de529cf641ab06d44a936add077782d2074f1054 --- /dev/null +++ b/tests/run-make/return-non-c-like-enum/nonclike.rs @@ -0,0 +1,21 @@ +#[repr(C, u8)] +pub enum TT { + AA(u64, u64), + BB, +} + +#[no_mangle] +pub extern "C" fn tt_new(a: u64, b: u64) -> TT { + TT::AA(a, b) +} + +#[repr(C,u8)] +pub enum T { + A(u64), + B, +} + +#[no_mangle] +pub extern "C" fn t_new(a: u64) -> T { + T::A(a) +} diff --git a/tests/run-make/return-non-c-like-enum/test.c b/tests/run-make/return-non-c-like-enum/test.c new file mode 100644 index 0000000000000000000000000000000000000000..afadd3c10c5ca0d51e5cacf18f3e937aaefdb76a --- /dev/null +++ b/tests/run-make/return-non-c-like-enum/test.c @@ -0,0 +1,63 @@ +#include +#include + +/* This is the code generated by cbindgen 0.12.1 for the `enum TT` + * type in nonclike.rs . */ +enum TT_Tag { + AA, + BB, +}; +typedef uint8_t TT_Tag; + +typedef struct { + uint64_t _0; + uint64_t _1; +} AA_Body; + +typedef struct { + TT_Tag tag; + union { + AA_Body aa; + }; +} TT; + +/* This is the code generated by cbindgen 0.12.1 for the `enum T` type + * in nonclike.rs . */ +enum T_Tag { + A, + B, +}; +typedef uint8_t T_Tag; + +typedef struct { + uint64_t _0; +} A_Body; + +typedef struct { + T_Tag tag; + union { + A_Body a; + }; +} T; + +/* These symbols are defined by the Rust staticlib built from + * nonclike.rs. */ +extern TT tt_new(uint64_t a, uint64_t b); +extern T t_new(uint64_t v); + +int main(int argc, char *argv[]) { + (void)argc; (void)argv; + + /* This example works. */ + TT tt = tt_new(10, 20); + assert(AA == tt.tag); + assert(10 == tt.aa._0); + assert(20 == tt.aa._1); + + /* This one used to segfault (see issue #68190). */ + T t = t_new(10); + assert(A == t.tag); + assert(10 == t.a._0); + + return 0; +} diff --git a/tests/run-make/rlib-chain/Makefile b/tests/run-make/rlib-chain/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7a1f887fa52719626ceac0f818f4a4f9874d04c6 --- /dev/null +++ b/tests/run-make/rlib-chain/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) m1.rs + $(RUSTC) m2.rs + $(RUSTC) m3.rs + $(RUSTC) m4.rs + $(call RUN,m4) + rm $(TMPDIR)/*lib + $(call RUN,m4) diff --git a/tests/run-make/rlib-chain/m1.rs b/tests/run-make/rlib-chain/m1.rs new file mode 100644 index 0000000000000000000000000000000000000000..665b206ccf197c2cf3ec3d7860555ff808a11c20 --- /dev/null +++ b/tests/run-make/rlib-chain/m1.rs @@ -0,0 +1,2 @@ +#![crate_type = "rlib"] +pub fn m1() {} diff --git a/tests/run-make/rlib-chain/m2.rs b/tests/run-make/rlib-chain/m2.rs new file mode 100644 index 0000000000000000000000000000000000000000..eba12fe1218853b05c629339bdce5bb905ba53b7 --- /dev/null +++ b/tests/run-make/rlib-chain/m2.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] +extern crate m1; + +pub fn m2() { m1::m1() } diff --git a/tests/run-make/rlib-chain/m3.rs b/tests/run-make/rlib-chain/m3.rs new file mode 100644 index 0000000000000000000000000000000000000000..ade191db49c8e81211afcd0f5efcf92a0c95d4f0 --- /dev/null +++ b/tests/run-make/rlib-chain/m3.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] +extern crate m2; + +pub fn m3() { m2::m2() } diff --git a/tests/run-make/rlib-chain/m4.rs b/tests/run-make/rlib-chain/m4.rs new file mode 100644 index 0000000000000000000000000000000000000000..fa8ec6079deace3f04d68dc79b920927ada6f385 --- /dev/null +++ b/tests/run-make/rlib-chain/m4.rs @@ -0,0 +1,3 @@ +extern crate m3; + +fn main() { m3::m3() } diff --git a/tests/run-make/rlib-format-packed-bundled-libs-2/Makefile b/tests/run-make/rlib-format-packed-bundled-libs-2/Makefile index 37b8d809a27423d910c25532380894eeb53780d7..d2a740b06b36cd66ee57cb0ccf49f83e504d8990 100644 --- a/tests/run-make/rlib-format-packed-bundled-libs-2/Makefile +++ b/tests/run-make/rlib-format-packed-bundled-libs-2/Makefile @@ -1,4 +1,4 @@ --include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-cross-compile diff --git a/tests/run-make/rlib-format-packed-bundled-libs-3/Makefile b/tests/run-make/rlib-format-packed-bundled-libs-3/Makefile index 62dc1b5f60602907b6d5d8d3552ca2a508adf1e1..1f2812cb0879213ded2b50ed0cfdfd1b3c8a3ea0 100644 --- a/tests/run-make/rlib-format-packed-bundled-libs-3/Makefile +++ b/tests/run-make/rlib-format-packed-bundled-libs-3/Makefile @@ -1,4 +1,4 @@ --include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-cross-compile # only-linux diff --git a/tests/run-make/rlib-format-packed-bundled-libs/Makefile b/tests/run-make/rlib-format-packed-bundled-libs/Makefile index 7fb6ce8d1e4110db9227c636f2e76a1b11a43eb4..f454da67893d09b5aa08e45edfc44f2d812196c1 100644 --- a/tests/run-make/rlib-format-packed-bundled-libs/Makefile +++ b/tests/run-make/rlib-format-packed-bundled-libs/Makefile @@ -1,4 +1,4 @@ --include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-cross-compile diff --git a/tests/run-make/rustc-macro-dep-files/Makefile b/tests/run-make/rustc-macro-dep-files/Makefile index 6ae659db2e99feca32d121f9efce6104ef5579b6..76d713c4bb3c4c52ae2611ff1eb2f1c70ae11a00 100644 --- a/tests/run-make/rustc-macro-dep-files/Makefile +++ b/tests/run-make/rustc-macro-dep-files/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # FIXME(eddyb) provide `HOST_RUSTC` and `TARGET_RUSTC` # instead of hardcoding them everywhere they're needed. diff --git a/tests/run-make/rustdoc-determinism/Makefile b/tests/run-make/rustdoc-determinism/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a3ef1690671843878c9f4dfc8992e2effa8222e3 --- /dev/null +++ b/tests/run-make/rustdoc-determinism/Makefile @@ -0,0 +1,16 @@ +include ../tools.mk + +# Assert that the search index is generated deterministically, regardless of the +# order that crates are documented in. + +# ignore-windows +# Uses `diff`. + +all: + $(RUSTDOC) foo.rs -o $(TMPDIR)/foo_first + $(RUSTDOC) bar.rs -o $(TMPDIR)/foo_first + + $(RUSTDOC) bar.rs -o $(TMPDIR)/bar_first + $(RUSTDOC) foo.rs -o $(TMPDIR)/bar_first + + diff $(TMPDIR)/foo_first/search-index.js $(TMPDIR)/bar_first/search-index.js diff --git a/tests/run-make/rustdoc-determinism/bar.rs b/tests/run-make/rustdoc-determinism/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..ca05a6a9076c217012b462b2b4e9459096f3384b --- /dev/null +++ b/tests/run-make/rustdoc-determinism/bar.rs @@ -0,0 +1 @@ +pub struct Bar; diff --git a/tests/run-make/rustdoc-determinism/foo.rs b/tests/run-make/rustdoc-determinism/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..4a835673a596bcd05404f43d34082bf2785f2a9d --- /dev/null +++ b/tests/run-make/rustdoc-determinism/foo.rs @@ -0,0 +1 @@ +pub struct Foo; diff --git a/tests/run-make/rustdoc-error-lines/Makefile b/tests/run-make/rustdoc-error-lines/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2dc30f56b833f2a578f81878549c7f902e1ec928 --- /dev/null +++ b/tests/run-make/rustdoc-error-lines/Makefile @@ -0,0 +1,13 @@ +include ../tools.mk + +# Test that hir-tree output doesn't crash and includes +# the string constant we would expect to see. + +all: + $(RUSTDOC) --test input.rs > $(TMPDIR)/output || true + $(CGREP) 'input.rs - foo (line 5)' < $(TMPDIR)/output + $(CGREP) 'input.rs:7:15' < $(TMPDIR)/output + $(CGREP) 'input.rs - bar (line 15)' < $(TMPDIR)/output + $(CGREP) 'input.rs:17:15' < $(TMPDIR)/output + $(CGREP) 'input.rs - bar (line 24)' < $(TMPDIR)/output + $(CGREP) 'input.rs:26:15' < $(TMPDIR)/output diff --git a/tests/run-make/rustdoc-error-lines/input.rs b/tests/run-make/rustdoc-error-lines/input.rs new file mode 100644 index 0000000000000000000000000000000000000000..b4db182e85f267791be1e99da124c4dee67e4a2d --- /dev/null +++ b/tests/run-make/rustdoc-error-lines/input.rs @@ -0,0 +1,28 @@ +// Test for #45868 + +// random #![feature] to ensure that crate attrs +// do not offset things +/// ```rust +/// #![feature(bool_to_option)] +/// let x: char = 1; +/// ``` +pub fn foo() { + +} + +/// Add some text around the test... +/// +/// ```rust +/// #![feature(bool_to_option)] +/// let x: char = 1; +/// ``` +/// +/// ...to make sure that the line number is still correct. +/// +/// Let's also add a second test in the same doc comment. +/// +/// ```rust +/// #![feature(bool_to_option)] +/// let x: char = 1; +/// ``` +pub fn bar() {} diff --git a/tests/run-make/rustdoc-io-error/Makefile b/tests/run-make/rustdoc-io-error/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..27f5ecf94aba39c6d806addc795dbe9ab1da075b --- /dev/null +++ b/tests/run-make/rustdoc-io-error/Makefile @@ -0,0 +1,20 @@ +include ../tools.mk + +# This test verifies that rustdoc doesn't ICE when it encounters an IO error +# while generating files. Ideally this would be a rustdoc-ui test, so we could +# verify the error message as well. + +# ignore-windows +# The test uses `chmod`. + +OUTPUT_DIR := "$(TMPDIR)/rustdoc-io-error" + +# This test operates by creating a temporary directory and modifying its +# permissions so that it is not writable. We have to take special care to set +# the permissions back to normal so that it's able to be deleted later. +all: + mkdir -p $(OUTPUT_DIR) + chmod u-w $(OUTPUT_DIR) + -$(shell $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs) + chmod u+w $(OUTPUT_DIR) + exit $($(.SHELLSTATUS) -eq 1) diff --git a/tests/run-make/rustdoc-io-error/foo.rs b/tests/run-make/rustdoc-io-error/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..4a835673a596bcd05404f43d34082bf2785f2a9d --- /dev/null +++ b/tests/run-make/rustdoc-io-error/foo.rs @@ -0,0 +1 @@ +pub struct Foo; diff --git a/tests/run-make/rustdoc-map-file/Makefile b/tests/run-make/rustdoc-map-file/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5cbf7747af63866995ba7bf736cbe64211ed3ac8 --- /dev/null +++ b/tests/run-make/rustdoc-map-file/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +all: + $(RUSTDOC) -Z unstable-options --generate-redirect-map foo.rs -o "$(TMPDIR)/out" + "$(PYTHON)" validate_json.py "$(TMPDIR)/out" diff --git a/tests/run-make/rustdoc-map-file/expected.json b/tests/run-make/rustdoc-map-file/expected.json new file mode 100644 index 0000000000000000000000000000000000000000..6b1ccbeac3010849dde4231d550c141f9532ae88 --- /dev/null +++ b/tests/run-make/rustdoc-map-file/expected.json @@ -0,0 +1,5 @@ +{ + "foo/macro.foo!.html": "foo/macro.foo.html", + "foo/private/struct.Quz.html": "foo/struct.Quz.html", + "foo/hidden/struct.Bar.html": "foo/struct.Bar.html" +} diff --git a/tests/run-make/rustdoc-map-file/foo.rs b/tests/run-make/rustdoc-map-file/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..e12b9d2292c5110d3d1bb3f3e197ffd13f94aa56 --- /dev/null +++ b/tests/run-make/rustdoc-map-file/foo.rs @@ -0,0 +1,16 @@ +pub use private::Quz; +pub use hidden::Bar; + +mod private { + pub struct Quz; +} + +#[doc(hidden)] +pub mod hidden { + pub struct Bar; +} + +#[macro_export] +macro_rules! foo { + () => {} +} diff --git a/tests/run-make/rustdoc-map-file/validate_json.py b/tests/run-make/rustdoc-map-file/validate_json.py new file mode 100755 index 0000000000000000000000000000000000000000..5c14c90b70d37d899f1f9d9c8d65c94d185d80e1 --- /dev/null +++ b/tests/run-make/rustdoc-map-file/validate_json.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python + +import os +import sys +import json + + +def find_redirect_map_file(folder, errors): + for root, dirs, files in os.walk(folder): + for name in files: + if not name.endswith("redirect-map.json"): + continue + with open(os.path.join(root, name)) as f: + data = json.load(f) + with open("expected.json") as f: + expected = json.load(f) + for key in expected: + if expected[key] != data.get(key): + errors.append("Expected `{}` for key `{}`, found: `{}`".format( + expected[key], key, data.get(key))) + else: + del data[key] + for key in data: + errors.append("Extra data not expected: key: `{}`, data: `{}`".format( + key, data[key])) + return True + return False + + +if len(sys.argv) != 2: + print("Expected doc directory to check!") + sys.exit(1) + +errors = [] +if not find_redirect_map_file(sys.argv[1], errors): + print("Didn't find the map file in `{}`...".format(sys.argv[1])) + sys.exit(1) +for err in errors: + print("=> {}".format(err)) +if len(errors) != 0: + sys.exit(1) diff --git a/tests/run-make/rustdoc-output-path/Makefile b/tests/run-make/rustdoc-output-path/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8f5cda9e56e9fec57c54703596d40449f922fab0 --- /dev/null +++ b/tests/run-make/rustdoc-output-path/Makefile @@ -0,0 +1,4 @@ +include ../tools.mk + +all: + $(RUSTDOC) -o "$(TMPDIR)/foo/bar/doc" foo.rs diff --git a/tests/run-make/rustdoc-output-path/foo.rs b/tests/run-make/rustdoc-output-path/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..4a835673a596bcd05404f43d34082bf2785f2a9d --- /dev/null +++ b/tests/run-make/rustdoc-output-path/foo.rs @@ -0,0 +1 @@ +pub struct Foo; diff --git a/tests/run-make/rustdoc-scrape-examples-macros/Makefile b/tests/run-make/rustdoc-scrape-examples-macros/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..edc19d8cb5de4ebef4da5b05828647268ef89699 --- /dev/null +++ b/tests/run-make/rustdoc-scrape-examples-macros/Makefile @@ -0,0 +1,19 @@ +# ignore-cross-compile +include ../../run-make/tools.mk + +OUTPUT_DIR := "$(TMPDIR)/rustdoc" +DYLIB_NAME := $(shell echo | $(RUSTC) --crate-name foobar_macro --crate-type dylib --print file-names -) + +all: + $(RUSTC) src/proc.rs --crate-name foobar_macro --edition=2021 --crate-type proc-macro --emit=dep-info,link + + $(RUSTC) src/lib.rs --crate-name foobar --edition=2021 --crate-type lib --emit=dep-info,link + + $(RUSTDOC) examples/ex.rs --crate-name ex --crate-type bin --output $(OUTPUT_DIR) \ + --extern foobar=$(TMPDIR)/libfoobar.rlib --extern foobar_macro=$(TMPDIR)/$(DYLIB_NAME) \ + -Z unstable-options --scrape-examples-output-path $(TMPDIR)/ex.calls --scrape-examples-target-crate foobar + + $(RUSTDOC) src/lib.rs --crate-name foobar --crate-type lib --output $(OUTPUT_DIR) \ + -Z unstable-options --with-examples $(TMPDIR)/ex.calls + + $(HTMLDOCCK) $(OUTPUT_DIR) src/lib.rs diff --git a/tests/run-make/rustdoc-scrape-examples-macros/examples/ex.rs b/tests/run-make/rustdoc-scrape-examples-macros/examples/ex.rs new file mode 100644 index 0000000000000000000000000000000000000000..4d8c8b30e311021cf9373e11e33f121fdea3c9e1 --- /dev/null +++ b/tests/run-make/rustdoc-scrape-examples-macros/examples/ex.rs @@ -0,0 +1,27 @@ +extern crate foobar; +extern crate foobar_macro; + +use foobar::*; +use foobar_macro::*; + +a_proc_macro!(); // no + +#[an_attr_macro] +fn a() { + f(); // no +} + +#[an_attr_macro(with_span)] +fn b() { + f(); // yes +} + +fn c() { + a_rules_macro!(f()); // yes +} + +fn d() { + a_rules_macro!(()); // no +} + +fn main(){} diff --git a/tests/run-make/rustdoc-scrape-examples-macros/src/lib.rs b/tests/run-make/rustdoc-scrape-examples-macros/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..d8658a0f255771f25ed4e22391af3fc2437518d9 --- /dev/null +++ b/tests/run-make/rustdoc-scrape-examples-macros/src/lib.rs @@ -0,0 +1,12 @@ +// Scraped example should only include line numbers for items b and c in ex.rs +// @!has foobar/fn.f.html '//*[@class="src-line-numbers"]' '14' +// @has foobar/fn.f.html '//*[@class="src-line-numbers"]' '15' +// @has foobar/fn.f.html '//*[@class="src-line-numbers"]' '21' +// @!has foobar/fn.f.html '//*[@class="src-line-numbers"]' '22' + +pub fn f() {} + +#[macro_export] +macro_rules! a_rules_macro { + ($e:expr) => { ($e, foobar::f()); } +} diff --git a/tests/run-make/rustdoc-scrape-examples-macros/src/proc.rs b/tests/run-make/rustdoc-scrape-examples-macros/src/proc.rs new file mode 100644 index 0000000000000000000000000000000000000000..46e518fdf6af8fa127792aed4f35f6487c75e9c9 --- /dev/null +++ b/tests/run-make/rustdoc-scrape-examples-macros/src/proc.rs @@ -0,0 +1,39 @@ +extern crate proc_macro; +use proc_macro::*; + +#[proc_macro] +pub fn a_proc_macro(_item: TokenStream) -> TokenStream { + "fn ex() { foobar::f(); }".parse().unwrap() +} + +// inserts foobar::f() to the end of the function +#[proc_macro_attribute] +pub fn an_attr_macro(attr: TokenStream, item: TokenStream) -> TokenStream { + let new_call: TokenStream = "foobar::f();".parse().unwrap(); + + let mut tokens = item.into_iter(); + + let fn_tok = tokens.next().unwrap(); + let ident_tok = tokens.next().unwrap(); + let args_tok = tokens.next().unwrap(); + let body = match tokens.next().unwrap() { + TokenTree::Group(g) => { + let new_g = Group::new(g.delimiter(), new_call); + let mut outer_g = Group::new( + g.delimiter(), + [TokenTree::Group(g.clone()), TokenTree::Group(new_g)].into_iter().collect(), + ); + + if attr.to_string() == "with_span" { + outer_g.set_span(g.span()); + } + + TokenTree::Group(outer_g) + } + _ => unreachable!(), + }; + + let tokens = vec![fn_tok, ident_tok, args_tok, body].into_iter().collect::(); + + tokens +} diff --git a/tests/run-make/rustdoc-scrape-examples-multiple/scrape.mk b/tests/run-make/rustdoc-scrape-examples-multiple/scrape.mk index 7a28d2145d551522d0d590d2cf018d7f760c5299..57220bc6635c70007ed405f34eacac186d500a0e 100644 --- a/tests/run-make/rustdoc-scrape-examples-multiple/scrape.mk +++ b/tests/run-make/rustdoc-scrape-examples-multiple/scrape.mk @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUTPUT_DIR := "$(TMPDIR)/rustdoc" diff --git a/tests/run-make/rustdoc-target-spec-json-path/Makefile b/tests/run-make/rustdoc-target-spec-json-path/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6d0bc4186f229206f98a812312ad161730d31860 --- /dev/null +++ b/tests/run-make/rustdoc-target-spec-json-path/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# Test that rustdoc will properly canonicalize the target spec json path just like rustc + +OUTPUT_DIR := "$(TMPDIR)/rustdoc-target-spec-json-path" + +all: + $(RUSTC) --crate-type lib dummy_core.rs --target target.json + $(RUSTDOC) -o $(OUTPUT_DIR) -L $(TMPDIR) my_crate.rs --target target.json diff --git a/tests/run-make/rustdoc-target-spec-json-path/dummy_core.rs b/tests/run-make/rustdoc-target-spec-json-path/dummy_core.rs new file mode 100644 index 0000000000000000000000000000000000000000..da27b7f3463da5e12803a2d12850aa88fbc21401 --- /dev/null +++ b/tests/run-make/rustdoc-target-spec-json-path/dummy_core.rs @@ -0,0 +1,2 @@ +#![feature(no_core)] +#![no_core] diff --git a/tests/run-make/rustdoc-target-spec-json-path/my_crate.rs b/tests/run-make/rustdoc-target-spec-json-path/my_crate.rs new file mode 100644 index 0000000000000000000000000000000000000000..12aa0822084751bffed522614f6f13f571f76435 --- /dev/null +++ b/tests/run-make/rustdoc-target-spec-json-path/my_crate.rs @@ -0,0 +1,3 @@ +#![feature(no_core)] +#![no_core] +extern crate dummy_core; diff --git a/tests/run-make/rustdoc-target-spec-json-path/target.json b/tests/run-make/rustdoc-target-spec-json-path/target.json new file mode 100644 index 0000000000000000000000000000000000000000..34357182c205e39e9294ce0ec782bc1c4f9ac8d3 --- /dev/null +++ b/tests/run-make/rustdoc-target-spec-json-path/target.json @@ -0,0 +1,38 @@ +{ + "arch": "x86_64", + "cpu": "x86-64", + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", + "dynamic-linking": true, + "env": "gnu", + "executables": true, + "has-elf-tls": true, + "has-rpath": true, + "linker-is-gnu": true, + "llvm-target": "x86_64-unknown-linux-gnu", + "max-atomic-width": 64, + "os": "linux", + "position-independent-executables": true, + "pre-link-args": { + "gcc": [ + "-m64" + ] + }, + "relro-level": "full", + "stack-probes": { + "kind": "inline-or-call", + "min-llvm-version-for-inline": [ + 11, + 0, + 1 + ] + }, + "supported-sanitizers": [ + "address", + "leak", + "memory", + "thread" + ], + "target-family": "unix", + "target-pointer-width": "64" +} diff --git a/tests/run-make/rustdoc-themes/Makefile b/tests/run-make/rustdoc-themes/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a6d9a43addf6985478fa50cdcae3a2b27d874da1 --- /dev/null +++ b/tests/run-make/rustdoc-themes/Makefile @@ -0,0 +1,10 @@ +include ../tools.mk + +# Test that rustdoc will properly load in a theme file and display it in the theme selector. + +OUTPUT_DIR := "$(TMPDIR)/rustdoc-themes" + +all: + cp $(S)/src/librustdoc/html/static/css/themes/light.css $(TMPDIR)/test.css + $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs --theme $(TMPDIR)/test.css + $(HTMLDOCCK) $(OUTPUT_DIR) foo.rs diff --git a/tests/run-make/rustdoc-themes/foo.rs b/tests/run-make/rustdoc-themes/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..995544aeff998032afe209c2518bec27de2ec215 --- /dev/null +++ b/tests/run-make/rustdoc-themes/foo.rs @@ -0,0 +1,4 @@ +// @has test.css +// @has foo/struct.Foo.html +// @has - '//*[@id="rustdoc-vars"]/@data-themes' 'test' +pub struct Foo; diff --git a/tests/run-make/rustdoc-verify-output-files/Makefile b/tests/run-make/rustdoc-verify-output-files/Makefile index 0666122e8abc62d91f817b08fdb02744b0d9d382..57ac7078d14d982ad24d6c24b8304a239c9f7da9 100644 --- a/tests/run-make/rustdoc-verify-output-files/Makefile +++ b/tests/run-make/rustdoc-verify-output-files/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUTPUT_DIR := "$(TMPDIR)/rustdoc" TMP_OUTPUT_DIR := "$(TMPDIR)/tmp-rustdoc" diff --git a/tests/run-make/rustdoc-with-out-dir-option/Makefile b/tests/run-make/rustdoc-with-out-dir-option/Makefile index b3c3f5230c187fd97ac152d90b32d1397ecce230..f5d5060ed13033ece92d7ae0fee603d63af515b0 100644 --- a/tests/run-make/rustdoc-with-out-dir-option/Makefile +++ b/tests/run-make/rustdoc-with-out-dir-option/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUTPUT_DIR := "$(TMPDIR)/rustdoc" diff --git a/tests/run-make/rustdoc-with-output-option/Makefile b/tests/run-make/rustdoc-with-output-option/Makefile index 02093a35cfc2af009a154194cfe9e307740a60b1..d0a8205a8ee55533aef350d8aba011c2d61d964d 100644 --- a/tests/run-make/rustdoc-with-output-option/Makefile +++ b/tests/run-make/rustdoc-with-output-option/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUTPUT_DIR := "$(TMPDIR)/rustdoc" diff --git a/tests/run-make/rustdoc-with-short-out-dir-option/Makefile b/tests/run-make/rustdoc-with-short-out-dir-option/Makefile index dc5056a86dda2bbd029cb58ff0e970724f41ddac..1b9327bce22506e17d41bca23e87e4dfbd072c6b 100644 --- a/tests/run-make/rustdoc-with-short-out-dir-option/Makefile +++ b/tests/run-make/rustdoc-with-short-out-dir-option/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk OUTPUT_DIR := "$(TMPDIR)/rustdoc" diff --git a/tests/run-make/sanitizer-cdylib-link/Makefile b/tests/run-make/sanitizer-cdylib-link/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..691585268bfe96812fdd220462d802a800b9a357 --- /dev/null +++ b/tests/run-make/sanitizer-cdylib-link/Makefile @@ -0,0 +1,16 @@ +# needs-sanitizer-support +# needs-sanitizer-address + +include ../tools.mk + +LOG := $(TMPDIR)/log.txt + +# This test builds a shared object, then an executable that links it as a native +# rust library (contrast to an rlib). The shared library and executable both +# are compiled with address sanitizer, and we assert that a fault in the cdylib +# is correctly detected. + +all: + $(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) library.rs + $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs + LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow diff --git a/tests/run-make/sanitizer-cdylib-link/library.rs b/tests/run-make/sanitizer-cdylib-link/library.rs new file mode 100644 index 0000000000000000000000000000000000000000..f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6 --- /dev/null +++ b/tests/run-make/sanitizer-cdylib-link/library.rs @@ -0,0 +1,5 @@ +#[no_mangle] +pub extern "C" fn overflow() { + let xs = [0, 1, 2, 3]; + let _y = unsafe { *xs.as_ptr().offset(4) }; +} diff --git a/tests/run-make/sanitizer-cdylib-link/program.rs b/tests/run-make/sanitizer-cdylib-link/program.rs new file mode 100644 index 0000000000000000000000000000000000000000..ef053aa2e7a3ad21312463430b37c4532cd95475 --- /dev/null +++ b/tests/run-make/sanitizer-cdylib-link/program.rs @@ -0,0 +1,7 @@ +extern "C" { + fn overflow(); +} + +fn main() { + unsafe { overflow() } +} diff --git a/tests/run-make/sanitizer-dylib-link/Makefile b/tests/run-make/sanitizer-dylib-link/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b0a91e5b197d781e129027bca06332233675de08 --- /dev/null +++ b/tests/run-make/sanitizer-dylib-link/Makefile @@ -0,0 +1,16 @@ +# needs-sanitizer-support +# needs-sanitizer-address + +include ../tools.mk + +LOG := $(TMPDIR)/log.txt + +# This test builds a shared object, then an executable that links it as a native +# rust library (contrast to an rlib). The shared library and executable both +# are compiled with address sanitizer, and we assert that a fault in the dylib +# is correctly detected. + +all: + $(RUSTC) -g -Z sanitizer=address --crate-type dylib --target $(TARGET) library.rs + $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -llibrary program.rs + LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow diff --git a/tests/run-make/sanitizer-dylib-link/library.rs b/tests/run-make/sanitizer-dylib-link/library.rs new file mode 100644 index 0000000000000000000000000000000000000000..f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6 --- /dev/null +++ b/tests/run-make/sanitizer-dylib-link/library.rs @@ -0,0 +1,5 @@ +#[no_mangle] +pub extern "C" fn overflow() { + let xs = [0, 1, 2, 3]; + let _y = unsafe { *xs.as_ptr().offset(4) }; +} diff --git a/tests/run-make/sanitizer-dylib-link/program.rs b/tests/run-make/sanitizer-dylib-link/program.rs new file mode 100644 index 0000000000000000000000000000000000000000..ef053aa2e7a3ad21312463430b37c4532cd95475 --- /dev/null +++ b/tests/run-make/sanitizer-dylib-link/program.rs @@ -0,0 +1,7 @@ +extern "C" { + fn overflow(); +} + +fn main() { + unsafe { overflow() } +} diff --git a/tests/run-make/sanitizer-staticlib-link/Makefile b/tests/run-make/sanitizer-staticlib-link/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7b1a286ed121d2fd73993b3312482bab076bf79c --- /dev/null +++ b/tests/run-make/sanitizer-staticlib-link/Makefile @@ -0,0 +1,20 @@ +# needs-sanitizer-support +# needs-sanitizer-address + +include ../tools.mk + +# This test first builds a staticlib with AddressSanitizer and checks that +# linking it to an executable fails due to the missing sanitizer runtime. +# It then builds an executable linking to the staticlib and checks that +# the fault in the staticlib is detected correctly. + +# Note that checking for the link failure actually checks two things at once: +# 1) That the library has the sanitizer intrumentation +# 2) and that library does not have the sanitizer runtime + +all: + $(RUSTC) -g -Z sanitizer=address --crate-type staticlib --target $(TARGET) library.rs + ! $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) $(EXTRACFLAGS) $(EXTRACXXFLAGS) + $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -L . program.rs + LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow + diff --git a/tests/run-make/sanitizer-staticlib-link/library.rs b/tests/run-make/sanitizer-staticlib-link/library.rs new file mode 100644 index 0000000000000000000000000000000000000000..f2a52cb5ca1c50faff3b60499fe6a46f2c3ddeb6 --- /dev/null +++ b/tests/run-make/sanitizer-staticlib-link/library.rs @@ -0,0 +1,5 @@ +#[no_mangle] +pub extern "C" fn overflow() { + let xs = [0, 1, 2, 3]; + let _y = unsafe { *xs.as_ptr().offset(4) }; +} diff --git a/tests/run-make/sanitizer-staticlib-link/program.c b/tests/run-make/sanitizer-staticlib-link/program.c new file mode 100644 index 0000000000000000000000000000000000000000..735e2b147fd9e91f8b0a7cd508dd860f4a96c094 --- /dev/null +++ b/tests/run-make/sanitizer-staticlib-link/program.c @@ -0,0 +1,6 @@ +void overflow(); + +int main() { + overflow(); + return 0; +} diff --git a/tests/run-make/sanitizer-staticlib-link/program.rs b/tests/run-make/sanitizer-staticlib-link/program.rs new file mode 100644 index 0000000000000000000000000000000000000000..ec59bdb11c889eb86412857b1d10be205cde6adc --- /dev/null +++ b/tests/run-make/sanitizer-staticlib-link/program.rs @@ -0,0 +1,10 @@ +#[link(name = "library")] +extern "C" { + fn overflow(); +} + +fn main() { + unsafe { + overflow(); + } +} diff --git a/tests/run-make/separate-link-fail/Makefile b/tests/run-make/separate-link-fail/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..bfd18fbf972d62e5eec8c4cd3c432456d0bfb7bb --- /dev/null +++ b/tests/run-make/separate-link-fail/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + echo 'fn main(){}' > $(TMPDIR)/main.rs + # Make sure that this fails + ! $(RUSTC) -Z link-only $(TMPDIR)/main.rs 2> $(TMPDIR)/stderr.txt + $(CGREP) "The input does not look like a .rlink file" < $(TMPDIR)/stderr.txt diff --git a/tests/run-make/separate-link/Makefile b/tests/run-make/separate-link/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d01158d9f5fb0b61393582209b18af7187aacbbc --- /dev/null +++ b/tests/run-make/separate-link/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + echo 'fn main(){}' | $(RUSTC) -Z no-link - + $(RUSTC) -Z link-only $(TMPDIR)/rust_out.rlink + $(call RUN,rust_out) diff --git a/tests/run-make/sepcomp-cci-copies/Makefile b/tests/run-make/sepcomp-cci-copies/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..df289d0b0b1a2df67dc459f90c53a826530ece7c --- /dev/null +++ b/tests/run-make/sepcomp-cci-copies/Makefile @@ -0,0 +1,12 @@ +include ../tools.mk + +# Check that cross-crate inlined items are inlined in all compilation units +# that refer to them, and not in any other compilation units. +# Note that we have to pass `-C codegen-units=6` because up to two CGUs may be +# created for each source module (see `rustc_const_eval::monomorphize::partitioning`). + +all: + $(RUSTC) cci_lib.rs + $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=6 \ + -Z inline-in-all-cgus + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ .*cci_fn)" -eq "2" ] diff --git a/tests/run-make/sepcomp-cci-copies/cci_lib.rs b/tests/run-make/sepcomp-cci-copies/cci_lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..869d4a6cd3e4ed0123bd26bfac897a47d2f56494 --- /dev/null +++ b/tests/run-make/sepcomp-cci-copies/cci_lib.rs @@ -0,0 +1,6 @@ +#![crate_type = "rlib"] + +#[inline] +pub fn cci_fn() -> usize { + 1234 +} diff --git a/tests/run-make/sepcomp-cci-copies/foo.rs b/tests/run-make/sepcomp-cci-copies/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..ba251fcb0ac24c99bf9b22c4868a5c710a6d65f8 --- /dev/null +++ b/tests/run-make/sepcomp-cci-copies/foo.rs @@ -0,0 +1,25 @@ +extern crate cci_lib; +use cci_lib::cci_fn; + +fn call1() -> usize { + cci_fn() +} + +mod a { + use cci_lib::cci_fn; + pub fn call2() -> usize { + cci_fn() + } +} + +mod b { + pub fn call3() -> usize { + 0 + } +} + +fn main() { + call1(); + a::call2(); + b::call3(); +} diff --git a/tests/run-make/sepcomp-inlining/Makefile b/tests/run-make/sepcomp-inlining/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..327aeb75e5eda5f2eece2c20ad7ca4b50d35eac5 --- /dev/null +++ b/tests/run-make/sepcomp-inlining/Makefile @@ -0,0 +1,15 @@ +include ../tools.mk + +# Test that #[inline] functions still get inlined across compilation unit +# boundaries. Compilation should produce three IR files, but only the two +# compilation units that have a usage of the #[inline] function should +# contain a definition. Also, the non-#[inline] function should be defined +# in only one compilation unit. + +all: + $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=3 \ + -Z inline-in-all-cgus + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ i32\ .*inlined)" -eq "0" ] + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ internal\ i32\ .*inlined)" -eq "2" ] + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ hidden\ i32\ .*normal)" -eq "1" ] + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c declare\ hidden\ i32\ .*normal)" -eq "2" ] diff --git a/tests/run-make/sepcomp-inlining/foo.rs b/tests/run-make/sepcomp-inlining/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..2fe5f9cb726612b6ab87f90b98f8debbd1288f66 --- /dev/null +++ b/tests/run-make/sepcomp-inlining/foo.rs @@ -0,0 +1,30 @@ +#![feature(start)] + +#[inline] +fn inlined() -> u32 { + 1234 +} + +fn normal() -> u32 { + 2345 +} + +mod a { + pub fn f() -> u32 { + ::inlined() + ::normal() + } +} + +mod b { + pub fn f() -> u32 { + ::inlined() + ::normal() + } +} + +#[start] +fn start(_: isize, _: *const *const u8) -> isize { + a::f(); + b::f(); + + 0 +} diff --git a/tests/run-make/sepcomp-separate/Makefile b/tests/run-make/sepcomp-separate/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..62cf54a88fbe9dfa15581b72e47dd686838ce0c1 --- /dev/null +++ b/tests/run-make/sepcomp-separate/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# Test that separate compilation actually puts code into separate compilation +# units. `foo.rs` defines `magic_fn` in three different modules, which should +# wind up in three different compilation units. + +all: + $(RUSTC) foo.rs --emit=llvm-ir -C codegen-units=3 + [ "$$(cat "$(TMPDIR)"/foo.*.ll | grep -c define\ .*magic_fn)" -eq "3" ] diff --git a/tests/run-make/sepcomp-separate/foo.rs b/tests/run-make/sepcomp-separate/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..169bafa9b3a5018383ae9c7f2b8b80e7d7ddc298 --- /dev/null +++ b/tests/run-make/sepcomp-separate/foo.rs @@ -0,0 +1,21 @@ +fn magic_fn() -> usize { + 1234 +} + +mod a { + pub fn magic_fn() -> usize { + 2345 + } +} + +mod b { + pub fn magic_fn() -> usize { + 3456 + } +} + +fn main() { + magic_fn(); + a::magic_fn(); + b::magic_fn(); +} diff --git a/tests/run-make/share-generics-dylib/Makefile b/tests/run-make/share-generics-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9d97eca80d3f5f0146380b6264b9bba7ec43d25b --- /dev/null +++ b/tests/run-make/share-generics-dylib/Makefile @@ -0,0 +1,23 @@ +# ignore-cross-compile +# This test makes sure all generic instances get re-exported from Rust dylibs for use by +# `-Zshare-generics`. There are two rlibs (`instance_provider_a` and `instance_provider_b`) +# which both provide an instance of `Cell::set`. There is `instance_user_dylib` which is +# supposed to re-export both these instances, and then there are `instance_user_a_rlib` and +# `instance_user_b_rlib` which each rely on a specific instance to be available. +# +# In the end everything is linked together into `linked_leaf`. If `instance_user_dylib` does +# not export both then we'll get an `undefined reference` error for one of the instances. +# +# This is regression test for https://github.com/rust-lang/rust/issues/67276. + +include ../tools.mk + +COMMON_ARGS=-Cprefer-dynamic -Zshare-generics=yes -Ccodegen-units=1 -Csymbol-mangling-version=v0 + +all: + $(RUSTC) instance_provider_a.rs $(COMMON_ARGS) --crate-type=rlib + $(RUSTC) instance_provider_b.rs $(COMMON_ARGS) --crate-type=rlib + $(RUSTC) instance_user_dylib.rs $(COMMON_ARGS) --crate-type=dylib + $(RUSTC) instance_user_a_rlib.rs $(COMMON_ARGS) --crate-type=rlib + $(RUSTC) instance_user_b_rlib.rs $(COMMON_ARGS) --crate-type=rlib + $(RUSTC) linked_leaf.rs $(COMMON_ARGS) --crate-type=bin diff --git a/tests/run-make/share-generics-dylib/instance_provider_a.rs b/tests/run-make/share-generics-dylib/instance_provider_a.rs new file mode 100644 index 0000000000000000000000000000000000000000..b4e125ac0523ae72b491238fa0fe43afd5c68057 --- /dev/null +++ b/tests/run-make/share-generics-dylib/instance_provider_a.rs @@ -0,0 +1,6 @@ +use std::cell::Cell; + +pub fn foo() { + let a: Cell = Cell::new(1); + a.set(123); +} diff --git a/tests/run-make/share-generics-dylib/instance_provider_b.rs b/tests/run-make/share-generics-dylib/instance_provider_b.rs new file mode 100644 index 0000000000000000000000000000000000000000..f613db873e6c6c41d6e1380db7fcf755a4328f34 --- /dev/null +++ b/tests/run-make/share-generics-dylib/instance_provider_b.rs @@ -0,0 +1,6 @@ +use std::cell::Cell; + +pub fn foo() { + let b: Cell = Cell::new(1); + b.set(123); +} diff --git a/tests/run-make/share-generics-dylib/instance_user_a_rlib.rs b/tests/run-make/share-generics-dylib/instance_user_a_rlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..c8e6ab95cf9ceccf9e40bf25005b1c1952098a44 --- /dev/null +++ b/tests/run-make/share-generics-dylib/instance_user_a_rlib.rs @@ -0,0 +1,9 @@ +extern crate instance_provider_a as upstream; +use std::cell::Cell; + +pub fn foo() { + upstream::foo(); + + let b: Cell = Cell::new(1); + b.set(123); +} diff --git a/tests/run-make/share-generics-dylib/instance_user_b_rlib.rs b/tests/run-make/share-generics-dylib/instance_user_b_rlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..7c34af6d0dc8705842175a0be2ca1bc0024d57be --- /dev/null +++ b/tests/run-make/share-generics-dylib/instance_user_b_rlib.rs @@ -0,0 +1,9 @@ +extern crate instance_provider_b as upstream; +use std::cell::Cell; + +pub fn foo() { + upstream::foo(); + + let b: Cell = Cell::new(1); + b.set(123); +} diff --git a/tests/run-make/share-generics-dylib/instance_user_dylib.rs b/tests/run-make/share-generics-dylib/instance_user_dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..7c8368eec654b4e8f5d256871d90a0f96048dc97 --- /dev/null +++ b/tests/run-make/share-generics-dylib/instance_user_dylib.rs @@ -0,0 +1,7 @@ +extern crate instance_provider_a; +extern crate instance_provider_b; + +pub fn foo() { + instance_provider_a::foo(); + instance_provider_b::foo(); +} diff --git a/tests/run-make/share-generics-dylib/linked_leaf.rs b/tests/run-make/share-generics-dylib/linked_leaf.rs new file mode 100644 index 0000000000000000000000000000000000000000..e510dad691c572e97b37348c28b69652e3087ba7 --- /dev/null +++ b/tests/run-make/share-generics-dylib/linked_leaf.rs @@ -0,0 +1,15 @@ +extern crate instance_user_dylib; +extern crate instance_user_a_rlib; +extern crate instance_user_b_rlib; + +use std::cell::Cell; + +fn main() { + + instance_user_a_rlib::foo(); + instance_user_b_rlib::foo(); + instance_user_dylib::foo(); + + let a: Cell = Cell::new(1); + a.set(123); +} diff --git a/tests/run-make/simd-ffi/Makefile b/tests/run-make/simd-ffi/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..297353470411f8133369c5f8285a32b8713a575c --- /dev/null +++ b/tests/run-make/simd-ffi/Makefile @@ -0,0 +1,47 @@ +include ../tools.mk + +TARGETS = +ifeq ($(filter arm,$(LLVM_COMPONENTS)),arm) +# construct a fairly exhaustive list of platforms that we +# support. These ones don't follow a pattern +TARGETS += arm-linux-androideabi arm-unknown-linux-gnueabihf arm-unknown-linux-gnueabi +endif + +ifeq ($(filter x86,$(LLVM_COMPONENTS)),x86) +X86_ARCHS = i686 x86_64 +else +X86_ARCHS = +endif + +# these ones do, each OS lists the architectures it supports +LINUX=$(filter aarch64 mips,$(LLVM_COMPONENTS)) $(X86_ARCHS) +ifeq ($(filter mips,$(LLVM_COMPONENTS)),mips) +LINUX += mipsel +endif + +WINDOWS=$(X86_ARCHS) +# fails with: failed to get iphonesimulator SDK path: no such file or directory +#IOS=i386 aarch64 armv7 +DARWIN=$(X86_ARCHS) + +$(foreach arch,$(LINUX),$(eval TARGETS += $(arch)-unknown-linux-gnu)) +$(foreach arch,$(WINDOWS),$(eval TARGETS += $(arch)-pc-windows-gnu)) +#$(foreach arch,$(IOS),$(eval TARGETS += $(arch)-apple-ios)) +$(foreach arch,$(DARWIN),$(eval TARGETS += $(arch)-apple-darwin)) + +all: $(TARGETS) + +define MK_TARGETS +# compile the rust file to the given target, but only to asm and IR +# form, to avoid having to have an appropriate linker. +# +# we need some features because the integer SIMD instructions are not +# enabled by-default for i686 and ARM; these features will be invalid +# on some platforms, but LLVM just prints a warning so that's fine for +# now. +$(1): simd.rs + $$(RUSTC) --target=$(1) --emit=llvm-ir,asm simd.rs \ + -C target-feature='+neon,+sse2' -C extra-filename=-$(1) +endef + +$(foreach targetxxx,$(TARGETS),$(eval $(call MK_TARGETS,$(targetxxx)))) diff --git a/tests/run-make/simd-ffi/simd.rs b/tests/run-make/simd-ffi/simd.rs new file mode 100644 index 0000000000000000000000000000000000000000..d11cfd77c5bf91b5a39f7bb05b7f4789862e7e63 --- /dev/null +++ b/tests/run-make/simd-ffi/simd.rs @@ -0,0 +1,82 @@ +// ensures that public symbols are not removed completely +#![crate_type = "lib"] +// we can compile to a variety of platforms, because we don't need +// cross-compiled standard libraries. +#![feature(no_core, auto_traits)] +#![no_core] +#![feature(repr_simd, simd_ffi, link_llvm_intrinsics, lang_items, rustc_attrs)] + +#[derive(Copy)] +#[repr(simd)] +pub struct f32x4(f32, f32, f32, f32); + +extern "C" { + #[link_name = "llvm.sqrt.v4f32"] + fn vsqrt(x: f32x4) -> f32x4; +} + +pub fn foo(x: f32x4) -> f32x4 { + unsafe { vsqrt(x) } +} + +#[derive(Copy)] +#[repr(simd)] +pub struct i32x4(i32, i32, i32, i32); + +extern "C" { + // _mm_sll_epi32 + #[cfg(any(target_arch = "x86", target_arch = "x86-64"))] + #[link_name = "llvm.x86.sse2.psll.d"] + fn integer(a: i32x4, b: i32x4) -> i32x4; + + // vmaxq_s32 + #[cfg(target_arch = "arm")] + #[link_name = "llvm.arm.neon.vmaxs.v4i32"] + fn integer(a: i32x4, b: i32x4) -> i32x4; + // vmaxq_s32 + #[cfg(target_arch = "aarch64")] + #[link_name = "llvm.aarch64.neon.maxs.v4i32"] + fn integer(a: i32x4, b: i32x4) -> i32x4; + + // just some substitute foreign symbol, not an LLVM intrinsic; so + // we still get type checking, but not as detailed as (ab)using + // LLVM. + #[cfg(not(any( + target_arch = "x86", + target_arch = "x86-64", + target_arch = "arm", + target_arch = "aarch64" + )))] + fn integer(a: i32x4, b: i32x4) -> i32x4; +} + +pub fn bar(a: i32x4, b: i32x4) -> i32x4 { + unsafe { integer(a, b) } +} + +#[lang = "sized"] +pub trait Sized {} + +#[lang = "copy"] +pub trait Copy {} + +impl Copy for f32 {} +impl Copy for i32 {} + +pub mod marker { + pub use Copy; +} + +#[lang = "freeze"] +auto trait Freeze {} + +#[macro_export] +#[rustc_builtin_macro] +macro_rules! Copy { + () => {}; +} +#[macro_export] +#[rustc_builtin_macro] +macro_rules! derive { + () => {}; +} diff --git a/tests/run-make/simple-dylib/Makefile b/tests/run-make/simple-dylib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f3e1c1da88cecfd29fe93bb783589da6c7a7db97 --- /dev/null +++ b/tests/run-make/simple-dylib/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk +all: + $(RUSTC) bar.rs --crate-type=dylib -C prefer-dynamic + $(RUSTC) foo.rs + $(call RUN,foo) diff --git a/tests/run-make/simple-dylib/bar.rs b/tests/run-make/simple-dylib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/simple-dylib/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/simple-dylib/foo.rs b/tests/run-make/simple-dylib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c --- /dev/null +++ b/tests/run-make/simple-dylib/foo.rs @@ -0,0 +1,5 @@ +extern crate bar; + +fn main() { + bar::bar(); +} diff --git a/tests/run-make/simple-rlib/Makefile b/tests/run-make/simple-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..28df61a15478d90d3bf85801076ceb61d0d1a2e3 --- /dev/null +++ b/tests/run-make/simple-rlib/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk +all: + $(RUSTC) bar.rs --crate-type=rlib + $(RUSTC) foo.rs + $(call RUN,foo) diff --git a/tests/run-make/simple-rlib/bar.rs b/tests/run-make/simple-rlib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/simple-rlib/bar.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/simple-rlib/foo.rs b/tests/run-make/simple-rlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..8d68535e3b647edfaca1770ebacc4b7bbcf0ce1c --- /dev/null +++ b/tests/run-make/simple-rlib/foo.rs @@ -0,0 +1,5 @@ +extern crate bar; + +fn main() { + bar::bar(); +} diff --git a/tests/run-make/split-debuginfo/Makefile b/tests/run-make/split-debuginfo/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..71e014c1f71471b32a0c06cc5803dd79652c235f --- /dev/null +++ b/tests/run-make/split-debuginfo/Makefile @@ -0,0 +1,309 @@ +# ignore-cross-compile +include ../tools.mk + +all: off packed unpacked + +ifeq ($(UNAME),Darwin) +# If disabled, don't run `dsymutil`. +off: + rm -rf $(TMPDIR)/*.dSYM + $(RUSTC) foo.rs -g -C split-debuginfo=off + [ ! -d $(TMPDIR)/foo.dSYM ] + +# Packed by default, but only if debuginfo is requested +packed: + rm -rf $(TMPDIR)/*.dSYM + $(RUSTC) foo.rs + [ ! -d $(TMPDIR)/foo.dSYM ] + rm -rf $(TMPDIR)/*.dSYM + $(RUSTC) foo.rs -g + [ -d $(TMPDIR)/foo.dSYM ] + rm -rf $(TMPDIR)/*.dSYM + $(RUSTC) foo.rs -g -C split-debuginfo=packed + [ -d $(TMPDIR)/foo.dSYM ] + rm -rf $(TMPDIR)/*.dSYM + +# Object files are preserved with unpacked and `dsymutil` isn't run +unpacked: + $(RUSTC) foo.rs -g -C split-debuginfo=unpacked + ls $(TMPDIR)/*.o + [ ! -d $(TMPDIR)/foo.dSYM ] +else +ifdef IS_WINDOWS +# Windows only supports packed debuginfo - nothing to test. +off: +packed: +unpacked: +else +# Some non-Windows, non-Darwin platforms are not stable, and some are. +ifeq ($(UNAME),Linux) + UNSTABLEOPTS := +else + UNSTABLEOPTS := -Zunstable-options +endif + +# - Debuginfo in `.o` files +# - `.o` deleted +# - `.dwo` never created +# - `.dwp` never created +off: + $(RUSTC) foo.rs -g -C $(UNSTABLEOPTS) split-debuginfo=off + [ ! -f $(TMPDIR)/*.dwp ] + [ ! -f $(TMPDIR)/*.dwo ] + $(RUSTC) foo.rs -g + [ ! -f $(TMPDIR)/*.dwp ] + [ ! -f $(TMPDIR)/*.dwo ] + +packed: packed-split packed-single packed-lto packed-remapped packed-crosscrate + +# - Debuginfo in `.dwo` files +# - `.o` deleted +# - `.dwo` deleted +# - `.dwp` present +packed-split: + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=split + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/foo.dwp + rm $(TMPDIR)/$(call BIN,foo) + +# - Debuginfo in `.o` files +# - `.o` deleted +# - `.dwo` never created +# - `.dwp` present +packed-single: + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=single + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/foo.dwp + rm $(TMPDIR)/$(call BIN,foo) + +packed-lto: packed-lto-split packed-lto-single + +# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated +# - `.o` never created +# - `.dwo` never created +# - `.dwp` never created +packed-lto-split: + $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split \ + --crate-type=rlib -Clinker-plugin-lto + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/libbaz.rlib + +# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated +# - `.o` never created +# - `.dwo` never created +# - `.dwp` never created +packed-lto-single: + $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=single \ + --crate-type=rlib -Clinker-plugin-lto + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/libbaz.rlib + +packed-remapped: packed-remapped-split packed-remapped-single + +# - Debuginfo in `.dwo` files +# - `.o` and binary refer to remapped `.dwo` paths which do not exist +# - `.o` deleted +# - `.dwo` deleted +# - `.dwp` present +packed-remapped-split: + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ + -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g + objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/foo.dwp + rm $(TMPDIR)/$(call BIN,foo) + +# - Debuginfo in `.o` files +# - `.o` and binary refer to remapped `.o` paths which do not exist +# - `.o` deleted +# - `.dwo` never created +# - `.dwp` present +packed-remapped-single: + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ + -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g + objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/foo.dwp + rm $(TMPDIR)/$(call BIN,foo) + +packed-crosscrate: packed-crosscrate-split packed-crosscrate-single + +# - Debuginfo in `.dwo` files +# - (bar) `.rlib` file created, contains `.dwo` +# - (bar) `.o` deleted +# - (bar) `.dwo` deleted +# - (bar) `.dwp` never created +# - (main) `.o` deleted +# - (main) `.dwo` deleted +# - (main) `.dwp` present +packed-crosscrate-split: + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ + -Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs + ls $(TMPDIR)/*.rlib + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ + -C split-debuginfo=packed -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/main.dwp + rm $(TMPDIR)/$(call BIN,main) + +# - Debuginfo in `.o` files +# - (bar) `.rlib` file created, contains `.o` +# - (bar) `.o` deleted +# - (bar) `.dwo` never created +# - (bar) `.dwp` never created +# - (main) `.o` deleted +# - (main) `.dwo` never created +# - (main) `.dwp` present +packed-crosscrate-single: + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ + -Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs + ls $(TMPDIR)/*.rlib + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ + -C split-debuginfo=packed -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + rm $(TMPDIR)/main.dwp + rm $(TMPDIR)/$(call BIN,main) + +unpacked: unpacked-split unpacked-single unpacked-lto unpacked-remapped unpacked-crosscrate + +# - Debuginfo in `.dwo` files +# - `.o` deleted +# - `.dwo` present +# - `.dwp` never created +unpacked-split: + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split + ls $(TMPDIR)/*.o && exit 1 || exit 0 + rm $(TMPDIR)/*.dwo + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,foo) + +# - Debuginfo in `.o` files +# - `.o` present +# - `.dwo` never created +# - `.dwp` never created +unpacked-single: + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single + ls $(TMPDIR)/*.o + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,foo) + +unpacked-lto: packed-lto-split packed-lto-single + +# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated +# - `.o` never created +# - `.dwo` never created +# - `.dwp` never created +unpacked-lto-split: + $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=split \ + --crate-type=rlib -Clinker-plugin-lto + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/libbaz.rlib + +# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated +# - `.o` never created +# - `.dwo` never created +# - `.dwp` never created +unpacked-lto-single: + $(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=single \ + --crate-type=rlib -Clinker-plugin-lto + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/libbaz.rlib + +unpacked-remapped: unpacked-remapped-split unpacked-remapped-single + +# - Debuginfo in `.dwo` files +# - `.o` and binary refer to remapped `.dwo` paths which do not exist +# - `.o` deleted +# - `.dwo` present +# - `.dwp` never created +unpacked-remapped-split: + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ + -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g + objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 + ls $(TMPDIR)/*.o && exit 1 || exit 0 + rm $(TMPDIR)/*.dwo + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,foo) + +# - Debuginfo in `.o` files +# - `.o` and binary refer to remapped `.o` paths which do not exist +# - `.o` present +# - `.dwo` never created +# - `.dwp` never created +unpacked-remapped-single: + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ + -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g + objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 + rm $(TMPDIR)/*.o + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,foo) + +unpacked-crosscrate: unpacked-crosscrate-split unpacked-crosscrate-single + +# - Debuginfo in `.dwo` files +# - (bar) `.rlib` file created, contains `.dwo` +# - (bar) `.o` deleted +# - (bar) `.dwo` present +# - (bar) `.dwp` never created +# - (main) `.o` deleted +# - (main) `.dwo` present +# - (main) `.dwp` never created +unpacked-crosscrate-split: + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \ + -Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs + ls $(TMPDIR)/*.rlib + ls $(TMPDIR)/*.o && exit 1 || exit 0 + ls $(TMPDIR)/*.dwo + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ + -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs + ls $(TMPDIR)/*.o && exit 1 || exit 0 + rm $(TMPDIR)/*.dwo + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,main) + +# - Debuginfo in `.o` files +# - (bar) `.rlib` file created, contains `.o` +# - (bar) `.o` present +# - (bar) `.dwo` never created +# - (bar) `.dwp` never created +# - (main) `.o` present +# - (main) `.dwo` never created +# - (main) `.dwp` never created +unpacked-crosscrate-single: + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \ + -Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs + ls $(TMPDIR)/*.rlib + ls $(TMPDIR)/*.o + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \ + -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs + ls $(TMPDIR)/*.o + ls $(TMPDIR)/*.dwo && exit 1 || exit 0 + ls $(TMPDIR)/*.dwp && exit 1 || exit 0 + rm $(TMPDIR)/$(call BIN,main) +endif +endif diff --git a/tests/run-make/split-debuginfo/bar.rs b/tests/run-make/split-debuginfo/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..07dd0715252cc346913b560ee70946ab9467e4aa --- /dev/null +++ b/tests/run-make/split-debuginfo/bar.rs @@ -0,0 +1,13 @@ +pub struct Bar { + x: u32, +} + +impl Bar { + pub fn print(&self) { + println!("{}", self.x); + } +} + +pub fn make_bar(x: u32) -> Bar { + Bar { x } +} diff --git a/tests/run-make/split-debuginfo/baz.rs b/tests/run-make/split-debuginfo/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..8b1a393741c96c03c3712b4c80b3d2bcd06959b6 --- /dev/null +++ b/tests/run-make/split-debuginfo/baz.rs @@ -0,0 +1 @@ +// empty diff --git a/tests/run-make/split-debuginfo/foo.rs b/tests/run-make/split-debuginfo/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..b058e540862343f7a2b2b791e78fdfc830dc65e3 --- /dev/null +++ b/tests/run-make/split-debuginfo/foo.rs @@ -0,0 +1,15 @@ +pub struct Foo { + x: u32, +} + +impl Foo { + pub fn print(&self) { + println!("{}", self.x); + } +} + +pub fn make_foo(x: u32) -> Foo { + Foo { x } +} + +fn main() {} diff --git a/tests/run-make/split-debuginfo/main.rs b/tests/run-make/split-debuginfo/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..21fa16e40a4abaa42ac9f0d68df9f20630979027 --- /dev/null +++ b/tests/run-make/split-debuginfo/main.rs @@ -0,0 +1,8 @@ +extern crate bar; + +use bar::{Bar, make_bar}; + +fn main() { + let b = make_bar(3); + b.print(); +} diff --git a/tests/run-make/stable-symbol-names/Makefile b/tests/run-make/stable-symbol-names/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..bbfb8e3888171cbb5c8a080a33882ee3e7910a6b --- /dev/null +++ b/tests/run-make/stable-symbol-names/Makefile @@ -0,0 +1,41 @@ +include ../tools.mk + +# The following command will: +# 1. dump the symbols of a library using `nm` +# 2. extract only those lines that we are interested in via `grep` +# 3. from those lines, extract just the symbol name via `sed`, which: +# * always starts with "_ZN" and ends with "E" (`legacy` mangling) +# * always starts with "_R" (`v0` mangling) +# 4. sort those symbol names for deterministic comparison +# 5. write the result into a file + +dump-symbols = nm "$(TMPDIR)/lib$(1).rlib" \ + | grep -E "$(2)" \ + | sed -E "s/.*(_ZN.*E|_R[a-zA-Z0-9_]*).*/\1/" \ + | sort \ + > "$(TMPDIR)/$(1)$(3).nm" + +# This test +# - compiles each of the two crates 2 times and makes sure each time we get +# exactly the same symbol names +# - makes sure that both crates agree on the same symbol names for monomorphic +# functions + +all: + $(RUSTC) stable-symbol-names1.rs + $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v1) + rm $(TMPDIR)/libstable_symbol_names1.rlib + $(RUSTC) stable-symbol-names1.rs + $(call dump-symbols,stable_symbol_names1,generic_|mono_,_v2) + cmp "$(TMPDIR)/stable_symbol_names1_v1.nm" "$(TMPDIR)/stable_symbol_names1_v2.nm" + + $(RUSTC) stable-symbol-names2.rs + $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v1) + rm $(TMPDIR)/libstable_symbol_names2.rlib + $(RUSTC) stable-symbol-names2.rs + $(call dump-symbols,stable_symbol_names2,generic_|mono_,_v2) + cmp "$(TMPDIR)/stable_symbol_names2_v1.nm" "$(TMPDIR)/stable_symbol_names2_v2.nm" + + $(call dump-symbols,stable_symbol_names1,mono_,_cross) + $(call dump-symbols,stable_symbol_names2,mono_,_cross) + cmp "$(TMPDIR)/stable_symbol_names1_cross.nm" "$(TMPDIR)/stable_symbol_names2_cross.nm" diff --git a/tests/run-make/stable-symbol-names/stable-symbol-names1.rs b/tests/run-make/stable-symbol-names/stable-symbol-names1.rs new file mode 100644 index 0000000000000000000000000000000000000000..b85a428278cd913eb74daccd4ab710c898d6b714 --- /dev/null +++ b/tests/run-make/stable-symbol-names/stable-symbol-names1.rs @@ -0,0 +1,31 @@ +#![crate_type="rlib"] + +pub trait Foo { + fn generic_method(); +} + +pub struct Bar; + +impl Foo for Bar { + fn generic_method() {} +} + +pub fn mono_function() { + Bar::generic_method::(); +} + +pub fn mono_function_lifetime<'a>(x: &'a u64) -> u64 { + *x +} + +pub fn generic_function(t: T) -> T { + t +} + +pub fn user() { + generic_function(0u32); + generic_function("abc"); + let x = 2u64; + generic_function(&x); + let _ = mono_function_lifetime(&x); +} diff --git a/tests/run-make/stable-symbol-names/stable-symbol-names2.rs b/tests/run-make/stable-symbol-names/stable-symbol-names2.rs new file mode 100644 index 0000000000000000000000000000000000000000..33df9d6c689881e7c289b8aab5f43de0834db7be --- /dev/null +++ b/tests/run-make/stable-symbol-names/stable-symbol-names2.rs @@ -0,0 +1,17 @@ +#![crate_type="rlib"] + +extern crate stable_symbol_names1; + +pub fn user() { + stable_symbol_names1::generic_function(1u32); + stable_symbol_names1::generic_function("def"); + let x = 2u64; + stable_symbol_names1::generic_function(&x); + stable_symbol_names1::mono_function(); + stable_symbol_names1::mono_function_lifetime(&0); +} + +pub fn trait_impl_test_function() { + use stable_symbol_names1::*; + Bar::generic_method::(); +} diff --git a/tests/run-make/static-dylib-by-default/Makefile b/tests/run-make/static-dylib-by-default/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..cdaab42d06c5c5ee49d6e803d1ff2deaa5db563f --- /dev/null +++ b/tests/run-make/static-dylib-by-default/Makefile @@ -0,0 +1,17 @@ +# ignore-cross-compile +include ../tools.mk + +TO_LINK := $(call DYLIB,bar) +ifdef IS_MSVC +LINK_ARG = $(TO_LINK:dll=dll.lib) +else +LINK_ARG = $(TO_LINK) +endif + +all: + $(RUSTC) foo.rs + $(RUSTC) bar.rs + $(CC) main.c $(call OUT_EXE,main) $(LINK_ARG) $(EXTRACFLAGS) + rm $(TMPDIR)/*.rlib + rm $(call DYLIB,foo) + $(call RUN,main) diff --git a/tests/run-make/static-dylib-by-default/bar.rs b/tests/run-make/static-dylib-by-default/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..14421165e2da1367b46f3909a606c80239be27c2 --- /dev/null +++ b/tests/run-make/static-dylib-by-default/bar.rs @@ -0,0 +1,8 @@ +#![crate_type = "dylib"] + +extern crate foo; + +#[no_mangle] +pub extern "C" fn bar() { + foo::foo(); +} diff --git a/tests/run-make/static-dylib-by-default/foo.rs b/tests/run-make/static-dylib-by-default/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..7ebec8720557dead6fe1fb805976a6751b54a3cb --- /dev/null +++ b/tests/run-make/static-dylib-by-default/foo.rs @@ -0,0 +1,4 @@ +#![crate_type = "rlib"] +#![crate_type = "dylib"] + +pub fn foo() {} diff --git a/tests/run-make/static-dylib-by-default/main.c b/tests/run-make/static-dylib-by-default/main.c new file mode 100644 index 0000000000000000000000000000000000000000..5f7f2c27cd353e21bd542e9354df8e1aa5bf6076 --- /dev/null +++ b/tests/run-make/static-dylib-by-default/main.c @@ -0,0 +1,6 @@ +extern void bar(); + +int main() { + bar(); + return 0; +} diff --git a/tests/run-make/static-extern-type/Makefile b/tests/run-make/static-extern-type/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..778971543221ef658f66436e99a93280f4ca3cfa --- /dev/null +++ b/tests/run-make/static-extern-type/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: $(call NATIVE_STATICLIB,define-foo) + $(RUSTC) -ldefine-foo use-foo.rs + $(call RUN,use-foo) || exit 1 diff --git a/tests/run-make/static-extern-type/define-foo.c b/tests/run-make/static-extern-type/define-foo.c new file mode 100644 index 0000000000000000000000000000000000000000..39be5acfa11182f4c46ed1f09f3c4bf27100499b --- /dev/null +++ b/tests/run-make/static-extern-type/define-foo.c @@ -0,0 +1,11 @@ +#include + +struct Foo { + uint8_t x; +}; + +struct Foo FOO = { 42 }; + +uint8_t bar(const struct Foo* foo) { + return foo->x; +} diff --git a/tests/run-make/static-extern-type/use-foo.rs b/tests/run-make/static-extern-type/use-foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..932b5b5944bc72d732f530e50fa268986e7400ad --- /dev/null +++ b/tests/run-make/static-extern-type/use-foo.rs @@ -0,0 +1,14 @@ +#![feature(extern_types)] + +extern "C" { + type Foo; + static FOO: Foo; + fn bar(foo: *const Foo) -> u8; +} + +fn main() { + unsafe { + let foo = &FOO; + assert_eq!(bar(foo), 42); + } +} diff --git a/tests/run-make/static-pie/Makefile b/tests/run-make/static-pie/Makefile index f4e6adf1b183cc676e76de3e9869f6d0d525a756..19c041d94284cb6203d6ccb650eaf23ce53483b0 100644 --- a/tests/run-make/static-pie/Makefile +++ b/tests/run-make/static-pie/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-x86_64 # only-linux diff --git a/tests/run-make/static-unwinding/Makefile b/tests/run-make/static-unwinding/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..dec94fb16f408399fe02afadf5c80f8f7267dd73 --- /dev/null +++ b/tests/run-make/static-unwinding/Makefile @@ -0,0 +1,7 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) lib.rs + $(RUSTC) main.rs + $(call RUN,main) diff --git a/tests/run-make/static-unwinding/lib.rs b/tests/run-make/static-unwinding/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..3fb1117a11059ec37e7ecfb02d1dd1338d07ad12 --- /dev/null +++ b/tests/run-make/static-unwinding/lib.rs @@ -0,0 +1,15 @@ +#![crate_type = "rlib"] + +pub static mut statik: isize = 0; + +struct A; +impl Drop for A { + fn drop(&mut self) { + unsafe { statik = 1; } + } +} + +pub fn callback(f: F) where F: FnOnce() { + let _a = A; + f(); +} diff --git a/tests/run-make/static-unwinding/main.rs b/tests/run-make/static-unwinding/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..0c66ea1aa07fc8e7dc05472110a5559d6f886078 --- /dev/null +++ b/tests/run-make/static-unwinding/main.rs @@ -0,0 +1,24 @@ +extern crate lib; + +use std::thread; + +static mut statik: isize = 0; + +struct A; +impl Drop for A { + fn drop(&mut self) { + unsafe { statik = 1; } + } +} + +fn main() { + thread::spawn(move|| { + let _a = A; + lib::callback(|| panic!()); + }).join().unwrap_err(); + + unsafe { + assert_eq!(lib::statik, 1); + assert_eq!(statik, 1); + } +} diff --git a/tests/run-make/staticlib-blank-lib/Makefile b/tests/run-make/staticlib-blank-lib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fcbf87758fb9c814657c152fb3ce769ff086906e --- /dev/null +++ b/tests/run-make/staticlib-blank-lib/Makefile @@ -0,0 +1,6 @@ +include ../tools.mk + +all: + $(AR) crus $(TMPDIR)/libfoo.a foo.rs + $(AR) d $(TMPDIR)/libfoo.a foo.rs + $(RUSTC) foo.rs diff --git a/tests/run-make/staticlib-blank-lib/foo.rs b/tests/run-make/staticlib-blank-lib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..bf48d069da9565dfd86d8505eb5a6fe6a3e67679 --- /dev/null +++ b/tests/run-make/staticlib-blank-lib/foo.rs @@ -0,0 +1,6 @@ +#![crate_type = "staticlib"] + +#[link(name = "foo", kind = "static")] +extern "C" {} + +fn main() {} diff --git a/tests/run-make/std-core-cycle/Makefile b/tests/run-make/std-core-cycle/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5ed6be905dffa2acbcae054e8e99ab668f7ceb84 --- /dev/null +++ b/tests/run-make/std-core-cycle/Makefile @@ -0,0 +1,17 @@ +# ignore-cross-compile +include ../tools.mk + +ifeq ($(UNAME),Darwin) +FLAGS := +else +ifdef IS_WINDOWS +FLAGS := +else +FLAGS := -C link-args=-Wl,--no-undefined +endif +endif + +all: + $(RUSTC) bar.rs + $(RUSTC) foo.rs $(FLAGS) + $(RUSTC) foo.rs $(FLAGS) -C panic=abort diff --git a/tests/run-make/std-core-cycle/bar.rs b/tests/run-make/std-core-cycle/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..9f5e7c29bddd70e15bb6916767d147b23c3eee3d --- /dev/null +++ b/tests/run-make/std-core-cycle/bar.rs @@ -0,0 +1,16 @@ +#![feature(allocator_api)] +#![crate_type = "rlib"] + +use std::alloc::*; + +pub struct A; + +unsafe impl GlobalAlloc for A { + unsafe fn alloc(&self, _: Layout) -> *mut u8 { + loop {} + } + + unsafe fn dealloc(&self, _ptr: *mut u8, _: Layout) { + loop {} + } +} diff --git a/tests/run-make/std-core-cycle/foo.rs b/tests/run-make/std-core-cycle/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..6aa6e1ac3c50599a528579ff4a9e04e59674ea71 --- /dev/null +++ b/tests/run-make/std-core-cycle/foo.rs @@ -0,0 +1,11 @@ +#![crate_type = "cdylib"] + +extern crate bar; + +#[global_allocator] +static A: bar::A = bar::A; + +#[no_mangle] +pub extern "C" fn a(a: u32, b: u32) -> u32 { + a / b +} diff --git a/tests/run-make/stdin-non-utf8/Makefile b/tests/run-make/stdin-non-utf8/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..709d4cf140895fc9aaf1be033f24caae977432d5 --- /dev/null +++ b/tests/run-make/stdin-non-utf8/Makefile @@ -0,0 +1,6 @@ +include ../tools.mk + +all: + cp non-utf8 $(TMPDIR)/non-utf.rs + cat $(TMPDIR)/non-utf.rs | $(RUSTC) - 2>&1 \ + | $(CGREP) "error: couldn't read from stdin, as it did not contain valid UTF-8" diff --git a/tests/run-make/stdin-non-utf8/non-utf8 b/tests/run-make/stdin-non-utf8/non-utf8 new file mode 100644 index 0000000000000000000000000000000000000000..bc87051a85299758c04bd9c796e7bdd4f8fa21b7 --- /dev/null +++ b/tests/run-make/stdin-non-utf8/non-utf8 @@ -0,0 +1 @@ +Ò diff --git a/tests/run-make/suspicious-library/Makefile b/tests/run-make/suspicious-library/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3b5ab3c53a5649486a2dfd39edb646e36474723b --- /dev/null +++ b/tests/run-make/suspicious-library/Makefile @@ -0,0 +1,8 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) foo.rs -C prefer-dynamic + touch $(call DYLIB,foo-something-special) + touch $(call DYLIB,foo-something-special2) + $(RUSTC) bar.rs diff --git a/tests/run-make/suspicious-library/bar.rs b/tests/run-make/suspicious-library/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..550c94cd0c6088597416562822a53bf859f31492 --- /dev/null +++ b/tests/run-make/suspicious-library/bar.rs @@ -0,0 +1,3 @@ +extern crate foo; + +fn main() { foo::foo() } diff --git a/tests/run-make/suspicious-library/foo.rs b/tests/run-make/suspicious-library/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..a382d8f2c7f55d9a163cab22351f6374f90884f6 --- /dev/null +++ b/tests/run-make/suspicious-library/foo.rs @@ -0,0 +1,3 @@ +#![crate_type = "dylib"] + +pub fn foo() {} diff --git a/tests/run-make/symbol-visibility/Makefile b/tests/run-make/symbol-visibility/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9159af214ca7b47b88111d81ac612959328113a2 --- /dev/null +++ b/tests/run-make/symbol-visibility/Makefile @@ -0,0 +1,123 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows-msvc + +NM=nm -D +CDYLIB_NAME=liba_cdylib.so +RDYLIB_NAME=liba_rust_dylib.so +PROC_MACRO_NAME=liba_proc_macro.so +EXE_NAME=an_executable +COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.so + +ifeq ($(UNAME),Darwin) +NM=nm -gU +CDYLIB_NAME=liba_cdylib.dylib +RDYLIB_NAME=liba_rust_dylib.dylib +PROC_MACRO_NAME=liba_proc_macro.dylib +EXE_NAME=an_executable +COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.dylib +endif + +ifdef IS_WINDOWS +NM=nm -g +CDYLIB_NAME=liba_cdylib.dll.a +RDYLIB_NAME=liba_rust_dylib.dll.a +PROC_MACRO_NAME=liba_proc_macro.dll +EXE_NAME=an_executable.exe +COMBINED_CDYLIB_NAME=libcombined_rlib_dylib.dll.a +endif + +# `grep` regex for symbols produced by either `legacy` or `v0` mangling +RE_ANY_RUST_SYMBOL="_ZN.*h.*E\|_R[a-zA-Z0-9_]+" + +all: + $(RUSTC) -Zshare-generics=no an_rlib.rs + $(RUSTC) -Zshare-generics=no a_cdylib.rs + $(RUSTC) -Zshare-generics=no a_rust_dylib.rs + $(RUSTC) -Zshare-generics=no a_proc_macro.rs + $(RUSTC) -Zshare-generics=no an_executable.rs + $(RUSTC) -Zshare-generics=no a_cdylib.rs --crate-name combined_rlib_dylib --crate-type=rlib,cdylib + + # Check that a cdylib exports its public #[no_mangle] functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] + # Check that a cdylib exports the public #[no_mangle] functions of dependencies + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + # Check that a cdylib DOES NOT export any public Rust functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] + + # Check that a Rust dylib exports its monomorphic functions + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rust_dylib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rust_dylib)" -eq "1" ] + # Check that a Rust dylib does not export generics if -Zshare-generics=no + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rust_dylib)" -eq "0" ] + + + # Check that a Rust dylib exports the monomorphic functions from its dependencies + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rlib)" -eq "1" ] + # Check that a Rust dylib does not export generics if -Zshare-generics=no + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rlib)" -eq "0" ] + + # Check that a proc macro exports its public #[no_mangle] functions + # FIXME(#99978) avoid exporting #[no_mangle] symbols for proc macros + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] + # Check that a proc macro exports the public #[no_mangle] functions of dependencies + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + # Check that a proc macro DOES NOT export any public Rust functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] + +# FIXME(nbdd0121): This is broken in MinGW, see https://github.com/rust-lang/rust/pull/95604#issuecomment-1101564032 +ifndef IS_WINDOWS + # Check that an executable does not export any dynamic symbols + [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "0" ] + [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_rust_function_from_exe)" -eq "0" ] +endif + + + # Check the combined case, where we generate a cdylib and an rlib in the same + # compilation session: + # Check that a cdylib exports its public #[no_mangle] functions + [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] + # Check that a cdylib exports the public #[no_mangle] functions of dependencies + [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + # Check that a cdylib DOES NOT export any public Rust functions + [ "$$($(NM) $(TMPDIR)/$(COMBINED_CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] + + + $(RUSTC) -Zshare-generics=yes an_rlib.rs + $(RUSTC) -Zshare-generics=yes a_cdylib.rs + $(RUSTC) -Zshare-generics=yes a_rust_dylib.rs + $(RUSTC) -Zshare-generics=yes a_proc_macro.rs + $(RUSTC) -Zshare-generics=yes an_executable.rs + + # Check that a cdylib exports its public #[no_mangle] functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] + # Check that a cdylib exports the public #[no_mangle] functions of dependencies + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + # Check that a cdylib DOES NOT export any public Rust functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] + + # Check that a Rust dylib exports its monomorphic functions, including generics this time + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rust_dylib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rust_dylib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rust_dylib)" -eq "1" ] + + # Check that a Rust dylib exports the monomorphic functions from its dependencies + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_rust_function_from_rlib)" -eq "1" ] + [ "$$($(NM) $(TMPDIR)/$(RDYLIB_NAME) | grep -v __imp_ | grep -c public_generic_function_from_rlib)" -eq "1" ] + + # Check that a proc macro exports its public #[no_mangle] functions + # FIXME(#99978) avoid exporting #[no_mangle] symbols for proc macros + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_cdylib)" -eq "1" ] + # Check that a proc macro exports the public #[no_mangle] functions of dependencies + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "1" ] + # Check that a proc macro DOES NOT export any public Rust functions + [ "$$($(NM) $(TMPDIR)/$(CDYLIB_NAME) | grep -v __imp_ | grep -c $(RE_ANY_RUST_SYMBOL))" -eq "0" ] + +ifndef IS_WINDOWS + # Check that an executable does not export any dynamic symbols + [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_c_function_from_rlib)" -eq "0" ] + [ "$$($(NM) $(TMPDIR)/$(EXE_NAME) | grep -v __imp_ | grep -c public_rust_function_from_exe)" -eq "0" ] +endif diff --git a/tests/run-make/symbol-visibility/a_cdylib.rs b/tests/run-make/symbol-visibility/a_cdylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..d4fbff85bfe6ff17e7de82302c2d752ed1a3b919 --- /dev/null +++ b/tests/run-make/symbol-visibility/a_cdylib.rs @@ -0,0 +1,12 @@ +#![crate_type="cdylib"] + +extern crate an_rlib; + +// This should not be exported +pub fn public_rust_function_from_cdylib() {} + +// This should be exported +#[no_mangle] +pub extern "C" fn public_c_function_from_cdylib() { + an_rlib::public_c_function_from_rlib(); +} diff --git a/tests/run-make/symbol-visibility/a_proc_macro.rs b/tests/run-make/symbol-visibility/a_proc_macro.rs new file mode 100644 index 0000000000000000000000000000000000000000..9fd1a8a671767f6d649484c4ad1ea0993bab938c --- /dev/null +++ b/tests/run-make/symbol-visibility/a_proc_macro.rs @@ -0,0 +1,9 @@ +#![crate_type = "proc-macro"] + +extern crate an_rlib; + +// This should not be exported +#[no_mangle] +extern "C" fn public_c_function_from_cdylib() { + an_rlib::public_c_function_from_rlib(); +} diff --git a/tests/run-make/symbol-visibility/a_rust_dylib.rs b/tests/run-make/symbol-visibility/a_rust_dylib.rs new file mode 100644 index 0000000000000000000000000000000000000000..a47df0ab7eed1ff6724d53be2ca0e6433ce92ca3 --- /dev/null +++ b/tests/run-make/symbol-visibility/a_rust_dylib.rs @@ -0,0 +1,15 @@ +#![crate_type="dylib"] + +extern crate an_rlib; + +// This should be exported +pub fn public_rust_function_from_rust_dylib() {} + +// This should be exported +#[no_mangle] +pub extern "C" fn public_c_function_from_rust_dylib() { + let _ = public_generic_function_from_rust_dylib(1u16); +} + +// This should be exported if -Zshare-generics=yes +pub fn public_generic_function_from_rust_dylib(x: T) -> T { x } diff --git a/tests/run-make/symbol-visibility/an_executable.rs b/tests/run-make/symbol-visibility/an_executable.rs new file mode 100644 index 0000000000000000000000000000000000000000..3f5e125ad193d365cf97e276de6eb70432b64482 --- /dev/null +++ b/tests/run-make/symbol-visibility/an_executable.rs @@ -0,0 +1,7 @@ +#![crate_type="bin"] + +extern crate an_rlib; + +pub fn public_rust_function_from_exe() {} + +fn main() {} diff --git a/tests/run-make/symbol-visibility/an_rlib.rs b/tests/run-make/symbol-visibility/an_rlib.rs new file mode 100644 index 0000000000000000000000000000000000000000..3696422b11e96adc6148eabc87e7e3e72df3d7ef --- /dev/null +++ b/tests/run-make/symbol-visibility/an_rlib.rs @@ -0,0 +1,12 @@ +#![crate_type="rlib"] + +pub fn public_rust_function_from_rlib() {} + +#[no_mangle] +pub extern "C" fn public_c_function_from_rlib() { + let _ = public_generic_function_from_rlib(0u64); +} + +pub fn public_generic_function_from_rlib(x: T) -> T { + x +} diff --git a/tests/run-make/symbols-include-type-name/Makefile b/tests/run-make/symbols-include-type-name/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ac26a852e36c1464ecf282ff60111d86b6a2d4c6 --- /dev/null +++ b/tests/run-make/symbols-include-type-name/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# Check that symbol names for methods include type names, instead of . + +OUT=$(TMPDIR)/lib.s + +all: + $(RUSTC) --crate-type staticlib --emit asm lib.rs + $(CGREP) Def < $(OUT) diff --git a/tests/run-make/symbols-include-type-name/lib.rs b/tests/run-make/symbols-include-type-name/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..37d445917674f3910b2c920af776f21d2eaccdf6 --- /dev/null +++ b/tests/run-make/symbols-include-type-name/lib.rs @@ -0,0 +1,14 @@ +pub struct Def { + pub id: i32, +} + +impl Def { + pub fn new(id: i32) -> Def { + Def { id: id } + } +} + +#[no_mangle] +pub fn user() { + let _ = Def::new(0); +} diff --git a/tests/run-make/symlinked-extern/Makefile b/tests/run-make/symlinked-extern/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..28c764b84e8b7599e04f8c6a3efd25faab4b47c5 --- /dev/null +++ b/tests/run-make/symlinked-extern/Makefile @@ -0,0 +1,12 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows +# `ln` is actually `cp` on msys. + +all: + $(RUSTC) foo.rs + mkdir -p $(TMPDIR)/other + ln -nsf $(TMPDIR)/libfoo.rlib $(TMPDIR)/other + $(RUSTC) bar.rs -L $(TMPDIR) + $(RUSTC) baz.rs --extern foo=$(TMPDIR)/other/libfoo.rlib -L $(TMPDIR) diff --git a/tests/run-make/symlinked-extern/bar.rs b/tests/run-make/symlinked-extern/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..cd9c959d5e6a358ac147ddbbfc94ab43fa6f5b72 --- /dev/null +++ b/tests/run-make/symlinked-extern/bar.rs @@ -0,0 +1,6 @@ +#![crate_type = "rlib"] + +extern crate foo; + +pub fn bar(_s: foo::S) { +} diff --git a/tests/run-make/symlinked-extern/baz.rs b/tests/run-make/symlinked-extern/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..cd433a3ac7a3ebdc73a60292c8e643454dc687e8 --- /dev/null +++ b/tests/run-make/symlinked-extern/baz.rs @@ -0,0 +1,6 @@ +extern crate bar; +extern crate foo; + +fn main() { + bar::bar(foo::foo()); +} diff --git a/tests/run-make/symlinked-extern/foo.rs b/tests/run-make/symlinked-extern/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c00700b8cf83e9f35124da244e440e6307522328 --- /dev/null +++ b/tests/run-make/symlinked-extern/foo.rs @@ -0,0 +1,5 @@ +#![crate_type = "rlib"] + +pub struct S; + +pub fn foo() -> S { S } diff --git a/tests/run-make/symlinked-libraries/Makefile b/tests/run-make/symlinked-libraries/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fb0b6127e6f5c4aa68b5c308b721da20f32b50ad --- /dev/null +++ b/tests/run-make/symlinked-libraries/Makefile @@ -0,0 +1,11 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows +# `ln` is actually `cp` on msys. + +all: + $(RUSTC) foo.rs -C prefer-dynamic + mkdir -p $(TMPDIR)/other + ln -nsf $(TMPDIR)/$(call DYLIB_GLOB,foo) $(TMPDIR)/other + $(RUSTC) bar.rs -L $(TMPDIR)/other diff --git a/tests/run-make/symlinked-libraries/bar.rs b/tests/run-make/symlinked-libraries/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..fde0d746634c75bda4939b7e052e9f6516700c36 --- /dev/null +++ b/tests/run-make/symlinked-libraries/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::bar(); +} diff --git a/tests/run-make/symlinked-libraries/foo.rs b/tests/run-make/symlinked-libraries/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..cde9e291b45bc1364a450a7aaedb8fdcd7596571 --- /dev/null +++ b/tests/run-make/symlinked-libraries/foo.rs @@ -0,0 +1,3 @@ +#![crate_type = "dylib"] + +pub fn bar() {} diff --git a/tests/run-make/symlinked-rlib/Makefile b/tests/run-make/symlinked-rlib/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a8565f683c3e86e79844c3ba142f26060ffbd5b4 --- /dev/null +++ b/tests/run-make/symlinked-rlib/Makefile @@ -0,0 +1,10 @@ +# ignore-cross-compile +include ../tools.mk + +# ignore-windows +# `ln` is actually `cp` on msys. + +all: + $(RUSTC) foo.rs --crate-type=rlib -o $(TMPDIR)/foo.xxx + ln -nsf $(TMPDIR)/foo.xxx $(TMPDIR)/libfoo.rlib + $(RUSTC) bar.rs -L $(TMPDIR) diff --git a/tests/run-make/symlinked-rlib/bar.rs b/tests/run-make/symlinked-rlib/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..fde0d746634c75bda4939b7e052e9f6516700c36 --- /dev/null +++ b/tests/run-make/symlinked-rlib/bar.rs @@ -0,0 +1,5 @@ +extern crate foo; + +fn main() { + foo::bar(); +} diff --git a/tests/run-make/symlinked-rlib/foo.rs b/tests/run-make/symlinked-rlib/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..c5c0bc606cd699cda9d339035a1ca95bff4a70f4 --- /dev/null +++ b/tests/run-make/symlinked-rlib/foo.rs @@ -0,0 +1 @@ +pub fn bar() {} diff --git a/tests/run-make/sysroot-crates-are-unstable/Makefile b/tests/run-make/sysroot-crates-are-unstable/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..1e267fb9576ba1e923c656775b09958a1f9758f7 --- /dev/null +++ b/tests/run-make/sysroot-crates-are-unstable/Makefile @@ -0,0 +1,2 @@ +all: + '$(PYTHON)' test.py diff --git a/tests/run-make/sysroot-crates-are-unstable/test.py b/tests/run-make/sysroot-crates-are-unstable/test.py new file mode 100644 index 0000000000000000000000000000000000000000..cab4faa4e645aa2a65e64b7003332ce5544a6f91 --- /dev/null +++ b/tests/run-make/sysroot-crates-are-unstable/test.py @@ -0,0 +1,75 @@ +import sys +import os +from os import listdir +from os.path import isfile, join +from subprocess import PIPE, Popen + + +# This is n list of files which are stable crates or simply are not crates, +# we don't check for the instability of these crates as they're all stable! +STABLE_CRATES = ['std', 'alloc', 'core', 'proc_macro', + 'rsbegin.o', 'rsend.o', 'dllcrt2.o', 'crt2.o', 'clang_rt'] + + +def convert_to_string(s): + if s.__class__.__name__ == 'bytes': + return s.decode('utf-8') + return s + + +def set_ld_lib_path(): + var = os.environ.get("LD_LIB_PATH_ENVVAR") + rpath = os.environ.get("HOST_RPATH_DIR") + if var and rpath: + path = os.environ.get(var) + if path: + os.environ[var] = rpath + os.pathsep + path + else: + os.environ[var] = rpath + + +def exec_command(command, to_input=None): + child = None + if to_input is None: + child = Popen(command, stdout=PIPE, stderr=PIPE) + else: + child = Popen(command, stdout=PIPE, stderr=PIPE, stdin=PIPE) + stdout, stderr = child.communicate(input=to_input) + return (convert_to_string(stdout), convert_to_string(stderr)) + + +def check_lib(lib): + if lib['name'] in STABLE_CRATES: + return True + print('verifying if {} is an unstable crate'.format(lib['name'])) + stdout, stderr = exec_command([os.environ['RUSTC'], '-', '--crate-type', 'rlib', + '--target', os.environ['TARGET'], + '--extern', '{}={}'.format(lib['name'], lib['path'])], + to_input=('extern crate {};'.format(lib['name'])).encode('utf-8')) + if not 'use of unstable library feature' in '{}{}'.format(stdout, stderr): + print('crate {} "{}" is not unstable'.format(lib['name'], lib['path'])) + print('{}{}'.format(stdout, stderr)) + print('') + return False + return True + +# Generate a list of all crates in the sysroot. To do this we list all files in +# rustc's sysroot, look at the filename, strip everything after the `-`, and +# strip the leading `lib` (if present) +def get_all_libs(dir_path): + return [{ 'path': join(dir_path, f), 'name': f[3:].split('-')[0] } + for f in listdir(dir_path) + if isfile(join(dir_path, f)) and f.endswith('.rlib') and f not in STABLE_CRATES] + + +set_ld_lib_path() +sysroot = exec_command([os.environ['RUSTC'], '--print', 'sysroot'])[0].replace('\n', '') +assert sysroot, "Could not read the rustc sysroot!" +libs = get_all_libs(join(sysroot, 'lib/rustlib/{}/lib'.format(os.environ['TARGET']))) + +ret = 0 +for lib in libs: + if not check_lib(lib): + # We continue so users can see all the not unstable crates. + ret = 1 +sys.exit(ret) diff --git a/tests/run-make/target-cpu-native/Makefile b/tests/run-make/target-cpu-native/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..eb3ca1e13aa62db001c8ac22bbd2462a29ea5cd5 --- /dev/null +++ b/tests/run-make/target-cpu-native/Makefile @@ -0,0 +1,20 @@ +include ../tools.mk + +# only-linux +# only-x86_64 +# +# I *really* don't want to deal with a cross-platform way to compare file sizes, +# tests in `make` sort of are awful + +all: $(TMPDIR)/out.log + # Make sure no warnings about "unknown CPU `native`" were emitted + if [ "$$(wc -c $(TMPDIR)/out.log | cut -d' ' -f 1)" = "0" ]; then \ + echo no warnings generated; \ + else \ + exit 1; \ + fi + + +$(TMPDIR)/out.log: + $(RUSTC) foo.rs -C target-cpu=native 2>&1 | tee $(TMPDIR)/out.log + $(call RUN,foo) diff --git a/tests/run-make/target-cpu-native/foo.rs b/tests/run-make/target-cpu-native/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f79c691f0853c5b08e114041f7c8db43b0452fe0 --- /dev/null +++ b/tests/run-make/target-cpu-native/foo.rs @@ -0,0 +1,2 @@ +fn main() { +} diff --git a/tests/run-make/target-specs/Makefile b/tests/run-make/target-specs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a33f5368e3cfd4ea255b5497933fa4197e8e0977 --- /dev/null +++ b/tests/run-make/target-specs/Makefile @@ -0,0 +1,11 @@ +include ../tools.mk +all: + $(RUSTC) foo.rs --target=my-awesome-platform.json --crate-type=lib --emit=asm + $(CGREP) -v morestack < $(TMPDIR)/foo.s + $(RUSTC) foo.rs --target=my-invalid-platform.json 2>&1 | $(CGREP) "Error loading target specification" + $(RUSTC) foo.rs --target=my-incomplete-platform.json 2>&1 | $(CGREP) 'Field llvm-target' + RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-awesome-platform --crate-type=lib --emit=asm + RUST_TARGET_PATH=. $(RUSTC) foo.rs --target=my-x86_64-unknown-linux-gnu-platform --crate-type=lib --emit=asm + $(RUSTC) -Z unstable-options --target=my-awesome-platform.json --print target-spec-json > $(TMPDIR)/test-platform.json && $(RUSTC) -Z unstable-options --target=$(TMPDIR)/test-platform.json --print target-spec-json | diff -q $(TMPDIR)/test-platform.json - + $(RUSTC) foo.rs --target=definitely-not-builtin-target 2>&1 | $(CGREP) 'may not set is_builtin' + $(RUSTC) foo.rs --target=mismatching-data-layout --crate-type=lib diff --git a/tests/run-make/target-specs/definitely-not-builtin-target.json b/tests/run-make/target-specs/definitely-not-builtin-target.json new file mode 100644 index 0000000000000000000000000000000000000000..b36fa993d9783f49353108c2ea3a14d81f75b589 --- /dev/null +++ b/tests/run-make/target-specs/definitely-not-builtin-target.json @@ -0,0 +1,7 @@ +{ + "arch": "x86_64", + "is-builtin": true, + "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", + "llvm-target": "x86_64-unknown-unknown-gnu", + "target-pointer-width": "64" +} diff --git a/tests/run-make/target-specs/foo.rs b/tests/run-make/target-specs/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..22939e87912c1a32f96cb1133cb8ef8e284855e4 --- /dev/null +++ b/tests/run-make/target-specs/foo.rs @@ -0,0 +1,24 @@ +#![feature(lang_items, no_core, auto_traits)] +#![no_core] + +#[lang = "copy"] +trait Copy {} + +#[lang = "sized"] +trait Sized {} + +#[lang = "freeze"] +auto trait Freeze {} + +#[lang = "start"] +fn start(_main: fn() -> T, _argc: isize, _argv: *const *const u8, _sigpipe: u8) -> isize { + 0 +} + +extern "C" { + fn _foo() -> [u8; 16]; +} + +fn _main() { + let _a = unsafe { _foo() }; +} diff --git a/tests/run-make/target-specs/mismatching-data-layout.json b/tests/run-make/target-specs/mismatching-data-layout.json new file mode 100644 index 0000000000000000000000000000000000000000..d12caaad14a031b044329156610d076eac6d00fc --- /dev/null +++ b/tests/run-make/target-specs/mismatching-data-layout.json @@ -0,0 +1,6 @@ +{ + "arch": "x86_64", + "data-layout": "e-m:e-i64:16:32:64", + "llvm-target": "x86_64-unknown-unknown-gnu", + "target-pointer-width": "64" +} diff --git a/tests/run-make/target-specs/my-awesome-platform.json b/tests/run-make/target-specs/my-awesome-platform.json new file mode 100644 index 0000000000000000000000000000000000000000..00de3de05f07a66baaed0d82f89b2f4c97fa5a00 --- /dev/null +++ b/tests/run-make/target-specs/my-awesome-platform.json @@ -0,0 +1,11 @@ +{ + "data-layout": "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128", + "linker-flavor": "gcc", + "llvm-target": "i686-unknown-linux-gnu", + "target-endian": "little", + "target-pointer-width": "32", + "target-c-int-width": "32", + "arch": "x86", + "os": "linux", + "morestack": false +} diff --git a/tests/run-make/target-specs/my-incomplete-platform.json b/tests/run-make/target-specs/my-incomplete-platform.json new file mode 100644 index 0000000000000000000000000000000000000000..ceaa25cdf2fef6f79a1811f6ce01d4a2b226f301 --- /dev/null +++ b/tests/run-make/target-specs/my-incomplete-platform.json @@ -0,0 +1,10 @@ +{ + "data-layout": "e-p:32:32-f64:32:64-i64:32:64-f80:32:32-n8:16:32", + "linker-flavor": "gcc", + "target-endian": "little", + "target-pointer-width": "32", + "target-c-int-width": "32", + "arch": "x86", + "os": "foo", + "morestack": false +} diff --git a/tests/run-make/target-specs/my-invalid-platform.json b/tests/run-make/target-specs/my-invalid-platform.json new file mode 100644 index 0000000000000000000000000000000000000000..3feac45b7d660a813db9b37d511551019ca5920a --- /dev/null +++ b/tests/run-make/target-specs/my-invalid-platform.json @@ -0,0 +1 @@ +wow this json is really broke! diff --git a/tests/run-make/target-specs/my-x86_64-unknown-linux-gnu-platform.json b/tests/run-make/target-specs/my-x86_64-unknown-linux-gnu-platform.json new file mode 100644 index 0000000000000000000000000000000000000000..6d5e964ed4fee41552661577c5ff2157763426b9 --- /dev/null +++ b/tests/run-make/target-specs/my-x86_64-unknown-linux-gnu-platform.json @@ -0,0 +1,12 @@ +{ + "pre-link-args": {"gcc": ["-m64"]}, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", + "linker-flavor": "gcc", + "llvm-target": "x86_64-unknown-linux-gnu", + "target-endian": "little", + "target-pointer-width": "64", + "target-c-int-width": "32", + "arch": "x86_64", + "os": "linux", + "morestack": false +} diff --git a/tests/run-make/target-without-atomic-cas/Makefile b/tests/run-make/target-without-atomic-cas/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..451f03d66cd2318aac8d6305790fc5e9f9acba87 --- /dev/null +++ b/tests/run-make/target-without-atomic-cas/Makefile @@ -0,0 +1,5 @@ +include ../tools.mk + +# The target used below doesn't support atomic CAS operations. Verify that's the case +all: + $(RUSTC) --print cfg --target thumbv6m-none-eabi | $(CGREP) -v 'target_has_atomic="ptr"' diff --git a/tests/run-make/test-benches/Makefile b/tests/run-make/test-benches/Makefile index 8fc122515d0a330f71b7b9efd58e190c4f0b5343..0253a52637f69dc7e5971f0c5bcfd58bda4de051 100644 --- a/tests/run-make/test-benches/Makefile +++ b/tests/run-make/test-benches/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # ignore-cross-compile diff --git a/tests/run-make/test-harness/Makefile b/tests/run-make/test-harness/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ee8c9294f91ab15f799fc92b8363a713bf0d6413 --- /dev/null +++ b/tests/run-make/test-harness/Makefile @@ -0,0 +1,9 @@ +# ignore-cross-compile +include ../tools.mk + +all: + # check that #[cfg_attr(..., ignore)] does the right thing. + $(RUSTC) --test test-ignore-cfg.rs --cfg ignorecfg + $(call RUN,test-ignore-cfg) | $(CGREP) 'shouldnotignore ... ok' 'shouldignore ... ignored' + $(call RUN,test-ignore-cfg --quiet) | $(CGREP) -e "^i\.$$" + $(call RUN,test-ignore-cfg --quiet) | $(CGREP) -v 'should' diff --git a/tests/run-make/test-harness/test-ignore-cfg.rs b/tests/run-make/test-harness/test-ignore-cfg.rs new file mode 100644 index 0000000000000000000000000000000000000000..31ef131f2ad76cdd5f54c06875bbee98003adaea --- /dev/null +++ b/tests/run-make/test-harness/test-ignore-cfg.rs @@ -0,0 +1,9 @@ +#[test] +#[cfg_attr(ignorecfg, ignore)] +fn shouldignore() { +} + +#[test] +#[cfg_attr(noignorecfg, ignore)] +fn shouldnotignore() { +} diff --git a/tests/run-make/thumb-none-cortex-m/Makefile b/tests/run-make/thumb-none-cortex-m/Makefile index 3065141c08a398a62c8784814f2d766bed579dc8..e941fc4a78e1c0ecf75357e4d1c1253dacc02014 100644 --- a/tests/run-make/thumb-none-cortex-m/Makefile +++ b/tests/run-make/thumb-none-cortex-m/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # How to run this # $ ./x.py clean diff --git a/tests/run-make/thumb-none-qemu/Makefile b/tests/run-make/thumb-none-qemu/Makefile index a1c2ba12cd069574c1de1792fa942967639279fb..eea6ca34992895bb53487e306ad2bd0c84f33d02 100644 --- a/tests/run-make/thumb-none-qemu/Makefile +++ b/tests/run-make/thumb-none-qemu/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-thumb diff --git a/tests/run-make/tools.mk b/tests/run-make/tools.mk new file mode 100644 index 0000000000000000000000000000000000000000..ea06b620c4cff7b24b41adb586fa0a038caf6ebf --- /dev/null +++ b/tests/run-make/tools.mk @@ -0,0 +1,187 @@ +# These deliberately use `=` and not `:=` so that client makefiles can +# augment HOST_RPATH_DIR / TARGET_RPATH_DIR. +HOST_RPATH_ENV = \ + $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(HOST_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))" +TARGET_RPATH_ENV = \ + $(LD_LIB_PATH_ENVVAR)="$(TMPDIR):$(TARGET_RPATH_DIR):$($(LD_LIB_PATH_ENVVAR))" + +RUSTC_ORIGINAL := $(RUSTC) +BARE_RUSTC := $(HOST_RPATH_ENV) '$(RUSTC)' +BARE_RUSTDOC := $(HOST_RPATH_ENV) '$(RUSTDOC)' +RUSTC := $(BARE_RUSTC) --out-dir $(TMPDIR) -L $(TMPDIR) $(RUSTFLAGS) +RUSTDOC := $(BARE_RUSTDOC) -L $(TARGET_RPATH_DIR) +ifdef RUSTC_LINKER +RUSTC := $(RUSTC) -Clinker='$(RUSTC_LINKER)' +RUSTDOC := $(RUSTDOC) -Clinker='$(RUSTC_LINKER)' +endif +#CC := $(CC) -L $(TMPDIR) +HTMLDOCCK := '$(PYTHON)' '$(S)/src/etc/htmldocck.py' +CGREP := "$(S)/src/etc/cat-and-grep.sh" + +# diff with common flags for multi-platform diffs against text output +DIFF := diff -u --strip-trailing-cr + +# Some of the Rust CI platforms use `/bin/dash` to run `shell` script in +# Makefiles. Other platforms, including many developer platforms, default to +# `/bin/bash`. (In many cases, `make` is actually using `/bin/sh`, but `sh` +# is configured to execute one or the other shell binary). `dash` features +# support only a small subset of `bash` features, so `dash` can be thought of as +# the lowest common denominator, and tests should be validated against `dash` +# whenever possible. Most developer platforms include `/bin/dash`, but to ensure +# tests still work when `/bin/dash`, if not available, this `SHELL` override is +# conditional: +ifndef IS_WINDOWS # dash interprets backslashes in executable paths incorrectly +ifneq (,$(wildcard /bin/dash)) +SHELL := /bin/dash +endif +endif + +# This is the name of the binary we will generate and run; use this +# e.g. for `$(CC) -o $(RUN_BINFILE)`. +RUN_BINFILE = $(TMPDIR)/$(1) + +# Invoke the generated binary on the remote machine if compiletest was +# configured to use a remote test device, otherwise run it on the current host. +ifdef REMOTE_TEST_CLIENT +# FIXME: if a test requires additional files, this will need to be changed to +# also push them (by changing the 0 to the number of additional files, and +# providing the path of the additional files as the last arguments). +EXECUTE = $(REMOTE_TEST_CLIENT) run 0 $(RUN_BINFILE) +else +EXECUTE = $(RUN_BINFILE) +endif + +# RUN and FAIL are basic way we will invoke the generated binary. On +# non-windows platforms, they set the LD_LIBRARY_PATH environment +# variable before running the binary. + +RLIB_GLOB = lib$(1)*.rlib +BIN = $(1) + +UNAME = $(shell uname) + +ifeq ($(UNAME),Darwin) +RUN = $(TARGET_RPATH_ENV) $(EXECUTE) +FAIL = $(TARGET_RPATH_ENV) $(EXECUTE) && exit 1 || exit 0 +DYLIB_GLOB = lib$(1)*.dylib +DYLIB = $(TMPDIR)/lib$(1).dylib +STATICLIB = $(TMPDIR)/lib$(1).a +STATICLIB_GLOB = lib$(1)*.a +else +ifdef IS_WINDOWS +RUN = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(EXECUTE) +FAIL = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(EXECUTE) && exit 1 || exit 0 +DYLIB_GLOB = $(1)*.dll +DYLIB = $(TMPDIR)/$(1).dll +ifdef IS_MSVC +STATICLIB = $(TMPDIR)/$(1).lib +STATICLIB_GLOB = $(1)*.lib +else +IMPLIB = $(TMPDIR)/lib$(1).dll.a +STATICLIB = $(TMPDIR)/lib$(1).a +STATICLIB_GLOB = lib$(1)*.a +endif +BIN = $(1).exe +LLVM_FILECHECK := $(shell cygpath -u "$(LLVM_FILECHECK)") +else +RUN = $(TARGET_RPATH_ENV) $(EXECUTE) +FAIL = $(TARGET_RPATH_ENV) $(EXECUTE) && exit 1 || exit 0 +DYLIB_GLOB = lib$(1)*.so +DYLIB = $(TMPDIR)/lib$(1).so +STATICLIB = $(TMPDIR)/lib$(1).a +STATICLIB_GLOB = lib$(1)*.a +endif +endif + +ifdef IS_MSVC +COMPILE_OBJ = $(CC) -c -Fo:`cygpath -w $(1)` $(2) +COMPILE_OBJ_CXX = $(CXX) -EHs -c -Fo:`cygpath -w $(1)` $(2) +NATIVE_STATICLIB_FILE = $(1).lib +NATIVE_STATICLIB = $(TMPDIR)/$(call NATIVE_STATICLIB_FILE,$(1)) +OUT_EXE=-Fe:`cygpath -w $(TMPDIR)/$(call BIN,$(1))` \ + -Fo:`cygpath -w $(TMPDIR)/$(1).obj` +else +COMPILE_OBJ = $(CC) -v -c -o $(1) $(2) +COMPILE_OBJ_CXX = $(CXX) -c -o $(1) $(2) +NATIVE_STATICLIB_FILE = lib$(1).a +NATIVE_STATICLIB = $(call STATICLIB,$(1)) +OUT_EXE=-o $(TMPDIR)/$(1) +endif + + +# Extra flags needed to compile a working executable with the standard library +ifdef IS_WINDOWS +ifdef IS_MSVC + EXTRACFLAGS := ws2_32.lib userenv.lib advapi32.lib bcrypt.lib ntdll.lib +else + EXTRACFLAGS := -lws2_32 -luserenv -lbcrypt -lntdll + EXTRACXXFLAGS := -lstdc++ + # So this is a bit hacky: we can't use the DLL version of libstdc++ because + # it pulls in the DLL version of libgcc, which means that we end up with 2 + # instances of the DW2 unwinding implementation. This is a problem on + # i686-pc-windows-gnu because each module (DLL/EXE) needs to register its + # unwind information with the unwinding implementation, and libstdc++'s + # __cxa_throw won't see the unwinding info we registered with our statically + # linked libgcc. + # + # Now, simply statically linking libstdc++ would fix this problem, except + # that it is compiled with the expectation that pthreads is dynamically + # linked as a DLL and will fail to link with a statically linked libpthread. + # + # So we end up with the following hack: we link use static:-bundle to only + # link the parts of libstdc++ that we actually use, which doesn't include + # the dependency on the pthreads DLL. + EXTRARSCXXFLAGS := -l static:-bundle=stdc++ +endif +else +ifeq ($(UNAME),Darwin) + EXTRACFLAGS := -lresolv + EXTRACXXFLAGS := -lc++ + EXTRARSCXXFLAGS := -lc++ +else +ifeq ($(UNAME),FreeBSD) + EXTRACFLAGS := -lm -lpthread -lgcc_s +else +ifeq ($(UNAME),SunOS) + EXTRACFLAGS := -lm -lpthread -lposix4 -lsocket -lresolv +else +ifeq ($(UNAME),OpenBSD) + EXTRACFLAGS := -lm -lpthread -lc++abi + RUSTC := $(RUSTC) -C linker="$(word 1,$(CC:ccache=))" +else + EXTRACFLAGS := -lm -lrt -ldl -lpthread + EXTRACXXFLAGS := -lstdc++ + EXTRARSCXXFLAGS := -lstdc++ +endif +endif +endif +endif +endif + +REMOVE_DYLIBS = rm $(TMPDIR)/$(call DYLIB_GLOB,$(1)) +REMOVE_RLIBS = rm $(TMPDIR)/$(call RLIB_GLOB,$(1)) + +%.a: %.o + $(AR) crus $@ $< +ifdef IS_MSVC +%.lib: lib%.o + $(MSVC_LIB) -out:`cygpath -w $@` $< +else +%.lib: lib%.o + $(AR) crus $@ $< +endif +%.dylib: %.o + $(CC) -dynamiclib -Wl,-dylib -o $@ $< +%.so: %.o + $(CC) -o $@ $< -shared + +ifdef IS_MSVC +%.dll: lib%.o + $(CC) $< -link -dll -out:`cygpath -w $@` +else +%.dll: lib%.o + $(CC) -o $@ $< -shared -Wl,--out-implib=$@.a +endif + +$(TMPDIR)/lib%.o: %.c + $(call COMPILE_OBJ,$@,$<) diff --git a/tests/run-make/track-path-dep-info/Makefile b/tests/run-make/track-path-dep-info/Makefile index ee853943f8bce9c84495769a9ab2e9e8365408eb..0d6c9b1d2f01d7159b7d44197518e2f7710c98c0 100644 --- a/tests/run-make/track-path-dep-info/Makefile +++ b/tests/run-make/track-path-dep-info/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # FIXME(eddyb) provide `HOST_RUSTC` and `TARGET_RUSTC` # instead of hardcoding them everywhere they're needed. diff --git a/tests/run-make/track-pgo-dep-info/Makefile b/tests/run-make/track-pgo-dep-info/Makefile index 60b59c04aa95c71364627dda2afe8dedb2c2e0be..6c7f67d0f0a9d5523199ada2e81235be24254378 100644 --- a/tests/run-make/track-pgo-dep-info/Makefile +++ b/tests/run-make/track-pgo-dep-info/Makefile @@ -1,7 +1,7 @@ # needs-profiler-support # ignore-windows-gnu --include ../../run-make-fulldeps/tools.mk +include ../tools.mk # FIXME(eddyb) provide `HOST_RUSTC` and `TARGET_RUSTC` # instead of hardcoding them everywhere they're needed. diff --git a/tests/run-make/translation/Makefile b/tests/run-make/translation/Makefile index 397fc542909ac1c6b8898a10071b5c2a2b465928..0acf64e5da70632f2e5621e6c84c75cc951cfb8a 100644 --- a/tests/run-make/translation/Makefile +++ b/tests/run-make/translation/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # This test uses `ln -s` rather than copying to save testing time, but its # usage doesn't work on Windows. diff --git a/tests/run-make/type-mismatch-same-crate-name/Makefile b/tests/run-make/type-mismatch-same-crate-name/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..a2a2a41c7a5a130d75f5fa6396213211d9092864 --- /dev/null +++ b/tests/run-make/type-mismatch-same-crate-name/Makefile @@ -0,0 +1,19 @@ +include ../tools.mk + +all: + # compile two different versions of crateA + $(RUSTC) --crate-type=rlib crateA.rs -C metadata=-1 -C extra-filename=-1 + $(RUSTC) --crate-type=rlib crateA.rs -C metadata=-2 -C extra-filename=-2 + # make crateB depend on version 1 of crateA + $(RUSTC) --crate-type=rlib crateB.rs --extern crateA=$(TMPDIR)/libcrateA-1.rlib + # make crateC depend on version 2 of crateA + $(RUSTC) crateC.rs --extern crateA=$(TMPDIR)/libcrateA-2.rlib 2>&1 | \ + tr -d '\r\n' | $(CGREP) -e \ + "mismatched types.*\ + crateB::try_foo\(foo2\);.*\ + expected \`crateA::foo::Foo\`, found \`Foo\`.*\ + different versions of crate \`crateA\`.*\ + mismatched types.*\ + crateB::try_bar\(bar2\);.*\ + expected trait \`crateA::bar::Bar\`, found trait \`Bar\`.*\ + different versions of crate \`crateA\`" diff --git a/tests/run-make/type-mismatch-same-crate-name/crateA.rs b/tests/run-make/type-mismatch-same-crate-name/crateA.rs new file mode 100644 index 0000000000000000000000000000000000000000..4871c8c2e9ccd5f3f6bc425cfc2c0aac22c7982d --- /dev/null +++ b/tests/run-make/type-mismatch-same-crate-name/crateA.rs @@ -0,0 +1,16 @@ +mod foo { + pub struct Foo; +} + +mod bar { + pub trait Bar{} + + pub fn bar() -> Box { + unimplemented!() + } +} + +// This makes the publicly accessible path +// differ from the internal one. +pub use foo::Foo; +pub use bar::{Bar, bar}; diff --git a/tests/run-make/type-mismatch-same-crate-name/crateB.rs b/tests/run-make/type-mismatch-same-crate-name/crateB.rs new file mode 100644 index 0000000000000000000000000000000000000000..24fcc7cadc10817f53551b00a7751f2c96a35a77 --- /dev/null +++ b/tests/run-make/type-mismatch-same-crate-name/crateB.rs @@ -0,0 +1,4 @@ +extern crate crateA; + +pub fn try_foo(x: crateA::Foo){} +pub fn try_bar(x: Box){} diff --git a/tests/run-make/type-mismatch-same-crate-name/crateC.rs b/tests/run-make/type-mismatch-same-crate-name/crateC.rs new file mode 100644 index 0000000000000000000000000000000000000000..71b38a9f8ca566474d5ea68f488ed29e574422c6 --- /dev/null +++ b/tests/run-make/type-mismatch-same-crate-name/crateC.rs @@ -0,0 +1,25 @@ +// This tests the extra note reported when a type error deals with +// seemingly identical types. +// The main use case of this error is when there are two crates +// (generally different versions of the same crate) with the same name +// causing a type mismatch. + +// The test is nearly the same as the one in +// ui/type/type-mismatch-same-crate-name.rs +// but deals with the case where one of the crates +// is only introduced as an indirect dependency. +// and the type is accessed via a re-export. +// This is similar to how the error can be introduced +// when using cargo's automatic dependency resolution. + +extern crate crateA; + +fn main() { + let foo2 = crateA::Foo; + let bar2 = crateA::bar(); + { + extern crate crateB; + crateB::try_foo(foo2); + crateB::try_bar(bar2); + } +} diff --git a/tests/run-make/unstable-flag-required/Makefile b/tests/run-make/unstable-flag-required/Makefile index d3a734fae77f9e3d475f826e4a77040e8c679b36..17dd15b079c62e8a908dcdeb1f62ad653f995169 100644 --- a/tests/run-make/unstable-flag-required/Makefile +++ b/tests/run-make/unstable-flag-required/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTDOC) --output-format=json x.html 2>&1 | diff - output-format-json.stderr diff --git a/tests/run-make/use-extern-for-plugins/Makefile b/tests/run-make/use-extern-for-plugins/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6ae53afad207b57532d6d2ac9faf389287268feb --- /dev/null +++ b/tests/run-make/use-extern-for-plugins/Makefile @@ -0,0 +1,17 @@ +include ../tools.mk + +# ignore-freebsd +# ignore-openbsd +# ignore-sunos + +HOST := $(shell $(RUSTC) -vV | grep 'host:' | sed 's/host: //') +ifeq ($(findstring i686,$(HOST)),i686) +TARGET := $(subst i686,x86_64,$(HOST)) +else +TARGET := $(subst x86_64,i686,$(HOST)) +endif + +all: + $(RUSTC) foo.rs -C extra-filename=-host + $(RUSTC) bar.rs -C extra-filename=-targ --target $(TARGET) + $(RUSTC) baz.rs --extern a=$(TMPDIR)/liba-targ.rlib --target $(TARGET) diff --git a/tests/run-make/use-extern-for-plugins/bar.rs b/tests/run-make/use-extern-for-plugins/bar.rs new file mode 100644 index 0000000000000000000000000000000000000000..704d212036273615470229f83734a9b94e732c32 --- /dev/null +++ b/tests/run-make/use-extern-for-plugins/bar.rs @@ -0,0 +1,9 @@ +#![feature(no_core)] +#![no_core] +#![crate_type = "lib"] +#![crate_name = "a"] + +#[macro_export] +macro_rules! bar { + () => () +} diff --git a/tests/run-make/use-extern-for-plugins/baz.rs b/tests/run-make/use-extern-for-plugins/baz.rs new file mode 100644 index 0000000000000000000000000000000000000000..49a96a0c80b02fabc0cbf61d94a9a3394da954f4 --- /dev/null +++ b/tests/run-make/use-extern-for-plugins/baz.rs @@ -0,0 +1,8 @@ +#![feature(no_core)] +#![no_core] +#![crate_type = "lib"] + +#[macro_use] +extern crate a; + +bar!(); diff --git a/tests/run-make/use-extern-for-plugins/foo.rs b/tests/run-make/use-extern-for-plugins/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..dffdc0798872e95c3a723a1812e41656c8b5593c --- /dev/null +++ b/tests/run-make/use-extern-for-plugins/foo.rs @@ -0,0 +1,8 @@ +#![no_std] +#![crate_type = "lib"] +#![crate_name = "a"] + +#[macro_export] +macro_rules! foo { + () => () +} diff --git a/tests/run-make/use-suggestions-rust-2018/Makefile b/tests/run-make/use-suggestions-rust-2018/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..37cd6283c0a6e9ae78e13b29b0a724fa8a14dc73 --- /dev/null +++ b/tests/run-make/use-suggestions-rust-2018/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +all: + $(RUSTC) ep-nested-lib.rs + + $(RUSTC) use-suggestions.rs --edition=2018 --extern ep_nested_lib=$(TMPDIR)/libep_nested_lib.rlib 2>&1 | $(CGREP) "use ep_nested_lib::foo::bar::Baz" + diff --git a/tests/run-make/use-suggestions-rust-2018/ep-nested-lib.rs b/tests/run-make/use-suggestions-rust-2018/ep-nested-lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..62a0a9d8f1b66440e4393dae2cc0690efe512250 --- /dev/null +++ b/tests/run-make/use-suggestions-rust-2018/ep-nested-lib.rs @@ -0,0 +1,7 @@ +#![crate_type = "rlib"] + +pub mod foo { + pub mod bar { + pub struct Baz; + } +} diff --git a/tests/run-make/use-suggestions-rust-2018/use-suggestions.rs b/tests/run-make/use-suggestions-rust-2018/use-suggestions.rs new file mode 100644 index 0000000000000000000000000000000000000000..d262d6f9877cb160ebe68784a7157d3aad72c924 --- /dev/null +++ b/tests/run-make/use-suggestions-rust-2018/use-suggestions.rs @@ -0,0 +1,3 @@ +fn main() { + let x = Baz{}; +} diff --git a/tests/run-make/used-cdylib-macos/Makefile b/tests/run-make/used-cdylib-macos/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..38a4c31c7b3af5e90c51706b40e54ebc610dbb9e --- /dev/null +++ b/tests/run-make/used-cdylib-macos/Makefile @@ -0,0 +1,11 @@ +include ../tools.mk + +# only-macos +# +# This checks that `#[used]` passes through to the linker on +# darwin. This is subject to change in the future, see +# https://github.com/rust-lang/rust/pull/93718 for discussion + +all: + $(RUSTC) -Copt-level=3 dylib_used.rs + nm $(TMPDIR)/libdylib_used.dylib | $(CGREP) VERY_IMPORTANT_SYMBOL diff --git a/tests/run-make/used-cdylib-macos/dylib_used.rs b/tests/run-make/used-cdylib-macos/dylib_used.rs new file mode 100644 index 0000000000000000000000000000000000000000..85f0ff92fe7301be3469e3f18aa2067d13e59032 --- /dev/null +++ b/tests/run-make/used-cdylib-macos/dylib_used.rs @@ -0,0 +1,4 @@ +#![crate_type = "cdylib"] + +#[used] +static VERY_IMPORTANT_SYMBOL: u32 = 12345; diff --git a/tests/run-make/used/Makefile b/tests/run-make/used/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e80eb9e402086c5b76cb7d74d4a362bcd2d30b39 --- /dev/null +++ b/tests/run-make/used/Makefile @@ -0,0 +1,7 @@ +include ../tools.mk + +# ignore-windows-msvc + +all: + $(RUSTC) -C opt-level=3 --emit=obj used.rs + nm $(TMPDIR)/used.o | $(CGREP) FOO diff --git a/tests/run-make/used/used.rs b/tests/run-make/used/used.rs new file mode 100644 index 0000000000000000000000000000000000000000..dca0a5e1167a81685f29d467acc0e1f82bce0c24 --- /dev/null +++ b/tests/run-make/used/used.rs @@ -0,0 +1,6 @@ +#![crate_type = "lib"] + +#[used] +static FOO: u32 = 0; + +static BAR: u32 = 0; diff --git a/tests/run-make/valid-print-requests/Makefile b/tests/run-make/valid-print-requests/Makefile index c325e536e7c5ddae75a10df485cf4e151fe73868..99430e98d1c2dec5f3380ef2362d3764109dd4ec 100644 --- a/tests/run-make/valid-print-requests/Makefile +++ b/tests/run-make/valid-print-requests/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk all: $(RUSTC) --print uwu 2>&1 | diff - valid-print-requests.stderr diff --git a/tests/run-make/version/Makefile b/tests/run-make/version/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3a130545d69d3c8960dc7930251057e4fcef85e1 --- /dev/null +++ b/tests/run-make/version/Makefile @@ -0,0 +1,6 @@ +include ../tools.mk + +all: + $(RUSTC) -V + $(RUSTC) -vV + $(RUSTC) --version --verbose diff --git a/tests/run-make/volatile-intrinsics/Makefile b/tests/run-make/volatile-intrinsics/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..5672a045873dd684b53e3974bb9e0c40650d763f --- /dev/null +++ b/tests/run-make/volatile-intrinsics/Makefile @@ -0,0 +1,10 @@ +# ignore-cross-compile +include ../tools.mk + +all: + # The tests must pass... + $(RUSTC) main.rs + $(call RUN,main) + # ... and the loads/stores must not be optimized out. + $(RUSTC) main.rs --emit=llvm-ir + $(CGREP) "load volatile" "store volatile" < $(TMPDIR)/main.ll diff --git a/tests/run-make/volatile-intrinsics/main.rs b/tests/run-make/volatile-intrinsics/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..4295d95f3f39813b5eba6cadc762d2aac8ee10f4 --- /dev/null +++ b/tests/run-make/volatile-intrinsics/main.rs @@ -0,0 +1,24 @@ +#![feature(core_intrinsics, volatile)] + +use std::intrinsics::{ + unaligned_volatile_load, unaligned_volatile_store, volatile_load, volatile_store, +}; +use std::ptr::{read_volatile, write_volatile}; + +pub fn main() { + unsafe { + let mut i: isize = 1; + volatile_store(&mut i, 2); + assert_eq!(volatile_load(&i), 2); + } + unsafe { + let mut i: isize = 1; + unaligned_volatile_store(&mut i, 2); + assert_eq!(unaligned_volatile_load(&i), 2); + } + unsafe { + let mut i: isize = 1; + write_volatile(&mut i, 2); + assert_eq!(read_volatile(&i), 2); + } +} diff --git a/tests/run-make/wasm-abi/Makefile b/tests/run-make/wasm-abi/Makefile index e713ca1876d5316365963c0edd5cc61a09bcc1df..ed95464efef2e2d9fe4fc5dd2b771d968db582ec 100644 --- a/tests/run-make/wasm-abi/Makefile +++ b/tests/run-make/wasm-abi/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-custom-section/Makefile b/tests/run-make/wasm-custom-section/Makefile index 92b0802e30a6106b654abc89f8ef0fe9aeb7d91f..2f7d38c2736511c7dc18cc02eb4a95a0babc8d80 100644 --- a/tests/run-make/wasm-custom-section/Makefile +++ b/tests/run-make/wasm-custom-section/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-custom-sections-opt/Makefile b/tests/run-make/wasm-custom-sections-opt/Makefile index e5b45d96310f13083e223b54dff4f78677a40f97..a0d4378131be5bebbeb2d7537e074118e9618220 100644 --- a/tests/run-make/wasm-custom-sections-opt/Makefile +++ b/tests/run-make/wasm-custom-sections-opt/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-export-all-symbols/Makefile b/tests/run-make/wasm-export-all-symbols/Makefile index 834f4d258db12f2df7e58e28828f8cd1bb9f5454..86713bc80b85a20c50d5d9f2016e30c7546ea90f 100644 --- a/tests/run-make/wasm-export-all-symbols/Makefile +++ b/tests/run-make/wasm-export-all-symbols/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-import-module/Makefile b/tests/run-make/wasm-import-module/Makefile index 18cef16aac3a1d55f187588918b53c681f1a40be..a0b4d920b3d0d6172430f2f40ea9c1237a67e79b 100644 --- a/tests/run-make/wasm-import-module/Makefile +++ b/tests/run-make/wasm-import-module/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-panic-small/Makefile b/tests/run-make/wasm-panic-small/Makefile index 2af9f71357e9ae5183d0dd1acd5406be64ea47dc..16f545218556f02febb256944eb20ad9a9e4f92c 100644 --- a/tests/run-make/wasm-panic-small/Makefile +++ b/tests/run-make/wasm-panic-small/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-spurious-import/Makefile b/tests/run-make/wasm-spurious-import/Makefile index 6f50e6e554e7f6d3b4f0947f7d01c126416c3fa4..ff9dfeac6d00c2d90e5c5fd7b02258695b209357 100644 --- a/tests/run-make/wasm-spurious-import/Makefile +++ b/tests/run-make/wasm-spurious-import/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-stringify-ints-small/Makefile b/tests/run-make/wasm-stringify-ints-small/Makefile index 2fa2c954d4a849f30d221d12a227bf149e346ba4..f959dbd426b9febbf8b40044fef72e625049f26e 100644 --- a/tests/run-make/wasm-stringify-ints-small/Makefile +++ b/tests/run-make/wasm-stringify-ints-small/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk ifeq ($(TARGET),wasm32-unknown-unknown) all: diff --git a/tests/run-make/wasm-symbols-different-module/Makefile b/tests/run-make/wasm-symbols-different-module/Makefile index 9e657222deab1e63f9475d4de5cf31dc751f8cde..0f86914c7b1f23182915e2368bb0c36c3f1cda4d 100644 --- a/tests/run-make/wasm-symbols-different-module/Makefile +++ b/tests/run-make/wasm-symbols-different-module/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-symbols-not-exported/Makefile b/tests/run-make/wasm-symbols-not-exported/Makefile index 60b0dee001fbf46150b4e4d82560fc15e1f6a387..024ad7797488da15a325043546c9efc089e76bf2 100644 --- a/tests/run-make/wasm-symbols-not-exported/Makefile +++ b/tests/run-make/wasm-symbols-not-exported/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/wasm-symbols-not-imported/Makefile b/tests/run-make/wasm-symbols-not-imported/Makefile index dc7618c19a757e777df74c021afe1f30da6eaff3..38440a8b0258c4cb34f8e56b5072780502a380cd 100644 --- a/tests/run-make/wasm-symbols-not-imported/Makefile +++ b/tests/run-make/wasm-symbols-not-imported/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk # only-wasm32-bare diff --git a/tests/run-make/weird-output-filenames/Makefile b/tests/run-make/weird-output-filenames/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d3a34e3b46e8979ff5fde1e22019616d9cfef1e4 --- /dev/null +++ b/tests/run-make/weird-output-filenames/Makefile @@ -0,0 +1,15 @@ +include ../tools.mk + +all: + cp foo.rs $(TMPDIR)/.foo.rs + $(RUSTC) $(TMPDIR)/.foo.rs 2>&1 \ + | $(CGREP) -e "invalid character.*in crate name:" + cp foo.rs $(TMPDIR)/.foo.bar + $(RUSTC) $(TMPDIR)/.foo.bar 2>&1 \ + | $(CGREP) -e "invalid character.*in crate name:" + cp foo.rs $(TMPDIR)/+foo+bar.rs + $(RUSTC) $(TMPDIR)/+foo+bar.rs 2>&1 \ + | $(CGREP) -e "invalid character.*in crate name:" + cp foo.rs $(TMPDIR)/-foo.rs + $(RUSTC) $(TMPDIR)/-foo.rs 2>&1 \ + | $(CGREP) 'crate names cannot start with a `-`' diff --git a/tests/run-make/weird-output-filenames/foo.rs b/tests/run-make/weird-output-filenames/foo.rs new file mode 100644 index 0000000000000000000000000000000000000000..f328e4d9d04c31d0d70d16d21a07d1613be9d577 --- /dev/null +++ b/tests/run-make/weird-output-filenames/foo.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/run-make/windows-binary-no-external-deps/Makefile b/tests/run-make/windows-binary-no-external-deps/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8960020fed558e3e12f234b30ab886c71f91586f --- /dev/null +++ b/tests/run-make/windows-binary-no-external-deps/Makefile @@ -0,0 +1,9 @@ +include ../tools.mk + +# only-windows + +PATH=$(SYSTEMROOT)/system32 + +all: + $(RUSTC) hello.rs + $(TMPDIR)/hello.exe diff --git a/tests/run-make/windows-binary-no-external-deps/hello.rs b/tests/run-make/windows-binary-no-external-deps/hello.rs new file mode 100644 index 0000000000000000000000000000000000000000..47ad8c634112b312f330c58f581a654f46618be7 --- /dev/null +++ b/tests/run-make/windows-binary-no-external-deps/hello.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World!"); +} diff --git a/tests/run-make/windows-spawn/Makefile b/tests/run-make/windows-spawn/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..b6cdb169bab484badcb3b31543c2b84d13770ef7 --- /dev/null +++ b/tests/run-make/windows-spawn/Makefile @@ -0,0 +1,8 @@ +include ../tools.mk + +# only-windows + +all: + $(RUSTC) -o "$(TMPDIR)/hopefullydoesntexist bar.exe" hello.rs + $(RUSTC) spawn.rs + $(TMPDIR)/spawn.exe diff --git a/tests/run-make/windows-spawn/hello.rs b/tests/run-make/windows-spawn/hello.rs new file mode 100644 index 0000000000000000000000000000000000000000..47ad8c634112b312f330c58f581a654f46618be7 --- /dev/null +++ b/tests/run-make/windows-spawn/hello.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello World!"); +} diff --git a/tests/run-make/windows-spawn/spawn.rs b/tests/run-make/windows-spawn/spawn.rs new file mode 100644 index 0000000000000000000000000000000000000000..c34da3d5fde4cbf586c402e6cfccb11a4e34c451 --- /dev/null +++ b/tests/run-make/windows-spawn/spawn.rs @@ -0,0 +1,12 @@ +use std::io::ErrorKind; +use std::process::Command; + +fn main() { + // Make sure it doesn't try to run "hopefullydoesntexist bar.exe". + assert_eq!(Command::new("hopefullydoesntexist") + .arg("bar") + .spawn() + .unwrap_err() + .kind(), + ErrorKind::NotFound); +} diff --git a/tests/run-make/windows-subsystem/Makefile b/tests/run-make/windows-subsystem/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..e3cf9181de418e0cafae494163e41cabc03851a3 --- /dev/null +++ b/tests/run-make/windows-subsystem/Makefile @@ -0,0 +1,6 @@ +# ignore-cross-compile +include ../tools.mk + +all: + $(RUSTC) windows.rs + $(RUSTC) console.rs diff --git a/tests/run-make/windows-subsystem/console.rs b/tests/run-make/windows-subsystem/console.rs new file mode 100644 index 0000000000000000000000000000000000000000..61a92eb6a9db7552a16f5024f38341029e80f27e --- /dev/null +++ b/tests/run-make/windows-subsystem/console.rs @@ -0,0 +1,3 @@ +#![windows_subsystem = "console"] + +fn main() {} diff --git a/tests/run-make/windows-subsystem/windows.rs b/tests/run-make/windows-subsystem/windows.rs new file mode 100644 index 0000000000000000000000000000000000000000..1138248f07da0de0b434e6f6b37e00779b4b791d --- /dev/null +++ b/tests/run-make/windows-subsystem/windows.rs @@ -0,0 +1,3 @@ +#![windows_subsystem = "windows"] + +fn main() {} diff --git a/tests/run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile b/tests/run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile index 84dcd2393517cb1a80ecdb25a3cdf3f4b4879ca5..3c88ec34f431ec32de17f1025624a7ed6af20fe5 100644 --- a/tests/run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile +++ b/tests/run-make/x86_64-fortanix-unknown-sgx-lvi/Makefile @@ -1,4 +1,4 @@ -include ../../run-make-fulldeps/tools.mk +include ../tools.mk #only-x86_64-fortanix-unknown-sgx