diff options
| author | Amanieu d'Antras <amanieu@gmail.com> | 2015-11-09 16:36:11 +0000 |
|---|---|---|
| committer | Amanieu d'Antras <amanieu@gmail.com> | 2015-12-05 08:18:30 +0000 |
| commit | ce5b0351a57dcf335ea214de3ff59466e9b929d9 (patch) | |
| tree | 3bac2d19dad914c25ffec49b5ba7e04e6c8efc92 | |
| parent | 9d7b113b44457ae20cb90828f63edb1f6cea2f06 (diff) | |
| download | rust-ce5b0351a57dcf335ea214de3ff59466e9b929d9.tar.gz rust-ce5b0351a57dcf335ea214de3ff59466e9b929d9.zip | |
Fix liveness analysis for read-write inline asm operands
| -rw-r--r-- | src/librustc/middle/liveness.rs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 5170b377324..9c8cc45d396 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -1167,13 +1167,14 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { hir::ExprInlineAsm(ref ia) => { let succ = ia.outputs.iter().rev().fold(succ, - |succ, &(_, ref expr, _, is_indirect)| { + |succ, &(_, ref expr, is_rw, is_indirect)| { // see comment on lvalues // in propagate_through_lvalue_components() if is_indirect { self.propagate_through_expr(&**expr, succ) } else { - let succ = self.write_lvalue(&**expr, succ, ACC_WRITE); + let acc = if is_rw { ACC_WRITE|ACC_READ } else { ACC_WRITE }; + let succ = self.write_lvalue(&**expr, succ, acc); self.propagate_through_lvalue_components(&**expr, succ) } } |
