On 4 May 2018 at 15:20, Florian Weimer wrote: > * John Carter: > >> But compile with ... >> gcc -O3 -W -Wall -Wextra -o a a.c >> ...now results in NO warnings! >> >> ie. Although gcc _knows_ the assert _will_ trigger at run time... it can't >> tell me at compile time anymore. >> >> ie. Counter intuitively, adding asserts and error checks to my code has >> made me less safe. > > In glibc, we could warn if the assert expression is constant and > false. But I'm worried that this will produce lots and lots of false > positives after inlining, loop unrolling, and other optimizations. > > Has anyone tried something like this? I've been experimenting with something like that for assertions inside libstdc++. I want assertions that meet these properties: - enforced at compile time in constexpr evaluation (i.e. produce a compile-time error, not a runtime call to abort) - otherwise, issue a compile-time warning if the arguments are constant (using __builtin_constant_p) - otherwise, check at run-time.