// Copyright (c) 2012, 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.

// This test exercises a sound null safety issue that arose in the compiler by
// allocating an argument slot for a type parameter that was determined to be
// unused. This resulted in `null` being added to a list that wouldn't otherwise
// need to support null.

import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import '../helpers/compiler_helper.dart';

const String TEST = r"""
class A {
  Object value;
  @pragma('dart2js:tryInline')
  @pragma('dart2js:as:trust')
  T foo<T>() => value as T;
}

void main () {
  final a = A();
  a.value = 'val';
  a.foo();
}
""";

main() {
  test() async {
    await compile(TEST, enableTypeAssertions: true, disableInlining: false,
        check: (generated) {
      // 'foo' should be inlined and no type arg should be needed.
      Expect.isFalse(generated.contains('foo'));
    });
  }

  asyncTest(() async {
    print('--test from kernel------------------------------------------------');
    await test();
  });
}
