summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/only_used_in_recursion.rs
blob: f71e8ead5195ea27653bbfd7f24869490ffcc41b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#![warn(clippy::only_used_in_recursion)]

fn _simple(x: u32) -> u32 {
    x
}

fn _simple2(x: u32) -> u32 {
    _simple(x)
}

fn _one_unused(flag: u32, a: usize) -> usize {
    if flag == 0 { 0 } else { _one_unused(flag - 1, a) }
}

fn _two_unused(flag: u32, a: u32, b: i32) -> usize {
    if flag == 0 { 0 } else { _two_unused(flag - 1, a, b) }
}

fn _with_calc(flag: u32, a: i64) -> usize {
    if flag == 0 {
        0
    } else {
        _with_calc(flag - 1, (-a + 10) * 5)
    }
}

// Don't lint
fn _used_with_flag(flag: u32, a: u32) -> usize {
    if flag == 0 { 0 } else { _used_with_flag(flag ^ a, a - 1) }
}

fn _used_with_unused(flag: u32, a: i32, b: i32) -> usize {
    if flag == 0 {
        0
    } else {
        _used_with_unused(flag - 1, -a, a + b)
    }
}

fn _codependent_unused(flag: u32, a: i32, b: i32) -> usize {
    if flag == 0 {
        0
    } else {
        _codependent_unused(flag - 1, a * b, a + b)
    }
}

fn _not_primitive(flag: u32, b: String) -> usize {
    if flag == 0 { 0 } else { _not_primitive(flag - 1, b) }
}

struct A;

impl A {
    fn _method(flag: usize, a: usize) -> usize {
        if flag == 0 { 0 } else { Self::_method(flag - 1, a) }
    }

    fn _method_self(&self, flag: usize, a: usize) -> usize {
        if flag == 0 { 0 } else { self._method_self(flag - 1, a) }
    }
}

trait B {
    fn method(flag: u32, a: usize) -> usize;
    fn method_self(&self, flag: u32, a: usize) -> usize;
}

impl B for A {
    fn method(flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { Self::method(flag - 1, a) }
    }

    fn method_self(&self, flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { self.method_self(flag - 1, a) }
    }
}

impl B for () {
    fn method(flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { a }
    }

    fn method_self(&self, flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { a }
    }
}

impl B for u32 {
    fn method(flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { <() as B>::method(flag, a) }
    }

    fn method_self(&self, flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { ().method_self(flag, a) }
    }
}

trait C {
    fn method(flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { Self::method(flag - 1, a) }
    }

    fn method_self(&self, flag: u32, a: usize) -> usize {
        if flag == 0 { 0 } else { self.method_self(flag - 1, a) }
    }
}

fn _ignore(flag: usize, _a: usize) -> usize {
    if flag == 0 { 0 } else { _ignore(flag - 1, _a) }
}

fn main() {}