Then why isn't the code being disallowed? Why is it being silently removed in the middle of the night through an optimization back door?
It's not disallowed by compilers, because they're deficient. In this case I'd guess compiler front-end doesn't track which values in an array are initialized, and when optimizing back-end sees UB it's too late to emit an error.