]> git.lizzy.rs Git - rust.git/blob - tests/mir-opt/lower_array_len.rs
Rollup merge of #107769 - compiler-errors:pointer-like, r=eholk
[rust.git] / tests / mir-opt / lower_array_len.rs
1 // unit-test: NormalizeArrayLen
2 // compile-flags: -Zmir-enable-passes=+LowerSliceLenCalls
3
4 // EMIT_MIR lower_array_len.array_bound.NormalizeArrayLen.diff
5 pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
6     if index < slice.len() {
7         slice[index]
8     } else {
9         42
10     }
11 }
12
13 // EMIT_MIR lower_array_len.array_bound_mut.NormalizeArrayLen.diff
14 pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8 {
15     if index < slice.len() {
16         slice[index]
17     } else {
18         slice[0] = 42;
19
20         42
21     }
22 }
23
24 // EMIT_MIR lower_array_len.array_len.NormalizeArrayLen.diff
25 pub fn array_len<const N: usize>(arr: &[u8; N]) -> usize {
26     arr.len()
27 }
28
29 // EMIT_MIR lower_array_len.array_len_by_value.NormalizeArrayLen.diff
30 pub fn array_len_by_value<const N: usize>(arr: [u8; N]) -> usize {
31     arr.len()
32 }
33
34 // EMIT_MIR lower_array_len.array_len_reborrow.NormalizeArrayLen.diff
35 pub fn array_len_reborrow<const N: usize>(mut arr: [u8; N]) -> usize {
36     let arr: &mut [_] = &mut arr;
37     let arr = &*arr;
38     arr.len()
39 }
40
41 // EMIT_MIR lower_array_len.array_len_raw.NormalizeArrayLen.diff
42 pub fn array_len_raw<const N: usize>(arr: [u8; N]) -> usize {
43     let arr: &[_] = &arr;
44     let arr = std::ptr::addr_of!(*arr);
45     unsafe { &*arr }.len()
46 }
47
48 fn main() {
49     let _ = array_bound(3, &[0, 1, 2, 3]);
50     let mut tmp = [0, 1, 2, 3, 4];
51     let _ = array_bound_mut(3, &mut [0, 1, 2, 3]);
52     let _ = array_len(&[0]);
53     let _ = array_len_by_value([0, 2]);
54     let _ = array_len_reborrow([0, 2]);
55     let _ = array_len_raw([0, 2]);
56 }