]> git.lizzy.rs Git - rust.git/blob - src/test/codegen/issue-45222.rs
Auto merge of #61421 - vorner:string-in-rc-into-raw-docs, r=RalfJung
[rust.git] / src / test / codegen / issue-45222.rs
1 // compile-flags: -O
2
3 #![crate_type = "lib"]
4
5 // verify that LLVM recognizes a loop involving 0..=n and will const-fold it.
6
7 //------------------------------------------------------------------------------
8 // Example from original issue #45222
9
10 fn foo2(n: u64) -> u64 {
11     let mut count = 0;
12     for _ in 0..n {
13         for j in (0..=n).rev() {
14             count += j;
15         }
16     }
17     count
18 }
19
20 // CHECK-LABEL: @check_foo2
21 #[no_mangle]
22 pub fn check_foo2() -> u64 {
23     // CHECK: ret i64 500005000000000
24     foo2(100000)
25 }
26
27 //------------------------------------------------------------------------------
28 // Simplified example of #45222
29
30 fn triangle_inc(n: u64) -> u64 {
31     let mut count = 0;
32     for j in 0 ..= n {
33         count += j;
34     }
35     count
36 }
37
38 // CHECK-LABEL: @check_triangle_inc
39 #[no_mangle]
40 pub fn check_triangle_inc() -> u64 {
41     // CHECK: ret i64 5000050000
42     triangle_inc(100000)
43 }
44
45 //------------------------------------------------------------------------------
46 // Demo in #48012
47
48 fn foo3r(n: u64) -> u64 {
49     let mut count = 0;
50     (0..n).for_each(|_| {
51         (0 ..= n).rev().for_each(|j| {
52             count += j;
53         })
54     });
55     count
56 }
57
58 // CHECK-LABEL: @check_foo3r
59 #[no_mangle]
60 pub fn check_foo3r() -> u64 {
61     // CHECK: ret i64 500050000000
62     foo3r(10000)
63 }