On Wed, 31 May 2023 23:41:25 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> wrote:
>> Jorn Vernee has updated the pull request incrementally with one additional >> commit since the last revision: >> >> review comments > > src/java.base/share/classes/java/lang/foreign/Linker.java line 379: > >> 377: * type {@code float} is converted to {@code double}, and each integral >> type smaller than {@code int} is converted to >> 378: * {@code int}. As such, the native linker will reject attempts to link >> function descriptors with certain variadic argument >> 379: * layouts. Namely, {@linkplain ValueLayout value layouts} that have a >> carrier type of {@code boolean}, {@code byte}, > > Is there any reason as to why you decided to say which layouts are **not** > allowed as variadic layouts? I'm wondering whether, if we add more carriers > in the future, this list will probably need to be updated? Or do the > restriction only involve these "small" types, and stuff like `long double` is > always allowed? (in which case the set of unsupported layouts would remain > stable over time) No real reason for the current polarity. The specification explicitly calls out the float -> double conversion, and then for the integral types it refers to ['integer promotions'](https://en.cppreference.com/w/c/language/conversion#Integer_promotions), which is a somewhat complex rule set for assigning ranks to integer types. So, I think if we add more carriers in the future, we would have to worry about integral types that have a rank less than (unsigned) int when considering this list. This is currently only the types I've listed (though, `char` is a bit of a special case), and this seems relatively stable to me. e.g. `long double` would not need to be added here. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/14225#discussion_r1212432229