From e28d1a368fca9ee6b1e266c1cbce9412d734768d Mon Sep 17 00:00:00 2001 From: "M. Scot Breitenfeld" Date: Tue, 18 Aug 2026 17:19:31 -0500 Subject: [PATCH] Fix H5Z_pipeline type mismatch introduced by the develop merge upstream/develop added an internal-vs-external filter fast path to H5Z_pipeline (skip user-callback prep for id < H5Z_FILTER_RESERVED), written against fclass as H5Z_class2_t *. On this branch fclass in that function is H5Z_entry_t * (the class3 wrapper with H5Z_class2_t embedded as .base, per the comment in H5Zprivate.h), so fclass->id and fclass->filter don't exist as direct members. The merge auto-resolved textually without a conflict marker, since develop's addition didn't overlap the two hunks that did conflict (the filter2/base.filter dispatch), so this went undetected until the build failed. Qualified both occurrences as fclass->base.id / fclass->base.filter to match the embedded-first layout; verified with a full rebuild and the existing test suite. --- src/H5Z.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/H5Z.c b/src/H5Z.c index 886b8c0c3fb..a9f5acfd20a 100644 --- a/src/H5Z.c +++ b/src/H5Z.c @@ -1657,9 +1657,9 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags, hid_t dxpl_id, const hsiz { /* Don't prepare for a user callback if this is an internal filter */ - if (fclass->id < H5Z_FILTER_RESERVED) + if (fclass->base.id < H5Z_FILTER_RESERVED) /* Invoke main "filter" callback */ - new_nbytes = (fclass->filter)(tmp_flags, pline->filter[idx].cd_nelmts, pline->filter[idx].cd_values, *nbytes, buf_size, buf); + new_nbytes = (fclass->base.filter)(tmp_flags, pline->filter[idx].cd_nelmts, pline->filter[idx].cd_values, *nbytes, buf_size, buf); else { /* Prepare & restore library for user callback */ H5_BEFORE_USER_CB(FAIL) @@ -1751,9 +1751,9 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags, hid_t dxpl_id, const hsiz { /* Don't prepare for a user callback if this is an internal filter */ - if (fclass->id < H5Z_FILTER_RESERVED) + if (fclass->base.id < H5Z_FILTER_RESERVED) /* Invoke main "filter" callback */ - new_nbytes = (fclass->filter)(flags | (pline->filter[idx].flags), pline->filter[idx].cd_nelmts, pline->filter[idx].cd_values, *nbytes, buf_size, buf); + new_nbytes = (fclass->base.filter)(flags | (pline->filter[idx].flags), pline->filter[idx].cd_nelmts, pline->filter[idx].cd_values, *nbytes, buf_size, buf); else { /* Prepare & restore library for user callback */ H5_BEFORE_USER_CB(FAIL)