summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo>2020-03-19 17:18:16 +0100
committerMichael Woerister <michaelwoerister@posteo>2020-03-31 16:23:28 +0200
commit408e6e3dbd8ab2e4f154559859c92fd88b5e4713 (patch)
tree7965f3b2e5e16db2d953a6cbbf56e4ef7118c5d1
parent1e5b4594e1aad47fccd855fa54dd40a84d07dbdf (diff)
downloadrust-408e6e3dbd8ab2e4f154559859c92fd88b5e4713.tar.gz
Add a test case for incremental + codegen-units interaction.
-rw-r--r--src/test/codegen-units/partitioning/incremental-merging.rs42
-rw-r--r--src/tools/compiletest/src/runtest.rs12
2 files changed, 53 insertions, 1 deletions
diff --git a/src/test/codegen-units/partitioning/incremental-merging.rs b/src/test/codegen-units/partitioning/incremental-merging.rs
new file mode 100644
index 00000000000..ca2df19096e
--- /dev/null
+++ b/src/test/codegen-units/partitioning/incremental-merging.rs
@@ -0,0 +1,42 @@
+// ignore-tidy-linelength
+// We specify -C incremental here because we want to test the partitioning for
+// incremental compilation
+// compile-flags:-Zprint-mono-items=lazy -Cincremental=tmp/partitioning-tests/incremental-merging
+// compile-flags:-Ccodegen-units=3
+
+#![crate_type = "rlib"]
+
+// This test makes sure that merging of CGUs works together with incremental
+// compilation but at the same time does not modify names of CGUs that were not
+// affected by merging.
+//
+// We expect CGUs `aaa` and `bbb` to be merged (because they are the smallest),
+// while `ccc` and `ddd` are supposed to stay untouched.
+
+pub mod aaa {
+ //~ MONO_ITEM fn incremental_merging::aaa[0]::foo[0] @@ incremental_merging-aaa--incremental_merging-bbb[External]
+ pub fn foo(a: u64) -> u64 {
+ a + 1
+ }
+}
+
+pub mod bbb {
+ //~ MONO_ITEM fn incremental_merging::bbb[0]::foo[0] @@ incremental_merging-aaa--incremental_merging-bbb[External]
+ pub fn foo(a: u64, b: u64) -> u64 {
+ a + b + 1
+ }
+}
+
+pub mod ccc {
+ //~ MONO_ITEM fn incremental_merging::ccc[0]::foo[0] @@ incremental_merging-ccc[External]
+ pub fn foo(a: u64, b: u64, c: u64) -> u64 {
+ a + b + c + 1
+ }
+}
+
+pub mod ddd {
+ //~ MONO_ITEM fn incremental_merging::ddd[0]::foo[0] @@ incremental_merging-ddd[External]
+ pub fn foo(a: u64, b: u64, c: u64, d: u64) -> u64 {
+ a + b + c + d + 1
+ }
+}
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index 0ee016f33dd..295d96ce419 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -2517,7 +2517,7 @@ impl<'test> TestCx<'test> {
.filter(|s| !s.is_empty())
.map(|s| {
if cgu_has_crate_disambiguator {
- remove_crate_disambiguator_from_cgu(s)
+ remove_crate_disambiguators_from_set_of_cgu_names(s)
} else {
s.to_string()
}
@@ -2567,6 +2567,16 @@ impl<'test> TestCx<'test> {
new_name
}
+
+ // The name of merged CGUs is constructed as the names of the original
+ // CGUs joined with "--". This function splits such composite CGU names
+ // and handles each component individually.
+ fn remove_crate_disambiguators_from_set_of_cgu_names(cgus: &str) -> String {
+ cgus.split("--")
+ .map(|cgu| remove_crate_disambiguator_from_cgu(cgu))
+ .collect::<Vec<_>>()
+ .join("--")
+ }
}
fn init_incremental_test(&self) {