https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104356
--- Comment #21 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > But sure, so you say that -fnon-call-exceptions makes operations that > may trap according to the EH machinery well-defined, irrespective of what > the language standards say? That certainly makes sense, it doesn't > make sense to create EH when the situation invokes undefined behavior. > (but as said above we have to avoid traps in non-EH context as well) Of course, that's the very and only purpose of -fnon-call-exceptions, see tree_could_throw_p: /* Return true if expression T could throw an exception. */ bool tree_could_throw_p (tree t) { [...] if (cfun->can_throw_non_call_exceptions) return tree_could_trap_p (t); return false; } With -fnon-call-exceptions, trapping operations are not UB but throw instead. What the language (Java, Go, Ada) makes of this exception may vary, but I don't think that they call it undefined behavior like in the C family of languages.