Skip to content

Fix LLP64 assumptions in t_select_io_dset and t_filters_parallel - #6735

Open
hyoklee wants to merge 8 commits into
HDFGroup:developfrom
hyoklee:llp64-testpar-fixes
Open

hyoklee wants to merge 8 commits into
HDFGroup:developfrom
hyoklee:llp64-testpar-fixes

Conversation

@hyoklee

@hyoklee hyoklee commented Oct 14, 2026

Copy link
Copy Markdown
Member

Describe your changes

Both parallel tests assumed sizeof(long) == 8, which is false on Windows (LLP64), where long is the same size as int.

  • t_select_io_dset: three subtests write an H5T_NATIVE_LONG buffer into an H5T_NATIVE_INT dataset and expect the type conversion to break collective I/O when selection I/O is off. On LLP64 there is no conversion, so the library legitimately stays collective and every rank reports scalar I/O. Add a LONG_INT_TCONV macro and account for it in the expected I/O mode and selection I/O mode checks of the "larger memory type", "empty selections + type conversion" and "multi-datasets, no background buffer" subtests.
  • t_filters_parallel: test_shrinking_growing_chunks fills a double buffer with a loop bounded by data_size / sizeof(C_DATATYPE), where C_DATATYPE is long. On LLP64 that is twice as many iterations as the buffer holds and overflows the heap (found with AddressSanitizer). Bound the loop by sizeof(double).

Verified with Intel MPI 2021.18 and icx 2026.1.1 on Windows 11: t_select_io_dset passes with 3, 6 and 14 ranks; t_filters_parallel passes the full run with 14 ranks and under AddressSanitizer with 4 ranks. Behavior on LP64 platforms is unchanged, since LONG_INT_TCONV is true there and the filters loop bound is identical.

Issue ticket number (GitHub or JIRA)

Fixes #6734

Checklist before requesting a review

  • My code conforms to the guidelines in CONTRIBUTING.md
  • I made an entry in release_docs/CHANGELOG.md (bug fixes, new features) — test-only change, no library behavior affected
  • I added a test (bug fixes, new features) — existing tests corrected

🤖 Generated with Claude Code

…rallel

Both parallel tests assumed sizeof(long) == 8, which is false on Windows
(LLP64), where long is the same size as int.

t_select_io_dset: three subtests write an H5T_NATIVE_LONG buffer into an
H5T_NATIVE_INT dataset and expect the type conversion to break collective
I/O when selection I/O is off. On LLP64 there is no conversion, so the
library legitimately stays collective and reports every rank doing scalar
I/O. Add a LONG_INT_TCONV macro and account for it in the expected I/O
mode and selection I/O mode checks.

t_filters_parallel: test_shrinking_growing_chunks fills a double buffer
with a loop bounded by data_size / sizeof(C_DATATYPE), where C_DATATYPE is
long. On LLP64 that is twice as many iterations as the buffer holds and
overflows the heap (found with AddressSanitizer). Bound the loop by
sizeof(double).

Verified with Intel MPI + icx on Windows 11: t_select_io_dset passes with
3, 6 and 14 ranks; t_filters_parallel passes with 14 ranks and under
AddressSanitizer with 4 ranks.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Review Checklist

This PR touches the following areas. Each needs a sign-off
from its listed owners before merging.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: To be triaged

Development

Successfully merging this pull request may close these issues.

Parallel tests t_select_io_dset and t_filters_parallel fail on Windows (LLP64: sizeof(long) == sizeof(int))

1 participant