Skip to content

Commit 75b064d

Browse files
committed
Auto merge of #117029 - rmehri01:mir_opt_filecheck_inline_tests, r=cjgillot
Add FileCheck annotations to MIR-opt inlining tests Part of #116971, adds FileCheck annotations to MIR-opt tests in `tests/mir-opt/inline`. I left out a few (such as `inline_cycle`) where it mentioned that the particular outcome of inlining isn't important, just that the inliner doesn't get stuck in an infinite loop. r? cjgillot
2 parents b0a0759 + 5f75326 commit 75b064d

29 files changed

+156
-51
lines changed

tests/mir-opt/inline/asm_unwind.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
// skip-filecheck
21
// Tests inlining of `may_unwind` inline assembly.
32
//
43
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
54
// needs-asm-support
5+
// needs-unwind
66
// compile-flags: -Zinline-mir-hint-threshold=1000
77
#![feature(asm_unwind)]
88

@@ -20,5 +20,9 @@ fn foo() {
2020

2121
// EMIT_MIR asm_unwind.main.Inline.diff
2222
pub fn main() {
23+
// CHECK-LABEL: fn main(
24+
// CHECK: (inlined foo)
25+
// CHECK: asm!("", options(MAY_UNWIND)) -> [return: {{bb.*}}, unwind: [[unwind:bb.*]]];
26+
// CHECK: [[unwind]] (cleanup)
2327
foo();
2428
}

tests/mir-opt/inline/caller_with_trivial_bound.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
// needs-unwind
43

@@ -16,8 +15,13 @@ impl<T> Factory<T> for IntFactory {
1615
// EMIT_MIR caller_with_trivial_bound.foo.Inline.diff
1716
pub fn foo<T>()
1817
where
18+
// Because of this trivial bound, the inliner fails to normalize
19+
// `<IntFactory as Factory<T>>::Item`.
20+
// Verify that we do not inline anything, which would cause validation ICEs.
1921
IntFactory: Factory<T>,
2022
{
23+
// CHECK-LABEL: fn foo(
24+
// CHECK-NOT: (inlined bar::<T>)
2125
let mut x: <IntFactory as Factory<T>>::Item = bar::<T>();
2226
}
2327

tests/mir-opt/inline/cycle.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
// compile-flags: -Zinline-mir-hint-threshold=1000
43

54
// EMIT_MIR cycle.f.Inline.diff
65
#[inline(always)]
76
fn f(g: impl Fn()) {
7+
// CHECK-LABEL: fn f(
8+
// CHECK-NOT: inlined
89
g();
910
}
1011

1112
// EMIT_MIR cycle.g.Inline.diff
1213
#[inline(always)]
1314
fn g() {
15+
// CHECK-LABEL: fn g(
16+
// CHECK-NOT: inlined
17+
// CHECK: (inlined f::<fn() {main}>)
18+
// CHECK-NOT: inlined
1419
f(main);
1520
}
1621

1722
// EMIT_MIR cycle.main.Inline.diff
1823
fn main() {
24+
// CHECK-LABEL: fn main(
25+
// CHECK-NOT: inlined
26+
// CHECK: (inlined f::<fn() {g}>)
27+
// CHECK-NOT: inlined
1928
f(g);
2029
}

tests/mir-opt/inline/dont_ice_on_generic_rust_call.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
// compile-flags: -Zmir-enable-passes=+Inline --crate-type=lib
43

@@ -8,5 +7,7 @@ use std::marker::Tuple;
87

98
// EMIT_MIR dont_ice_on_generic_rust_call.call.Inline.diff
109
pub fn call<I: Tuple>(mut mock: Box<dyn FnMut<I, Output = ()>>, input: I) {
10+
// CHECK-LABEL: fn call(
11+
// CHECK-NOT: inlined
1112
mock.call_mut(input)
1213
}

tests/mir-opt/inline/dyn_trait.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
#![crate_type = "lib"]
43

@@ -20,18 +19,26 @@ pub trait Query {
2019
// EMIT_MIR dyn_trait.mk_cycle.Inline.diff
2120
#[inline(always)]
2221
pub fn mk_cycle<V: Debug>(c: &dyn Cache<V = V>) {
22+
// CHECK-LABEL: fn mk_cycle(
23+
// CHECK-NOT: inlined
2324
c.store_nocache()
2425
}
2526

2627
// EMIT_MIR dyn_trait.try_execute_query.Inline.diff
2728
#[inline(always)]
2829
pub fn try_execute_query<C: Cache>(c: &C) {
30+
// CHECK-LABEL: fn try_execute_query(
31+
// CHECK: (inlined mk_cycle::<<C as Cache>::V>)
2932
mk_cycle(c)
3033
}
3134

3235
// EMIT_MIR dyn_trait.get_query.Inline.diff
3336
#[inline(always)]
3437
pub fn get_query<Q: Query, T>(t: &T) {
38+
// CHECK-LABEL: fn get_query(
39+
// CHECK-NOT: inlined
3540
let c = Q::cache(t);
41+
// CHECK: (inlined try_execute_query::<<Q as Query>::C>)
42+
// CHECK: (inlined mk_cycle::<<Q as Query>::V>)
3643
try_execute_query(c)
3744
}

tests/mir-opt/inline/exponential_runtime.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
// Checks that code with exponential runtime does not have exponential behavior in inlining.
43

@@ -85,5 +84,14 @@ impl A for () {
8584

8685
// EMIT_MIR exponential_runtime.main.Inline.diff
8786
fn main() {
87+
// CHECK-LABEL: fn main(
88+
// CHECK-NOT: inlined
89+
// CHECK: (inlined <() as G>::call)
90+
// CHECK: (inlined <() as F>::call)
91+
// CHECK: (inlined <() as E>::call)
92+
// CHECK: (inlined <() as D>::call)
93+
// CHECK: (inlined <() as C>::call)
94+
// CHECK: (inlined <() as B>::call)
95+
// CHECK-NOT: inlined
8896
<() as G>::call();
8997
}

tests/mir-opt/inline/inline_any_operand.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// compile-flags: -Z span_free_formats
32

43
// Tests that MIR inliner works for any operand
@@ -9,6 +8,8 @@ fn main() {
98

109
// EMIT_MIR inline_any_operand.bar.Inline.after.mir
1110
fn bar() -> bool {
11+
// CHECK-LABEL: fn bar(
12+
// CHECK: (inlined foo)
1213
let f = foo;
1314
f(1, -1)
1415
}

tests/mir-opt/inline/inline_box_fn.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
// skip-filecheck
21
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
32
// unit-test: Inline
43
// compile-flags: --crate-type=lib
54

65
// EMIT_MIR inline_box_fn.call.Inline.diff
76
fn call(x: Box<dyn Fn(i32)>) {
7+
// CHECK-LABEL: fn call(
8+
// CHECK-NOT: inlined
89
x(1);
910
}

tests/mir-opt/inline/inline_closure.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// compile-flags: -Z span_free_formats
32

43
// Tests that MIR inliner can handle closure arguments. (#45894)
@@ -10,5 +9,8 @@ fn main() {
109
// EMIT_MIR inline_closure.foo.Inline.after.mir
1110
fn foo<T: Copy>(_t: T, q: i32) -> i32 {
1211
let x = |_t, _q| _t;
12+
13+
// CHECK-LABEL: fn foo(
14+
// CHECK: (inlined foo::<T>::{closure#0})
1315
x(q, q)
1416
}

tests/mir-opt/inline/inline_closure_borrows_arg.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// skip-filecheck
21
// compile-flags: -Z span_free_formats -Zunsound-mir-opts
32

43
// Tests that MIR inliner can handle closure arguments,
@@ -14,5 +13,8 @@ fn foo<T: Copy>(_t: T, q: &i32) -> i32 {
1413
let variable = &*r;
1514
*variable
1615
};
16+
17+
// CHECK-LABEL: fn foo(
18+
// CHECK: (inlined foo::<T>::{closure#0})
1719
x(q, q)
1820
}

0 commit comments

Comments
 (0)