You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(plan, symbol_provision): a build program's objects stay in this package's images, and vague linkage is not a second provider
Two defects that serving the SYCL runtime's OpenCL adapter made active. Both
were latent, neither is caused by #596, and both were found by the checks this
branch sharpened rather than by reading.
A BUILD PROGRAM'S OBJECTS REACHED A DEPENDENCY'S IMAGE. `role = "object"` with
no named target attaches to "every linked image", and that read as "every link
unit in this plan" -- which includes the shared library a dependency
contributes. Measured: `compat:opencl`'s ICD loader, a C library, came out of
the link carrying `saxpy_device` and thirty-seven `sycl::` instantiations, 193
dynamic symbols where its own API is 154, and the process held two copies of
the device island. `LinkUnit::dependencyOwned` now separates the images this
package produces from the ones a dependency contributes. After: 0 sycl symbols,
154 exports, all of them its own `cl*` entry points.
Latent until a SYCL project first had a shared dependency, which is what
declaring `compat:opencl` did.
VAGUE LINKAGE IS NOT A SECOND PROVIDER. `DynamicSymbol` recorded the symbol's
TYPE and not its BINDING, so template instantiations, inline functions and
vtables -- which the C++ ABI emits into every image and expects the loader to
unify -- were counted as a second provider. `hide_static_cxx_runtime` had
already written that rule in a comment; nothing enforced it one layer up. The
binding is recorded now, weak definitions are counted rather than reported, and
the count is printed for the reason every denominator in this area is printed.
Both were invisible while the same artifact still had 68 real findings on top
of them.
One test moved from positional to designated initialisation: adding a field to
`Conflict` bound the provider list to a bool -- a string literal converts to
one, so it compiled and the list silently became empty.
0 commit comments