[foreign] RFR: Fix UndefinedLayoutException exception message
Jorn Vernee
jbvernee at xs4all.nl
Tue Jan 29 15:19:46 UTC 2019
Maurizio Cimadamore schreef op 2019-01-29 15:59:
> Resolving references across interfaces is not expected to work
> reliably. This is the primary reason which sends us towards an
> extraction model that is library-centric, rather than header-centric,
> so that all references in a library should be self-contained.
I've been using a mitigating patch that also scans methods of a Struct
implementation in LayoutResolver when scanning a struct. Under the
assumption that a type's layout is defined on that type itself.
> As for your test, it seems like you can get the same exception simply
> by having a single struct interface whose layout has some dandling
> unresolved layout (e.g. an unresolved layout whose layout expression
> is not defined anywhere)?
The tricky part is triggering the resolution of the layout through the
public API. Trying to allocate a struct will not resolve the struct's
layout. The only place I found that does this is either the test case
I've used, where the dangling layout is in a @NativeFunction descriptor,
or in StructImplGenerator's constructor, which is called when de
referencing a pointer to a struct.
Of course, I could also just use
`LayoutResolver.get(Object.class).resolve(Layout.of("${Undefined}"));`.
Would that be good enough?
Jorn
> Maurizio
>
> On 28/01/2019 14:52, Jorn Vernee wrote:
>> Ok, it took a while to find a good test case. I was seeing the
>> exception due to a cross-header layout reference, so that's also the
>> test case I added. It seems that that is currently the only realistic
>> use-case where this exception is being thrown. I believe not being
>> able to resolve cross-header layout references is a known issue as
>> well?
>>
>> Updated webrev:
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/fixmessage/webrev.01/
>>
>> Jorn
>>
>> Jorn Vernee schreef op 2019-01-28 14:16:
>>> Yes, I will do that. (wasn't sure if it was useful enough).
>>>
>>> Jorn
>>>
>>> Sundararajan Athijegannathan schreef op 2019-01-28 14:12:
>>>> Is it possible to add a test with invalid (unresolvable) name
>>>> reference in a layout descriptor and check the exception message?
>>>>
>>>> -Sundar
>>>>
>>>> On 28/01/19, 6:36 PM, Jorn Vernee wrote:
>>>>> Hi,
>>>>>
>>>>> JDK-8217245 changed the syntax for Unresolved layouts from
>>>>> `$(Name)` to `${Name}`. This also means Unresolved now has a
>>>>> dedicated `layoutExpression` field instead of relying on the name
>>>>> annotation.
>>>>>
>>>>> LayoutResolver.UndefinedLayoutException is still using the name
>>>>> annotation in the exception message, which is now incorrect. This
>>>>> small patch fixes that, and changes it to use
>>>>> Unresolved::layoutExpression().
>>>>>
>>>>> Please review.
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/fixmessage/webrev.00/
>>>>> Cheers,
>>>>> Jorn
More information about the panama-dev
mailing list