library;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
//     return s + 1; // error
//              ^
//
// pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
//     return (await t) + 1; // error
//                      ^
//
// pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
// test3<S extends num?>(S s) => s + 1; // error
//                                 ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
class C<T extends core::Object? = dynamic> extends core::Object {
  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
  constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
    : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
    ;
}
static method test1(self::C<core::num> c) → dynamic {
  <S extends core::num>(S) → core::num f1 = c.{self::C::field1} = <S extends core::num>(S s) → core::num {
    return s.{core::num::+}(1){(core::num) → core::num};
  };
  <S extends FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async /* emittedValueType= core::num */ {
    return (await t /* runtimeCheckType= asy::Future<core::num> */ ).{core::num::+}(1){(core::num) → core::num};
  };
}
static method test2(self::C<core::num?> c) → dynamic {
  <S extends core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num?>(S% s) → core::num {
    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
    return s + 1; // error
             ^" in s.{core::num::+}(1){(core::num) → core::num};
  };
  <S extends FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async /* emittedValueType= core::num */ {
    return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
    return (await t) + 1; // error
                     ^" in (await t /* runtimeCheckType= asy::Future<core::num?> */ ).{core::num::+}(1){(core::num) → core::num};
  };
}
static method test3<S extends core::num?>(self::test3::S% s) → dynamic
  return invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
test3<S extends num?>(S s) => s + 1; // error
                                ^" in s.{core::num::+}(1){(core::num) → core::num};
static method main() → dynamic {}
