Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Unified Diff: tests/language/issue9687_test.dart

Issue 13877009: Fix variable allocator in the presence of HCheck instructions. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/language/issue9687_test.dart
===================================================================
--- tests/language/issue9687_test.dart (revision 0)
+++ tests/language/issue9687_test.dart (revision 0)
@@ -0,0 +1,51 @@
+// Copyright (c) 2013, 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.
+
+// Regression test for dart2js code generation in checked mode. See
+// last part of https://code.google.com/p/dart/issues/detail?id=9687.
+
+import "package:expect/expect.dart";
+
+class A {
+ final finalField;
+ final otherFinalField;
+
+ A() : finalField = 42, otherFinalField = 54;
+
+ expectFinalField(arg1, arg2) {
+ Expect.equals(arg1, arg2);
+ Expect.equals(finalField, arg1);
+ }
+
+ expectOtherFinalField(_, arg1, arg2) {
+ Expect.equals(arg1, arg2);
+ Expect.equals(otherFinalField, arg1);
+ }
+}
+
+var array = [new A()];
+
+main() {
+ // [untypedReceiver] is made so that the compiler does not know
+ // what it is.
+ var untypedReceiver = array[0];
+
+ // [typedReceiver] is made so that the compiler knows what it is.
+ var typedReceiver = new A();
+
+ // Using [: finalField :] twice will make the compiler want to
+ // allocate one temporary for it.
+ var a = untypedReceiver.expectFinalField(
+ typedReceiver.finalField, typedReceiver.finalField);
+
+ // Having a check instruction in between two allocations of
+ // temporary variables used to trigger a bug in the compiler.
+ int b = a;
+
+ // Using [: otherFinalField :] twice will make the compiler want to
+ // allocate one temporary for it. The compiler used to assign the
+ // same temporary for [: otherFinalField :] and [: finalField :].
+ untypedReceiver.expectOtherFinalField(
+ b, typedReceiver.otherFinalField, typedReceiver.otherFinalField);
+}

Powered by Google App Engine
This is Rietveld 408576698