Marc Glisse <marc.gli...@inria.fr> writes: > assert is not what you want, since it completely disappears with > -DNDEBUG. clang has __builtin_assume, with gcc you want a test and > __builtin_unreachable. Replacing your assert with > if(n==0)__builtin_unreachable();
To me, it would make sense to have assert expand to something like that, when runtime checks are disabled with -NDEBUG. After all, is a program fails an assertion, it can not be expected to produce any meaningful results, even with run-time checks disabled using -DNDEBUG. And it's somewhat counter-intutive, if -DNDEBUG produces a binary in which the code downstream from assert statements are slightly less well optimized. I imagine the C standard might specify that assert "completely disappears" if -DNDEBUG is defined. But maybe there's room for a -fstrict-assert optimization flag, to let assert always guide optimization? Regards, /Niels -- Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677. Internet email is subject to wholesale government surveillance.