anchor.diff:    // [cfe] The argument type 'double' can't be assigned to the parameter type 'D'.
   
     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;
  -  //    ^^^
  -  // [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
   
     O on1 = to;
     if (on1 is num) {
       // Promote on1 to O&num.
       on1 += n; // Type of expression is `num`, not `N` or `O`.
  +    //  ^
  +    // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
       //     ^
       // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -    //  ^^
  -    // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
     }
   
     O on2 = to;
     if (on2 is num) {
       // Promote on2 to O&num.
       on2 += dyn; // Type of expression is `num`, not `N` or `O`.
  +    //  ^
  +    // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
       //     ^^^
       // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  -    //  ^^
  -    // [cfe] A value of type 'num' can't be assigned to a variable of type 'O'.
     }
   }
   
  
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:   // [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
  
    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'.
    //   ^^^^^
    // [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'.
    //   ^^^
    // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  
    ti += i; // Type of expression is `int`, not `I`.
    // ^
    // [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`.
    // ^
    // [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`.
    // ^
    // [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'.
    //    ^^^
    // [analyzer] COMPILE_TIME_ERROR.INVALID_ASSIGNMENT
  
    td += i; // 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
  
    td += d; // 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
  
    td += n; // 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
  
    td += dyn; // 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
  
    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
  
    tn += i; // 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
  
    tn += d; // Type of expression is `num`, not `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`.
    // ^
    // [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`.
    // ^
    // [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
  
    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
    }
  
    O oi2 = to;
  