> 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 adds the automatic argument promotion for variadic arguments, to > align the implementation with 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 this. > > TestVarArgs needed to be updated in order to account for the difference in > the promoted `float` values. > > Testing: > - local testing on Windows/x64 > - local testing on Linux/x64 using the fallback linker > - tier1-3 + jdk-tier5 > - 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: address review comment ------------- Changes: - all: https://git.openjdk.org/jdk/pull/14225/files - new: https://git.openjdk.org/jdk/pull/14225/files/9daadbfc..3ec04fa6 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=14225&range=06 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14225&range=05-06 Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 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