private boolean checkNonReturning(Program program, FlowType flowType, PseudoInstruction instr) {
		if (!flowType.isCall()) {
			return false;
		}

		Address[] flows = instr.getFlows();
		Function func = null;
		if (flows.length > 0) {
			if (program != null) {
				func = program.getFunctionManager().getFunctionAt(flows[0]);
			}
		}
		else {
			if (flowType.isComputed() & !flowType.isConditional()) {
				for (int opIndex = 0; opIndex < instr.getNumOperands(); opIndex++) {
					RefType operandRefType = instr.getOperandRefType(opIndex);
					if (operandRefType.isIndirect()) {
						Address addr = instr.getAddress(opIndex);
						if (addr != null) {
							func = program.getFunctionManager().getReferencedFunction(addr);
						}
					}
				}
			}
		}

		return (func != null && func.hasNoReturn());
	}
Check if there is a valid subroutine at the target address

@param entryPoint address to check
@param procContext processor context to use when pseudo disassembling instructions
@param allowExistingInstructions true to allow running into existing instructions
@param mustTerminate true if the subroutine must hit a terminator (return) instruction
@param requireContiguous true if the caller will require some number of contiguous instructions
       call getLastCheckValidInstructionCount() to get the initial number of contiguous instructions
       if this is true

@return true if entryPoint is the probable subroutine start
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java