library;
//
// Problems in library:
//
// pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   i = /*@error=InvalidAssignment*/ s;
//                                    ^
//
// pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
// Try changing the type of the left hand side, or casting the right hand side to 'int'.
//   i ??= /*@error=InvalidAssignment*/ s;
//                                      ^
//
// pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
//  - 'A' is from 'pkg/front_end/testcases/invalid_assignment.dart'.
// Try changing the type of the left hand side, or casting the right hand side to 'A'.
//   a /*@error=InvalidAssignment*/ += 1;
//                                  ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator +(core::int i) → core::String
    return "";
}
static method test(core::int i, core::String s, self::A a) → dynamic {
  i = 1;
  i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
  i = /*@error=InvalidAssignment*/ s;
                                   ^" in s as{TypeError} core::int;
  i.{core::num::==}(null) ?{core::int} i = 1 : null;
  i.{core::num::==}(null) ?{core::Object} i = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
Try changing the type of the left hand side, or casting the right hand side to 'int'.
  i ??= /*@error=InvalidAssignment*/ s;
                                     ^" in s as{TypeError} core::int : null;
  a = new self::A::•();
  a = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'String' can't be assigned to a variable of type 'A'.
 - 'A' is from 'pkg/front_end/testcases/invalid_assignment.dart'.
Try changing the type of the left hand side, or casting the right hand side to 'A'.
  a /*@error=InvalidAssignment*/ += 1;
                                 ^" in a.{self::A::+}(1) as{TypeError} self::A;
}
static method main() → dynamic {}
