report = allParamsPassedAsArgs(classContext, vnaDataflow, vnaFrameAtEntry, numArgsToCheck, basicBlock, (InvokeInstruction) ins)
report = allParamsPassedAsArgs(classContext, vnaDataflow, vnaFrameAtEntry, numArgsToCheck, basicBlock, ins)
	private void checkRecursiveCall(			ClassContext classContext,			Method method,			CFG cfg,			BasicBlock basicBlock,			InstructionHandle thrower,			InvokeInstruction ins) throws DataflowAnalysisException, CFGBuilderException {		if (DEBUG) {			System.out.println("Checking recursive call in " +					SignatureConverter.convertMethodSignature(classContext.getJavaClass(), method));		}				PostDominatorsAnalysis postDominators =			classContext.getNonImplicitExceptionDominatorsAnalysis(method);				ValueNumberDataflow vnaDataflow = classContext.getValueNumberDataflow(method);		ValueNumberFrame vnaFrameAtEntry = vnaDataflow.getStartFact(cfg.getEntry());				// Get blocks which postdominate the method entry		BitSet entryPostDominators = postDominators.getAllDominatorsOf(cfg.getEntry());		// How many arguments need to be checked to find out whether		// the parameters are passed to recursive calls verbatim?		int numArgsToCheck = new SignatureParser(method.getSignature()).getNumParameters();		if (!method.isStatic())			++numArgsToCheck;		boolean report = false;		// Check to see if this block postdominates the method entry,		// and the called method is known exactly.		report = entryPostDominators.get(basicBlock.getId())				&& targetMethodKnownExactly(classContext, method, basicBlock, ins);				if (!report) {			// See if 			// (1) all parameters are passed unconditionally as arguments			// (2) no fields which might have been read have been written to			//     (meaning a different path could be taken in the called method)			report = allParamsPassedAsArgs(classContext, vnaDataflow, vnaFrameAtEntry, numArgsToCheck, basicBlock, (InvokeInstruction) ins)					&& !checkedStateHasBeenModified(classContext, method, basicBlock);		}				if (report) {			JavaClass javaClass = classContext.getJavaClass();			String sourceFile = javaClass.getSourceFileName();			BugInstance warning = new BugInstance("IL_INFINITE_RECURSIVE_LOOP", HIGH_PRIORITY)					.addClassAndMethod(javaClass, method)					.addSourceLine(classContext, classContext.getMethodGen(method), sourceFile, thrower);			bugReporter.reportBug(warning);		}	}