> In C, arguments smaller than `int` are promoted to (`unsigned`) `int`, and > `float` is promoted to `double`, when being passed as variadic argument (see > e.g. > https://en.cppreference.com/w/c/language/conversion#Default_argument_promotions). > This patch restricts the layouts that can be used as variadic layouts to > what is allowed by the C specification. > > The fallback linker is also updated to use to correct function to link > variadic calls (not doing this turned out not to be a problem so far, but it > is problematic for instance on Mac/AArch64 when using the fallback linker). > Adding the restriction on layouts for all linkers is also partly motivated by > the fallback linker rejecting such unsupported variadic layouts already. > > I've added a small paragraph to the Linker javadoc as well that explains the > restriction. Comments on that are welcome, but please explain. > > The tests are updated to no longer try to link variadic functions with the > illegal layouts, and I've added some more negative tests to TestIllegalLink. > > Testing: > - local testing on Windows/x64 > - tier1-3 + jdk-tier5 (ongoing) > - manual test run on mac/aarch64 with the fallback linker to verify the > correctness of the fallback linker changes.
Jorn Vernee has updated the pull request incrementally with one additional commit since the last revision: review comments ------------- Changes: - all: https://git.openjdk.org/jdk/pull/14225/files - new: https://git.openjdk.org/jdk/pull/14225/files/c21ae49a..9415e2a1 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=14225&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14225&range=00-01 Stats: 25 lines in 2 files changed: 8 ins; 9 del; 8 mod Patch: https://git.openjdk.org/jdk/pull/14225.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/14225/head:pull/14225 PR: https://git.openjdk.org/jdk/pull/14225