[RFC] Throwing an exception with null pointers
Richard (Rikki) Andrew Cattermole
richard at cattermole.co.nz
Sun Apr 13 21:43:22 UTC 2025
On 14/04/2025 1:07 AM, Derek Fawcus wrote:
> On Saturday, 12 April 2025 at 23:11:41 UTC, Richard (Rikki) Andrew
> Cattermole wrote:
>> I've been looking once again at having an exception being thrown on
>> null pointer dereferencing.
>> However the following can be extended to other hardware level exceptions.
>>
>> I do not like the conclusion, but it is based upon facts that we do
>> not control.
>>
>> ## Conclusion
>>
>> We cannot rely upon hardware or kernel support for throwing of a null
>> pointer exception.
>> To do this we have to use read barriers, like we do for array bounds
>> check.
>>
>> There are three levels of support needed:
>>
>> 1. Language support, it does not alter code generation, available
>> everwhere.
>> Can be tuned to the users threshold of pain and need for guarantees.
>> 2. Altering codegen, throws an exception via a read barrier just like
>> a bounds check does.
>> 3. Something has gone really wrong and CPU has said NOPE and a signal
>> has fired to kill the process.
>
> From the unix/posix perspective, I'd say don't even try. Just allow
> the signal (SIGSEGV and/or SIGBUS) to be raised, not caught, and have
> the process crash. Debugging then depends upon examining the corefile,
> or using a debugger.
>
> The only gain from catching it is to generate some pretty form of back
> trace before dying, and that is just as well (or better) handled by a
> debugger, or an external crash handling and backtrace generating corset/
> monitor/supervision process.
>
> Once one catches either of these signals, one has to be very careful in
> handling if any processing is to continue beyond the signal handler.
> With a complex runtime, and/or a multi-threaded application, it often
> isn't worth the effort.
This is how it is implemented currently.
Which is don't touch it and it matches my analysis.
More information about the Digitalmars-d
mailing list