diff options
| author | 许杰友 Jieyou Xu (Joe) <jieyouxu@outlook.com> | 2024-04-04 21:59:08 +0100 |
|---|---|---|
| committer | 许杰友 Jieyou Xu (Joe) <jieyouxu@outlook.com> | 2024-04-04 21:59:08 +0100 |
| commit | 476156aedf4b4bc74e10d82d59c3a7c4429a8d0e (patch) | |
| tree | bcc9bb2133706bd8574efdd85911c8049a8209c2 /tests/codegen | |
| parent | a4b11c8e6057bd47f8d241baafd5ae1e813d62fd (diff) | |
| download | rust-476156aedf4b4bc74e10d82d59c3a7c4429a8d0e.tar.gz rust-476156aedf4b4bc74e10d82d59c3a7c4429a8d0e.zip | |
Port issue-7349 to a codegen test
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/no-redundant-item-monomorphization.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/codegen/no-redundant-item-monomorphization.rs b/tests/codegen/no-redundant-item-monomorphization.rs new file mode 100644 index 00000000000..466037c3770 --- /dev/null +++ b/tests/codegen/no-redundant-item-monomorphization.rs @@ -0,0 +1,33 @@ +// 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. + +// issue: rust-lang/rust#7349 +//@ compile-flags: -Cno-prepopulate-passes -Copt-level=0 + +// CHECK-COUNT-1: ret i32 8675309 +// CHECK-COUNT-1: ret i32 11235813 + +fn outer<T>() { + #[allow(dead_code)] + fn inner() -> u32 { + 8675309 + } + inner(); +} + +extern "C" fn outer_foreign<T>() { + #[allow(dead_code)] + fn inner() -> u32 { + 11235813 + } + inner(); +} + +fn main() { + outer::<isize>(); + outer::<usize>(); + outer_foreign::<isize>(); + outer_foreign::<usize>(); +} |
