I had been going through life assuming that people who build software for release generally use some variant of -march=<something generic> -O2 -DNDEBUG. Not only was I wrong, but Debian now considers NDEBUG "EBW https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=701231" (which I've learned means "Evil Bad Wrong https://lists.debian.org/debian-devel/2013/02/msg00351.html") and strips it even from cmake builds (which define it by default for release builds). From what I can tell, this is a common practice and it means that those asserts that I love to liberally saturate my sources with (even in hot spots) are bloating my code at release.
In light of this, I'm thinking that we may need a standard wine macro for asserts that we *really* only want when we're making changes and debugging and are activated by -DDEBUG or some such. Many of the asserts I use aren't something that I would ever expect to fail after development and testing is completed and shouldn't be in release, but can fail when me or somebody else makes a change or uses the function incorrectly. Hot code paths and inline functions are other examples of where such an assert would be useful when developing, but we would not want to pay for it in a release build.
Thoughts?
Daniel