From 39733b3bd839d561dd3d730eb5ec1bf4b2bbc143 Mon Sep 17 00:00:00 2001 From: fpoli Date: Wed, 1 Mar 2023 07:04:30 +0000 Subject: [PATCH 1/8] Update dependencies (rustc nightly-2023-03-01, viper v-2023-02-26-2019) --- rust-toolchain | 2 +- viper-toolchain | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rust-toolchain b/rust-toolchain index 1e964bbcc83..0bce8b034e7 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2023-02-09" +channel = "nightly-2023-03-01" components = [ "rustc-dev", "llvm-tools-preview", "rust-std", "rustfmt", "clippy" ] profile = "minimal" diff --git a/viper-toolchain b/viper-toolchain index 0391f0ffe80..d46d418296d 100644 --- a/viper-toolchain +++ b/viper-toolchain @@ -1 +1 @@ -v-2023-01-31-0912 +v-2023-02-26-2019 From f68e98d617ea2af7ed2ee7e92dd345cec37e5b3f Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 11:27:01 +0100 Subject: [PATCH 2/8] Update to new rustc --- Cargo.lock | 27 ++- analysis/src/mir_utils.rs | 4 +- .../src/environment/debug_utils/to_text.rs | 7 +- prusti-interface/src/environment/query.rs | 4 +- prusti-interface/src/utils.rs | 2 +- .../counterexample_translation_refactored.rs | 2 +- prusti-viper/src/encoder/encoder.rs | 4 +- .../src/encoder/mir/constants/interface.rs | 4 +- .../encoder/elaborate_drops/mir_dataflow.rs | 4 +- .../encoder/elaborate_drops/mir_transform.rs | 171 +++++++++++++----- .../procedures/encoder/elaborate_drops/mod.rs | 7 +- .../mir/procedures/encoder/initialisation.rs | 43 +++-- .../src/encoder/mir/procedures/encoder/mod.rs | 7 +- .../mir/pure/interpreter/interpreter_poly.rs | 3 +- prusti-viper/src/encoder/mir/types/encoder.rs | 10 +- .../src/encoder/mir/types/interface.rs | 16 +- prusti-viper/src/encoder/procedure_encoder.rs | 6 +- prusti/src/driver.rs | 3 +- rust-toolchain | 2 +- 19 files changed, 218 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 201291ebd58..cce155d3fbe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -656,9 +656,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -667,14 +667,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.13" +version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset 0.7.1", + "memoffset 0.8.0", "scopeguard", ] @@ -1693,6 +1693,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.16" @@ -2333,9 +2342,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -2343,9 +2352,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", diff --git a/analysis/src/mir_utils.rs b/analysis/src/mir_utils.rs index 98ce7684621..777720c3203 100644 --- a/analysis/src/mir_utils.rs +++ b/analysis/src/mir_utils.rs @@ -200,7 +200,7 @@ pub fn expand_one_level<'tcx>( guide_place: Place<'tcx>, ) -> (Place<'tcx>, Vec>) { let index = current_place.projection.len(); - let new_projection = tcx.mk_place_elems( + let new_projection = tcx.mk_place_elems_from_iter( current_place .projection .iter() @@ -340,7 +340,7 @@ pub fn get_blocked_place<'tcx>(tcx: TyCtxt<'tcx>, borrowed: Place<'tcx>) -> Plac | mir::ProjectionElem::Subslice { .. } => { return (mir::Place { local: place_ref.local, - projection: tcx.intern_place_elems(place_ref.projection), + projection: tcx.mk_place_elems(place_ref.projection), }) .into(); } diff --git a/prusti-interface/src/environment/debug_utils/to_text.rs b/prusti-interface/src/environment/debug_utils/to_text.rs index f42f02d755a..b0aee910c0a 100644 --- a/prusti-interface/src/environment/debug_utils/to_text.rs +++ b/prusti-interface/src/environment/debug_utils/to_text.rs @@ -180,16 +180,19 @@ impl<'tcx> ToText for prusti_rustc_interface::middle::ty::Region<'tcx> { format!("lft_late_{}_{}", debruijn.index(), bound_reg.var.index()) } prusti_rustc_interface::middle::ty::ReFree(_) => { - unimplemented!("ReFree: {}", format!("{self}")); + unimplemented!("ReFree: {self}"); } prusti_rustc_interface::middle::ty::ReStatic => String::from("lft_static"), prusti_rustc_interface::middle::ty::ReVar(region_vid) => { format!("lft_{}", region_vid.index()) } prusti_rustc_interface::middle::ty::RePlaceholder(_) => { - unimplemented!("RePlaceholder: {}", format!("{self}")); + unimplemented!("RePlaceholder: {self}"); } prusti_rustc_interface::middle::ty::ReErased => String::from("lft_erased"), + prusti_rustc_interface::middle::ty::ReError(_) => { + unimplemented!("ReError: {}", format!("{self}")); + } } } } diff --git a/prusti-interface/src/environment/query.rs b/prusti-interface/src/environment/query.rs index f9d23fcabf1..4afeb53d4bb 100644 --- a/prusti-interface/src/environment/query.rs +++ b/prusti-interface/src/environment/query.rs @@ -257,7 +257,7 @@ impl<'tcx> EnvQuery<'tcx> { let call_trait_substs = ty::EarlyBinder(trait_ref.substs).subst(self.tcx, impl_method_substs); let impl_substs = self.identity_substs(impl_def_id); - let trait_method_substs = self.tcx.mk_substs( + let trait_method_substs = self.tcx.mk_substs_from_iter( call_trait_substs .iter() .chain(impl_method_substs.iter().skip(impl_substs.len())), @@ -451,7 +451,7 @@ impl<'tcx> EnvQuery<'tcx> { /// then used to calculate the param env; i.e. the set of /// where-clauses that are in scope at this particular point. #[tracing::instrument(level = "debug", skip(self))] - pub fn resolve_assoc_types + Debug + Copy>( + pub fn resolve_assoc_types> + Debug + Copy>( self, normalizable: T, param_env: impl IntoParamTcx<'tcx, ParamEnv<'tcx>> + Debug, diff --git a/prusti-interface/src/utils.rs b/prusti-interface/src/utils.rs index 7d7c2b628a9..4dfed681a7e 100644 --- a/prusti-interface/src/utils.rs +++ b/prusti-interface/src/utils.rs @@ -58,7 +58,7 @@ pub fn try_pop_one_level<'tcx>( let last_index = place.projection.len() - 1; let new_place = mir::Place { local: place.local, - projection: tcx.intern_place_elems(&place.projection[..last_index]), + projection: tcx.mk_place_elems(&place.projection[..last_index]), }; Some((place.projection[last_index], new_place)) } else { diff --git a/prusti-viper/src/encoder/counterexamples/counterexample_translation_refactored.rs b/prusti-viper/src/encoder/counterexamples/counterexample_translation_refactored.rs index 45fabf01c14..be1f56f967a 100644 --- a/prusti-viper/src/encoder/counterexamples/counterexample_translation_refactored.rs +++ b/prusti-viper/src/encoder/counterexamples/counterexample_translation_refactored.rs @@ -724,7 +724,7 @@ impl<'ce, 'tcx, 'v> CounterexampleTranslator<'ce, 'tcx, 'v> { .get(&sil_to_model_fn_name) { let sil_model = sil_to_model_fn.get_function_value(&sil_ref_fn_param); - let model_typ = self.tcx.type_of(model_id); + let model_typ = self.tcx.type_of(model_id).subst_identity(); let entry = self.translate_snapshot_entry(sil_model.as_ref(), Some(model_typ), false); return entry; diff --git a/prusti-viper/src/encoder/encoder.rs b/prusti-viper/src/encoder/encoder.rs index c576005244e..e4d68af5df6 100644 --- a/prusti-viper/src/encoder/encoder.rs +++ b/prusti-viper/src/encoder/encoder.rs @@ -617,13 +617,13 @@ impl<'v, 'tcx> Encoder<'v, 'tcx> { ty::TyKind::Int(ty::IntTy::I32) => scalar_value.to_i32().unwrap().into(), ty::TyKind::Int(ty::IntTy::I64) => scalar_value.to_i64().unwrap().into(), ty::TyKind::Int(ty::IntTy::I128) => scalar_value.to_i128().unwrap().into(), - ty::TyKind::Int(ty::IntTy::Isize) => scalar_value.to_machine_isize(&self.env.tcx()).unwrap().into(), + ty::TyKind::Int(ty::IntTy::Isize) => scalar_value.to_target_usize(&self.env.tcx()).unwrap().into(), ty::TyKind::Uint(ty::UintTy::U8) => scalar_value.to_u8().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U16) => scalar_value.to_u16().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U32) => scalar_value.to_u32().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U64) => scalar_value.to_u64().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U128) => scalar_value.to_u128().unwrap().into(), - ty::TyKind::Uint(ty::UintTy::Usize) => scalar_value.to_machine_usize(&self.env.tcx()).unwrap().into(), + ty::TyKind::Uint(ty::UintTy::Usize) => scalar_value.to_target_usize(&self.env.tcx()).unwrap().into(), ty::TyKind::Float(ty::FloatTy::F32) => { let bits = scalar_value.to_u32().unwrap(); vir::Expr::Const(vir::ConstExpr { diff --git a/prusti-viper/src/encoder/mir/constants/interface.rs b/prusti-viper/src/encoder/mir/constants/interface.rs index 1c6b82352ba..41b3dd1e814 100644 --- a/prusti-viper/src/encoder/mir/constants/interface.rs +++ b/prusti-viper/src/encoder/mir/constants/interface.rs @@ -36,7 +36,7 @@ impl<'v, 'tcx: 'v> ConstantsEncoderInterface<'tcx> for super::super::super::Enco ty::TyKind::Int(ty::IntTy::I128) => scalar_value()?.to_i128().unwrap().into(), ty::TyKind::Int(ty::IntTy::Isize) => { let number: isize = scalar_value()? - .to_machine_isize(&self.env().tcx()) + .to_target_isize(&self.env().tcx()) .unwrap() .try_into() .unwrap(); @@ -49,7 +49,7 @@ impl<'v, 'tcx: 'v> ConstantsEncoderInterface<'tcx> for super::super::super::Enco ty::TyKind::Uint(ty::UintTy::U128) => scalar_value()?.to_u128().unwrap().into(), ty::TyKind::Uint(ty::UintTy::Usize) => { let number: usize = scalar_value()? - .to_machine_usize(&self.env().tcx()) + .to_target_usize(&self.env().tcx()) .unwrap() .try_into() .unwrap(); diff --git a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_dataflow.rs b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_dataflow.rs index 0394e928fca..02a48722131 100644 --- a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_dataflow.rs +++ b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_dataflow.rs @@ -901,7 +901,7 @@ where } ty::Dynamic(..) => self.complete_drop(self.succ, self.unwind), ty::Array(ety, size) => { - let size = size.try_eval_usize(self.tcx(), self.elaborator.param_env()); + let size = size.try_eval_target_usize(self.tcx(), self.elaborator.param_env()); self.open_drop_for_array(*ety, size) } ty::Slice(ety) => self.open_drop_for_array(*ety, None), @@ -1069,7 +1069,7 @@ where Operand::Constant(Box::new(Constant { span: self.source_info.span, user_ty: None, - literal: ConstantKind::Ty(ty::Const::from_usize(self.tcx(), val.into())), + literal: ConstantKind::Ty(ty::Const::from_target_usize(self.tcx(), val.into())), })) } diff --git a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_transform.rs b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_transform.rs index 92be1d1bbe2..bf931ee50fc 100644 --- a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_transform.rs +++ b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mir_transform.rs @@ -19,43 +19,77 @@ use prusti_rustc_interface::{ elaborate_drops::{DropFlagMode, DropFlagState, DropStyle, Unwind}, impls::{MaybeInitializedPlaces, MaybeUninitializedPlaces}, move_paths::{LookupResult, MoveData, MovePathIndex}, - on_all_children_bits, on_all_drop_children_bits, on_lookup_result_bits, Analysis, - MoveDataParamEnv, ResultsCursor, + on_all_children_bits, on_all_drop_children_bits, on_lookup_result_bits, + un_derefer::UnDerefer, + Analysis, MoveDataParamEnv, ResultsCursor, }, index::bit_set::BitSet, middle::{ mir::*, ty::{self, TyCtxt}, }, - span::Span, + span::{hygiene::DesugaringKind, Span}, target::abi::VariantIdx, }; use std::fmt; -#[tracing::instrument(level = "debug", skip(tcx, body), fields(pass = "elaborate_drops", source = ?body.source, span = ?body.span))] -pub(in super::super) fn run_pass<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) -> MirPatch<'tcx> { +/// During MIR building, Drop and DropAndReplace terminators are inserted in every place where a drop may occur. +/// However, in this phase, the presence of these terminators does not guarantee that a destructor will run, +/// as the target of the drop may be uninitialized. +/// In general, the compiler cannot determine at compile time whether a destructor will run or not. +/// +/// At a high level, this pass refines Drop and DropAndReplace to only run the destructor if the +/// target is initialized. The way this is achievied is by inserting drop flags for every variable +/// that may be dropped, and then using those flags to determine whether a destructor should run. +/// This pass also removes DropAndReplace, replacing it with a Drop paired with an assign statement. +/// Once this is complete, Drop terminators in the MIR correspond to a call to the "drop glue" or +/// "drop shim" for the type of the dropped place. +/// +/// This pass relies on dropped places having an associated move path, which is then used to determine +/// the initialization status of the place and its descendants. +/// It's worth noting that a MIR containing a Drop without an associated move path is probably ill formed, +/// as it would allow running a destructor on a place behind a reference: +/// +/// ```text +// fn drop_term(t: &mut T) { +// mir!( +// { +// Drop(*t, exit) +// } +// exit = { +// Return() +// } +// ) +// } +/// ``` +pub(in super::super) fn run_pass<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) -> MirPatch<'tcx> { + debug!("elaborate_drops({:?} @ {:?})", body.source, body.span); + let def_id = body.source.def_id(); let param_env = tcx.param_env_reveal_all_normalized(def_id); - let move_data = match MoveData::gather_moves(body, tcx, param_env) { - Ok((_, move_data)) => move_data, + let (side_table, move_data) = match MoveData::gather_moves(body, tcx, param_env) { + Ok(move_data) => move_data, Err((move_data, _)) => { tcx.sess.delay_span_bug( body.span, "No `move_errors` should be allowed in MIR borrowck", ); - move_data + (Default::default(), move_data) } }; + let un_derefer = UnDerefer { + tcx, + derefer_sidetable: side_table, + }; let elaborate_patch = { let env = MoveDataParamEnv { move_data, param_env, }; - let dead_unwinds = find_dead_unwinds(tcx, body, &env); + remove_dead_unwinds(tcx, body, &env, &un_derefer); let inits = MaybeInitializedPlaces::new(tcx, body, &env) .into_engine(tcx, body) - .dead_unwinds(&dead_unwinds) .pass_name("elaborate_drops") .iterate_to_fixpoint() .into_results_cursor(body); @@ -63,11 +97,12 @@ pub(in super::super) fn run_pass<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) -> let uninits = MaybeUninitializedPlaces::new(tcx, body, &env) .mark_inactive_variants_as_uninit() .into_engine(tcx, body) - .dead_unwinds(&dead_unwinds) .pass_name("elaborate_drops") .iterate_to_fixpoint() .into_results_cursor(body); + let reachable = traversal::reachable_as_bitset(body); + ElaborateDropsCtxt { tcx, body, @@ -75,27 +110,30 @@ pub(in super::super) fn run_pass<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) -> init_data: InitializationData { inits, uninits }, drop_flags: Default::default(), patch: MirPatch::new(body), + un_derefer, + reachable, } .elaborate() }; - elaborate_patch + elaborate_patch //.apply(body); + // deref_finder(tcx, body); } -/// Returns the set of basic blocks whose unwind edges are known -/// to not be reachable, because they are `drop` terminators +/// Removes unwind edges which are known to be unreachable, because they are in `drop` terminators /// that can't drop anything. -#[tracing::instrument(level = "debug", skip(tcx, body, env), fields(pass = "find_dead_unwinds", span = ?body.span))] -pub(in super::super) fn find_dead_unwinds<'tcx>( +pub(in super::super) fn remove_dead_unwinds<'tcx>( tcx: TyCtxt<'tcx>, - body: &Body<'tcx>, + body: &mut Body<'tcx>, env: &MoveDataParamEnv<'tcx>, -) -> BitSet { + und: &UnDerefer<'tcx>, +) { + debug!("remove_dead_unwinds({:?})", body.span); // We only need to do this pass once, because unwind edges can only // reach cleanup blocks, which can't have unwind edges themselves. - let mut dead_unwinds = BitSet::new_empty(body.basic_blocks.len()); + let mut dead_unwinds = Vec::new(); let mut flow_inits = MaybeInitializedPlaces::new(tcx, body, env) .into_engine(tcx, body) - .pass_name("find_dead_unwinds") + .pass_name("remove_dead_unwinds") .iterate_to_fixpoint() .into_results_cursor(body); for (bb, bb_data) in body.basic_blocks.iter_enumerated() { @@ -109,23 +147,20 @@ pub(in super::super) fn find_dead_unwinds<'tcx>( ref place, unwind: Some(_), .. - } => place, + } => und.derefer(place.as_ref(), body).unwrap_or(*place), _ => continue, }; - debug!("find_dead_unwinds @ {:?}: {:?}", bb, bb_data); + debug!("remove_dead_unwinds @ {:?}: {:?}", bb, bb_data); - let path = if let LookupResult::Exact(path) = env.move_data.rev_lookup.find(place.as_ref()) - { - path - } else { - debug!("find_dead_unwinds: has parent; skipping"); + let LookupResult::Exact(path) = env.move_data.rev_lookup.find(place.as_ref()) else { + debug!("remove_dead_unwinds: has parent; skipping"); continue; }; flow_inits.seek_before_primary_effect(body.terminator_loc(bb)); debug!( - "find_dead_unwinds @ {:?}: path({:?})={:?}; init_data={:?}", + "remove_dead_unwinds @ {:?}: path({:?})={:?}; init_data={:?}", bb, place, path, @@ -137,13 +172,22 @@ pub(in super::super) fn find_dead_unwinds<'tcx>( maybe_live |= flow_inits.contains(child); }); - debug!("find_dead_unwinds @ {:?}: maybe_live={}", bb, maybe_live); + debug!("remove_dead_unwinds @ {:?}: maybe_live={}", bb, maybe_live); if !maybe_live { - dead_unwinds.insert(bb); + dead_unwinds.push(bb); } } - dead_unwinds + if dead_unwinds.is_empty() { + return; + } + + let basic_blocks = body.basic_blocks.as_mut(); + for &bb in dead_unwinds.iter() { + if let Some(unwind) = basic_blocks[bb].terminator_mut().unwind_mut() { + *unwind = None; + } + } } struct InitializationData<'mir, 'tcx> { @@ -191,7 +235,6 @@ impl<'a, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, '_, 'tcx> { self.ctxt.param_env() } - #[tracing::instrument(level = "debug", skip(self))] fn drop_style(&self, path: Self::Path, mode: DropFlagMode) -> DropStyle { let ((maybe_live, maybe_dead), multipart) = match mode { DropFlagMode::Shallow => (self.ctxt.init_data.maybe_live_dead(path), false), @@ -298,6 +341,8 @@ struct ElaborateDropsCtxt<'a, 'tcx> { init_data: InitializationData<'a, 'tcx>, drop_flags: FxHashMap, patch: MirPatch<'tcx>, + un_derefer: UnDerefer<'tcx>, + reachable: BitSet, } impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { @@ -309,10 +354,10 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { self.env.param_env } - #[tracing::instrument(level = "debug", skip(self), fields(self_span = ?self.body.span))] fn create_drop_flag(&mut self, index: MovePathIndex, span: Span) { let tcx = self.tcx; let patch = &mut self.patch; + debug!("create_drop_flag({:?})", self.body.span); self.drop_flags .entry(index) .or_insert_with(|| patch.new_internal(tcx.types.bool, span)); @@ -337,13 +382,18 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { self.patch } - #[tracing::instrument(level = "debug", skip(self))] fn collect_drop_flags(&mut self) { for (bb, data) in self.body.basic_blocks.iter_enumerated() { + if !self.reachable.contains(bb) { + continue; + } let terminator = data.terminator(); let place = match terminator.kind { TerminatorKind::Drop { ref place, .. } - | TerminatorKind::DropAndReplace { ref place, .. } => place, + | TerminatorKind::DropAndReplace { ref place, .. } => self + .un_derefer + .derefer(place.as_ref(), self.body) + .unwrap_or(*place), _ => continue, }; @@ -360,11 +410,17 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { LookupResult::Parent(None) => continue, LookupResult::Parent(Some(parent)) => { let (_maybe_live, maybe_dead) = self.init_data.maybe_live_dead(parent); + + if self.body.local_decls[place.local].is_deref_temp() { + continue; + } + if maybe_dead { self.tcx.sess.delay_span_bug( terminator.source_info.span, - format!( - "drop of untracked, uninitialized value {bb:?}, place {place:?} ({path:?})", + &format!( + "drop of untracked, uninitialized value {:?}, place {:?} ({:?})", + bb, place, path ), ); } @@ -390,6 +446,9 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { fn elaborate_drops(&mut self) { for (bb, data) in self.body.basic_blocks.iter_enumerated() { + if !self.reachable.contains(bb) { + continue; + } let loc = Location { block: bb, statement_index: data.statements.len(), @@ -399,10 +458,14 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { let resume_block = self.patch.resume_block(); match terminator.kind { TerminatorKind::Drop { - place, + mut place, target, unwind, } => { + if let Some(new_place) = self.un_derefer.derefer(place.as_ref(), self.body) { + place = new_place; + } + self.init_data.seek_before(loc); match self.move_data().rev_lookup.find(place.as_ref()) { LookupResult::Exact(path) => elaborate_drop( @@ -419,21 +482,33 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { bb, ), LookupResult::Parent(..) => { - self.tcx.sess.delay_span_bug( - terminator.source_info.span, - format!("drop of untracked value {bb:?}"), - ); + if !matches!( + terminator.source_info.span.desugaring_kind(), + Some(DesugaringKind::Replace), + ) { + self.tcx.sess.delay_span_bug( + terminator.source_info.span, + &format!("drop of untracked value {:?}", bb), + ); + } + // A drop and replace behind a pointer/array/whatever. + // The borrow checker requires that these locations are initialized before the assignment, + // so we just leave an unconditional drop. + assert!(!data.is_cleanup); } } } TerminatorKind::DropAndReplace { - place, + mut place, ref value, target, unwind, } => { assert!(!data.is_cleanup); + if let Some(new_place) = self.un_derefer.derefer(place.as_ref(), self.body) { + place = new_place; + } self.elaborate_replace(loc, place, value, target, unwind); } _ => continue, @@ -453,7 +528,6 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { /// `replace x[i] <- tmp0`). The borrow checker requires that /// these locations are initialized before the assignment, /// so we just generate an unconditional drop. - #[tracing::instrument(level = "debug", skip(self))] fn elaborate_replace( &mut self, loc: Location, @@ -552,7 +626,7 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { Rvalue::Use(Operand::Constant(Box::new(Constant { span, user_ty: None, - literal: ConstantKind::Ty(ty::Const::from_bool(self.tcx, val)), + literal: ConstantKind::from_bool(self.tcx, val), }))) } @@ -576,6 +650,9 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { fn drop_flags_for_fn_rets(&mut self) { for (bb, data) in self.body.basic_blocks.iter_enumerated() { + if !self.reachable.contains(bb) { + continue; + } if let TerminatorKind::Call { destination, target: Some(tgt), @@ -609,7 +686,6 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { ) } - #[tracing::instrument(level = "debug", skip(self))] fn drop_flags_for_locs(&mut self) { // We intentionally iterate only over the *old* basic blocks. // @@ -618,6 +694,9 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> { // clobbered before they are read. for (bb, data) in self.body.basic_blocks.iter_enumerated() { + if !self.reachable.contains(bb) { + continue; + } debug!("drop_flags_for_locs({:?})", data); for i in 0..(data.statements.len() + 1) { debug!("drop_flag_for_locs: stmt {}", i); diff --git a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mod.rs b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mod.rs index 0cf7b1bd989..632bd047d19 100644 --- a/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mod.rs +++ b/prusti-viper/src/encoder/mir/procedures/encoder/elaborate_drops/mod.rs @@ -53,8 +53,11 @@ pub(super) fn elaborate_drops<'v, 'tcx: 'v>( } validate(&input_facts, &location_table, mir); - let drop_patch = self::mir_transform::run_pass(tcx, mir); - let mir = apply_patch(drop_patch, mir, &mut input_facts, &mut location_table); + // FIXME: this is super awkward; `run_pass` used to take an immutable ref, + // but now it takes a mutable ref, so the dirty fix is to clone. + let mut mir = mir.clone(); + let drop_patch = self::mir_transform::run_pass(tcx, &mut mir); + let mir = apply_patch(drop_patch, &mir, &mut input_facts, &mut location_table); if config::dump_debug_info() { let local_def_id = def_id.expect_local(); diff --git a/prusti-viper/src/encoder/mir/procedures/encoder/initialisation.rs b/prusti-viper/src/encoder/mir/procedures/encoder/initialisation.rs index 8cc9784515d..fc6ab05ee65 100644 --- a/prusti-viper/src/encoder/mir/procedures/encoder/initialisation.rs +++ b/prusti-viper/src/encoder/mir/procedures/encoder/initialisation.rs @@ -2,9 +2,9 @@ use prusti_rustc_interface::{ dataflow::{ impls::{MaybeInitializedPlaces, MaybeUninitializedPlaces}, move_paths::MoveData, + un_derefer::UnDerefer, Analysis, MoveDataParamEnv, ResultsCursor, }, - hir::def_id::DefId, middle::{mir, ty::TyCtxt}, }; @@ -16,23 +16,21 @@ pub(super) struct InitializationData<'mir, 'tcx> { impl<'mir, 'tcx> InitializationData<'mir, 'tcx> { pub(super) fn new( tcx: TyCtxt<'tcx>, - body: &'mir mir::Body<'tcx>, - move_env: &'mir MoveDataParamEnv<'tcx>, + body: &'mir mut mir::Body<'tcx>, + env: &'mir MoveDataParamEnv<'tcx>, + un_derefer: &'mir UnDerefer<'tcx>, ) -> Self { - let dead_unwinds = - super::elaborate_drops::mir_transform::find_dead_unwinds(tcx, body, move_env); + super::elaborate_drops::mir_transform::remove_dead_unwinds(tcx, body, env, un_derefer); - let inits = MaybeInitializedPlaces::new(tcx, body, move_env) + let inits = MaybeInitializedPlaces::new(tcx, body, env) .into_engine(tcx, body) - .dead_unwinds(&dead_unwinds) .pass_name("elaborate_drops") .iterate_to_fixpoint() .into_results_cursor(body); - let uninits = MaybeUninitializedPlaces::new(tcx, body, move_env) + let uninits = MaybeUninitializedPlaces::new(tcx, body, env) .mark_inactive_variants_as_uninit() .into_engine(tcx, body) - .dead_unwinds(&dead_unwinds) .pass_name("elaborate_drops") .iterate_to_fixpoint() .into_results_cursor(body); @@ -45,20 +43,29 @@ impl<'mir, 'tcx> InitializationData<'mir, 'tcx> { } } -pub(super) fn create_move_data_param_env<'tcx>( +pub(super) fn create_move_data_param_env_and_un_derefer<'tcx>( tcx: TyCtxt<'tcx>, body: &mir::Body<'tcx>, - def_id: DefId, -) -> MoveDataParamEnv<'tcx> { +) -> (MoveDataParamEnv<'tcx>, UnDerefer<'tcx>) { + let def_id = body.source.def_id(); let param_env = tcx.param_env_reveal_all_normalized(def_id); - let move_data = match MoveData::gather_moves(body, tcx, param_env) { - Ok((_, move_data)) => move_data, - Err((_, _)) => { - unreachable!(); + let (side_table, move_data) = match MoveData::gather_moves(body, tcx, param_env) { + Ok(move_data) => move_data, + Err((move_data, _)) => { + tcx.sess.delay_span_bug( + body.span, + "No `move_errors` should be allowed in MIR borrowck", + ); + (Default::default(), move_data) } }; - MoveDataParamEnv { + let un_derefer = UnDerefer { + tcx, + derefer_sidetable: side_table, + }; + let env = MoveDataParamEnv { move_data, param_env, - } + }; + (env, un_derefer) } diff --git a/prusti-viper/src/encoder/mir/procedures/encoder/mod.rs b/prusti-viper/src/encoder/mir/procedures/encoder/mod.rs index 1b1a376d80a..68ad418a783 100644 --- a/prusti-viper/src/encoder/mir/procedures/encoder/mod.rs +++ b/prusti-viper/src/encoder/mir/procedures/encoder/mod.rs @@ -75,8 +75,11 @@ pub(super) fn encode_procedure<'v, 'tcx: 'v>( let tcx = encoder.env().tcx(); let (mir, lifetimes) = self::elaborate_drops::elaborate_drops(encoder, def_id, &procedure)?; let mir = &mir; // Mark body as immutable. - let move_env = self::initialisation::create_move_data_param_env(tcx, mir, def_id); - let init_data = InitializationData::new(tcx, mir, &move_env); + let (env, un_derefer) = + self::initialisation::create_move_data_param_env_and_un_derefer(tcx, mir); + // TODO: the clone is required so that we can remove dead unwinds + let mut no_dead_unwinds = mir.clone(); + let init_data = InitializationData::new(tcx, &mut no_dead_unwinds, &env, &un_derefer); let locals_without_explicit_allocation: BTreeSet<_> = mir.vars_and_temps_iter().collect(); let specification_blocks = SpecificationBlocks::build(encoder.env().query, mir, &procedure, true); diff --git a/prusti-viper/src/encoder/mir/pure/interpreter/interpreter_poly.rs b/prusti-viper/src/encoder/mir/pure/interpreter/interpreter_poly.rs index b3534fb4c6c..d5f2c6fa481 100644 --- a/prusti-viper/src/encoder/mir/pure/interpreter/interpreter_poly.rs +++ b/prusti-viper/src/encoder/mir/pure/interpreter/interpreter_poly.rs @@ -519,7 +519,8 @@ impl<'p, 'v: 'p, 'tcx: 'v> BackwardMirInterpreter<'tcx> // manually re-do them here when we probably just encoded the type and the // construction of the fields.. // Also, duplication with procedure_encoder.rs - let usize_ty = tcx.mk_ty(ty::TyKind::Uint(ty::UintTy::Usize)); + let usize_ty = + tcx.mk_ty_from_kind(ty::TyKind::Uint(ty::UintTy::Usize)); let start = match &*idx_ident { "std::ops::Range" | "core::ops::Range" | "std::ops::RangeFrom" | "core::ops::RangeFrom" => diff --git a/prusti-viper/src/encoder/mir/types/encoder.rs b/prusti-viper/src/encoder/mir/types/encoder.rs index c17a702dd7c..4cc5f8703fb 100644 --- a/prusti-viper/src/encoder/mir/types/encoder.rs +++ b/prusti-viper/src/encoder/mir/types/encoder.rs @@ -20,7 +20,7 @@ use prusti_rustc_interface::{ hir::def_id::DefId, middle::{ mir, - ty::{self, TypeVisitable}, + ty::{self, TypeVisitableExt}, }, }; use vir_crate::high::{self as vir, operations::ty::Typed}; @@ -836,7 +836,7 @@ pub(super) fn encode_adt_def<'v, 'tcx>( prusti_rustc_interface::middle::ty::IntTy::I128 } }; - encoder.env().tcx().mk_ty(ty::TyKind::Int(int)) + encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Int(int)) } else { let int = match int { prusti_rustc_interface::target::abi::Integer::I8 => { @@ -855,16 +855,16 @@ pub(super) fn encode_adt_def<'v, 'tcx>( prusti_rustc_interface::middle::ty::UintTy::U128 } }; - encoder.env().tcx().mk_ty(ty::TyKind::Uint(int)) + encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Uint(int)) } } prusti_rustc_interface::target::abi::IntegerType::Pointer(signed) => { if signed { - encoder.env().tcx().mk_ty(ty::TyKind::Int( + encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Int( prusti_rustc_interface::middle::ty::IntTy::Isize, )) } else { - encoder.env().tcx().mk_ty(ty::TyKind::Uint( + encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Uint( prusti_rustc_interface::middle::ty::UintTy::Usize, )) } diff --git a/prusti-viper/src/encoder/mir/types/interface.rs b/prusti-viper/src/encoder/mir/types/interface.rs index 982ed6a6259..738aee05447 100644 --- a/prusti-viper/src/encoder/mir/types/interface.rs +++ b/prusti-viper/src/encoder/mir/types/interface.rs @@ -298,18 +298,22 @@ impl<'v, 'tcx: 'v> MirTypeEncoderInterface<'tcx> for super::super::super::Encode } else if ty == &vir_high::Type::Bool { // Bools may be generated by our encoding without having them in the // original program. - self.env().tcx().mk_ty(ty::TyKind::Bool) + self.env().tcx().mk_ty_from_kind(ty::TyKind::Bool) } else if ty == &vir_high::Type::Int(vir_high::ty::Int::Usize) { // Usizes may be generated by our encoding without having them in // the original program. - self.env().tcx().mk_ty(ty::TyKind::Uint(ty::UintTy::Usize)) + self.env() + .tcx() + .mk_ty_from_kind(ty::TyKind::Uint(ty::UintTy::Usize)) } else if let vir_high::Type::Pointer(pointer) = ty { // We use pointer types for modelling addresses of references. let target_type = self.decode_type_high(&pointer.target_type); - self.env().tcx().mk_ty(ty::TyKind::RawPtr(ty::TypeAndMut { - ty: target_type, - mutbl: mir::Mutability::Mut, - })) + self.env() + .tcx() + .mk_ty_from_kind(ty::TyKind::RawPtr(ty::TypeAndMut { + ty: target_type, + mutbl: mir::Mutability::Mut, + })) } else if let Some(ty) = self .mir_type_encoder_state .encoded_types_inverse diff --git a/prusti-viper/src/encoder/procedure_encoder.rs b/prusti-viper/src/encoder/procedure_encoder.rs index 516870a4c19..c671915b6cc 100644 --- a/prusti-viper/src/encoder/procedure_encoder.rs +++ b/prusti-viper/src/encoder/procedure_encoder.rs @@ -2892,7 +2892,7 @@ impl<'p, 'v: 'p, 'tcx: 'v> ProcedureEncoder<'p, 'v, 'tcx> { // TODO: there's fields like _5.f$start.val_int on `encoded_idx`, it just feels hacky to // manually re-do and hardcode them here when we probably just encoded the type // and the construction of the fields. - let usize_ty = self.encoder.env().tcx().mk_ty(ty::TyKind::Uint(ty::UintTy::Usize)); + let usize_ty = self.encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Uint(ty::UintTy::Usize)); let start = match &*idx_ident { "std::ops::Range" | "core::ops::Range" | "std::ops::RangeFrom" | "core::ops::RangeFrom" => { @@ -3205,7 +3205,7 @@ impl<'p, 'v: 'p, 'tcx: 'v> ProcedureEncoder<'p, 'v, 'tcx> { // TODO: weird fix for closure call substitutions, we need to // prepend the identity substs of the containing method ... - substs = self.encoder.env().tcx().mk_substs(self.substs.iter().chain(substs)); + substs = self.encoder.env().tcx().mk_substs_from_iter(self.substs.iter().chain(substs)); } else { for (arg, encoded_operand) in mir_args.iter().zip(encoded_operands.iter_mut()) { let arg_ty = self.mir_encoder.get_operand_ty(arg); @@ -3326,7 +3326,7 @@ impl<'p, 'v: 'p, 'tcx: 'v> ProcedureEncoder<'p, 'v, 'tcx> { expr: false.into() })); // Return a dummy local variable - let never_ty = self.encoder.env().tcx().mk_ty(ty::TyKind::Never); + let never_ty = self.encoder.env().tcx().mk_ty_from_kind(ty::TyKind::Never); (self.locals.get_fresh(never_ty), None) } }; diff --git a/prusti/src/driver.rs b/prusti/src/driver.rs index d8271f23e2d..0be3dcbad76 100644 --- a/prusti/src/driver.rs +++ b/prusti/src/driver.rs @@ -54,7 +54,7 @@ fn report_prusti_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) { eprintln!(); let fallback_bundle = prusti_rustc_interface::errors::fallback_fluent_bundle( - prusti_rustc_interface::errors::DEFAULT_LOCALE_RESOURCES, + prusti_rustc_interface::driver::DEFAULT_LOCALE_RESOURCES.to_vec(), false, ); let emitter = box prusti_rustc_interface::errors::emitter::EmitterWriter::stderr( @@ -67,6 +67,7 @@ fn report_prusti_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) { None, false, false, + prusti_rustc_interface::errors::TerminalUrl::Auto, ); let handler = prusti_rustc_interface::errors::Handler::with_emitter(true, None, emitter); diff --git a/rust-toolchain b/rust-toolchain index 0bce8b034e7..638d203885a 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2023-03-01" +channel = "nightly-2023-03-08" components = [ "rustc-dev", "llvm-tools-preview", "rust-std", "rustfmt", "clippy" ] profile = "minimal" From bdea5a0710dcdcd37d95d1fb0631e4ac6e6964e1 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 11:40:25 +0100 Subject: [PATCH 3/8] `cargo update` --- Cargo.lock | 554 +++++++++++++++++++++++++++-------------------------- 1 file changed, 280 insertions(+), 274 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cce155d3fbe..17b2e84ea27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -64,9 +64,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "async-attributes" @@ -140,12 +140,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] @@ -202,9 +201,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "async-trait" -version = "0.1.60" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", @@ -213,9 +212,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" +checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" [[package]] name = "attohttpc" @@ -299,9 +298,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -320,18 +319,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "buf_redux" version = "0.8.4" @@ -344,9 +331,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byteorder" @@ -356,9 +343,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cargo-test-macro" @@ -411,9 +398,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" dependencies = [ "jobserver", ] @@ -432,9 +419,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "num-integer", @@ -444,9 +431,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.0.32" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ "bitflags", "clap_derive", @@ -459,9 +446,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.0.21" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", "proc-macro-error", @@ -472,9 +459,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" dependencies = [ "os_str_bytes", ] @@ -569,9 +556,9 @@ checksum = "d6417fe6fc03a8b533fd2177742eeb39a90c7233eedec7bac96d4d6b69a09449" [[package]] name = "concurrent-queue" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b" +checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" dependencies = [ "crossbeam-utils", ] @@ -646,9 +633,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -680,9 +667,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -711,13 +698,12 @@ dependencies = [ [[package]] name = "csv" -version = "1.1.6" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] @@ -743,19 +729,19 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.2.4" +version = "3.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1631ca6e3c59112501a9d87fd86f21591ff77acd31331e8a73f8d80a65bbdd71" +checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639" dependencies = [ - "nix 0.26.1", - "windows-sys 0.42.0", + "nix 0.26.2", + "windows-sys 0.45.0", ] [[package]] name = "cxx" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -765,9 +751,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -780,15 +766,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", @@ -885,15 +871,15 @@ checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" [[package]] name = "either" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" dependencies = [ "cfg-if", ] @@ -972,23 +958,23 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -1044,9 +1030,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -1059,9 +1045,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -1069,15 +1055,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -1086,9 +1072,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -1107,9 +1093,9 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", @@ -1118,21 +1104,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -1178,9 +1164,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.0" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "git2" @@ -1199,15 +1185,15 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "gloo-timers" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c4a8d6391675c6b2ee1a6c8d06e8e2d03605c44cec1270675985a4c2a5500b" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" dependencies = [ "futures-channel", "futures-core", @@ -1217,9 +1203,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" dependencies = [ "bytes", "fnv", @@ -1270,9 +1256,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -1292,6 +1278,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.3.2" @@ -1306,13 +1298,13 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.5", + "itoa", ] [[package]] @@ -1346,9 +1338,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -1359,7 +1351,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.5", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -1445,30 +1437,30 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "ipnet" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -1482,15 +1474,9 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jni" @@ -1526,28 +1512,22 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" - [[package]] name = "json5" version = "0.4.1" @@ -1585,15 +1565,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libgit2-sys" -version = "0.13.4+1.4.2" +version = "0.13.5+1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1" +checksum = "51e5ea06c26926f1002dd553fded6cfcdc9784c1f60feeb58368b4d9b07b6dba" dependencies = [ "cc", "libc", @@ -1735,14 +1715,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -1806,9 +1786,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a58d1d356c6597d08cde02c2f09d785b09e28711837b1ed667dc652c08a694" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ "bitflags", "cfg-if", @@ -1820,9 +1800,9 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.2" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -1875,9 +1855,9 @@ dependencies = [ [[package]] name = "object" -version = "0.30.1" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d864c91689fdc196779b98dba0aceac6118594c2df6ee5d943eb6a8df4d107a" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "memchr", ] @@ -1975,9 +1955,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.2" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -1985,9 +1965,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.2" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -1995,9 +1975,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.2" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", @@ -2008,13 +1988,13 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.2" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", - "sha1", + "sha2", ] [[package]] @@ -2057,16 +2037,18 @@ checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "polling" -version = "2.5.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite", + "windows-sys 0.45.0", ] [[package]] @@ -2110,9 +2092,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -2261,7 +2243,7 @@ dependencies = [ "itertools", "lazy_static", "log", - "nix 0.26.1", + "nix 0.26.2", "rustc-hash", "serde", "toml", @@ -2303,9 +2285,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "50686e0021c4136d1d453b2dfe059902278681512a34d4248435dc34b6b5c8ec" dependencies = [ "proc-macro2", ] @@ -2384,9 +2366,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -2432,11 +2414,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" dependencies = [ - "base64 0.13.1", + "base64 0.21.0", "bytes", "encoding_rs", "futures-core", @@ -2540,23 +2522,23 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.6" +version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "rustls" -version = "0.20.7" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ "log", "ring", @@ -2584,9 +2566,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rustwide" @@ -2623,9 +2605,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safemem" @@ -2665,9 +2647,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "sct" @@ -2704,24 +2686,24 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" dependencies = [ "proc-macro2", "quote", @@ -2730,11 +2712,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ - "itoa 1.0.5", + "itoa", "ryu", "serde", ] @@ -2746,7 +2728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.5", + "itoa", "ryu", "serde", ] @@ -2773,6 +2755,17 @@ dependencies = [ "digest", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.4" @@ -2790,9 +2783,9 @@ checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" [[package]] name = "signal-hook" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" dependencies = [ "libc", "signal-hook-registry", @@ -2800,9 +2793,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -2815,9 +2808,9 @@ checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -2862,9 +2855,9 @@ checksum = "c01dea7e04cbb27ef4c86e9922184608185f7cd95c1763bc30d727cda4a5e930" [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -2890,9 +2883,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -2937,16 +2930,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" dependencies = [ "cfg-if", "fastrand", - "libc", "redox_syscall", - "remove_dir_all 0.5.3", - "winapi", + "rustix", + "windows-sys 0.42.0", ] [[package]] @@ -2962,9 +2954,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -3002,18 +2994,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -3041,15 +3033,15 @@ dependencies = [ [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.23.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -3060,7 +3052,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -3076,9 +3068,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core", "pin-project-lite", @@ -3099,9 +3091,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes", "futures-core", @@ -3113,9 +3105,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] @@ -3173,12 +3165,11 @@ dependencies = [ [[package]] name = "tracing-chrome" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865016457701971958e047b9f61add5bba70d7a7b084a13c9e54f9bb4f19d3a6" +checksum = "496b3cd5447f7ff527bbbf19b071ad542a000adf297d4127078b4dfdb931f41a" dependencies = [ - "crossbeam-channel", - "json", + "serde_json", "tracing-core", "tracing-subscriber", ] @@ -3224,9 +3215,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" @@ -3279,15 +3270,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -3318,9 +3309,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "ureq" -version = "2.6.1" +version = "2.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733b5ad78377302af52c0dbcb2623d78fe50e4b3bf215948ff29e9ee031d8566" +checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d" dependencies = [ "base64 0.13.1", "flate2", @@ -3351,9 +3342,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ "getrandom", "serde", @@ -3528,9 +3519,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3538,9 +3529,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log", @@ -3553,9 +3544,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ "cfg-if", "js-sys", @@ -3565,9 +3556,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3575,9 +3566,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", @@ -3588,15 +3579,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" dependencies = [ "js-sys", "wasm-bindgen", @@ -3621,15 +3612,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "wildmatch" version = "1.1.0" @@ -3687,19 +3669,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc 0.42.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" @@ -3709,9 +3715,9 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" @@ -3721,9 +3727,9 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" @@ -3733,9 +3739,9 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" @@ -3745,15 +3751,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" @@ -3763,9 +3769,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" From 290e8264baaebb18426c3a8bd514dc7d453f3cb1 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 11:47:40 +0100 Subject: [PATCH 4/8] Include `constructor` info for `BigInt` --- viper-sys/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/viper-sys/build.rs b/viper-sys/build.rs index 98423e0b9cc..84622597571 100644 --- a/viper-sys/build.rs +++ b/viper-sys/build.rs @@ -90,7 +90,7 @@ fn main() { method!("wrapRefArray"), ]), java_class!("scala.math.BigInt", vec![ - constructor!(), + constructor!("(Ljava/math/BigInteger;)V"), ]), java_class!("scala.collection.mutable.ArrayBuffer", vec![ constructor!("(I)V"), From 3cb3403a6138c76ab80cc705241f6d956d065037 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 12:04:17 +0100 Subject: [PATCH 5/8] Manually update some deps --- Cargo.lock | 62 +++++++++++++++++++++++++++++++++++++---- prusti-utils/Cargo.toml | 2 +- test-crates/Cargo.toml | 2 +- 3 files changed, 59 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 17b2e84ea27..0ddfb2684a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -371,7 +371,7 @@ dependencies = [ "snapbox", "tar", "termcolor", - "toml_edit", + "toml_edit 0.14.4", "url", ] @@ -578,7 +578,7 @@ dependencies = [ "rust-ini", "serde", "serde_json", - "toml", + "toml 0.5.11", "yaml-rust", ] @@ -2246,7 +2246,7 @@ dependencies = [ "nix 0.26.2", "rustc-hash", "serde", - "toml", + "toml 0.7.2", "uuid", "walkdir", "winapi", @@ -2598,7 +2598,7 @@ dependencies = [ "thiserror", "tokio", "tokio-stream", - "toml", + "toml 0.5.11", "walkdir", "windows-sys 0.36.1", ] @@ -2721,6 +2721,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -2976,7 +2985,7 @@ dependencies = [ "prusti-launch", "rustwide", "serde", - "toml", + "toml 0.7.2", ] [[package]] @@ -3112,6 +3121,27 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7afcae9e3f0fe2c370fd4657108972cbb2fa9db1b9f84849cefd80741b01cb6" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.5", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + [[package]] name = "toml_edit" version = "0.14.4" @@ -3125,6 +3155,19 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7082a95d48029677a28f181e5f6422d0c8339ad8396a39d3f33d62a90c1f6c30" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower-service" version = "0.3.2" @@ -3773,6 +3816,15 @@ version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +[[package]] +name = "winnow" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +dependencies = [ + "memchr", +] + [[package]] name = "winreg" version = "0.10.1" diff --git a/prusti-utils/Cargo.toml b/prusti-utils/Cargo.toml index 8751297d8d6..7deb6ef44fc 100644 --- a/prusti-utils/Cargo.toml +++ b/prusti-utils/Cargo.toml @@ -16,7 +16,7 @@ lazy_static = "1.4.0" uuid = { version = "1.0", features = ["v4"] } rustc-hash = "1.1.0" walkdir = "2.0" -toml = "0.5" +toml = "0.7" [target.'cfg(unix)'.dependencies] nix = "0.26" diff --git a/test-crates/Cargo.toml b/test-crates/Cargo.toml index 5df2c68e318..13af152c40c 100644 --- a/test-crates/Cargo.toml +++ b/test-crates/Cargo.toml @@ -13,7 +13,7 @@ env_logger = "0.10" log = "0.4" csv = "1.1.5" serde = "1.0" -toml = "0.5.8" +toml = "0.7" glob = "0.3.0" clap = { version = "4.0", features = ["derive"] } failure = "0.1.3" From e829131581954694f19b2016cb58d051ced478f9 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 13:35:33 +0100 Subject: [PATCH 6/8] Change expected stdout --- .../definitely_accessible/fields.stdout | 130 +++++++++++------- .../infinite_list.stdout | 86 ++++++++---- .../definitely_initialized/fields.stdout | 93 ++++++++----- prusti-tests/tests/parse/ui/unbalanced.stderr | 16 +-- 4 files changed, 209 insertions(+), 116 deletions(-) diff --git a/analysis/tests/test_cases/definitely_accessible/fields.stdout b/analysis/tests/test_cases/definitely_accessible/fields.stdout index 758c72795a0..a8881fab293 100644 --- a/analysis/tests/test_cases/definitely_accessible/fields.stdout +++ b/analysis/tests/test_cases/definitely_accessible/fields.stdout @@ -589,30 +589,51 @@ Result for function main(): "_11" ] }, - "terminator: replace((_1.0: std::boxed::Box) <- move _11) -> [return: bb6, unwind: bb11]", + "terminator: drop((_1.0: std::boxed::Box)) -> [return: bb6, unwind: bb7]", { - "bb11": [ - "state:", - { - "accessible": [], - "owned": [] - } - ], "bb6": [ "state:", { "accessible": [ - "_1" + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", + "_11" ], "owned": [ - "_1" + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", + "_11" ] } + ], + "bb7": [ + "state:", + { + "accessible": [], + "owned": [] + } ] } ], "bb6": [ - [], + [ + [ + "state:", + { + "accessible": [ + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", + "_11" + ], + "owned": [ + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", + "_11" + ] + }, + "statement: (_1.0: std::boxed::Box) = move _11" + ] + ], "state before terminator:", { "accessible": [ @@ -622,7 +643,7 @@ Result for function main(): "_1" ] }, - "terminator: drop(_11) -> [return: bb7, unwind: bb13]", + "terminator: drop(_11) -> [return: bb8, unwind: bb13]", { "bb13": [ "state:", @@ -631,7 +652,7 @@ Result for function main(): "owned": [] } ], - "bb7": [ + "bb8": [ "state:", { "accessible": [ @@ -645,6 +666,41 @@ Result for function main(): } ], "bb7": [ + [ + [ + "state:", + { + "accessible": [], + "owned": [] + }, + "statement: (_1.0: std::boxed::Box) = move _11" + ] + ], + "state before terminator:", + { + "accessible": [ + "(_1.0: std::boxed::Box)" + ], + "owned": [ + "(_1.0: std::boxed::Box)" + ] + }, + "terminator: drop(_11) -> bb13", + { + "bb13": [ + "state:", + { + "accessible": [ + "(_1.0: std::boxed::Box)" + ], + "owned": [ + "(_1.0: std::boxed::Box)" + ] + } + ] + } + ], + "bb8": [ [ [ "state:", @@ -704,16 +760,16 @@ Result for function main(): "_13" ] }, - "terminator: _12 = std::mem::drop::(move _13) -> [return: bb8, unwind: bb10]", + "terminator: _12 = std::mem::drop::(move _13) -> [return: bb9, unwind: bb11]", { - "bb10": [ + "bb11": [ "state:", { "accessible": [], "owned": [] } ], - "bb8": [ + "bb9": [ "state:", { "accessible": [ @@ -726,7 +782,7 @@ Result for function main(): ] } ], - "bb8": [ + "bb9": [ [ [ "state:", @@ -806,16 +862,9 @@ Result for function main(): "_0" ] }, - "terminator: drop(_1) -> [return: bb9, unwind: bb14]", + "terminator: drop(_1) -> [return: bb10, unwind: bb14]", { - "bb14": [ - "state:", - { - "accessible": [], - "owned": [] - } - ], - "bb9": [ + "bb10": [ "state:", { "accessible": [ @@ -825,10 +874,17 @@ Result for function main(): "_0" ] } + ], + "bb14": [ + "state:", + { + "accessible": [], + "owned": [] + } ] } ], - "bb9": [ + "bb10": [ [ [ "state:", @@ -855,24 +911,6 @@ Result for function main(): "terminator: return", {} ], - "bb10": [ - [], - "state before terminator:", - { - "accessible": [], - "owned": [] - }, - "terminator: drop(_13) -> bb13", - { - "bb13": [ - "state:", - { - "accessible": [], - "owned": [] - } - ] - } - ], "bb11": [ [], "state before terminator:", @@ -880,7 +918,7 @@ Result for function main(): "accessible": [], "owned": [] }, - "terminator: drop(_11) -> bb13", + "terminator: drop(_13) -> bb13", { "bb13": [ "state:", diff --git a/analysis/tests/test_cases/definitely_accessible/infinite_list.stdout b/analysis/tests/test_cases/definitely_accessible/infinite_list.stdout index 7775daa2bf3..b971bd8b0ee 100644 --- a/analysis/tests/test_cases/definitely_accessible/infinite_list.stdout +++ b/analysis/tests/test_cases/definitely_accessible/infinite_list.stdout @@ -228,20 +228,20 @@ Result for function test2(): "_2" ] }, - "terminator: replace(_1 <- move _2) -> [return: bb1, unwind: bb4]", + "terminator: drop(_1) -> [return: bb1, unwind: bb2]", { "bb1": [ "state:", { "accessible": [ - "_1" + "_2" ], "owned": [ - "_1" + "_2" ] } ], - "bb4": [ + "bb2": [ "state:", { "accessible": [], @@ -251,7 +251,20 @@ Result for function test2(): } ], "bb1": [ - [], + [ + [ + "state:", + { + "accessible": [ + "_2" + ], + "owned": [ + "_2" + ] + }, + "statement: _1 = move _2" + ] + ], "state before terminator:", { "accessible": [ @@ -261,9 +274,9 @@ Result for function test2(): "_1" ] }, - "terminator: drop(_2) -> [return: bb2, unwind: bb5]", + "terminator: drop(_2) -> [return: bb3, unwind: bb5]", { - "bb2": [ + "bb3": [ "state:", { "accessible": [ @@ -284,6 +297,41 @@ Result for function test2(): } ], "bb2": [ + [ + [ + "state:", + { + "accessible": [], + "owned": [] + }, + "statement: _1 = move _2" + ] + ], + "state before terminator:", + { + "accessible": [ + "_1" + ], + "owned": [ + "_1" + ] + }, + "terminator: drop(_2) -> bb5", + { + "bb5": [ + "state:", + { + "accessible": [ + "_1" + ], + "owned": [ + "_1" + ] + } + ] + } + ], + "bb3": [ [ [ "state:", @@ -321,9 +369,9 @@ Result for function test2(): "_1" ] }, - "terminator: drop(_1) -> [return: bb3, unwind: bb6]", + "terminator: drop(_1) -> [return: bb4, unwind: bb6]", { - "bb3": [ + "bb4": [ "state:", { "accessible": [ @@ -343,7 +391,7 @@ Result for function test2(): ] } ], - "bb3": [ + "bb4": [ [], "state before terminator:", { @@ -357,24 +405,6 @@ Result for function test2(): "terminator: return", {} ], - "bb4": [ - [], - "state before terminator:", - { - "accessible": [], - "owned": [] - }, - "terminator: drop(_2) -> bb5", - { - "bb5": [ - "state:", - { - "accessible": [], - "owned": [] - } - ] - } - ], "bb5": [ [], "state before terminator:", diff --git a/analysis/tests/test_cases/definitely_initialized/fields.stdout b/analysis/tests/test_cases/definitely_initialized/fields.stdout index 60a4e31089b..f94196af729 100644 --- a/analysis/tests/test_cases/definitely_initialized/fields.stdout +++ b/analysis/tests/test_cases/definitely_initialized/fields.stdout @@ -408,25 +408,40 @@ Result for function main(): "_6", "_11" ], - "terminator: replace((_1.0: std::boxed::Box) <- move _11) -> [return: bb6, unwind: bb11]", + "terminator: drop((_1.0: std::boxed::Box)) -> [return: bb6, unwind: bb7]", { - "bb11": [ - "state:", - [] - ], "bb6": [ "state:", [ - "_1", + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", "_4", "_5", - "_6" + "_6", + "_11" ] + ], + "bb7": [ + "state:", + [] ] } ], "bb6": [ - [], + [ + [ + "state:", + [ + "(_1.1: std::boxed::Box)", + "(_1.2: std::boxed::Box)", + "_4", + "_5", + "_6", + "_11" + ], + "statement: (_1.0: std::boxed::Box) = move _11" + ] + ], "state before terminator:", [ "_1", @@ -434,13 +449,13 @@ Result for function main(): "_5", "_6" ], - "terminator: drop(_11) -> [return: bb7, unwind: bb13]", + "terminator: drop(_11) -> [return: bb8, unwind: bb13]", { "bb13": [ "state:", [] ], - "bb7": [ + "bb8": [ "state:", [ "_1", @@ -452,6 +467,28 @@ Result for function main(): } ], "bb7": [ + [ + [ + "state:", + [], + "statement: (_1.0: std::boxed::Box) = move _11" + ] + ], + "state before terminator:", + [ + "(_1.0: std::boxed::Box)" + ], + "terminator: drop(_11) -> bb13", + { + "bb13": [ + "state:", + [ + "(_1.0: std::boxed::Box)" + ] + ] + } + ], + "bb8": [ [ [ "state:", @@ -501,13 +538,13 @@ Result for function main(): "_6", "_13" ], - "terminator: _12 = std::mem::drop::(move _13) -> [return: bb8, unwind: bb10]", + "terminator: _12 = std::mem::drop::(move _13) -> [return: bb9, unwind: bb11]", { - "bb10": [ + "bb11": [ "state:", [] ], - "bb8": [ + "bb9": [ "state:", [ "_4", @@ -518,7 +555,7 @@ Result for function main(): ] } ], - "bb8": [ + "bb9": [ [ [ "state:", @@ -581,21 +618,21 @@ Result for function main(): [ "_0" ], - "terminator: drop(_1) -> [return: bb9, unwind: bb14]", + "terminator: drop(_1) -> [return: bb10, unwind: bb14]", { - "bb14": [ - "state:", - [] - ], - "bb9": [ + "bb10": [ "state:", [ "_0" ] + ], + "bb14": [ + "state:", + [] ] } ], - "bb9": [ + "bb10": [ [ [ "state:", @@ -612,23 +649,11 @@ Result for function main(): "terminator: return", {} ], - "bb10": [ - [], - "state before terminator:", - [], - "terminator: drop(_13) -> bb13", - { - "bb13": [ - "state:", - [] - ] - } - ], "bb11": [ [], "state before terminator:", [], - "terminator: drop(_11) -> bb13", + "terminator: drop(_13) -> bb13", { "bb13": [ "state:", diff --git a/prusti-tests/tests/parse/ui/unbalanced.stderr b/prusti-tests/tests/parse/ui/unbalanced.stderr index 69e88a608a5..fa0c29477d1 100644 --- a/prusti-tests/tests/parse/ui/unbalanced.stderr +++ b/prusti-tests/tests/parse/ui/unbalanced.stderr @@ -1,11 +1,3 @@ -error: unexpected closing delimiter: `]` - --> $DIR/unbalanced.rs:3:18 - | -3 | #[requires(true))] - | -^ unexpected closing delimiter - | | - | missing open `(` for this delimiter - error: mismatched closing delimiter: `)` --> $DIR/unbalanced.rs:3:2 | @@ -14,5 +6,13 @@ error: mismatched closing delimiter: `)` | | | unclosed delimiter +error: unexpected closing delimiter: `]` + --> $DIR/unbalanced.rs:3:18 + | +3 | #[requires(true))] + | -^ unexpected closing delimiter + | | + | missing open `(` for this delimiter + error: aborting due to 2 previous errors From c7523324d4526d008b0b4a7c6a9037bcaa46bc61 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Mon, 13 Mar 2023 13:36:54 +0100 Subject: [PATCH 7/8] Update viper-toolchain --- viper-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/viper-toolchain b/viper-toolchain index d46d418296d..f693ba55360 100644 --- a/viper-toolchain +++ b/viper-toolchain @@ -1 +1 @@ -v-2023-02-26-2019 +v-2023-03-10-1726 From 81af4c7c96f71cc8d3268c0dff67b4246a39dbe0 Mon Sep 17 00:00:00 2001 From: Jonas Fiala Date: Thu, 16 Mar 2023 10:52:27 +0100 Subject: [PATCH 8/8] Bugfix --- prusti-viper/src/encoder/encoder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prusti-viper/src/encoder/encoder.rs b/prusti-viper/src/encoder/encoder.rs index e4d68af5df6..08e5966d17f 100644 --- a/prusti-viper/src/encoder/encoder.rs +++ b/prusti-viper/src/encoder/encoder.rs @@ -617,7 +617,7 @@ impl<'v, 'tcx> Encoder<'v, 'tcx> { ty::TyKind::Int(ty::IntTy::I32) => scalar_value.to_i32().unwrap().into(), ty::TyKind::Int(ty::IntTy::I64) => scalar_value.to_i64().unwrap().into(), ty::TyKind::Int(ty::IntTy::I128) => scalar_value.to_i128().unwrap().into(), - ty::TyKind::Int(ty::IntTy::Isize) => scalar_value.to_target_usize(&self.env.tcx()).unwrap().into(), + ty::TyKind::Int(ty::IntTy::Isize) => scalar_value.to_target_isize(&self.env.tcx()).unwrap().into(), ty::TyKind::Uint(ty::UintTy::U8) => scalar_value.to_u8().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U16) => scalar_value.to_u16().unwrap().into(), ty::TyKind::Uint(ty::UintTy::U32) => scalar_value.to_u32().unwrap().into(),