Simplify the code by (a) treating "crashed" like other tests and return a status code, and (b) make the check-* functions supply a reason for failure rather than trying to cons one up post-hoc.