> Casting NaN to integer is undefined behavior, > but it is fine in some cases where we do additional checks later. > For example: > int64_t i64 = njs_unsafe_cast_double_to_int64(num); > if (i64 == num) { > // num is integer > }
This could be fine, but it's not guaranteed by the standard. For this reason, I think ignoring UBSan warnings is almost always a bad idea. You can't know what future compiler optimizations will do; all we can do is to comply with the standard if we want to ensure that code continues to work in the future. Whether or not most C programmers want to admit it, writing C is programming an abstract machine. If the semantics of this machine get in the way of performance, then the programmer should resort to assembly rather than rely on behavior that could change at any time. _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel