If there is an unreachable loop (i.e. there is no loop entry edge)
then there may is a cycle of blocks with only one predecessor.
Since the algorithm handle this case by returning the value of the predecessor,
this causes an endless recursion.
The fix uses the visited flag to detect such cycles.