https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120317
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I am not sure this is valid to with documentated const definition. const does not mean `(arg0 != arg1)` -> `f(arg0) != f(arg1)` and even if you have `arg0 == g(f(arg0))` as an assumption, that does not mean there is not a value which causes undefined behavior. It just means the defined range of f (or g) will have some value where that holds true.