The signal handler does a longjmp back to the location of declare_func when there's a signal. If declare_func is located within the check_func block, it will just end up in an endless loop, retrying running the failing tests again.
On linux, after resuming from the signal handler, the second signal wouldn't trigger the signal handler but forcibly exit the process, while on darwin, it would get stuck in an endless loop.
msac_decode_bool seems to be the only checkasm test with declare_func within the check_func block.
VideoLAN code repository instance