From 0d2b4d0432c04c998509c0272c076866dd0f5fc4 Mon Sep 17 00:00:00 2001 From: Herman Venter Date: Thu, 12 Dec 2024 13:05:01 -0800 Subject: [PATCH] New nightly (#22) * nightly-2024-12-05 * nightly-2024-12-12 --- Cargo.lock | 14 +-- binaries/summary_store.tar | Bin 3527168 -> 3660288 bytes checker/src/abstract_value.rs | 59 +++++++--- checker/src/block_visitor.rs | 23 ++-- checker/src/body_visitor.rs | 104 ++++++++++-------- checker/src/call_visitor.rs | 2 +- checker/src/expression.rs | 2 +- checker/src/fixed_point_visitor.rs | 2 +- checker/tests/call_graph/fnptr.rs | 2 +- checker/tests/call_graph/fnptr_clean.rs | 2 +- checker/tests/call_graph/fnptr_deduplicate.rs | 2 +- checker/tests/call_graph/fnptr_dom.rs | 2 +- checker/tests/call_graph/fnptr_dom_loop.rs | 2 +- .../call_graph/fnptr_dom_loop_souffle.rs | 2 +- checker/tests/call_graph/fnptr_fold.rs | 6 +- checker/tests/call_graph/fnptr_loop.rs | 2 +- checker/tests/call_graph/fnptr_slice.rs | 2 +- checker/tests/call_graph/generic.rs | 2 +- .../tests/call_graph/static_deduplicate.rs | 6 +- checker/tests/call_graph/static_fold.rs | 4 +- checker/tests/call_graph/trait.rs | 2 +- rust-toolchain.toml | 2 +- 22 files changed, 148 insertions(+), 96 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00c4de6d..05dcf1ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -508,7 +508,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", - "redox_syscall 0.5.7", + "redox_syscall 0.5.8", ] [[package]] @@ -745,9 +745,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags 2.6.0", ] @@ -848,18 +848,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", diff --git a/binaries/summary_store.tar b/binaries/summary_store.tar index 54f5644ba6a1fe480414eee3e5f379b1f8c82031..28dea2bfe673edaa8839f70823730341d34a9250 100644 GIT binary patch delta 66850 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

s!Ke4i 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 delta 43288 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 { return left.cast(target_type); } } + Expression::Reference(..) if target_type.is_integer() => { + // [(&x) as t] -> &x if t is an integer + return self.clone(); + } // [(v : t1) as target_type] -> (v: t1) if t1.max_value() == target_type.max_value() Expression::Variable { var_type: t1, .. } | Expression::InitialParameterValue { var_type: t1, .. } => { @@ -2084,15 +2088,15 @@ impl AbstractValueTrait for Rc { // [if !(x) { a } else { b }] -> if x { b } else { a } return operand.conditional_expression(alternate, consequent); } - // [if 0 == x { y } else { true }] -> x || y - // [if 0 == x { false } else { y }] -> x && y + // [if 0 == x { y } else { true }] -> x != 0 || y + // [if 0 == x { false } else { y }] -> x != 0 && y if let Expression::Equals { left: z, right: x } = &self.expression { if let Expression::CompileTimeConstant(ConstantDomain::U128(0)) = z.expression { if alternate.as_bool_if_known().unwrap_or(false) { - return x.or(consequent); + return x.not_equals(z.clone()).or(consequent); } if !consequent.as_bool_if_known().unwrap_or(true) { - return x.and(alternate); + return x.not_equals(z.clone()).and(alternate); } } } @@ -4851,6 +4855,13 @@ impl AbstractValueTrait for Rc { /// Returns an element that is "self % other". #[logfn_inputs(TRACE)] fn remainder(&self, other: Rc) -> Rc { + // [(x % y) % y] -> x % y + if let Expression::Rem { left: x, right: y } = &self.expression { + if y.eq(&other) { + return x.clone(); + } + } + // [(x as t) % c] -> x % c if c.is_power_of_two() && c <= t.modulo_value() if let Expression::Cast { operand: x, .. } = &self.expression { let ct = x.expression.infer_type(); @@ -6842,9 +6853,26 @@ impl AbstractValueTrait for Rc { /// or zero filled as appropriate. #[logfn_inputs(TRACE)] fn transmute(&self, target_type: ExpressionType) -> Rc { - if target_type.is_integer() && self.expression.infer_type().is_integer() { + let expression_type = self.expression.infer_type(); + if expression_type == target_type { + self.clone() + } else if target_type.is_integer() + || target_type == ExpressionType::ThinPointer && expression_type.is_integer() + { self.unsigned_modulo(target_type.bit_length()) - .cast(target_type) + .try_to_constant_fold_and_distribute_typed_unary_op( + target_type, + ConstantDomain::transmute, + Self::transmute, + |o, t| { + AbstractValue::make_typed_unary(o, t, |operand, target_type| { + Expression::Transmute { + operand, + target_type, + } + }) + }, + ) } else if target_type == ExpressionType::Bool { self.unsigned_modulo(target_type.bit_length()) .not_equals(Rc::new(ConstantDomain::U128(0).into())) @@ -6943,17 +6971,22 @@ impl AbstractValueTrait for Rc { } /// Returns an expression that discards (zero fills) bits that are not in the specified number - /// of least significant bits. The result is an unsigned integer. - #[logfn(TRACE)] + /// of least-significant bits. The result is an unsigned integer. + #[logfn_inputs(TRACE)] fn unsigned_modulo(&self, num_bits: u8) -> Rc { if let Expression::CompileTimeConstant(c) = &self.expression { Rc::new(c.unsigned_modulo(num_bits).into()) - } else if num_bits == 128 { - self.try_to_retype_as(ExpressionType::U128) } else { - let power_of_two = Rc::new(ConstantDomain::U128(1 << num_bits).into()); - let unsigned = self.try_to_retype_as(ExpressionType::U128); - unsigned.remainder(power_of_two) + let expression_type = self.expression.infer_type(); + if expression_type.bit_length() == num_bits { + self.clone() + } else if num_bits == 128 { + self.try_to_retype_as(ExpressionType::U128) + } else { + let power_of_two = Rc::new(ConstantDomain::U128(1 << num_bits).into()); + let unsigned = self.try_to_retype_as(ExpressionType::U128); + unsigned.remainder(power_of_two) + } } } diff --git a/checker/src/block_visitor.rs b/checker/src/block_visitor.rs index ce3f62b2..3dd61b80 100644 --- a/checker/src/block_visitor.rs +++ b/checker/src/block_visitor.rs @@ -2197,17 +2197,24 @@ impl<'block, 'analysis, 'compilation, 'tcx> BlockVisitor<'block, 'analysis, 'com } mir::CastKind::Transmute => { let source_type = self.get_operand_rustc_type(operand); - let source_value = self.visit_operand(operand); - let source_path = Path::get_as_path(source_value.clone()); - let path = if source_value.is_function() { - Path::new_function(path) - } else { - path + let (source_path, target_path) = match operand { + mir::Operand::Copy(place) | + mir::Operand::Move(place) => (self.visit_lh_place(place), path), + mir::Operand::Constant(..) => { + let source_value = self.visit_operand(operand); + let source_path = Path::get_as_path(source_value.clone()); + let target_path = if source_value.is_function() { + Path::new_function(path) + } else { + path + }; + (source_path, target_path) + } }; self.bv.copy_and_transmute( source_path, source_type, - path, + target_path, ty, ); } @@ -2241,7 +2248,7 @@ impl<'block, 'analysis, 'compilation, 'tcx> BlockVisitor<'block, 'analysis, 'com .get_operand_path(operand) .canonicalize(&self.bv.current_environment); if !self.type_visitor().is_slice_pointer(ty.kind()) { - source_path = Path::new_field(source_path, 0); + source_path = Path::new_field(source_path, 0).canonicalize(&self.bv.current_environment); } if let mir::Operand::Move(..) = operand { self.bv diff --git a/checker/src/body_visitor.rs b/checker/src/body_visitor.rs index 24d2df74..0e2ce3d7 100644 --- a/checker/src/body_visitor.rs +++ b/checker/src/body_visitor.rs @@ -412,7 +412,7 @@ impl<'analysis, 'compilation, 'tcx> BodyVisitor<'analysis, 'compilation, 'tcx> { } } } - _ => {} + _ => (), } let refined_val = { let top = abstract_value::TOP.into(); @@ -1784,6 +1784,60 @@ impl<'analysis, 'compilation, 'tcx> BodyVisitor<'analysis, 'compilation, 'tcx> { ) } + fn add_leaf_fields_for( + &self, + path: Rc, + def: &'tcx AdtDef, + args: GenericArgsRef<'tcx>, + tcx: TyCtxt<'tcx>, + accumulator: &mut Vec<(Rc, Ty<'tcx>)>, + ) { + if let Some(int_ty) = def.repr().int { + let ty = match int_ty { + rustc_abi::IntegerType::Fixed(t, true) => match t { + rustc_abi::Integer::I8 => tcx.types.i8, + rustc_abi::Integer::I16 => tcx.types.i16, + rustc_abi::Integer::I32 => tcx.types.i32, + rustc_abi::Integer::I64 => tcx.types.i64, + rustc_abi::Integer::I128 => tcx.types.i128, + }, + rustc_abi::IntegerType::Fixed(t, false) => match t { + rustc_abi::Integer::I8 => tcx.types.u8, + rustc_abi::Integer::I16 => tcx.types.u16, + rustc_abi::Integer::I32 => tcx.types.u32, + rustc_abi::Integer::I64 => tcx.types.u64, + rustc_abi::Integer::I128 => tcx.types.u128, + }, + rustc_abi::IntegerType::Pointer(true) => tcx.types.isize, + rustc_abi::IntegerType::Pointer(false) => tcx.types.usize, + }; + let discr_path = Path::new_discriminant(path); + accumulator.push((discr_path, ty)); + } else if !def.variants().is_empty() { + let variant = def.variants().iter().next().expect("at least one variant"); + for (i, field) in variant.fields.iter().enumerate() { + let field_path = Path::new_field(path.clone(), i); + let field_ty = field.ty(tcx, args); + debug!("field_path: {:?}, field_ty: {:?}", field_path, field_ty); + if let TyKind::Adt(def, args) = field_ty.kind() { + self.add_leaf_fields_for(field_path, def, args, tcx, accumulator) + } else if self.type_visitor().is_slice_pointer(field_ty.kind()) { + let ptr_path = Path::new_field(field_path.clone(), 0); + let len_path = Path::new_length(field_path.clone()); + let pointer_type = Ty::new_ptr( + self.tcx, + self.type_visitor.get_element_type(field_ty), + rustc_hir::Mutability::Not, + ); + accumulator.push((ptr_path, pointer_type)); + accumulator.push((len_path, tcx.types.usize)); + } else { + accumulator.push((field_path, field_ty)) + } + } + } + } + /// Copy the heap model at source_path to a heap model at target_path. /// If the type of value at source_path is different from that at target_path, the value is transmuted. #[logfn_inputs(TRACE)] @@ -1794,52 +1848,10 @@ impl<'analysis, 'compilation, 'tcx> BodyVisitor<'analysis, 'compilation, 'tcx> { target_path: Rc, target_rustc_type: Ty<'tcx>, ) { - fn add_leaf_fields_for<'a>( - path: Rc, - def: &'a AdtDef, - args: GenericArgsRef<'a>, - tcx: TyCtxt<'a>, - accumulator: &mut Vec<(Rc, Ty<'a>)>, - ) { - if let Some(int_ty) = def.repr().int { - let ty = match int_ty { - rustc_abi::IntegerType::Fixed(t, true) => match t { - rustc_abi::Integer::I8 => tcx.types.i8, - rustc_abi::Integer::I16 => tcx.types.i16, - rustc_abi::Integer::I32 => tcx.types.i32, - rustc_abi::Integer::I64 => tcx.types.i64, - rustc_abi::Integer::I128 => tcx.types.i128, - }, - rustc_abi::IntegerType::Fixed(t, false) => match t { - rustc_abi::Integer::I8 => tcx.types.u8, - rustc_abi::Integer::I16 => tcx.types.u16, - rustc_abi::Integer::I32 => tcx.types.u32, - rustc_abi::Integer::I64 => tcx.types.u64, - rustc_abi::Integer::I128 => tcx.types.u128, - }, - rustc_abi::IntegerType::Pointer(true) => tcx.types.isize, - rustc_abi::IntegerType::Pointer(false) => tcx.types.usize, - }; - let discr_path = Path::new_discriminant(path); - accumulator.push((discr_path, ty)); - } else if !def.variants().is_empty() { - let variant = def.variants().iter().next().expect("at least one variant"); - for (i, field) in variant.fields.iter().enumerate() { - let field_path = Path::new_field(path.clone(), i); - let field_ty = field.ty(tcx, args); - if let TyKind::Adt(def, args) = field_ty.kind() { - add_leaf_fields_for(field_path, def, args, tcx, accumulator) - } else { - accumulator.push((field_path, field_ty)) - } - } - } - } - let mut source_fields = Vec::new(); match source_rustc_type.kind() { TyKind::Adt(source_def, source_substs) => { - add_leaf_fields_for( + self.add_leaf_fields_for( source_path, source_def, source_substs, @@ -1904,7 +1916,7 @@ impl<'analysis, 'compilation, 'tcx> BodyVisitor<'analysis, 'compilation, 'tcx> { let mut target_fields = Vec::new(); match target_rustc_type.kind() { TyKind::Adt(target_def, target_substs) => { - add_leaf_fields_for( + self.add_leaf_fields_for( target_path, target_def, target_substs, @@ -2063,7 +2075,7 @@ impl<'analysis, 'compilation, 'tcx> BodyVisitor<'analysis, 'compilation, 'tcx> { } else if source_bits - copied_source_bits >= target_bits_to_write { // target field can be completely assigned from bits of source field value if source_bits - copied_source_bits > target_bits_to_write { - // discard higher order bits since they wont fit into the target field + // discard higher order bits since they won't fit into the target field val = val.unsigned_modulo(target_bits_to_write); } if let Expression::Reference(p) = &val.expression { diff --git a/checker/src/call_visitor.rs b/checker/src/call_visitor.rs index e459e814..0e7e9272 100644 --- a/checker/src/call_visitor.rs +++ b/checker/src/call_visitor.rs @@ -3002,7 +3002,7 @@ impl<'call, 'block, 'analysis, 'compilation, 'tcx> } /// Updates the current state to reflect the effects of a normal return from the function call. - /// The paths and expressions of the side-effects are refined in the context of the pre-state + /// The paths and expressions of the side effects are refined in the context of the pre-state /// (the environment before the call executed), while the refined effects are applied to the /// current state. #[logfn_inputs(TRACE)] diff --git a/checker/src/expression.rs b/checker/src/expression.rs index 61cce7bf..031e8ea9 100644 --- a/checker/src/expression.rs +++ b/checker/src/expression.rs @@ -1529,7 +1529,7 @@ impl ExpressionType { #[logfn_inputs(TRACE)] pub fn is_floating_point_number(&self) -> bool { use self::ExpressionType::*; - matches!(self, F32 | F64) + matches!(self, F16 | F32 | F64) } /// Returns true if this type is one of the integer types. diff --git a/checker/src/fixed_point_visitor.rs b/checker/src/fixed_point_visitor.rs index c6dc51a1..4e5ad672 100644 --- a/checker/src/fixed_point_visitor.rs +++ b/checker/src/fixed_point_visitor.rs @@ -88,7 +88,7 @@ impl<'fixed, 'analysis, 'compilation, 'tcx> } } - /// Visits a single basic block, starting with an in_state that is the join of all of + /// Visits a single basic block, starting with an in_state that is the join of all /// the out_state values of its predecessors and then updating out_state with the final /// current_environment of the block. Also adds the block to the already_visited set. #[logfn_inputs(TRACE)] diff --git a/checker/tests/call_graph/fnptr.rs b/checker/tests/call_graph/fnptr.rs index 559e3247..d9426f49 100644 --- a/checker/tests/call_graph/fnptr.rs +++ b/checker/tests/call_graph/fnptr.rs @@ -69,7 +69,7 @@ commit; ], "callables": [ { - "name": "/fnptr/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr[03cc]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr[35c1]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 9, "local": true diff --git a/checker/tests/call_graph/fnptr_clean.rs b/checker/tests/call_graph/fnptr_clean.rs index 8e3419f7..446eb8ea 100644 --- a/checker/tests/call_graph/fnptr_clean.rs +++ b/checker/tests/call_graph/fnptr_clean.rs @@ -74,7 +74,7 @@ commit; ], "callables": [ { - "name": "/fnptr_clean/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_clean[123f]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_clean/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_clean[fae2]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 14, "local": true diff --git a/checker/tests/call_graph/fnptr_deduplicate.rs b/checker/tests/call_graph/fnptr_deduplicate.rs index a2ee779b..1a65f841 100644 --- a/checker/tests/call_graph/fnptr_deduplicate.rs +++ b/checker/tests/call_graph/fnptr_deduplicate.rs @@ -66,7 +66,7 @@ commit; ], "callables": [ { - "name": "/fnptr_deduplicate/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_deduplicate[324d]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_deduplicate/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_deduplicate[7eb2]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 10, "local": true diff --git a/checker/tests/call_graph/fnptr_dom.rs b/checker/tests/call_graph/fnptr_dom.rs index 9bb361bd..cf3303da 100644 --- a/checker/tests/call_graph/fnptr_dom.rs +++ b/checker/tests/call_graph/fnptr_dom.rs @@ -71,7 +71,7 @@ commit; ], "callables": [ { - "name": "/fnptr_dom/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_dom[e414]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:8 ~ fnptr_dom[e414]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_dom/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_dom[755f]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:8 ~ fnptr_dom[755f]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 9, "local": true diff --git a/checker/tests/call_graph/fnptr_dom_loop.rs b/checker/tests/call_graph/fnptr_dom_loop.rs index 15c10e68..6cfda4c9 100644 --- a/checker/tests/call_graph/fnptr_dom_loop.rs +++ b/checker/tests/call_graph/fnptr_dom_loop.rs @@ -85,7 +85,7 @@ commit; ], "callables": [ { - "name": "/fnptr_dom_loop/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_dom_loop[ff13]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:9 ~ fnptr_dom_loop[ff13]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_dom_loop/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_dom_loop[8d00]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:9 ~ fnptr_dom_loop[8d00]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 9, "local": true diff --git a/checker/tests/call_graph/fnptr_dom_loop_souffle.rs b/checker/tests/call_graph/fnptr_dom_loop_souffle.rs index 0f8cafc8..77912120 100644 --- a/checker/tests/call_graph/fnptr_dom_loop_souffle.rs +++ b/checker/tests/call_graph/fnptr_dom_loop_souffle.rs @@ -82,7 +82,7 @@ digraph { ], "callables": [ { - "name": "/fnptr_dom_loop_souffle/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_dom_loop_souffle[5b29]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:9 ~ fnptr_dom_loop_souffle[5b29]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_dom_loop_souffle/fn1(u32,&'^0.Named(DefId(0:8 ~ fnptr_dom_loop_souffle[fa21]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] },&'^1.Named(DefId(0:9 ~ fnptr_dom_loop_souffle[fa21]::fn1::'_#1), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 10, "local": true diff --git a/checker/tests/call_graph/fnptr_fold.rs b/checker/tests/call_graph/fnptr_fold.rs index 0d472845..e83e8206 100644 --- a/checker/tests/call_graph/fnptr_fold.rs +++ b/checker/tests/call_graph/fnptr_fold.rs @@ -73,7 +73,7 @@ commit; ], "callables": [ { - "name": "/fnptr_fold/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_fold[dac1]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_fold/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_fold[b66d]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 10, "local": true @@ -97,7 +97,7 @@ commit; "local": true }, { - "name": "/std/std::io::_print(std::fmt::Arguments<'^0.Named(DefId(1:14015 ~ std[4531]::io::stdio::_print::'_), \"'_\")>)->()", + "name": "/std/std::io::_print(std::fmt::Arguments<'^0.Named(DefId(1:14015 ~ std[a47b]::io::stdio::_print::'_), \"'_\")>)->()", "file_index": 1, "first_line": 1232, "local": false @@ -105,7 +105,7 @@ commit; { "name": "/core/std::fmt::Arguments::<'a>::new_const(&'a/#0 [&'static str; N/#1])->std::fmt::Arguments<'a/#0>", "file_index": 2, - "first_line": 336, + "first_line": 588, "local": true } ], diff --git a/checker/tests/call_graph/fnptr_loop.rs b/checker/tests/call_graph/fnptr_loop.rs index 22a7a416..63d4ce60 100644 --- a/checker/tests/call_graph/fnptr_loop.rs +++ b/checker/tests/call_graph/fnptr_loop.rs @@ -82,7 +82,7 @@ commit; "local": true }, { - "name": "/fnptr_loop/fn2(u32,&'^0.Named(DefId(0:7 ~ fnptr_loop[3178]::fn2::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_loop/fn2(u32,&'^0.Named(DefId(0:7 ~ fnptr_loop[ee63]::fn2::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 12, "local": true diff --git a/checker/tests/call_graph/fnptr_slice.rs b/checker/tests/call_graph/fnptr_slice.rs index 73a2b48b..28218bdd 100644 --- a/checker/tests/call_graph/fnptr_slice.rs +++ b/checker/tests/call_graph/fnptr_slice.rs @@ -62,7 +62,7 @@ commit; ], "callables": [ { - "name": "/fnptr_slice/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_slice[c2b5]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", + "name": "/fnptr_slice/fn1(u32,&'^0.Named(DefId(0:7 ~ fnptr_slice[a8c5]::fn1::'_), \"'_\") Binder { value: fn(u32) -> u32, bound_vars: [] })->u32", "file_index": 0, "first_line": 10, "local": true diff --git a/checker/tests/call_graph/generic.rs b/checker/tests/call_graph/generic.rs index cc8c86b3..19758b49 100644 --- a/checker/tests/call_graph/generic.rs +++ b/checker/tests/call_graph/generic.rs @@ -74,7 +74,7 @@ commit; "local": true }, { - "name": "/generic/Gen::::bar(&'^0.Named(DefId(0:12 ~ generic[4b30]::{impl#0}::bar::'_), \"'_\") Gen,T/#0)->()", + "name": "/generic/Gen::::bar(&'^0.Named(DefId(0:12 ~ generic[c38b]::{impl#0}::bar::'_), \"'_\") Gen,T/#0)->()", "file_index": 0, "first_line": 14, "local": true diff --git a/checker/tests/call_graph/static_deduplicate.rs b/checker/tests/call_graph/static_deduplicate.rs index ed9de824..938801e7 100644 --- a/checker/tests/call_graph/static_deduplicate.rs +++ b/checker/tests/call_graph/static_deduplicate.rs @@ -66,19 +66,19 @@ commit; ], "callables": [ { - "name": "/static_deduplicate/fn1(u32,&'^0.Named(DefId(0:7 ~ static_deduplicate[0108]::fn1::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:7 ~ static_deduplicate[0108]::fn1::'_), \"'_\") str)", + "name": "/static_deduplicate/fn1(u32,&'^0.Named(DefId(0:7 ~ static_deduplicate[7b14]::fn1::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:7 ~ static_deduplicate[7b14]::fn1::'_), \"'_\") str)", "file_index": 0, "first_line": 10, "local": true }, { - "name": "/static_deduplicate/fn2(u32,&'^0.Named(DefId(0:8 ~ static_deduplicate[0108]::fn2::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:8 ~ static_deduplicate[0108]::fn2::'_), \"'_\") str)", + "name": "/static_deduplicate/fn2(u32,&'^0.Named(DefId(0:8 ~ static_deduplicate[7b14]::fn2::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:8 ~ static_deduplicate[7b14]::fn2::'_), \"'_\") str)", "file_index": 0, "first_line": 13, "local": true }, { - "name": "/static_deduplicate/fn3(u32,&'^0.Named(DefId(0:9 ~ static_deduplicate[0108]::fn3::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:9 ~ static_deduplicate[0108]::fn3::'_), \"'_\") str)", + "name": "/static_deduplicate/fn3(u32,&'^0.Named(DefId(0:9 ~ static_deduplicate[7b14]::fn3::'_), \"'_\") str)->(u32, &'^0.Named(DefId(0:9 ~ static_deduplicate[7b14]::fn3::'_), \"'_\") str)", "file_index": 0, "first_line": 16, "local": true diff --git a/checker/tests/call_graph/static_fold.rs b/checker/tests/call_graph/static_fold.rs index 26daf4d7..7e423f09 100644 --- a/checker/tests/call_graph/static_fold.rs +++ b/checker/tests/call_graph/static_fold.rs @@ -93,7 +93,7 @@ commit; "local": true }, { - "name": "/std/std::io::_print(std::fmt::Arguments<'^0.Named(DefId(1:14015 ~ std[4531]::io::stdio::_print::'_), \"'_\")>)->()", + "name": "/std/std::io::_print(std::fmt::Arguments<'^0.Named(DefId(1:14015 ~ std[a47b]::io::stdio::_print::'_), \"'_\")>)->()", "file_index": 1, "first_line": 1232, "local": false @@ -101,7 +101,7 @@ commit; { "name": "/core/std::fmt::Arguments::<'a>::new_const(&'a/#0 [&'static str; N/#1])->std::fmt::Arguments<'a/#0>", "file_index": 2, - "first_line": 336, + "first_line": 588, "local": false } ], diff --git a/checker/tests/call_graph/trait.rs b/checker/tests/call_graph/trait.rs index a4a3d50b..f2ac6cb3 100644 --- a/checker/tests/call_graph/trait.rs +++ b/checker/tests/call_graph/trait.rs @@ -74,7 +74,7 @@ commit; "local": true }, { - "name": "/trait/::bar(&'^0.Named(DefId(0:13 ~ trait[e5fd]::{impl#0}::bar::'_), \"'_\") Bar)->i32", + "name": "/trait/::bar(&'^0.Named(DefId(0:13 ~ trait[a7a9]::{impl#0}::bar::'_), \"'_\") Bar)->i32", "file_index": 0, "first_line": 14, "local": true diff --git a/rust-toolchain.toml b/rust-toolchain.toml index ee3827f3..83a18657 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2024-12-04" +channel = "nightly-2024-12-12" components = ["clippy", "rustfmt", "rustc-dev", "rust-src", "rust-std", "llvm-tools-preview"]