Why would the compiler do that, instead of just printing the error at compile-time and exiting with a non-zero value? What is the benefit?
if you have a syntax error in file A, and file B is just peachy keen, you can keep compiling file B instead of stopping the world. Then the next time you compile, you have already cached the result of file B compilation.
It is more a debug/development feature. You can try out some idea without fixing the whole code base.