diff options
Diffstat (limited to 'tests/run-make/sepcomp-cci-copies')
-rw-r--r-- | tests/run-make/sepcomp-cci-copies/Makefile | 12 | ||||
-rw-r--r-- | tests/run-make/sepcomp-cci-copies/cci_lib.rs | 6 | ||||
-rw-r--r-- | tests/run-make/sepcomp-cci-copies/foo.rs | 25 |
3 files changed, 43 insertions, 0 deletions
diff --git a/tests/run-make/sepcomp-cci-copies/Makefile b/tests/run-make/sepcomp-cci-copies/Makefile new file mode 100644 index 000000000..df289d0b0 --- /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 000000000..869d4a6cd --- /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 000000000..ba251fcb0 --- /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(); +} |