diff --git a/rr_frontend/.cargo/config.toml b/rr_frontend/.cargo/config.toml index a4f08575ed7e43af7b407427472c317c9ac777ff..05a9e34546e1bcf1365a3f45c174d384b753b784 100644 --- a/rr_frontend/.cargo/config.toml +++ b/rr_frontend/.cargo/config.toml @@ -80,7 +80,6 @@ rustflags = [ "-Aclippy::unwrap_in_result", # clippy::style - "-Aclippy::match_like_matches_macro", "-Aclippy::needless_borrow", "-Aclippy::needless_late_init", "-Aclippy::needless_return", diff --git a/rr_frontend/radium/src/specs.rs b/rr_frontend/radium/src/specs.rs index d57b2372d119ce93b3ade48e72745d609563c653..c35c57500e2b5e80de37fa8c867170390fa15003 100644 --- a/rr_frontend/radium/src/specs.rs +++ b/rr_frontend/radium/src/specs.rs @@ -306,10 +306,7 @@ impl SynType { /// Check if the SynType contains a free variable `Var(i)`. pub const fn is_closed(&self) -> bool { - match self { - Self::Var(_) => false, - _ => true, - } + !matches!(self, Self::Var(_)) } /// Substitute variables `Var` according to the given substitution (variable `i` is mapped to diff --git a/rr_frontend/translation/src/checked_op_analysis.rs b/rr_frontend/translation/src/checked_op_analysis.rs index b7295099180085d8cc82f5c11ece016bc6dcb2cf..29a4a2f1e6be53bdcc47023b427c6bf455762f26 100644 --- a/rr_frontend/translation/src/checked_op_analysis.rs +++ b/rr_frontend/translation/src/checked_op_analysis.rs @@ -33,7 +33,7 @@ impl<'def, 'tcx> CheckedOpLocalAnalysis<'def, 'tcx> { } const fn is_checked_op(&self, val: &Rvalue<'tcx>) -> bool { - if let Rvalue::CheckedBinaryOp(_, _) = *val { true } else { false } + matches!(*val, Rvalue::CheckedBinaryOp(_, _)) } /// Get the type of a checked-op result. diff --git a/rr_frontend/translation/src/environment/polonius_info.rs b/rr_frontend/translation/src/environment/polonius_info.rs index 2d16fdaf96c13bbade29bd04b3a454827c95559c..bc5d9edf7adfd3a46c73af0da001c8ea8e9a70d3 100644 --- a/rr_frontend/translation/src/environment/polonius_info.rs +++ b/rr_frontend/translation/src/environment/polonius_info.rs @@ -55,31 +55,19 @@ pub enum AtomicRegion { impl AtomicRegion { pub const fn is_loan(&self) -> bool { - match *self { - Self::Loan(_, _) => true, - _ => false, - } + matches!(*self, Self::Loan(_, _)) } pub const fn is_universal(&self) -> bool { - match *self { - Self::Universal(_, _) => true, - _ => false, - } + matches!(*self, Self::Universal(_, _)) } pub const fn is_place(&self) -> bool { - match *self { - Self::PlaceRegion(_) => true, - _ => false, - } + matches!(*self, Self::PlaceRegion(_)) } pub const fn is_value(&self) -> bool { - match *self { - Self::Unknown(_) => true, - _ => false, - } + matches!(*self, Self::Unknown(_)) } pub const fn get_region(&self) -> facts::Region { @@ -1061,21 +1049,20 @@ impl<'a, 'tcx: 'a> PoloniusInfo<'a, 'tcx> { loan: facts::Loan, location: mir::Location, ) -> Vec<facts::Loan> { - if let Some(all_conflicting_loans) = self.loan_conflict_sets.get(&loan) { - let point = self.get_point(location, facts::PointType::Mid); - if let Some(alive_loans) = self.borrowck_out_facts.loan_live_at.get(&point) { - let alive_conflicting_loans = - all_conflicting_loans.iter().filter(|loan| alive_loans.contains(loan)).cloned().collect(); - trace!( - "get_alive_conflicting_loans({:?}, {:?}) = {:?}", - loan, - location, - alive_conflicting_loans - ); - return alive_conflicting_loans; - } - } - Vec::new() + let Some(all_conflicting_loans) = self.loan_conflict_sets.get(&loan) else { + return Vec::new(); + }; + + let point = self.get_point(location, facts::PointType::Mid); + let Some(alive_loans) = self.borrowck_out_facts.loan_live_at.get(&point) else { + return Vec::new(); + }; + + let alive_conflicting_loans = + all_conflicting_loans.iter().filter(|loan| alive_loans.contains(loan)).cloned().collect(); + trace!("get_alive_conflicting_loans({:?}, {:?}) = {:?}", loan, location, alive_conflicting_loans); + + alive_conflicting_loans } /// Get the location at which a loan is created, if possible diff --git a/rr_frontend/translation/src/function_body.rs b/rr_frontend/translation/src/function_body.rs index 006cce4bd6c544fe79e6d33fc141eb07c59b3a98..02b99c78ef7f4ab71b1c8b2f5a4e08ce2169882a 100644 --- a/rr_frontend/translation/src/function_body.rs +++ b/rr_frontend/translation/src/function_body.rs @@ -1057,18 +1057,21 @@ impl<'a, 'def: 'a, 'tcx: 'def> FunctionTranslator<'a, 'def, 'tcx> { let lft1 = self.info.mk_atomic_region(*r1); let lft2 = self.info.mk_atomic_region(*r2); - if let info::AtomicRegion::Universal(info::UniversalRegionKind::Local, _) = lft1 { - // this is a constraint we care about here, add it - if !self.inclusion_tracker.check_inclusion(*r1, *r2, root_point) { - self.inclusion_tracker.add_static_inclusion(*r1, *r2, root_point); - self.inclusion_tracker.add_static_inclusion(*r2, *r1, root_point); - assert!(match lft2 { - info::AtomicRegion::PlaceRegion(_) => true, - _ => false, - }); - initial_arg_mapping.push((lft1, lft2)); - } + let info::AtomicRegion::Universal(info::UniversalRegionKind::Local, _) = lft1 else { + continue; + }; + + // this is a constraint we care about here, add it + if self.inclusion_tracker.check_inclusion(*r1, *r2, root_point) { + continue; } + + self.inclusion_tracker.add_static_inclusion(*r1, *r2, root_point); + self.inclusion_tracker.add_static_inclusion(*r2, *r1, root_point); + + assert!(matches!(lft2, info::AtomicRegion::PlaceRegion(_))); + + initial_arg_mapping.push((lft1, lft2)); } initial_arg_mapping } @@ -1236,50 +1239,6 @@ impl<'a, 'def: 'a, 'tcx: 'def> BodyTranslator<'a, 'def, 'tcx> { Ok(self.translated_fn.into()) } - /// Determine initial constraints between universal regions and local place regions. - /// Returns an initial mapping for the name _map that initializes place regions of arguments - /// with universals. - fn get_initial_universal_arg_constraints(&mut self) -> Vec<(info::AtomicRegion, info::AtomicRegion)> { - // Polonius generates a base subset constraint uregion ⊑ pregion. - // We turn that into pregion = uregion, as we do strong updates at the top-level. - let info = &self.info; - let input_facts = &info.borrowck_in_facts; - let subset_base = &input_facts.subset_base; - - let root_location = Location { - block: BasicBlock::from_u32(0), - statement_index: 0, - }; - let root_point = self.info.interner.get_point_index(&facts::Point { - location: root_location, - typ: facts::PointType::Start, - }); - - // TODO: for nested references, this doesn't really seem to work. - // Problem is that we don't have constraints for the mapping of nested references. - // Potentially, we should instead just equalize the types - - let mut initial_arg_mapping = Vec::new(); - for (r1, r2, _) in subset_base { - let lft1 = self.info.mk_atomic_region(*r1); - let lft2 = self.info.mk_atomic_region(*r2); - - if let info::AtomicRegion::Universal(info::UniversalRegionKind::Local, _) = lft1 { - // this is a constraint we care about here, add it - if !self.inclusion_tracker.check_inclusion(*r1, *r2, root_point) { - self.inclusion_tracker.add_static_inclusion(*r1, *r2, root_point); - self.inclusion_tracker.add_static_inclusion(*r2, *r1, root_point); - assert!(match lft2 { - info::AtomicRegion::PlaceRegion(_) => true, - _ => false, - }); - initial_arg_mapping.push((lft1, lft2)); - } - } - } - initial_arg_mapping - } - /// Generate a key for generics to index into our map of other required procedures. fn generate_procedure_inst_key( &self, diff --git a/rr_frontend/translation/src/lib.rs b/rr_frontend/translation/src/lib.rs index f0fde0cceeb07203e10721defa489b0d8f321dbe..5a40c6a51c8fd57e2862402741b96c5e9493279b 100644 --- a/rr_frontend/translation/src/lib.rs +++ b/rr_frontend/translation/src/lib.rs @@ -980,14 +980,11 @@ fn register_functions(vcx: &mut VerificationCtxt<'_, '_>) -> Result<(), String> } fn propagate_attr_from_impl(it: &rustc_ast::ast::AttrItem) -> bool { - if let Some(ident) = it.path.segments.get(1) { - match ident.ident.as_str() { - "context" => true, - _ => false, - } - } else { - false - } + let Some(ident) = it.path.segments.get(1) else { + return false; + }; + + matches!(ident.ident.as_str(), "context") } fn get_attributes_of_function<'a>(env: &'a Environment, did: DefId) -> Vec<&'a rustc_ast::ast::AttrItem> { diff --git a/rr_frontend/translation/src/type_translator.rs b/rr_frontend/translation/src/type_translator.rs index 75abc297cc1edb0b8e061d0661811d15c9417970..30fa384f61cc23387062b2043c17fb5200f8638e 100644 --- a/rr_frontend/translation/src/type_translator.rs +++ b/rr_frontend/translation/src/type_translator.rs @@ -188,17 +188,11 @@ pub type TranslateAdtState<'a> = &'a mut HashSet<DefId>; impl<'a, 'def> TranslationStateInner<'a, 'def> { const fn in_function(&self) -> bool { - match *self { - Self::InFunction(_) => true, - _ => false, - } + matches!(*self, Self::InFunction(_)) } const fn translate_adt(&self) -> bool { - match *self { - Self::TranslateAdt(_) => true, - _ => false, - } + matches!(*self, Self::TranslateAdt(_)) } }