This file is not as easy to handle errors as the driver or the
symbol table because of the nature of file IO. However, I think
this patch is not as horrible as I expected; I'm fairly satisfied
with this change. If we find an error, we call error() to record
the error, and return a zero value. Zero value is an empty
vector for the vector, nullptr for a pointer, or an empty string
for the StringRef. Callers gracefully handle such values.
In some cases, we don't have good zero values. I changed the
type of such functions so that they return a boolean value.
All changes are mechanical and should not change the existing
behavior.
It looks like most of this patch is converting uses of fatal that can only be reached with broken files.
I don't see the point of supporting some broken files but not others, and I don't think this will scale to supporting all.