9070d6ae61
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>
106 lines
3.1 KiB
Dart
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);
|
|
}
|