anchor.diff:    // [cfe] A value of type 'String' can't be assigned to a variable of type 'num'.
   
     i += d;
  +  //^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
     //   ^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  //^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'int'.
   
     i += n;
  +  //^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
     //   ^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  //^^
  +
  +  i += never;
  +  //^
     // [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
  -
  -  i += never;
     //   ^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  //^^
  +
  +  i += dyn; // type of `i + dyn` is `num`, not assignable to `int`.
  +  //^
     // [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
  -
  -  i += dyn; // type of `i + dyn` is `num`, not assignable to `int`.
     //   ^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  //^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
   
     ti += i; // Type of expression is `int`, not `I`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  +  // ^
     // [cfe] A value of type 'int' can't be assigned to a variable of type 'I'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     ti += d; // Type of expression is `num`, not `I`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  +  // ^
     // [cfe] A value of type 'double' can't be assigned to a variable of type 'I'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     ti += n; // Type of expression is `num`, not `I`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  +  // ^
     // [cfe] A value of type 'num' can't be assigned to a variable of type 'I'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     ti += never; // Type of expression is `num`, not `I`.
  +  // ^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'I'.
     //    ^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  +
  +  ti += dyn; // type of `i + dyn` is `num`, not assignable to `int`.
  +  // ^
     // [cfe] A value of type 'num' can't be assigned to a variable of type 'I'.
  -
  -  ti += dyn; // type of `i + dyn` is `num`, not assignable to `int`.
  -  //    ^^^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'I'.
  +  //    ^^^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     td += i; // Type of expression is `double`, not `D`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     td += d; // Type of expression is `double`, not `D`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     td += n; // Type of expression is `double`, not `D`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     td += dyn; // Type of expression is `double`, not `D`.
  -  //    ^^^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
  +  //    ^^^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     td += never; // Type of expression is `double`, not `D`.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
     //    ^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
   
     tn += i; // Type of expression is `num`, not `N`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  // ^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     tn += d; // Type of expression is `num`, not `N`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  // ^
  +  // [cfe] A value of type 'double' can't be assigned to a variable of type 'N'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     tn += n; // Type of expression is `num`, not `N`.
  -  //    ^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  // ^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  //    ^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     tn += dyn; // Type of expression is `num`, not `N`.
  -  //    ^^^
  -  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  // ^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
  +  //    ^^^
  +  // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
   
     tn += never; // Type of expression is `num`, not `N`.
  +  // ^
  +  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
     //    ^^^^^
     // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -  // ^^
  -  // [cfe] A value of type 'num' can't be assigned to a variable of type 'N'.
   
     O oi1 = to; // New variable to avoid demoting `oi`.
     if (oi1 is int) {
       // Promote oi1 to O&int
       oi1 + d; // Valid
       oi1 += d;
  +    //  ^
  +    // [cfe] A value of type 'double' can't be assigned to a variable of type 'O'.
       //     ^
       // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -    //  ^^
  -    // [cfe] A value of type 'double' can't be assigned to a variable of type 'O'.
     }
   
     O oi2 = to;
  
positive.code:     // Promote oi3 to O&int.
      oi3 + dyn; // Valid
      oi3 += dyn;
      //     ^^^
      // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
      //  ^^
      // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
    }
  
    O oi4 = to;
  
negative.code:     // Promote oi2 to O&int.
      oi2 + n; // Valid
      oi2 += n;
      //  ^
      // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
      //     ^
      // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
    }
  
    O oi3 = to;
  