don't clone types that are copy (clippy::clone_on_copy)
This commit is contained in:
parent
139c646251
commit
3837df2992
@ -63,7 +63,7 @@ fn show_substructure(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_>
|
||||
let span = cx.with_def_site_ctxt(span);
|
||||
let name = cx.expr_lit(span, ast::LitKind::Str(ident.name, ast::StrStyle::Cooked));
|
||||
let builder = cx.ident_of("debug_trait_builder", span);
|
||||
let builder_expr = cx.expr_ident(span, builder.clone());
|
||||
let builder_expr = cx.expr_ident(span, builder);
|
||||
|
||||
let fmt = substr.nonself_args[0].clone();
|
||||
|
||||
|
@ -2005,7 +2005,7 @@ fn emit_to_destination(
|
||||
let _buffer_lock = lock::acquire_global_lock("rustc_errors");
|
||||
for (pos, line) in rendered_buffer.iter().enumerate() {
|
||||
for part in line {
|
||||
dst.apply_style(lvl.clone(), part.style)?;
|
||||
dst.apply_style(*lvl, part.style)?;
|
||||
write!(dst, "{}", part.text)?;
|
||||
dst.reset()?;
|
||||
}
|
||||
|
@ -871,7 +871,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||
return Some(());
|
||||
}
|
||||
if let &ty::Adt(def, _) = &ta.kind {
|
||||
let path_ = self.tcx.def_path_str(def.did.clone());
|
||||
let path_ = self.tcx.def_path_str(def.did);
|
||||
if path_ == other_path {
|
||||
self.highlight_outer(&mut t1_out, &mut t2_out, path, sub, i, &other_ty);
|
||||
return Some(());
|
||||
@ -1091,8 +1091,8 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||
let sub_no_defaults_1 = self.strip_generic_default_params(def1.did, sub1);
|
||||
let sub_no_defaults_2 = self.strip_generic_default_params(def2.did, sub2);
|
||||
let mut values = (DiagnosticStyledString::new(), DiagnosticStyledString::new());
|
||||
let path1 = self.tcx.def_path_str(def1.did.clone());
|
||||
let path2 = self.tcx.def_path_str(def2.did.clone());
|
||||
let path1 = self.tcx.def_path_str(def1.did);
|
||||
let path2 = self.tcx.def_path_str(def2.did);
|
||||
if def1.did == def2.did {
|
||||
// Easy case. Replace same types with `_` to shorten the output and highlight
|
||||
// the differing ones.
|
||||
|
@ -452,7 +452,7 @@ where
|
||||
// even though a satisfactory solution exists.
|
||||
let generic = GenericKind::Projection(projection_ty);
|
||||
let verify_bound = self.verify_bound.generic_bound(generic);
|
||||
self.delegate.push_verify(origin, generic.clone(), region, verify_bound);
|
||||
self.delegate.push_verify(origin, generic, region, verify_bound);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1056,7 +1056,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
place: {:?}",
|
||||
place_span.0
|
||||
);
|
||||
this.reservation_error_reported.insert(place_span.0.clone());
|
||||
this.reservation_error_reported.insert(place_span.0);
|
||||
}
|
||||
Activation(_, activating) => {
|
||||
debug!(
|
||||
|
@ -286,7 +286,7 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> {
|
||||
// Box starts out uninitialized - need to create a separate
|
||||
// move-path for the interior so it will be separate from
|
||||
// the exterior.
|
||||
self.create_move_path(self.builder.tcx.mk_place_deref(place.clone()));
|
||||
self.create_move_path(self.builder.tcx.mk_place_deref(*place));
|
||||
self.gather_init(place.as_ref(), InitKind::Shallow);
|
||||
} else {
|
||||
self.gather_init(place.as_ref(), InitKind::Deep);
|
||||
@ -458,9 +458,8 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> {
|
||||
for offset in from..to {
|
||||
let elem =
|
||||
ProjectionElem::ConstantIndex { offset, min_length: len, from_end: false };
|
||||
let path = self.add_move_path(base_path, &elem, |tcx| {
|
||||
tcx.mk_place_elem(base_place.clone(), elem)
|
||||
});
|
||||
let path =
|
||||
self.add_move_path(base_path, &elem, |tcx| tcx.mk_place_elem(base_place, elem));
|
||||
self.record_move(place, path);
|
||||
}
|
||||
} else {
|
||||
|
@ -335,7 +335,7 @@ fn collect_items_rec<'tcx>(
|
||||
recursion_depths: &mut DefIdMap<usize>,
|
||||
inlining_map: MTRef<'_, MTLock<InliningMap<'tcx>>>,
|
||||
) {
|
||||
if !visited.lock_mut().insert(starting_point.clone()) {
|
||||
if !visited.lock_mut().insert(starting_point) {
|
||||
// We've been here already, no need to search again.
|
||||
return;
|
||||
}
|
||||
|
@ -538,7 +538,7 @@ impl CloneShimBuilder<'tcx> {
|
||||
// BB #2
|
||||
// `dest[i] = Clone::clone(src[beg])`;
|
||||
// Goto #3 if ok, #5 if unwinding happens.
|
||||
let dest_field = self.tcx.mk_place_index(dest.clone(), beg);
|
||||
let dest_field = self.tcx.mk_place_index(dest, beg);
|
||||
let src_field = self.tcx.mk_place_index(src, beg);
|
||||
self.make_clone_call(dest_field, src_field, ty, BasicBlock::new(3), BasicBlock::new(5));
|
||||
|
||||
@ -620,9 +620,9 @@ impl CloneShimBuilder<'tcx> {
|
||||
let mut previous_field = None;
|
||||
for (i, ity) in tys.enumerate() {
|
||||
let field = Field::new(i);
|
||||
let src_field = self.tcx.mk_place_field(src.clone(), field, ity);
|
||||
let src_field = self.tcx.mk_place_field(src, field, ity);
|
||||
|
||||
let dest_field = self.tcx.mk_place_field(dest.clone(), field, ity);
|
||||
let dest_field = self.tcx.mk_place_field(dest, field, ity);
|
||||
|
||||
// #(2i + 1) is the cleanup block for the previous clone operation
|
||||
let cleanup_block = self.block_index_offset(1);
|
||||
@ -633,7 +633,7 @@ impl CloneShimBuilder<'tcx> {
|
||||
// BB #(2i)
|
||||
// `dest.i = Clone::clone(&src.i);`
|
||||
// Goto #(2i + 2) if ok, #(2i + 1) if unwinding happens.
|
||||
self.make_clone_call(dest_field.clone(), src_field, ity, next_block, cleanup_block);
|
||||
self.make_clone_call(dest_field, src_field, ity, next_block, cleanup_block);
|
||||
|
||||
// BB #(2i + 1) (cleanup)
|
||||
if let Some((previous_field, previous_cleanup)) = previous_field.take() {
|
||||
|
@ -582,7 +582,7 @@ impl Inliner<'tcx> {
|
||||
let tuple_tmp_args = tuple_tys.iter().enumerate().map(|(i, ty)| {
|
||||
// This is e.g., `tuple_tmp.0` in our example above.
|
||||
let tuple_field =
|
||||
Operand::Move(tcx.mk_place_field(tuple.clone(), Field::new(i), ty.expect_ty()));
|
||||
Operand::Move(tcx.mk_place_field(tuple, Field::new(i), ty.expect_ty()));
|
||||
|
||||
// Spill to a local to make e.g., `tmp0`.
|
||||
self.create_temp_if_necessary(tuple_field, callsite, caller_body)
|
||||
|
@ -56,7 +56,7 @@ pub fn expand_aggregate<'tcx>(
|
||||
let offset = i as u32;
|
||||
assert_eq!(offset as usize, i);
|
||||
tcx.mk_place_elem(
|
||||
lhs.clone(),
|
||||
lhs,
|
||||
ProjectionElem::ConstantIndex {
|
||||
offset,
|
||||
// FIXME(eddyb) `min_length` doesn't appear to be used.
|
||||
@ -66,7 +66,7 @@ pub fn expand_aggregate<'tcx>(
|
||||
)
|
||||
} else {
|
||||
let field = Field::new(active_field_index.unwrap_or(i));
|
||||
tcx.mk_place_field(lhs.clone(), field, ty)
|
||||
tcx.mk_place_field(lhs, field, ty)
|
||||
};
|
||||
Statement { source_info, kind: StatementKind::Assign(box (lhs_field, Rvalue::Use(op))) }
|
||||
})
|
||||
|
@ -212,7 +212,7 @@ where
|
||||
assert_eq!(self.elaborator.param_env().reveal, Reveal::All);
|
||||
let field_ty =
|
||||
tcx.normalize_erasing_regions(self.elaborator.param_env(), f.ty(tcx, substs));
|
||||
(tcx.mk_place_field(base_place.clone(), field, field_ty), subpath)
|
||||
(tcx.mk_place_field(base_place, field, field_ty), subpath)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
@ -340,7 +340,7 @@ where
|
||||
.enumerate()
|
||||
.map(|(i, &ty)| {
|
||||
(
|
||||
self.tcx().mk_place_field(self.place.clone(), Field::new(i), ty),
|
||||
self.tcx().mk_place_field(self.place, Field::new(i), ty),
|
||||
self.elaborator.field_subpath(self.path, Field::new(i)),
|
||||
)
|
||||
})
|
||||
@ -353,7 +353,7 @@ where
|
||||
fn open_drop_for_box(&mut self, adt: &'tcx ty::AdtDef, substs: SubstsRef<'tcx>) -> BasicBlock {
|
||||
debug!("open_drop_for_box({:?}, {:?}, {:?})", self, adt, substs);
|
||||
|
||||
let interior = self.tcx().mk_place_deref(self.place.clone());
|
||||
let interior = self.tcx().mk_place_deref(self.place);
|
||||
let interior_path = self.elaborator.deref_subpath(self.path);
|
||||
|
||||
let succ = self.succ; // FIXME(#43234)
|
||||
@ -434,7 +434,7 @@ where
|
||||
|
||||
if let Some(variant_path) = subpath {
|
||||
let base_place = tcx.mk_place_elem(
|
||||
self.place.clone(),
|
||||
self.place,
|
||||
ProjectionElem::Downcast(Some(variant.ident.name), variant_index),
|
||||
);
|
||||
let fields = self.move_paths_for_fields(base_place, variant_path, &variant, substs);
|
||||
@ -622,7 +622,7 @@ where
|
||||
(Rvalue::Use(copy(cur.into())), Rvalue::BinaryOp(BinOp::Offset, move_(cur.into()), one))
|
||||
} else {
|
||||
(
|
||||
Rvalue::AddressOf(Mutability::Mut, tcx.mk_place_index(self.place.clone(), cur)),
|
||||
Rvalue::AddressOf(Mutability::Mut, tcx.mk_place_index(self.place, cur)),
|
||||
Rvalue::BinaryOp(BinOp::Add, move_(cur.into()), one),
|
||||
)
|
||||
};
|
||||
@ -654,7 +654,7 @@ where
|
||||
self.elaborator.patch().patch_terminator(
|
||||
drop_block,
|
||||
TerminatorKind::Drop {
|
||||
location: tcx.mk_place_deref(ptr.clone()),
|
||||
location: tcx.mk_place_deref(ptr),
|
||||
target: loop_block,
|
||||
unwind: unwind.into_option(),
|
||||
},
|
||||
@ -682,7 +682,7 @@ where
|
||||
.map(|i| {
|
||||
(
|
||||
tcx.mk_place_elem(
|
||||
self.place.clone(),
|
||||
self.place,
|
||||
ProjectionElem::ConstantIndex {
|
||||
offset: i,
|
||||
min_length: size,
|
||||
@ -719,8 +719,8 @@ where
|
||||
switch_ty: tcx.types.usize,
|
||||
values: From::from(USIZE_SWITCH_ZERO),
|
||||
targets: vec![
|
||||
self.drop_loop_pair(ety, false, len.clone()),
|
||||
self.drop_loop_pair(ety, true, len.clone()),
|
||||
self.drop_loop_pair(ety, false, len),
|
||||
self.drop_loop_pair(ety, true, len),
|
||||
],
|
||||
},
|
||||
}),
|
||||
@ -912,7 +912,7 @@ where
|
||||
.map(|(i, f)| {
|
||||
let field = Field::new(i);
|
||||
let field_ty = f.ty(tcx, substs);
|
||||
Operand::Move(tcx.mk_place_field(self.place.clone(), field, field_ty))
|
||||
Operand::Move(tcx.mk_place_field(self.place, field, field_ty))
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
@ -2,8 +2,8 @@ use crate::build::matches::ArmHasGuard;
|
||||
use crate::build::ForGuard::OutsideGuard;
|
||||
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder};
|
||||
use crate::hair::*;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_span::Span;
|
||||
|
||||
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
@ -29,7 +29,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
// This is a `break`-able block
|
||||
let exit_block = this.cfg.start_new_block();
|
||||
let block_exit =
|
||||
this.in_breakable_scope(None, exit_block, destination.clone(), |this| {
|
||||
this.in_breakable_scope(None, exit_block, destination, |this| {
|
||||
this.ast_block_stmts(destination, block, span, stmts, expr, safety_mode)
|
||||
});
|
||||
this.cfg.goto(unpack!(block_exit), source_info, exit_block);
|
||||
|
@ -3,10 +3,10 @@
|
||||
use crate::build::expr::category::{Category, RvalueFunc};
|
||||
use crate::build::{BlockAnd, BlockAndExtension, BlockFrame, Builder};
|
||||
use crate::hair::*;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{self, CanonicalUserTypeAnnotation};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{self, CanonicalUserTypeAnnotation};
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
use rustc_target::spec::abi::Abi;
|
||||
@ -139,31 +139,26 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
// Start the loop.
|
||||
this.cfg.goto(block, source_info, loop_block);
|
||||
|
||||
this.in_breakable_scope(
|
||||
Some(loop_block),
|
||||
exit_block,
|
||||
destination.clone(),
|
||||
move |this| {
|
||||
// conduct the test, if necessary
|
||||
let body_block = this.cfg.start_new_block();
|
||||
let diverge_cleanup = this.diverge_cleanup();
|
||||
this.cfg.terminate(
|
||||
loop_block,
|
||||
source_info,
|
||||
TerminatorKind::FalseUnwind {
|
||||
real_target: body_block,
|
||||
unwind: Some(diverge_cleanup),
|
||||
},
|
||||
);
|
||||
this.in_breakable_scope(Some(loop_block), exit_block, destination, move |this| {
|
||||
// conduct the test, if necessary
|
||||
let body_block = this.cfg.start_new_block();
|
||||
let diverge_cleanup = this.diverge_cleanup();
|
||||
this.cfg.terminate(
|
||||
loop_block,
|
||||
source_info,
|
||||
TerminatorKind::FalseUnwind {
|
||||
real_target: body_block,
|
||||
unwind: Some(diverge_cleanup),
|
||||
},
|
||||
);
|
||||
|
||||
// The “return” value of the loop body must always be an unit. We therefore
|
||||
// introduce a unit temporary as the destination for the loop body.
|
||||
let tmp = this.get_unit_temp();
|
||||
// Execute the body, branching back to the test.
|
||||
let body_block_end = unpack!(this.into(tmp, body_block, body));
|
||||
this.cfg.goto(body_block_end, source_info, loop_block);
|
||||
},
|
||||
);
|
||||
// The “return” value of the loop body must always be an unit. We therefore
|
||||
// introduce a unit temporary as the destination for the loop body.
|
||||
let tmp = this.get_unit_temp();
|
||||
// Execute the body, branching back to the test.
|
||||
let body_block_end = unpack!(this.into(tmp, body_block, body));
|
||||
this.cfg.goto(body_block_end, source_info, loop_block);
|
||||
});
|
||||
exit_block.unit()
|
||||
}
|
||||
ExprKind::Call { ty, fun, args, from_hir_call } => {
|
||||
@ -278,26 +273,25 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
|
||||
let field_names = this.hir.all_fields(adt_def, variant_index);
|
||||
|
||||
let fields =
|
||||
if let Some(FruInfo { base, field_types }) = base {
|
||||
let base = unpack!(block = this.as_place(block, base));
|
||||
let fields = if let Some(FruInfo { base, field_types }) = base {
|
||||
let base = unpack!(block = this.as_place(block, base));
|
||||
|
||||
// MIR does not natively support FRU, so for each
|
||||
// base-supplied field, generate an operand that
|
||||
// reads it from the base.
|
||||
field_names
|
||||
.into_iter()
|
||||
.zip(field_types.into_iter())
|
||||
.map(|(n, ty)| match fields_map.get(&n) {
|
||||
Some(v) => v.clone(),
|
||||
None => this.consume_by_copy_or_move(
|
||||
this.hir.tcx().mk_place_field(base.clone(), n, ty),
|
||||
),
|
||||
})
|
||||
.collect()
|
||||
} else {
|
||||
field_names.iter().filter_map(|n| fields_map.get(n).cloned()).collect()
|
||||
};
|
||||
// MIR does not natively support FRU, so for each
|
||||
// base-supplied field, generate an operand that
|
||||
// reads it from the base.
|
||||
field_names
|
||||
.into_iter()
|
||||
.zip(field_types.into_iter())
|
||||
.map(|(n, ty)| match fields_map.get(&n) {
|
||||
Some(v) => v.clone(),
|
||||
None => this.consume_by_copy_or_move(
|
||||
this.hir.tcx().mk_place_field(base, n, ty),
|
||||
),
|
||||
})
|
||||
.collect()
|
||||
} else {
|
||||
field_names.iter().filter_map(|n| fields_map.get(n).cloned()).collect()
|
||||
};
|
||||
|
||||
let inferred_ty = expr.ty;
|
||||
let user_ty = user_ty.map(|ty| {
|
||||
|
@ -1903,9 +1903,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
self.schedule_drop_for_binding(binding.var_id, binding.span, OutsideGuard);
|
||||
}
|
||||
let rvalue = match binding.binding_mode {
|
||||
BindingMode::ByValue => {
|
||||
Rvalue::Use(self.consume_by_copy_or_move(binding.source.clone()))
|
||||
}
|
||||
BindingMode::ByValue => Rvalue::Use(self.consume_by_copy_or_move(binding.source)),
|
||||
BindingMode::ByRef(borrow_kind) => {
|
||||
Rvalue::Ref(re_erased, borrow_kind, binding.source)
|
||||
}
|
||||
|
@ -15,11 +15,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
subpatterns
|
||||
.iter()
|
||||
.map(|fieldpat| {
|
||||
let place = self.hir.tcx().mk_place_field(
|
||||
place.clone(),
|
||||
fieldpat.field,
|
||||
fieldpat.pattern.ty,
|
||||
);
|
||||
let place =
|
||||
self.hir.tcx().mk_place_field(place, fieldpat.field, fieldpat.pattern.ty);
|
||||
MatchPair::new(place, &fieldpat.pattern)
|
||||
})
|
||||
.collect()
|
||||
@ -44,14 +41,14 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
match_pairs.extend(prefix.iter().enumerate().map(|(idx, subpattern)| {
|
||||
let elem =
|
||||
ProjectionElem::ConstantIndex { offset: idx as u32, min_length, from_end: false };
|
||||
let place = tcx.mk_place_elem(place.clone(), elem);
|
||||
let place = tcx.mk_place_elem(*place, elem);
|
||||
MatchPair::new(place, subpattern)
|
||||
}));
|
||||
|
||||
if let Some(subslice_pat) = opt_slice {
|
||||
let suffix_len = suffix.len() as u32;
|
||||
let subslice = tcx.mk_place_elem(
|
||||
place.clone(),
|
||||
*place,
|
||||
ProjectionElem::Subslice {
|
||||
from: prefix.len() as u32,
|
||||
to: if exact_size { min_length - suffix_len } else { suffix_len },
|
||||
@ -68,7 +65,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
min_length,
|
||||
from_end: !exact_size,
|
||||
};
|
||||
let place = tcx.mk_place_elem(place.clone(), elem);
|
||||
let place = tcx.mk_place_elem(*place, elem);
|
||||
MatchPair::new(place, subpattern)
|
||||
}));
|
||||
}
|
||||
|
@ -610,7 +610,7 @@ pub fn check_unused_or_stable_features(tcx: TyCtxt<'_>) {
|
||||
// Warn if the user enables a lib feature multiple times.
|
||||
duplicate_feature_err(tcx.sess, *span, *feature);
|
||||
}
|
||||
remaining_lib_features.insert(feature, span.clone());
|
||||
remaining_lib_features.insert(feature, *span);
|
||||
}
|
||||
// `stdbuild` has special handling for `libc`, so we need to
|
||||
// recognise the feature when building std.
|
||||
|
@ -15,7 +15,7 @@ impl<K: DepKind> DepGraphQuery<K> {
|
||||
let mut graph = Graph::with_capacity(nodes.len(), edges.len());
|
||||
let mut indices = FxHashMap::default();
|
||||
for node in nodes {
|
||||
indices.insert(node.clone(), graph.add_node(node.clone()));
|
||||
indices.insert(*node, graph.add_node(*node));
|
||||
}
|
||||
|
||||
for &(ref source, ref target) in edges {
|
||||
|
@ -643,13 +643,13 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
if param_name.name == kw::UnderscoreLifetime {
|
||||
// Pick the elided lifetime "definition" if one exists
|
||||
// and use it to make an elision scope.
|
||||
self.lifetime_uses.insert(def_id.clone(), LifetimeUseSet::Many);
|
||||
self.lifetime_uses.insert(def_id, LifetimeUseSet::Many);
|
||||
elision = Some(reg);
|
||||
} else {
|
||||
lifetimes.insert(name, reg);
|
||||
}
|
||||
} else {
|
||||
self.lifetime_uses.insert(def_id.clone(), LifetimeUseSet::Many);
|
||||
self.lifetime_uses.insert(def_id, LifetimeUseSet::Many);
|
||||
lifetimes.insert(name, reg);
|
||||
}
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
||||
.borrow_mut()
|
||||
.entry(span)
|
||||
.or_default()
|
||||
.push(error.obligation.predicate.clone());
|
||||
.push(error.obligation.predicate);
|
||||
}
|
||||
|
||||
// We do this in 2 passes because we want to display errors in order, though
|
||||
|
@ -314,7 +314,7 @@ impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx> {
|
||||
|
||||
match obligation.predicate {
|
||||
ty::Predicate::Trait(ref data, _) => {
|
||||
let trait_obligation = obligation.with(data.clone());
|
||||
let trait_obligation = obligation.with(*data);
|
||||
|
||||
if data.is_global() {
|
||||
// no type variables present, can use evaluation for better caching.
|
||||
@ -420,7 +420,7 @@ impl<'a, 'b, 'tcx> ObligationProcessor for FulfillProcessor<'a, 'b, 'tcx> {
|
||||
}
|
||||
|
||||
ty::Predicate::Projection(ref data) => {
|
||||
let project_obligation = obligation.with(data.clone());
|
||||
let project_obligation = obligation.with(*data);
|
||||
match project::poly_project_and_unify_type(self.selcx, &project_obligation) {
|
||||
Ok(None) => {
|
||||
let tcx = self.selcx.tcx();
|
||||
|
@ -413,7 +413,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
match obligation.predicate {
|
||||
ty::Predicate::Trait(ref t, _) => {
|
||||
debug_assert!(!t.has_escaping_bound_vars());
|
||||
let obligation = obligation.with(t.clone());
|
||||
let obligation = obligation.with(*t);
|
||||
self.evaluate_trait_predicate_recursively(previous_stack, obligation)
|
||||
}
|
||||
|
||||
@ -460,7 +460,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
}
|
||||
|
||||
ty::Predicate::Projection(ref data) => {
|
||||
let project_obligation = obligation.with(data.clone());
|
||||
let project_obligation = obligation.with(*data);
|
||||
match project::poly_project_and_unify_type(self, &project_obligation) {
|
||||
Ok(Some(mut subobligations)) => {
|
||||
self.add_depth(subobligations.iter_mut(), obligation.recursion_depth);
|
||||
@ -910,7 +910,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
// separately rather than using `stack.fresh_trait_ref` --
|
||||
// this is because we want the unbound variables to be
|
||||
// replaced with fresh types starting from index 0.
|
||||
let cache_fresh_trait_pred = self.infcx.freshen(stack.obligation.predicate.clone());
|
||||
let cache_fresh_trait_pred = self.infcx.freshen(stack.obligation.predicate);
|
||||
debug!(
|
||||
"candidate_from_obligation(cache_fresh_trait_pred={:?}, obligation={:?})",
|
||||
cache_fresh_trait_pred, stack
|
||||
@ -1448,8 +1448,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
self.infcx.probe(|_| {
|
||||
self.match_projection(
|
||||
obligation,
|
||||
bound.clone(),
|
||||
placeholder_trait_predicate.trait_ref.clone(),
|
||||
*bound,
|
||||
placeholder_trait_predicate.trait_ref,
|
||||
&placeholder_map,
|
||||
snapshot,
|
||||
)
|
||||
@ -1468,7 +1468,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
let result = self.match_projection(
|
||||
obligation,
|
||||
bound,
|
||||
placeholder_trait_predicate.trait_ref.clone(),
|
||||
placeholder_trait_predicate.trait_ref,
|
||||
&placeholder_map,
|
||||
snapshot,
|
||||
);
|
||||
@ -1520,7 +1520,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
// Keep only those bounds which may apply, and propagate overflow if it occurs.
|
||||
let mut param_candidates = vec![];
|
||||
for bound in matching_bounds {
|
||||
let wc = self.evaluate_where_clause(stack, bound.clone())?;
|
||||
let wc = self.evaluate_where_clause(stack, bound)?;
|
||||
if wc.may_apply() {
|
||||
param_candidates.push(ParamCandidate(bound));
|
||||
}
|
||||
@ -2496,7 +2496,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||
// where-clause trait-ref could be unified with the obligation
|
||||
// trait-ref. Repeat that unification now without any
|
||||
// transactional boundary; it should not fail.
|
||||
match self.match_where_clause_trait_ref(obligation, param.clone()) {
|
||||
match self.match_where_clause_trait_ref(obligation, param) {
|
||||
Ok(obligations) => obligations,
|
||||
Err(()) => {
|
||||
bug!(
|
||||
|
@ -373,7 +373,7 @@ impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> {
|
||||
);
|
||||
};
|
||||
|
||||
self.tables.user_provided_types_mut().insert(hir_id, c_ty.clone());
|
||||
self.tables.user_provided_types_mut().insert(hir_id, *c_ty);
|
||||
|
||||
if let ty::UserType::TypeOf(_, user_substs) = c_ty.value {
|
||||
if self.rustc_dump_user_substs {
|
||||
@ -411,7 +411,7 @@ impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> {
|
||||
);
|
||||
};
|
||||
|
||||
self.tables.user_provided_sigs.insert(def_id, c_sig.clone());
|
||||
self.tables.user_provided_sigs.insert(def_id, *c_sig);
|
||||
}
|
||||
}
|
||||
|
||||
@ -562,7 +562,7 @@ impl<'cx, 'tcx> WritebackCx<'cx, 'tcx> {
|
||||
for (&local_id, fn_sig) in fcx_tables.liberated_fn_sigs().iter() {
|
||||
let hir_id = hir::HirId { owner: common_hir_owner, local_id };
|
||||
let fn_sig = self.resolve(fn_sig, &hir_id);
|
||||
self.tables.liberated_fn_sigs_mut().insert(hir_id, fn_sig.clone());
|
||||
self.tables.liberated_fn_sigs_mut().insert(hir_id, fn_sig);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -509,7 +509,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut for_generics = self.extract_for_generics(tcx, orig_p.clone());
|
||||
let mut for_generics = self.extract_for_generics(tcx, orig_p);
|
||||
|
||||
assert!(bounds.len() == 1);
|
||||
let mut b = bounds.pop().expect("bounds were empty");
|
||||
|
@ -47,7 +47,7 @@ pub fn try_inline(
|
||||
}
|
||||
let mut ret = Vec::new();
|
||||
|
||||
let attrs_clone = attrs.clone();
|
||||
let attrs_clone = attrs;
|
||||
|
||||
let inner = match res {
|
||||
Res::Def(DefKind::Trait, did) => {
|
||||
@ -292,7 +292,7 @@ pub fn build_impls(cx: &DocContext<'_>, did: DefId, attrs: Option<Attrs<'_>>) ->
|
||||
let mut impls = Vec::new();
|
||||
|
||||
for &did in tcx.inherent_impls(did).iter() {
|
||||
build_impl(cx, did, attrs.clone(), &mut impls);
|
||||
build_impl(cx, did, attrs, &mut impls);
|
||||
}
|
||||
|
||||
impls
|
||||
|
@ -683,7 +683,7 @@ impl Tester for Collector {
|
||||
let name = self.generate_name(line, &filename);
|
||||
let cratename = self.cratename.to_string();
|
||||
let opts = self.opts.clone();
|
||||
let edition = config.edition.unwrap_or(self.options.edition.clone());
|
||||
let edition = config.edition.unwrap_or(self.options.edition);
|
||||
let options = self.options.clone();
|
||||
let runtool = self.options.runtool.clone();
|
||||
let runtool_args = self.options.runtool_args.clone();
|
||||
|
Loading…
Reference in New Issue
Block a user