[foreign-jextract] RFR: Improve jextract error reporting

Jorn Vernee jvernee at openjdk.java.net
Thu Mar 5 15:22:47 UTC 2020


Hi,

I spent the last couple of days tracking down a crash I was seeing sometimes when running jextract. In the process I ended up doing several improvements to jextract's error checking and reporting, that I think are useful to keep in the long run.

The changes include:
- Using `clang_parseTranslationUnit2` to parse, since that returns an error code, instead of a null translation unit. This also means we can still process diagnostic for the returned translation unit (now returned in a buffer).
- Checking the return codes for `clang_parseTranslationUnit2`, `clang_saveTranslationUnit`, and `clang_reparseTranslationUnit` (using a proper enum) and throwing an exception in case they are erroneous.
- Catching BadMacroException instead of Throwable in the macro parser. We only care about the former, and catching Throwable could lead to too many exceptions being eaten. Technically, if there is an unknown exception, we could just skip the macro, but this isn't always the right strategy. For example, when re-parsing fails the used translation unit becomes invalid, so we really need to do something else than just skipping the macro in that case (to be addressed in another patch https://bugs.openjdk.java.net/browse/JDK-8240614). Imo it's better to just crash than to skip when we encounter an unknwon exception, so that we're more likely to find issues.
- Enabling libclang crash recovery by default. By default the crash recovery was being disabled. This leads to the process exiting with OS exception code. If we enable this however, it will instead try to return an error code from the libclang call, which we can then check for and handle the failure however we want.

Thanks,
Jorn

-------------

Commits:
 - add33e44: Improve clang error reporting

Changes: https://git.openjdk.java.net/panama-foreign/pull/40/files
 Webrev: https://webrevs.openjdk.java.net/panama-foreign/40/webrev.00
  Stats: 176 lines in 6 files changed: 151 ins; 6 del; 19 mod
  Patch: https://git.openjdk.java.net/panama-foreign/pull/40.diff
  Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/40/head:pull/40

PR: https://git.openjdk.java.net/panama-foreign/pull/40


More information about the panama-dev mailing list