3 ms·
UB is does not automatically make things unsafe. You can have a compiler that implements safe defaults for most UB, and then it is not unsafe.
by uecker 2y ago
UB is does not automatically make things unsafe. You can have a compiler that implements safe defaults for most UB, and then it is not unsafe.
- ahoka 2y agoBy definition UB cannot be safe.
- marssaxman 2y agothis depends on your choice of definition for "safe"
- Maxatar 2y agoThe definition given by the C standard allows for safe undefined behavior.
- School-Cotton 2y agoSomething can be UB according to the standard, but defined (and safe) according to a particular implementation. Lots of stuff is UB according to the C or C++ standard but does something sensible in gcc and/or clang.
- duped 2y agoThat's implementation defined behavior, not undefined behavior. Undefined behavior explicitly refers to something the compiler does not provide a definition for, including "safe defaults."
- fuhsnn 2y agoCompilers are not prohibited to provide their own definition for UB, that's how UBsan exists.
- Maxatar 2y agoThe C standard says, and I quote: >Possible undefined behavior ranges from ignoring the situation completely with unpredictable results ... or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message) So a compiler is absolutely welcome to make undefined behavior safe. In fact every compiler I know of, such as GCC, clang, MSVC has flags to make various undefined behavior safe, such as signed integer overflow, type punning, casting function pointers to void pointers. The Linux kernel is notorious for leveraging undefined behavior in C for which GCC guarantees specific and well defined behavior. It looks like there is also the notion of unspecified behavior, which gives compilers a choice about the behavior and does not require compilers to document that choice or even choose consistently. And finally there is what you bring up, which is implementation defined behavior which is defined as a subset of unspecified behavior in which compilers must document the choice.
- deleted 2y ago[deleted]
- renox 2y agoWell Zig has ReleaseSafe for this.. ReleaseFast is for using these UBs to generate the fastest code.