Program: 40338
Project: 40338
Buggy source:
@Override protected void initializeVariables(){
  if (DEBUG) {
    System.err.println("String_Node_Str" + ir.getMethod());
  }
  int[] parameterValueNumbers=ir.getParameterValueNumbers();
  for (int i=0; i < parameterValueNumbers.length; i++) {
    TypeVariable v=getVariable(parameterValueNumbers[i]);
    TypeReference t=ir.getParameterType(i);
    if (DEBUG) {
      System.err.println("String_Node_Str" + parameterValueNumbers[i] + "String_Node_Str"+ t);
    }
    if (t.isReferenceType()) {
      IClass klass=cha.lookupClass(t);
      if (DEBUG) {
        System.err.println("String_Node_Str" + klass);
      }
      if (klass != null) {
        v.setType(new ConeType(klass));
      }
 else {
        v.setType(BOTTOM);
      }
    }
 else     if (doPrimitives) {
      v.setType(PrimitiveType.getPrimitive(t));
    }
  }
  SymbolTable st=ir.getSymbolTable();
  if (st != null) {
    for (int i=0; i <= st.getMaxValueNumber(); i++) {
      if (st.isConstant(i)) {
        TypeVariable v=getVariable(i);
        v.setType(getConstantType(i));
      }
    }
  }
  for (Iterator<SSAInstruction> it=ir.iterateNormalInstructions(); it.hasNext(); ) {
    SSAInstruction s=it.next();
    if (s instanceof SSAAbstractInvokeInstruction) {
      SSAAbstractInvokeInstruction call=(SSAAbstractInvokeInstruction)s;
      TypeVariable v=getVariable(call.getException());
      Collection<TypeReference> defaultExceptions=call.getExceptionTypes();
      if (defaultExceptions.size() == 0) {
        continue;
      }
      Iterator<TypeReference> types=defaultExceptions.iterator();
      TypeReference t=types.next();
      IClass klass=cha.lookupClass(t);
      if (klass == null) {
        v.setType(BOTTOM);
      }
 else {
        v.setType(new PointType(klass));
      }
      while (types.hasNext()) {
        t=types.next();
        klass=cha.lookupClass(t);
        if (klass != null) {
          v.setType(v.getType().meet(new PointType(klass)));
        }
      }
      IMethod m=cha.resolveMethod(call.getDeclaredTarget());
      if (m != null) {
        TypeReference[] x=null;
        try {
          x=m.getDeclaredExceptions();
        }
 catch (        InvalidClassFileException e) {
          e.printStackTrace();
          Assertions.UNREACHABLE();
        }
catch (        UnsupportedOperationException e) {
          x=new TypeReference[]{language.getThrowableType()};
        }
        if (x != null) {
          for (int i=0; i < x.length; i++) {
            TypeReference tx=x[i];
            IClass tc=cha.lookupClass(tx);
            if (tc != null) {
              v.setType(v.getType().meet(new ConeType(tc)));
            }
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
@Override protected void initializeVariables(){
  if (DEBUG) {
    System.err.println("String_Node_Str" + ir.getMethod());
  }
  int[] parameterValueNumbers=ir.getParameterValueNumbers();
  for (int i=0; i < parameterValueNumbers.length; i++) {
    TypeVariable v=getVariable(parameterValueNumbers[i]);
    TypeReference t=ir.getParameterType(i);
    if (DEBUG) {
      System.err.println("String_Node_Str" + parameterValueNumbers[i] + "String_Node_Str"+ t);
    }
    if (t.isReferenceType()) {
      IClass klass=cha.lookupClass(t);
      if (DEBUG) {
        System.err.println("String_Node_Str" + klass);
      }
      if (klass != null) {
        v.setType(new ConeType(klass));
      }
 else {
        v.setType(BOTTOM);
      }
    }
 else     if (doPrimitives) {
      v.setType(language.getPrimitive(t));
    }
  }
  SymbolTable st=ir.getSymbolTable();
  if (st != null) {
    for (int i=0; i <= st.getMaxValueNumber(); i++) {
      if (st.isConstant(i)) {
        TypeVariable v=getVariable(i);
        v.setType(getConstantType(i));
      }
    }
  }
  for (Iterator<SSAInstruction> it=ir.iterateNormalInstructions(); it.hasNext(); ) {
    SSAInstruction s=it.next();
    if (s instanceof SSAAbstractInvokeInstruction) {
      SSAAbstractInvokeInstruction call=(SSAAbstractInvokeInstruction)s;
      TypeVariable v=getVariable(call.getException());
      Collection<TypeReference> defaultExceptions=call.getExceptionTypes();
      if (defaultExceptions.size() == 0) {
        continue;
      }
      Iterator<TypeReference> types=defaultExceptions.iterator();
      TypeReference t=types.next();
      IClass klass=cha.lookupClass(t);
      if (klass == null) {
        v.setType(BOTTOM);
      }
 else {
        v.setType(new PointType(klass));
      }
      while (types.hasNext()) {
        t=types.next();
        klass=cha.lookupClass(t);
        if (klass != null) {
          v.setType(v.getType().meet(new PointType(klass)));
        }
      }
      IMethod m=cha.resolveMethod(call.getDeclaredTarget());
      if (m != null) {
        TypeReference[] x=null;
        try {
          x=m.getDeclaredExceptions();
        }
 catch (        InvalidClassFileException e) {
          e.printStackTrace();
          Assertions.UNREACHABLE();
        }
catch (        UnsupportedOperationException e) {
          x=new TypeReference[]{language.getThrowableType()};
        }
        if (x != null) {
          for (int i=0; i < x.length; i++) {
            TypeReference tx=x[i];
            IClass tc=cha.lookupClass(tx);
            if (tc != null) {
              v.setType(v.getType().meet(new ConeType(tc)));
            }
          }
        }
      }
    }
  }
}