]> git.lizzy.rs Git - rust.git/commitdiff
Fix liveness analysis for read-write inline asm operands
authorAmanieu d'Antras <amanieu@gmail.com>
Mon, 9 Nov 2015 16:36:11 +0000 (16:36 +0000)
committerAmanieu d'Antras <amanieu@gmail.com>
Sat, 5 Dec 2015 08:18:30 +0000 (08:18 +0000)
src/librustc/middle/liveness.rs

index 5170b37732420cd64dbb1906458fee10ab9f4031..9c8cc45d3962ff14e5f129af7d12fd3ae4ef100f 100644 (file)
@@ -1167,13 +1167,14 @@ fn propagate_through_expr(&mut self, expr: &Expr, succ: LiveNode)
           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)
                     }
                 }