summaryrefslogtreecommitdiffstats
path: root/tests/run-make/sepcomp-cci-copies
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run-make/sepcomp-cci-copies')
-rw-r--r--tests/run-make/sepcomp-cci-copies/Makefile12
-rw-r--r--tests/run-make/sepcomp-cci-copies/cci_lib.rs6
-rw-r--r--tests/run-make/sepcomp-cci-copies/foo.rs25
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();
+}