Gfortran uses the xoshiro256** PRNG algorithm which is described here: Xorshift - Wikipedia. It has a very long cycle, which is why the internal state requires 8 integers (with default KIND int32). It has the remarkable property that it is possible to skip forward an arbitrary number of steps. This allows multiple PRNG streams to be generated in independent threads and/or on separate compute nodes that are guaranteed to not overlap with each other.
The fortran requirements are that the real numbers that are generated are in the range 0.0<=x<1.0, so a return value of exactly 0.0 is allowed. If your algorithm cannot use those numbers, then you need to test and generate a new value in its place. I think the way the numbers are generated, there are only 2**24 (=16 million) possible values returned for real32 arguments, so if you generate a few million numbers, you should expect to see 0.0 every so often.
edit: gfortran seed is 8 integers, not 33 integers.