library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Warning: 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: Warning: Superclass has no getter named 'bar'.
//     var /*@type=dynamic*/ v2 = super.bar;
//                                      ^^^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Warning: Superclass has no method named '[]'.
//     var /*@type=dynamic*/ v3 = super[0];
//                                     ^
//
// pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Warning: 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: Warning: 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 dynamic #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final dynamic #t3 = super.[]=(#t1, #t2) in #t2;
  }
}
static method f<T extends core::Object = dynamic>() → self::f::T
  return null;
static method main() → dynamic {}
