library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
//     var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
//                                      ^^^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
//     var /*@type=dynamic*/ v2 = super.bar;
//                                      ^^^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
//     var /*@type=dynamic*/ v3 = super[0];
//                                     ^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.
//     var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
//                                      ^^^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
//     var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
//                                     ^
//
import self as self;
import "dart:core" as core;

class C extends core::Object {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  method test() → void {
    dynamic v1 = super.foo(self::f<dynamic>());
    dynamic v2 = super.bar;
    dynamic v3 = super.[](0);
    dynamic v4 = super.bar = self::f<dynamic>();
    dynamic v5 = let final core::int* #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final void #t3 = super.[]=(#t1, #t2) in #t2;
  }
}
static method f<T extends core::Object* = dynamic>() → self::f::T*
  return null;
static method main() → dynamic {}
