@@ -108,46 +108,41 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for IndexingSlicing {
108
108
if let ExprKind :: Index ( ref array, ref index) = & expr. node {
109
109
let ty = cx. tables . expr_ty ( array) ;
110
110
if let Some ( range) = higher:: range ( cx, index) {
111
+
111
112
// Ranged indexes, i.e. &x[n..m], &x[n..], &x[..n] and &x[..]
112
113
if let ty:: Array ( _, s) = ty. sty {
113
114
let size: u128 = s. assert_usize ( cx. tcx ) . unwrap ( ) . into ( ) ;
114
115
115
- match to_const_range ( cx, range, size) {
116
- ( None , None ) => { } ,
117
- ( Some ( start) , None ) => {
118
- if start > size {
119
- utils:: span_lint (
120
- cx,
121
- OUT_OF_BOUNDS_INDEXING ,
122
- expr. span ,
123
- "range is out of bounds" ,
124
- ) ;
125
- return ;
126
- }
127
- } ,
128
- ( None , Some ( end) ) => {
129
- if end > size {
130
- utils:: span_lint (
131
- cx,
132
- OUT_OF_BOUNDS_INDEXING ,
133
- expr. span ,
134
- "range is out of bounds" ,
135
- ) ;
136
- return ;
137
- }
138
- } ,
139
- ( Some ( start) , Some ( end) ) => {
140
- if start > size || end > size {
141
- utils:: span_lint (
142
- cx,
143
- OUT_OF_BOUNDS_INDEXING ,
144
- expr. span ,
145
- "range is out of bounds" ,
146
- ) ;
147
- }
148
- // early return because both start and end are constant
116
+ let const_range = to_const_range ( cx, range, size) ;
117
+
118
+ if let ( Some ( start) , _) = const_range {
119
+ if start > size {
120
+ utils:: span_lint (
121
+ cx,
122
+ OUT_OF_BOUNDS_INDEXING ,
123
+ expr. span ,
124
+ "range is out of bounds" ,
125
+ ) ;
126
+ return ;
127
+ }
128
+ }
129
+
130
+ if let ( _, Some ( end) ) = const_range {
131
+ if end > size {
132
+ utils:: span_lint (
133
+ cx,
134
+ OUT_OF_BOUNDS_INDEXING ,
135
+ expr. span ,
136
+ "range is out of bounds" ,
137
+ ) ;
149
138
return ;
150
- } ,
139
+ }
140
+ }
141
+
142
+ if let ( Some ( _) , Some ( _) ) = const_range {
143
+ // early return because both start and end are constants
144
+ // and we have proven above that they are in bounds
145
+ return ;
151
146
}
152
147
}
153
148
0 commit comments