diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2019-02-27 20:32:12 +0000 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-04-04 18:47:10 +0100 |
| commit | 7eda7232797c6a92b39f5058e6e1840e5aa08d8b (patch) | |
| tree | 8196a1c5a923bae577282804ef166495544f73da | |
| parent | 2d065712cf96328093400fd0a1a0c4e0f3b1d51c (diff) | |
| download | rust-7eda7232797c6a92b39f5058e6e1840e5aa08d8b.tar.gz rust-7eda7232797c6a92b39f5058e6e1840e5aa08d8b.zip | |
Fix cases of conflicting two-phase borrows
| -rw-r--r-- | src/librustc_codegen_llvm/abi.rs | 3 | ||||
| -rw-r--r-- | src/librustc_mir/transform/add_retag.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax_ext/format.rs | 4 |
3 files changed, 7 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/abi.rs b/src/librustc_codegen_llvm/abi.rs index 3a0d9e1334c..348616790b0 100644 --- a/src/librustc_codegen_llvm/abi.rs +++ b/src/librustc_codegen_llvm/abi.rs @@ -266,7 +266,8 @@ impl ArgTypeExt<'ll, 'tcx> for ArgType<'tcx, Ty<'tcx>> { OperandValue::Ref(next(), Some(next()), self.layout.align.abi).store(bx, dst); } PassMode::Direct(_) | PassMode::Indirect(_, None) | PassMode::Cast(_) => { - self.store(bx, next(), dst); + let next_arg = next(); + self.store(bx, next_arg, dst); } } } diff --git a/src/librustc_mir/transform/add_retag.rs b/src/librustc_mir/transform/add_retag.rs index 9b9e6594296..a393847fd49 100644 --- a/src/librustc_mir/transform/add_retag.rs +++ b/src/librustc_mir/transform/add_retag.rs @@ -164,7 +164,7 @@ impl MirPass for AddRetag { if src_ty.is_region_ptr() { // The only `Misc` casts on references are those creating raw pointers. assert!(dest_ty.is_unsafe_ptr()); - (RetagKind::Raw, place) + (RetagKind::Raw, place.clone()) } else { // Some other cast, no retag continue @@ -182,7 +182,7 @@ impl MirPass for AddRetag { _ => RetagKind::Default, }; - (kind, place) + (kind, place.clone()) } // Do nothing for the rest _ => continue, @@ -191,7 +191,7 @@ impl MirPass for AddRetag { let source_info = block_data.statements[i].source_info; block_data.statements.insert(i+1, Statement { source_info, - kind: StatementKind::Retag(retag_kind, place.clone()), + kind: StatementKind::Retag(retag_kind, place), }); } } diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs index 5efa6b36f67..24fbc9b6caf 100644 --- a/src/libsyntax_ext/format.rs +++ b/src/libsyntax_ext/format.rs @@ -347,9 +347,9 @@ impl<'a, 'b> Context<'a, 'b> { Named(name) => { match self.names.get(&name) { - Some(idx) => { + Some(&idx) => { // Treat as positional arg. - self.verify_arg_type(Exact(*idx), ty) + self.verify_arg_type(Exact(idx), ty) } None => { let msg = format!("there is no argument named `{}`", name); |
