Files
sdk/tests/language_2/vm/regression_37821_test.dart
T
Aart Bik 622747502e [vm/interpreter] Enforce consistent interpreter/compiler unboxing view
Rationale:
Both the interpreter and compiler had some logic on when fields
could be unboxed. Rather than duplicating this logic, this CL
uses the same methods to get a more consistent view of unboxing.
Note that this add a slight overhead to the interpreter, but
only a slight. We could avoid this by duplicating the logic
to enforce consistency, but this has the danger of getting
similar issues in the future.

https://github.com/dart-lang/sdk/issues/37821

Change-Id: Icf0c1ad518d75c63e9da72e1f75eaf1cf903587f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115301
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-09-04 00:52:27 +00:00

42 lines
879 B
Dart
Executable File

// Copyright (c) 2019, 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.
// VMOptions=--deterministic
import "package:expect/expect.dart";
import 'dart:typed_data';
// Found by DartFuzzing: inconsistent view of unboxing
// https://github.com/dart-lang/sdk/issues/37821
double var5 = 0.5521203015696288;
class X0 {
double fld0_1 = 0.44794902547497595;
void run() {
for (int loc1 = 0; loc1 < 11; loc1++) {
var5 = fld0_1;
}
fld0_1 -= 20;
}
}
class X1 extends X0 {
void run() {
super.run();
}
}
@pragma("vm:never-inline")
void checkMe(double value) {
Expect.approxEquals(0.44794902547497595, value);
}
main() {
Expect.approxEquals(0.5521203015696288, var5);
new X1().run();
checkMe(var5);
}