// 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.

// Verifies that compiler doesn't crash on a particular piece of code.

import "package:expect/expect.dart";
import 'dart:typed_data';

Int8List var3 = Int8List(1);
bool var14 = true;
Duration var15 = Duration();
int var16 = 22;
String var18 = '';
Map<bool, bool> var25 = {};
Map<bool, int> var26 = {};
Map<int, String> var30 = {};
Map<String, bool> var31 = {};

int foo1(Int8List par1, Map<bool, int> par2) {
  throw 'err';
}

class X0 {
  Int32x4? foo0_0(Duration par1, Set<bool> par2) {
    if (var14) {
      {
        int loc0 = 0;
        do {
          var31 = {
            (String.fromCharCode(((true ? true : true)
                    ? (var14 ? 33 : var16)
                    : (-(foo1(var3,
                        {(false ? false : var14): (true ? 20 : var3[27])})))))):
                ((((var16 > (-((-(loc0))))) ? Duration() : Duration()) +
                        (var14 ? (true ? var15 : par1) : Duration())) <
                    Duration()),
            (((var30[(Int32x4.yzxw as int)])!.toUpperCase()) +
                (Uri.encodeComponent(('2' ??
                    (var25[true]!
                        ? (String.fromEnvironment(''))
                        : var18))))): (!(var14)),
            (var31['MgOdzM']!
                    ? var30[15]!
                    : (('D9q6Ma').substring(
                        (~((--var16))), foo1(var3, (false ? {} : var26))))):
                (!(false)),
          };
        } while (++loc0 < 39);
      }
    }
  }
}

main() {
  Expect.throws(() => X0().foo0_0(Duration(), {true, false}),
      (e) => e is NoSuchMethodError || e is TypeError);
}
