anchor.diff:        for (int i = 0; i < sTypeVariables.length; i++) {
           TypeParameter sTypeVariable = sTypeVariables[i];
           TypeParameter tTypeVariable = tTypeVariables[i];
  -        if (sTypeVariable.bound != tTypeVariable.bound) {
  +        if (!types.isSameTypeKernel(sTypeVariable.bound, tTypeVariable.bound)) {
             // If the bounds aren't the same, we need to try again after
             // computing the substitution of type variables.
             secondBoundsCheckNeeded = true;
  
positive.code:     }
      return true;
    }
  }
  
  abstract class TypeRelation<T extends DartType> {
  
negative.code:         for (int i = 0; i < sTypeVariables.length; i++) {
            TypeParameter sTypeVariable = sTypeVariables[i];
            TypeParameter tTypeVariable = tTypeVariables[i];
            if (!types.isSameTypeKernel(
                substitution.substituteType(sTypeVariable.bound),
                tTypeVariable.bound)) {
              return false;
            }
          }
  