On Thursday, 31 July 2014 at 20:49:18 UTC, Timon Gehr wrote:
On 07/31/2014 09:37 PM, Jonathan M Davis wrote:
On Thursday, 31 July 2014 at 18:43:49 UTC, Ary Borenszweig wrote:
On 7/31/14, 4:37 AM, Walter Bright wrote:
On 7/30/2014 4:05 PM, Ary Borenszweig wrote:
On 7/30/14, 7:01 PM, Walter Bright wrote:

Disabling assertions (and whatnot), assuming assertions to be true (and disabling whatnot) and leaving all assertions and whatnot in are different trade-offs, of which assuming all assertions to be true is the most dangerous one. Why hide this behaviour in '-release'?

But assertions are *always* assumed to be true. The sole difference is that in Debug mode actual code generation for their check is disabled (not exactly the assertions, but code testing them).

The compiler makes no guarantee on the code that comes after an assert other than it will work correctly *if the assertion holds*. This is true for the code generated in both Debug and Release builds.

The difference is in the level of optimization (to play nice with gdb) and checks: in the Debug mode, that "assert-compelling generated code" never gets to actually execute as the program chocks at the assertion point (that is, just before entering the code).

Reply via email to