// Copyright (c) 2016, 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.
// SharedOptions=--supermixin

// Validate the following test from section 12 ("Mixins") of the spec:
//
//     "Let M_A be a mixin derived from a class M with direct superclass
//     S_static.
//
//     Let A be an application of M_A.  It is a static warning if the
//     superclass of A is not a subtype of S_static."

// In this test, M is declared as `class M extends ... with G {}`, so
// `S_static` is the unnamed mixin application `... with G`.  Since this
// unnamed mixin application can't be derived from, all the cases should yield
// a warning.

class B {}
class C {}
class D {}
class E extends B with C implements D {}
class F extends E {}
class G {}
class A = E with M;
class M
  extends B with G /// 01: static type warning
  extends C with G /// 02: static type warning
  extends D with G /// 03: static type warning
  extends E with G /// 04: static type warning
  extends F with G /// 05: static type warning
  {}

main() {
  new A();
}
