[foreign-jextract] [Rev 01] RFR: Improve jextract error reporting
Jorn Vernee
jvernee at openjdk.java.net
Fri Mar 6 11:00:34 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
The pull request has been updated with 1 additional commit.
-------------
Added commits:
- 79bacd6c: Change crash recovery option back to default to false + save error code in TranslationUnitSaveException
Changes:
- all: https://git.openjdk.java.net/panama-foreign/pull/40/files
- new: https://git.openjdk.java.net/panama-foreign/pull/40/files/add33e44..79bacd6c
Webrevs:
- full: https://webrevs.openjdk.java.net/panama-foreign/40/webrev.01
- incr: https://webrevs.openjdk.java.net/panama-foreign/40/webrev.00-01
Stats: 9 lines in 2 files changed: 3 ins; 0 del; 6 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