https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98549
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> --- It is not ice-on-invalid, the invalid in there stands for code that should be rejected by the compiler (emit error). UB at runtime can be even int foo (int x, int y) { return x + y; } but we surely don't want to treat ICE on it as less important because it might cause UB at runtime. While the x + y is conditional UB, e.g. int foo () { return __builtin_unreachable (); } is unconditional UB when that function is called, but that still doesn't mean it will ever be called, the same with whatever ICEs in this PR. Other bug categories are accepts-invalid and rejects-valid, those talk about the same invalid vs. valid categories, we should reject invalid and accept valid code and lack thereof is a bug. For UB at runtime, we can warn, but shouldn't error because the code might never be invoked at runtime.