On 10/9/2014 9:33 AM, Johannes Pfau wrote:
A point which hasn't been discussed yet:
Errors and therefore assert can be used in nothrow functions. This is a
pita for compilers because it now can't do certain optimizations. When
porting GDC to ARM we started to see problems because of that (can't
unwind from nothrow functions on ARM, program just aborts). And now we
therefore have to worsen the codegen for nothrow functions because of
this.
I think Walter sometimes suggested that it would be valid for a
compiler to not unwind Errors at all (in release mode), but simply kill
the program and dump a error message. This would finally allow us to
optimize nothrow functions.
Currently, Errors can be caught, but intervening finally blocks are not
necessarily run. The reasons for this are:
1. better code generation
2. since after an Error the program is likely in an unknown state, the less code
that is run after an Error, the better, because it may make things worse