Forgot to change the condition to be true in a do/while loop that has phi updates: the condition has already been evaluated.

Review URL: https://codereview.chromium.org//11419056

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@15059 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
ngeoffray@google.com 2012-11-19 07:32:26 +00:00
parent 332bfdc7d6
commit 9ae8f3b4e1
2 changed files with 14 additions and 0 deletions

View file

@ -984,6 +984,7 @@ abstract class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
updateBody.statements.add(new js.Continue(null));
body.statements.add(
new js.If(jsCondition, updateBody, new js.Break(null)));
jsCondition = newLiteralBool(true);
}
loop = new js.Do(unwrapStatement(body), jsCondition);
currentContainer = oldContainer;

View file

@ -0,0 +1,13 @@
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Test that a condition is only evaluated once in a loop.
main() {
int c = 0;
do {
c++;
} while (c++ < 2);
Expect.equals(4, c);
}