Files
sdk/tests/language_2/vm/regression_36587_test.dart
T
Aart Bik 9070d6ae61 [dart/vm] Inspect shift constant in absence of range analysis
Rationale:
Queries the constant of a shift operation to determine if it
is in range when range analysis has not run. This seems in general
a good idea, since some optimizations occur *after* range analysis,
and we were missing those cases. In this particular case, it also
avoids an assert fail on a shift by one without env() that was
introduced by a pass that has no subsequent range analysis. In
this case, it is unclear whether not having an env() was an
accident, or on purpose since the shift factor is known to
be well-behaved. Please have a careful look!

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

Change-Id: I12b4cb773f31899e17bfce8506bce599ccbef8ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99382
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-04-16 19:07:15 +00:00

106 lines
3.1 KiB
Dart

// 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.
// Regression test extracted from a large DartFuzz-generated test.
// https://github.com/dart-lang/sdk/issues/36587
import "package:expect/expect.dart";
import 'dart:async';
import 'dart:cli';
import 'dart:collection';
import 'dart:convert';
import 'dart:core';
import 'dart:io';
import 'dart:isolate';
import 'dart:math';
import 'dart:typed_data';
Set<int> var0 = {-62, -13, 2147483648, -10, -9223372028264841217, -54, 47};
Set<int> var1 = {-59};
bool var2 = false;
bool var3 = true;
int var4 = 58;
double var5 = 0.004032426761438224;
String var6 = 'u6X2';
List<int> var7 = [56, -95, 6442450944, -31, 82];
Set<int> var8 = {9223372036854775807, 4294967297};
Map<int, String> var9 = {
6: 'Ei(ZR',
75: 'O0A-',
99: 't',
49: 'Qu',
20: 'FujA\u2665',
47: ''
};
String foo2() {
var8 ??= Set.identity();
switch ((--var4)) {
case 3826530052:
{
{
int loc0 = 0;
do {
try {
throw {64: var6};
} catch (e) {
if ((!(var3))) {
break;
} else {
try {
var8 = ((false ? FileSystemEntity.isWatchSupported : var3)
? {Int32x4.wxxx, var4, -43, Float32x4.wzxz}
: {
(var4++),
(var7[(false ? -87 : (++loc0))] %
(var7[((++loc0) * var4)] ~/ 73))
});
var0 = ((((-((((true ? var2 : false) ? (!(var3)) : true)
? var5
: (0.38834735336907733 ??
0.8105736840461367)))) +
(0.3752597438445757).abs()))
.isFinite
? {
(true ? 65 : (var3 ? (loc0--) : var4)),
var7[Float32x4.xxxx]
}
: Set.identity());
var1 = ((true
? ({var7[var7[-9223372032559808513]]}).toSet()
: (Set.identity()).difference(var8)) ??
var8);
var9[Float32x4.zxyz] = '';
} catch (e) {
loc0 ~/= ((var3 != var3)
? (~((false ? (-(loc0)) : Int32x4.wzwx)))
: var4);
} finally {
var1 = var8;
var5 ??= 0.6273822429057158;
throw [
(loc0++),
2147483647,
(var4--),
(-(ZLibOption.defaultWindowBits)),
(~((loc0--))),
(var4++)
];
}
}
break;
}
} while (++loc0 < 74);
}
}
}
}
main() {
Expect.equals(58, var4);
foo2();
Expect.equals(57, var4);
}