On Saturday, 4 May 2013 at 18:33:04 UTC, Walter Bright wrote:
Runtime Detection
There are still a few cases that the compiler cannot statically
detect. For these a runtime check is inserted, which compares
the returned ref pointer to see if it lies within the stack
frame of the exiting function, and if it does, halts the
program. The cost will be a couple of CMP instructions and an
LEA. These checks would be omitted if the -noboundscheck
compiler switch was provided.
Thanks for taking the time to detail the solution, I was quite
curious.
Runtime Detection and opt-out with "-noboundscheck" is a stroke
of genius!
"couple of CMP instructions"
should be possible to reduce to only one with the "normal"
unsigned range check idiom, no?
Looking forwards to hear more cool news. :)