[patch] Use the DiagnosticHandler to print diagnostics when reading bitcode.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Fri Jan 9 08:28:58 PST 2015


Currently the bitcode reading interface uses std::error_code to report
an error to the callers and it is the callers job to print
diagnostics.

This is not ideal for error handling or diagnostic reporting:

* For error handling, all that the callers care about is 3 possibilities:
  * It worked
  * The bitcode file is corrupted/invalid.
  * The file is not bitcode at all.

* For diagnostic, it is user friendly to include far more information
about the invalid case so the user can find out what is wrong with the
bitcode file. This comes up for example when a developer introduces a
bug while extending the format.

The compromise we have currently is to have a lot of error codes.

With this patch we use the DiagnosticHandler to communicate with the
human and std::error_code to communicate with the caller.

This allows us to have far fewer error codes and adds the
infrastructure to print better diagnostics. This is so because the
diagnostics are printed when the issue is found. The code that
detected the problem in alive in the stack and can pass down as much
context as needed. As an example the patch updates
test/Bitcode/invalid.ll.

Using a DiagnosticHandler also moves the fatal/non-fatal error
decision to the caller. A simple one like llvm-dis can just use fatal
errors. The gold plugin needs a bit more complex treatment because of
being passed non-bitcode files. An hypothetical interactive tool would
make all bitcode errors non-fatal.

Cheers,
Rafael
-------------- next part --------------
A non-text attachment was scrubbed...
Name: t.patch
Type: text/x-patch
Size: 90671 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150109/60b07863/attachment.bin>


More information about the llvm-commits mailing list