bugReporter.logError("Error checking for dead exception store: " + e.toString());
bugReporter.logError("Error checking for dead exception store", e);
	public void visit(CodeException obj) {		super.visit(obj);		int type = obj.getCatchType();		if (type == 0) return;		String name = getConstantPool().constantToString(getConstantPool().getConstant(type));		CaughtException caughtException =			new CaughtException(name, obj.getStartPC(), obj.getEndPC(), obj.getHandlerPC());		catchList.add(caughtException);		try {			// See if the store that saves the exception object			// is alive or dead.  We rely on the fact that javac			// always (?) emits an ASTORE instruction to save			// the caught exception.			LiveLocalStoreDataflow dataflow = getClassContext().getLiveLocalStoreDataflow(this.method);			CFG cfg = getClassContext().getCFG(method);			Collection<BasicBlock> blockList = cfg.getBlocksContainingInstructionWithOffset(obj.getHandlerPC());			for (Iterator<BasicBlock> i = blockList.iterator(); i.hasNext(); ) {				BasicBlock block = i.next();				InstructionHandle first = block.getFirstInstruction();				if (first != null					&& first.getPosition() == obj.getHandlerPC()					&& first.getInstruction() instanceof ASTORE) {					ASTORE astore = (ASTORE) first.getInstruction();					BitSet liveStoreSet = dataflow.getFactAtLocation(new Location(first, block));					if (!liveStoreSet.get(astore.getIndex())) {						// The ASTORE storing the exception object is dead						if (DEBUG) {							System.out.println("Dead exception store at " + first);						}						caughtException.dead = true;						break;					}				}			}		} catch (DataflowAnalysisException e) {			bugReporter.logError("Error checking for dead exception store: " + e.toString());		} catch (CFGBuilderException e) {			bugReporter.logError("Error checking for dead exception store: " + e.toString());		}	}