Create const block DefIds in typeck instead of ast lowering
This commit is contained in:
parent
e5cba17b84
commit
ddc5f9b6c1
39 changed files with 162 additions and 189 deletions
|
@ -196,11 +196,6 @@ impl<'tcx> Visitor<'tcx> for CheckConstVisitor<'tcx> {
|
|||
self.recurse_into(kind, None, |this| intravisit::walk_anon_const(this, anon));
|
||||
}
|
||||
|
||||
fn visit_inline_const(&mut self, block: &'tcx hir::ConstBlock) {
|
||||
let kind = Some(hir::ConstContext::Const { inline: true });
|
||||
self.recurse_into(kind, None, |this| intravisit::walk_inline_const(this, block));
|
||||
}
|
||||
|
||||
fn visit_body(&mut self, body: &'tcx hir::Body<'tcx>) {
|
||||
let owner = self.tcx.hir().body_owner_def_id(body.id());
|
||||
let kind = self.tcx.hir().body_const_context(owner);
|
||||
|
@ -228,6 +223,11 @@ impl<'tcx> Visitor<'tcx> for CheckConstVisitor<'tcx> {
|
|||
self.const_check_violated(expr, e.span);
|
||||
}
|
||||
}
|
||||
hir::ExprKind::ConstBlock(expr) => {
|
||||
let kind = Some(hir::ConstContext::Const { inline: true });
|
||||
self.recurse_into(kind, None, |this| intravisit::walk_expr(this, expr));
|
||||
return;
|
||||
}
|
||||
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
@ -587,6 +587,16 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
|
|||
hir::ExprKind::OffsetOf(..) => {
|
||||
self.handle_offset_of(expr);
|
||||
}
|
||||
hir::ExprKind::ConstBlock(expr) => {
|
||||
// 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);
|
||||
|
||||
intravisit::walk_expr(self, expr);
|
||||
|
||||
self.in_pat = in_pat;
|
||||
return;
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
@ -648,17 +658,6 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
|
|||
|
||||
self.in_pat = in_pat;
|
||||
}
|
||||
|
||||
fn visit_inline_const(&mut self, c: &'tcx hir::ConstBlock) {
|
||||
// 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(c.def_id);
|
||||
intravisit::walk_inline_const(self, c);
|
||||
|
||||
self.in_pat = in_pat;
|
||||
}
|
||||
}
|
||||
|
||||
fn has_allow_dead_code_or_lang_attr(
|
||||
|
|
|
@ -147,6 +147,11 @@ fn check_liveness(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Don't run for inline consts, they are collected together with their parent
|
||||
if let DefKind::InlineConst = tcx.def_kind(def_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't run unused pass for #[naked]
|
||||
if tcx.has_attr(def_id.to_def_id(), sym::naked) {
|
||||
return;
|
||||
|
@ -1144,12 +1149,13 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
|
|||
}
|
||||
|
||||
hir::ExprKind::Lit(..)
|
||||
| hir::ExprKind::ConstBlock(..)
|
||||
| hir::ExprKind::Err(_)
|
||||
| hir::ExprKind::Path(hir::QPath::TypeRelative(..))
|
||||
| hir::ExprKind::Path(hir::QPath::LangItem(..))
|
||||
| hir::ExprKind::OffsetOf(..) => succ,
|
||||
|
||||
hir::ExprKind::ConstBlock(expr) => self.propagate_through_expr(expr, succ),
|
||||
|
||||
// Note that labels have been resolved, so we don't need to look
|
||||
// at the label ident
|
||||
hir::ExprKind::Block(ref blk, _) => self.propagate_through_block(blk, succ),
|
||||
|
|
|
@ -93,10 +93,6 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> {
|
|||
self.with_context(Constant, |v| intravisit::walk_anon_const(v, c));
|
||||
}
|
||||
|
||||
fn visit_inline_const(&mut self, c: &'hir hir::ConstBlock) {
|
||||
self.with_context(Constant, |v| intravisit::walk_inline_const(v, c));
|
||||
}
|
||||
|
||||
fn visit_fn(
|
||||
&mut self,
|
||||
fk: hir::intravisit::FnKind<'hir>,
|
||||
|
@ -289,6 +285,9 @@ impl<'a, 'hir> Visitor<'hir> for CheckLoopVisitor<'a, 'hir> {
|
|||
self.cx_stack.len() - 1,
|
||||
)
|
||||
}
|
||||
hir::ExprKind::ConstBlock(expr) => {
|
||||
self.with_context(Constant, |v| intravisit::walk_expr(v, expr));
|
||||
}
|
||||
_ => intravisit::walk_expr(self, e),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue