Rollup merge of #88036 - nbdd0121:const3, r=petrochenkov
Fix dead code warning when inline const is used in pattern Fixes #78171
This commit is contained in:
commit
016f691068
2 changed files with 52 additions and 0 deletions
|
@ -15,6 +15,7 @@ use rustc_middle::middle::privacy;
|
||||||
use rustc_middle::ty::{self, DefIdTree, TyCtxt};
|
use rustc_middle::ty::{self, DefIdTree, TyCtxt};
|
||||||
use rustc_session::lint;
|
use rustc_session::lint;
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
|
use std::mem;
|
||||||
|
|
||||||
// Any local node that may call something in its body block should be
|
// Any local node that may call something in its body block should be
|
||||||
// explored. For example, if it's a live Node::Item that is a
|
// explored. For example, if it's a live Node::Item that is a
|
||||||
|
@ -395,8 +396,14 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_anon_const(&mut self, c: &'tcx hir::AnonConst) {
|
fn visit_anon_const(&mut self, c: &'tcx hir::AnonConst) {
|
||||||
|
// When inline const blocks are used in pattern position, paths
|
||||||
|
// referenced by it should be considered as used.
|
||||||
|
let in_pat = mem::replace(&mut self.in_pat, false);
|
||||||
|
|
||||||
self.live_symbols.insert(self.tcx.hir().local_def_id(c.hir_id));
|
self.live_symbols.insert(self.tcx.hir().local_def_id(c.hir_id));
|
||||||
intravisit::walk_anon_const(self, c);
|
intravisit::walk_anon_const(self, c);
|
||||||
|
|
||||||
|
self.in_pat = in_pat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
45
src/test/ui/lint/dead-code/anon-const-in-pat.rs
Normal file
45
src/test/ui/lint/dead-code/anon-const-in-pat.rs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
// check-pass
|
||||||
|
#![feature(inline_const)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
#![deny(dead_code)]
|
||||||
|
|
||||||
|
const fn one() -> i32 {
|
||||||
|
1
|
||||||
|
}
|
||||||
|
|
||||||
|
const fn two() -> i32 {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
|
||||||
|
const fn three() -> i32 {
|
||||||
|
3
|
||||||
|
}
|
||||||
|
|
||||||
|
fn inline_const() {
|
||||||
|
// rust-lang/rust#78171: dead_code lint triggers even though function is used in const pattern
|
||||||
|
match 1 {
|
||||||
|
const { one() } => {}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn inline_const_range() {
|
||||||
|
match 1 {
|
||||||
|
1 ..= const { two() } => {}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct S<const C: i32>;
|
||||||
|
|
||||||
|
fn const_generic_arg() {
|
||||||
|
match S::<3> {
|
||||||
|
S::<{three()}> => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
inline_const();
|
||||||
|
inline_const_range();
|
||||||
|
const_generic_arg();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue