Browse Source

fix ssa logic wrt OpAssignOp (closes #3687)

Dan Korostelev 10 years ago
parent
commit
596dedbaae
2 changed files with 12 additions and 1 deletions
  1. 1 1
      analyzer.ml
  2. 11 0
      tests/unit/src/unit/issues/Issue3687.hx

+ 1 - 1
analyzer.ml

@@ -779,9 +779,9 @@ module Ssa = struct
 				{e with eexpr = TBinop(OpAssign,e1,e2)}
 			| TBinop(OpAssignOp op,({eexpr = TLocal v} as e1),e2) ->
 				let e1 = loop ctx e1 in
+				let e2 = loop ctx e2 in
 				let e_op = mk (TBinop(op,e1,e2)) e.etype e.epos in
 				let _ = assign_var ctx v e_op e1.epos in
-				let e2 = loop ctx e2 in
 				{e with eexpr = TBinop(OpAssignOp op,e1,e2)}
 			| TUnop((Increment | Decrement as op),flag,({eexpr = TLocal v} as e1)) ->
 				let op = match op with Increment -> OpAdd | Decrement -> OpSub | _ -> assert false in

+ 11 - 0
tests/unit/src/unit/issues/Issue3687.hx

@@ -0,0 +1,11 @@
+package unit.issues;
+
+class Issue3687 extends Test {
+	function test() {
+		var a = 0;
+		var b = 0;
+		b = 1;
+		a += b;
+		eq(a, 1);
+	}
+}