Read a declaration's family from the guard it sits under - #109
Merged
estebanzimanyi merged 1 commit intoAug 31, 2026
Conversation
A family's declarations do not all live in the family's own header. A shared header carries some under `#if <FAMILY>`, which MobilityDB compiles out when the family is off: `meos.h` holds `rtree_create_tpcbox`, `sptree_create_tpcbox` and `meos_initialize_pointcloud` that way, and `meos_catalog.h` four more. The classifier read only the path, so those came out `CORE` — the label that means "always emitted". A binding gating on the field emits them into a build whose headers never declared them and whose library never defined them, so the wrapper fails to compile, or compiles and fails to link. Nothing reports it from the catalog side, because `CORE` is exactly what an always-present function looks like. The guard is read first and outranks the path; the subdirectory and the `meos_<family>.h` name answer as before. `#else` ends the family's region rather than continuing it, since the alternative branch is the one taken when the family is OFF. The tokens come from the published `families` list, so a family added to MobilityDB's `ALL` list is read here with no edit. Against MobilityDB 5d58fbc05f the catalog changes by exactly seven functions, all of them POINTCLOUD-guarded — `ensure_tpointcloud_temptype`, `meos_initialize_pointcloud`, `pointcloud_basetype`, `pointcloudset_type`, `rtree_create_tpcbox`, `sptree_create_tpcbox`, `tpointcloud_temptype` — with no function, struct, enum or macro added or removed and no other field altered anywhere. That MEOS.js carries five of the seven in a hand-maintained exclusion list, and is missing the other two, is the shape of the defect: the list is a copy of this classification kept by hand, and it went stale when `sptree_create_tpcbox` joined its `rtree_` sibling. The test asserts both directions — the seven land in POINTCLOUD, and the unguarded `sptree_create_stbox`/`sptree_create_tbox` beside them stay CORE, so it fails if the guard is read too widely as well as if it is not read at all.
estebanzimanyi
deleted the
fix/family-from-the-guard-not-only-the-header
branch
September 1, 2026 07:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A family's declarations do not all live in the family's own header. A shared
header carries some under
#if <FAMILY>, which MobilityDB compiles out when thefamily is off:
meos.hholdsrtree_create_tpcbox,sptree_create_tpcboxandmeos_initialize_pointcloudthat way, andmeos_catalog.hfour more.The classifier read only the path, so those came out
CORE— the label thatmeans "always emitted". A binding gating on the field emits them into a build
whose headers never declared them and whose library never defined them, so the
wrapper fails to compile, or compiles and fails to link. Nothing reports it from
the catalog side, because
COREis exactly what an always-present functionlooks like.
The guard is read first and outranks the path; the subdirectory and the
meos_<family>.hname answer as before.#elseends the family's region ratherthan continuing it, since the alternative branch is the one taken when the family
is OFF. The tokens come from the published
familieslist, so a family added toMobilityDB's
ALLlist is read here with no edit.Against MobilityDB 5d58fbc05f the catalog changes by exactly seven functions,
all of them POINTCLOUD-guarded —
ensure_tpointcloud_temptype,meos_initialize_pointcloud,pointcloud_basetype,pointcloudset_type,rtree_create_tpcbox,sptree_create_tpcbox,tpointcloud_temptype— with nofunction, struct, enum or macro added or removed and no other field altered
anywhere. That MEOS.js carries five of the seven in a hand-maintained exclusion
list, and is missing the other two, is the shape of the defect: the list is a
copy of this classification kept by hand, and it went stale when
sptree_create_tpcboxjoined itsrtree_sibling.The test asserts both directions — the seven land in POINTCLOUD, and the
unguarded
sptree_create_stbox/sptree_create_tboxbeside them stay CORE, so itfails if the guard is read too widely as well as if it is not read at all.