Rollup merge of #61023 - spastorino:use-iterate-qualify-consts, r=oli-obk
Migrate from recursion to iterate on qualify consts visitor impl r? @oli-obk
This commit is contained in:
commit
fba5ed355a
@ -930,15 +930,15 @@ impl<'a, 'tcx> Visitor<'tcx> for Checker<'a, 'tcx> {
|
||||
context: PlaceContext,
|
||||
location: Location) {
|
||||
debug!("visit_place: place={:?} context={:?} location={:?}", place, context, location);
|
||||
self.super_place(place, context, location);
|
||||
match *place {
|
||||
Place::Base(PlaceBase::Local(_)) => {}
|
||||
Place::Base(PlaceBase::Static(box Static{ kind: StaticKind::Promoted(_), .. })) => {
|
||||
place.iterate(|place_base, place_projections| {
|
||||
match place_base {
|
||||
PlaceBase::Local(_) => {}
|
||||
PlaceBase::Static(box Static{ kind: StaticKind::Promoted(_), .. }) => {
|
||||
unreachable!()
|
||||
}
|
||||
Place::Base(PlaceBase::Static(box Static{ kind: StaticKind::Static(def_id), .. })) => {
|
||||
PlaceBase::Static(box Static{ kind: StaticKind::Static(def_id), .. }) => {
|
||||
if self.tcx
|
||||
.get_attrs(def_id)
|
||||
.get_attrs(*def_id)
|
||||
.iter()
|
||||
.any(|attr| attr.check_name(sym::thread_local)) {
|
||||
if self.mode != Mode::Fn {
|
||||
@ -971,8 +971,8 @@ impl<'a, 'tcx> Visitor<'tcx> for Checker<'a, 'tcx> {
|
||||
a constant instead", self.mode);
|
||||
if self.tcx.sess.teach(&err.get_code().unwrap()) {
|
||||
err.note(
|
||||
"Static and const variables can refer to other const variables. But a \
|
||||
const variable cannot refer to a static variable."
|
||||
"Static and const variables can refer to other const variables. \
|
||||
But a const variable cannot refer to a static variable."
|
||||
);
|
||||
err.help(
|
||||
"To fix this, the value can be extracted as a const and then used."
|
||||
@ -981,7 +981,9 @@ impl<'a, 'tcx> Visitor<'tcx> for Checker<'a, 'tcx> {
|
||||
err.emit()
|
||||
}
|
||||
}
|
||||
Place::Projection(ref proj) => {
|
||||
}
|
||||
|
||||
for proj in place_projections {
|
||||
match proj.elem {
|
||||
ProjectionElem::Deref => {
|
||||
if context.is_mutating_use() {
|
||||
@ -1041,7 +1043,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Checker<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn visit_operand(&mut self, operand: &Operand<'tcx>, location: Location) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user