// Copyright (c) 201, 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.
// VMOptions=--enable-asserts
//
// Dart test program testing assert statements.

// @dart = 2.9

import "package:expect/expect.dart";

class S {
  const S();
  const S.named();
}

class C extends S {
  final int x;
  C.cc01(int x)
      : x = x,
        super();
  C.cc02(int x)
      : x = x,
        super.named();
  C.cc03(this.x) : super();
  C.cc04(this.x) : super.named();
  C.cc05(int x)
      : x = x,
        assert(x == x),
        super();
  C.cc06(int x)
      : x = x,
        assert(x == x),
        super.named();
  C.cc07(this.x)
      : assert(x == x),
        super();
  C.cc08(this.x)
      : assert(x == x),
        super.named();
  C.cc09(int x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x;
        //^
        // [cfe] Can't have initializers after 'super'.
  C.cc10(int x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x;
        //^
        // [cfe] Can't have initializers after 'super'.
  C.cc11(this.x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  C.cc12(this.x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  C.cc13(int x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x,
        //^
        // [cfe] Can't have initializers after 'super'.
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  C.cc14(int x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x,
        //^
        // [cfe] Can't have initializers after 'super'.
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  C.cc15(int x)
      : x = x,
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  C.cc16(int x)
      : x = x,
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.

  const C.cc17(int x)
      : x = x,
        super();
  const C.cc18(int x)
      : x = x,
        super.named();
  const C.cc19(this.x) : super();
  const C.cc20(this.x) : super.named();
  const C.cc21(int x)
      : x = x,
        assert(x == x),
        super();
  const C.cc22(int x)
      : x = x,
        assert(x == x),
        super.named();
  const C.cc23(this.x)
      : assert(x == x),
        super();
  const C.cc24(this.x)
      : assert(x == x),
        super.named();
  const C.cc25(int x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x;
        //^
        // [cfe] Can't have initializers after 'super'.
  const C.cc26(int x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x;
        //^
        // [cfe] Can't have initializers after 'super'.
  const C.cc27(this.x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  const C.cc28(this.x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  const C.cc29(int x)
      : //
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x,
        //^
        // [cfe] Can't have initializers after 'super'.
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  const C.cc30(int x)
      : //
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        x = x,
        //^
        // [cfe] Can't have initializers after 'super'.
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  const C.cc31(int x)
      : x = x,
        super(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
  const C.cc32(int x)
      : x = x,
        super.named(),
//      ^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_SUPER_INVOCATION
        assert(x == x);
//      ^
// [cfe] Can't have initializers after 'super'.
}

main() {
  // Ensure that erroneous constructors are actually needed.
  new C.cc01(42);
  new C.cc02(42);
  new C.cc03(42);
  new C.cc04(42);
  new C.cc05(42);
  new C.cc06(42);
  new C.cc07(42);
  new C.cc08(42);
  new C.cc09(42);
  new C.cc10(42);
  new C.cc11(42);
  new C.cc12(42);
  new C.cc13(42);
  new C.cc14(42);
  new C.cc15(42);
  new C.cc16(42);

  const C.cc17(42);
  const C.cc18(42);
  const C.cc19(42);
  const C.cc20(42);
  const C.cc21(42);
  const C.cc22(42);
  const C.cc23(42);
  const C.cc24(42);
  const C.cc25(42);
  const C.cc26(42);
  const C.cc27(42);
  const C.cc28(42);
  const C.cc29(42);
  const C.cc30(42);
  const C.cc31(42);
  const C.cc32(42);
}
