It's not that programmers who face compiler bugs are 'so good', or that we suspect the compiler before our own code. It's that we're writing inherently intricate code, with lots of low-level interactions.
When something goes unexpectedly wrong, we investigate in depth, and find that expectations of the compiler don't square with what it's done.
In some cases, that means we eventually look at the generated assembly code, and see a mismatch with the source that doesn't arise from undefined or implementation-defined behavior in the relevant standard. E.g. Intel's compiler 'optimizing' a simple call to strrchr() to an inlined infinite loop. E.g. IBM's compiler emitting undefined linker references to symbols that the source code doesn't depend on.
In other cases, one compiler rejects code that others accept, and the standards say it should have too. E.g https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57743