Wrap the whole LocalInfo in ClearCrossCrate.
This commit is contained in:
parent
2e7034ebf7
commit
bcb161def7
19 changed files with 134 additions and 142 deletions
|
@ -24,7 +24,7 @@ struct ConstMutationChecker<'a, 'tcx> {
|
|||
|
||||
impl<'tcx> ConstMutationChecker<'_, 'tcx> {
|
||||
fn is_const_item(&self, local: Local) -> Option<DefId> {
|
||||
if let Some(box LocalInfo::ConstRef { def_id }) = self.body.local_decls[local].local_info {
|
||||
if let LocalInfo::ConstRef { def_id } = *self.body.local_decls[local].local_info() {
|
||||
Some(def_id)
|
||||
} else {
|
||||
None
|
||||
|
|
|
@ -182,7 +182,7 @@ impl<'tcx> Visitor<'tcx> for UnsafetyChecker<'_, 'tcx> {
|
|||
// If the projection root is an artificial local that we introduced when
|
||||
// desugaring `static`, give a more specific error message
|
||||
// (avoid the general "raw pointer" clause below, that would only be confusing).
|
||||
if let Some(box LocalInfo::StaticRef { def_id, .. }) = decl.local_info {
|
||||
if let LocalInfo::StaticRef { def_id, .. } = *decl.local_info() {
|
||||
if self.tcx.is_mutable_static(def_id) {
|
||||
self.require_unsafe(
|
||||
UnsafetyViolationKind::General,
|
||||
|
|
|
@ -40,7 +40,7 @@ impl<'tcx> MutVisitor<'tcx> for DerefChecker<'tcx> {
|
|||
let temp = self.patcher.new_internal_with_info(
|
||||
ty,
|
||||
self.local_decls[p_ref.local].source_info.span,
|
||||
Some(Box::new(LocalInfo::DerefTemp)),
|
||||
LocalInfo::DerefTemp,
|
||||
);
|
||||
|
||||
// We are adding current p_ref's projections to our
|
||||
|
|
|
@ -924,13 +924,19 @@ fn compute_layout<'tcx>(
|
|||
debug!(?decl);
|
||||
|
||||
let ignore_for_traits = if tcx.sess.opts.unstable_opts.drop_tracking_mir {
|
||||
// Do not `assert_crate_local` here, as post-borrowck cleanup may have already cleared
|
||||
// the information. This is alright, since `ignore_for_traits` is only relevant when
|
||||
// this code runs on pre-cleanup MIR, and `ignore_for_traits = false` is the safer
|
||||
// default.
|
||||
match decl.local_info {
|
||||
// Do not include raw pointers created from accessing `static` items, as those could
|
||||
// well be re-created by another access to the same static.
|
||||
Some(box LocalInfo::StaticRef { is_thread_local, .. }) => !is_thread_local,
|
||||
ClearCrossCrate::Set(box LocalInfo::StaticRef { is_thread_local, .. }) => {
|
||||
!is_thread_local
|
||||
}
|
||||
// Fake borrows are only read by fake reads, so do not have any reality in
|
||||
// post-analysis MIR.
|
||||
Some(box LocalInfo::FakeBorrow) => true,
|
||||
ClearCrossCrate::Set(box LocalInfo::FakeBorrow) => true,
|
||||
_ => false,
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue