Skip to content

8299181: PaddingLayout unable to return byteAlignment value #766

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

minborg
Copy link
Collaborator

@minborg minborg commented Jan 11, 2023

This PR proposes bit-aligning PaddingLayout to 8 by default as opposed to the current value of 1.

More generally, the PR restricts PaddingLayout bit-alignment to non-negative values that are an even multiple of 8 (i.e. 0, 8, 16, ...). There are no mechanism to derive VarHandle objects for sub-byte access anyhow and trying to obtain a miss-aligned VarHandle would throw an exception.

If integrated, all MemoryLayout types would be byte-aligned.


Progress

  • Change must not contain extraneous whitespace
  • Change must be properly reviewed (1 review required, with at least 1 Committer)

Issue

  • JDK-8299181: PaddingLayout unable to return byteAlignment value

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/panama-foreign pull/766/head:pull/766
$ git checkout pull/766

Update a local copy of the PR:
$ git checkout pull/766
$ git pull https://git.openjdk.org/panama-foreign pull/766/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 766

View PR using the GUI difftool:
$ git pr show -t 766

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/panama-foreign/pull/766.diff

@bridgekeeper
Copy link

bridgekeeper bot commented Jan 11, 2023

👋 Welcome back pminborg! A progress list of the required criteria for merging this PR into foreign-memaccess+abi will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@minborg minborg marked this pull request as ready for review January 16, 2023 13:46
@openjdk openjdk bot added the rfr Ready for review label Jan 16, 2023
@mlbridge
Copy link

mlbridge bot commented Jan 16, 2023

Webrevs

MemoryLayoutUtil.checkSize(size);
return PaddingLayoutImpl.of(size);
static PaddingLayout paddingLayout(long bitSize) {
if (bitSize < 0 || bitSize % 8 != 0) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I'm not mistaken, this is the same check that should be applied when we call withBitAlignment, right? It might be useful to consolidate (both impl-wise and doc-wise).

StructLayoutImpl.of(Stream.of(elements)
.map(Objects::requireNonNull)
.toList()));
return wrapOverflow(() -> StructLayoutImpl.of(List.of(elements)));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was Objects.requireNonNull dropped? I believe that NPE will be thrown deeper inside the implementation - which is why we had the eager check (to make stack trace more readable).

if (((alignmentBitCount & (alignmentBitCount - 1)) != 0L) || //alignment must be a power of two
(alignmentBitCount < 8)) { //alignment must be greater than 8
throw new IllegalArgumentException("Invalid alignment: " + alignmentBitCount);
private static long requirePowerOfTwoAndGreaterOrEqualToEight(long value) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this stay here, or be merged inside MemoryLayoutUtil? It seems the same as requireBitSizeValid, except for the zero behavior?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method also checks if the parameter is an even power of two.


@Test
public void testNullMember() {
var illegalLayouts = new MemoryLayout[]{JAVA_INT, null, JAVA_INT};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is covered by TestNulls. That test will try to pass null values to all API methods accepting arrays, or collections, and will do so in an automatic fashion.

@openjdk
Copy link

openjdk bot commented Jan 17, 2023

@minborg This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8299181: PaddingLayout unable to return byteAlignment value

Reviewed-by: mcimadamore

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 180 new commits pushed to the foreign-memaccess+abi branch:

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the foreign-memaccess+abi branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready Ready to be integrated label Jan 17, 2023
@minborg
Copy link
Collaborator Author

minborg commented Jan 17, 2023

/integrate

@openjdk
Copy link

openjdk bot commented Jan 17, 2023

Going to push as commit 477cc26.
Since your change was applied there have been 180 commits pushed to the foreign-memaccess+abi branch:

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Jan 17, 2023
@openjdk openjdk bot closed this Jan 17, 2023
@openjdk openjdk bot removed ready Ready to be integrated rfr Ready for review labels Jan 17, 2023
@openjdk
Copy link

openjdk bot commented Jan 17, 2023

@minborg Pushed as commit 477cc26.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
integrated Pull request has been integrated
Development

Successfully merging this pull request may close these issues.

2 participants