/*
 * Copyright (c) 2020, 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.
 */
/**
 * @assertion With sound null safety, all generic const constructors and
 * generic const literals are evaluated using the actual type arguments
 * provided, whether legacy or non-legacy. This ensures that with sound null
 * safety, the final consistent semantics are obeyed.
 *
 * @description Checks dynamically that actual generic class type parameter is
 * evaluated correctly for [Object?] type argument in weak mode.
 *
 * This is a known issue with the common front end: It uses `LEGACY_ERASURE` on
 * type arguments to collection literals and `<constObjectExpression>`, and this
 * eliminates `?` from types (not just top-level, also `List<Object?>` -->
 * `List<Object*>*`). The front end will change to use a different rule, which
 * is currently being debated in
 * https://github.com/dart-lang/language/issues/1346.
 *
 * In any case, seems like it's highly unlikely that the rules in the end will
 * erase `?` and make `<Object?>[]` and `<Object>[]` canonicalize to the same
 * object (and this would hold both when the latter occurs in legacy code and
 * when it occurs in code with null safety).
 *
 * So issue #39678 with the common front end has been reported here.
 * @Issue 39678,44503
 * @author iarkh@unipro.ru
 */
// Requirements=nnbd-weak

import "../../../Utils/expect.dart";

class A<T> {
  const A();
  void testme() { Expect.equals(typeOf<Object?>(), T); }
}

main() {
  const a = A<Object?>();
  a.testme();
}
