It seems like you can avoid all that by defining `error` in terms of `error_noreturn` instead.