This makes the script run to the end and produce tarballs even on test failures, and then highlights any errors afterwards.
(I first tried just storing the errors in a global variable, but that didn't work as the "test_llvmCore" function invocation is actually running as a sub-shell.)
Optional nit: If we're deferring full messages rather than just 'something failed' then I'd be inclined to echo to both stdout and the deferred error log. This allows you to search the main log for the message and find the origin of the failure.