File tree 2 files changed +52
-0
lines changed
compiler/rustc_passes/src
src/test/ui/lint/dead-code
2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ use rustc_middle::middle::privacy;
15
15
use rustc_middle:: ty:: { self , DefIdTree , TyCtxt } ;
16
16
use rustc_session:: lint;
17
17
use rustc_span:: symbol:: { sym, Symbol } ;
18
+ use std:: mem;
18
19
19
20
// Any local node that may call something in its body block should be
20
21
// explored. For example, if it's a live Node::Item that is a
@@ -395,8 +396,14 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
395
396
}
396
397
397
398
fn visit_anon_const ( & mut self , c : & ' tcx hir:: AnonConst ) {
399
+ // When inline const blocks are used in pattern position, paths
400
+ // referenced by it should be considered as used.
401
+ let in_pat = mem:: replace ( & mut self . in_pat , false ) ;
402
+
398
403
self . live_symbols . insert ( self . tcx . hir ( ) . local_def_id ( c. hir_id ) ) ;
399
404
intravisit:: walk_anon_const ( self , c) ;
405
+
406
+ self . in_pat = in_pat;
400
407
}
401
408
}
402
409
Original file line number Diff line number Diff line change
1
+ // check-pass
2
+ #![ feature( inline_const) ]
3
+ #![ allow( incomplete_features) ]
4
+ #![ deny( dead_code) ]
5
+
6
+ const fn one ( ) -> i32 {
7
+ 1
8
+ }
9
+
10
+ const fn two ( ) -> i32 {
11
+ 2
12
+ }
13
+
14
+ const fn three ( ) -> i32 {
15
+ 3
16
+ }
17
+
18
+ fn inline_const ( ) {
19
+ // rust-lang/rust#78171: dead_code lint triggers even though function is used in const pattern
20
+ match 1 {
21
+ const { one ( ) } => { }
22
+ _ => { }
23
+ }
24
+ }
25
+
26
+ fn inline_const_range ( ) {
27
+ match 1 {
28
+ 1 ..= const { two( ) } => { }
29
+ _ => { }
30
+ }
31
+ }
32
+
33
+ struct S < const C : i32 > ;
34
+
35
+ fn const_generic_arg ( ) {
36
+ match S :: < 3 > {
37
+ S :: < { three ( ) } > => { }
38
+ }
39
+ }
40
+
41
+ fn main ( ) {
42
+ inline_const ( ) ;
43
+ inline_const_range ( ) ;
44
+ const_generic_arg ( ) ;
45
+ }
You can’t perform that action at this time.
0 commit comments