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

import 'package:expect/expect.dart';

class Foo {
  static int _next = 0;

  var field0 = ++_next;
  var field1 = ++_next;
  var field2 = ++_next;
  var field3 = ++_next;
  var field4 = ++_next;
  var field5 = ++_next;
  var field6 = ++_next;
  var field7 = ++_next;
  var field8 = ++_next;
  var field9 = ++_next;
  var field10 = ++_next;
  var field11 = ++_next;
  var field12 = ++_next;
  var field13 = ++_next;
  var field14 = ++_next;
  var field15 = ++_next;
  var field16 = ++_next;
  var field17 = ++_next;
  var field18 = ++_next;
  var field19 = ++_next;
  var field20 = ++_next;
  var field21 = ++_next;
  var field22 = ++_next;
  var field23 = ++_next;
  var field24 = ++_next;
  var field25 = ++_next;
  var field26 = ++_next;
  var field27 = ++_next;
  var field28 = ++_next;
  var field29 = ++_next;
  var field30 = ++_next;
  var field31 = ++_next;

  @pragma('vm:never-inline')
  String toString() => '$field0 $field1 $field2 $field3 $field4 $field5'
      '$field6 $field7 $field8 $field9 $field10 $field11'
      '$field12 $field13 $field14 $field15 $field16 $field17'
      '$field18 $field19 $field20 $field21 $field22 $field23'
      '$field24 $field25 $field26 $field27 $field28 $field29'
      '$field30 $field3';
}

// The TypeArgumentVector will be at an offset that cannot be loaded from via
// normal addresing mode on ARM64.
class GenericFoo<T> extends Foo {}

final l = <dynamic>[GenericFoo<int>(), null, 1, 1.0];

main() {
  final dynamic genericFoo = l[0];
  Expect.isTrue(genericFoo.toString().length > 0); // Keep the fields alive.
  Expect.isTrue(identical(genericFoo as GenericFoo<int>, genericFoo));
}
