Why? To be sure they should be used sparingly, but it looks it makes enough sense in this particular case and isn't single-handedly going to cause any spaghetti-code problems.
In this particular case I think a goto fits the bill.
They have their use cases, and this code seems like a fine use of it. Goto is taught as one of those things you should never use but it still has a purpose. If you look at any C code goto still used. You just have to make sure not to overuse it.
All tools can be misused. Goto has a dark past, but it can still be used responsibly. It's almost like generalizing a concept like OOP to be bad because horrible code can be made with it.
Sure. This is a fair use case. Kind of makes more sense than a full while loop, especially since the case is only likely to occur at most once per call to GetRandomName().
PRNGs don't work that way. They have periods over which all possible output values are produced, close to an equal number of times. Even when producing tuples, we know that this won't loop forever.
This is a random name generator that pairs adjectives with names (e.g. "angry_einstein").
In the unlikely chance the generator returns the pair "boring_wozniak", it discards it and generates another name.