Program: 27680
Project: 27680
Buggy source:
boolean isSubclassOf(NominalType other){
  RawNominalType otherRawType=other.rawType;
  if (rawType.isInterface && !otherRawType.isInterface) {
    return false;
  }
  if (!rawType.isInterface && otherRawType.isInterface) {
    if (rawType.interfaces == null) {
      return false;
    }
    for (    NominalType i : rawType.interfaces) {
      if (i.instantiateGenerics(typeMap).isSubclassOf(other)) {
        return true;
      }
    }
    return false;
  }
  if (rawType.isInterface && otherRawType.isInterface) {
    if (rawType.equals(otherRawType)) {
      if (!typeMap.isEmpty()) {
        for (        String typeVar : rawType.getTypeParameters()) {
          Preconditions.checkState(other.typeMap.containsKey(typeVar),"String_Node_Str",other,typeVar,typeMap.get(typeVar),this);
          if (!typeMap.get(typeVar).isSubtypeOf(other.typeMap.get(typeVar))) {
            return false;
          }
        }
      }
 else       if (!other.typeMap.isEmpty()) {
        return false;
      }
      return true;
    }
 else     if (rawType.interfaces == null) {
      return false;
    }
 else {
      for (      NominalType i : rawType.interfaces) {
        if (i.instantiateGenerics(typeMap).isSubclassOf(other)) {
          return true;
        }
      }
      return false;
    }
  }
  if (rawType.equals(otherRawType)) {
    if (!typeMap.isEmpty()) {
      for (      String typeVar : rawType.getTypeParameters()) {
        Preconditions.checkState(typeMap.containsKey(typeVar),"String_Node_Str",typeVar,typeMap.keySet());
        JSType otherType=other.typeMap.containsKey(typeVar) ? other.typeMap.get(typeVar) : JSType.fromTypeVar(typeVar);
        if (!typeMap.get(typeVar).isSubtypeOf(otherType)) {
          return false;
        }
      }
    }
 else     if (!other.typeMap.isEmpty()) {
      return false;
    }
    return true;
  }
 else   if (rawType.superClass == null) {
    return false;
  }
 else {
    return rawType.superClass.instantiateGenerics(typeMap).isSubclassOf(other);
  }
}

Fixed version (ground truth):
boolean isSubclassOf(NominalType other){
  RawNominalType otherRawType=other.rawType;
  if (rawType.isInterface && !otherRawType.isInterface) {
    return false;
  }
  if (!rawType.isInterface && otherRawType.isInterface) {
    if (rawType.interfaces == null) {
      return false;
    }
    for (    NominalType i : rawType.interfaces) {
      if (i.instantiateGenerics(typeMap).isSubclassOf(other)) {
        return true;
      }
    }
    return false;
  }
  if (rawType.isInterface && otherRawType.isInterface) {
    if (rawType.equals(otherRawType)) {
      if (!typeMap.isEmpty()) {
        for (        String typeVar : rawType.getTypeParameters()) {
          Preconditions.checkState(other.typeMap.containsKey(typeVar),"String_Node_Str",other,typeVar,typeMap.get(typeVar),this);
          if (!typeMap.get(typeVar).isSubtypeOf(other.typeMap.get(typeVar))) {
            return false;
          }
        }
      }
 else       if (!other.typeMap.isEmpty()) {
        return false;
      }
      return true;
    }
 else     if (rawType.interfaces == null) {
      return false;
    }
 else {
      for (      NominalType i : rawType.interfaces) {
        if (i.instantiateGenerics(typeMap).isSubclassOf(other)) {
          return true;
        }
      }
      return false;
    }
  }
  if (rawType.equals(otherRawType)) {
    if (typeMap.isEmpty()) {
      return instantiationIsUnknownOrIdentity(other);
    }
    if (other.typeMap.isEmpty()) {
      return instantiationIsUnknownOrIdentity(this);
    }
    for (    String typeVar : rawType.getTypeParameters()) {
      Preconditions.checkState(typeMap.containsKey(typeVar),"String_Node_Str",typeVar,typeMap.keySet());
      Preconditions.checkState(other.typeMap.containsKey(typeVar),"String_Node_Str",other,typeVar,typeMap.get(typeVar),this);
      if (!typeMap.get(typeVar).isSubtypeOf(other.typeMap.get(typeVar))) {
        return false;
      }
    }
    return true;
  }
 else   if (rawType.superClass == null) {
    return false;
  }
 else {
    return rawType.superClass.instantiateGenerics(typeMap).isSubclassOf(other);
  }
}