CFR: a new __unreachable() builtin
Ed Schouten
ed at nuxi.nl
Sun May 17 07:41:50 UTC 2015
2015-05-13 18:09 GMT+02:00 David Chisnall <David.Chisnall at cl.cam.ac.uk>:
> LLVM uses this quite heavily, in a macro that expands to something equivalent to assert(0 && "unreachable reached!”) in debug mode and __builtin_unreachable() in release mode. When you’re debugging, you get errors if you reach unreachable code and in deployment the compiler gets a useful hint for optimisation.
Too bad we can't use this trick in our own assert(). You'd need to
define assert() like this:
#define assert(expr) do { \
if (!(expr)) \
__builtin_unreachable(); \
} while (0)
Unfortunately, this would cause the expression to be evaluated, which
is not allowed.
--
Ed Schouten <ed at nuxi.nl>
More information about the freebsd-current
mailing list