Annotate Error_Handler with noreturn to help analysis#2739
Annotate Error_Handler with noreturn to help analysis#2739fpistm merged 1 commit intostm32duino:mainfrom
Conversation
Signed-off-by: Avamander <avamander@gmail.com>
|
Thanks for the PR, it makes sense.
If NDEBUG and not redefined, a default halt loop is defined (infiinite loop). So don't see what else we can do. |
Summary
This PR annotates
_Error_Handlerwith__attribute__((noreturn))that informs the compiler that the given function does not return.Motivation
This simplifies analysis for both the compiler and external tools.
For example it fixes a warning I got, that the result of
getAssociatedChannelinHardwareTimer.cppmight* underflow when1is subtracted from the default return value of zero and this would then result in an out of bounds array access. "Might" in this context probably means to the compiler that there's either noError_Handlerdefined or there's one that returns. In any case, the fact that these errors can pop up (like they did for me), means the code flow is not always clear enough for the compiler.Additional notes
HardwareTimerand other similar files could maybe be updated in a way to fail/return safe values in all cases? Though this might cause undesirable seemingly working "default" behaviour while a crash would be very visible.An another question is if there should there be a default halt loop
Error_Handlereven ifNDEBUGis enabled (and a replacement is not defined). I lack sufficient experience with the core to know if this would be safer everything considered.