mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 19:10:05 +00:00
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:
parent
332bfdc7d6
commit
9ae8f3b4e1
|
@ -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;
|
||||
|
|
13
tests/language/do_while3_test.dart
Normal file
13
tests/language/do_while3_test.dart
Normal 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);
|
||||
}
|
Loading…
Reference in a new issue