Summary
Upgrading Intel LLVM SYCL beyond the nightly-2025-02-27 tag causes a build failure
in any FunGT translation unit that is compiled with -fsycl and transitively includes
GLM 1.0.1 headers. The failure is a hard compiler error, not a warning.
Error
error: address of overloaded function 'round' is ambiguous
return detail::functor1<vec, L, T, T, Q>::call(round, x);
Triggered in glm/detail/func_common.inl and glm/detail/func_packing.inl.
Root cause
The new SYCL cmath wrapper (__sycl_cmath_wrapper_impl.hpp) injects additional round
overloads into the global namespace earlier in the include chain than previous builds did.
GLM 1.0.1 passes round as a bare unqualified function pointer to functor1::call,
which is ambiguous when multiple overloads are visible.
The affected GLM call sites are:
glm/detail/func_common.inl:
return detail::functor1<vec, L, T, T, Q>::call(round, x);
glm/detail/func_packing.inl (four locations, lines 17, 46, 75, 106):
vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));
Affected configuration
SYCL build: Intel LLVM sycl branch, any commit after nightly-2025-02-27
GLM version: 1.0.1 (confirmed unfixed in current HEAD as of March 2025)
Compiler: Intel LLVM clang++ with -fsycl
Platform: Linux x86_64
Workaround (current, post-IWOCL)
FunGT is pinned to SYCL nightly-2025-02-27 (commit cdcf1a6bd644) via branch
fungt-working-branch-feb-2025 until this is resolved.
Proper fix
Two independent fixes are needed, either one alone resolves the issue:
Option 1: Fix GLM (preferred, upstream PR)
In glm/detail/func_common.inl, qualify the function pointer:
return detail::functor1<vec, L, T, T, Q>::call(static_cast<T(*)(T)>(std::round), x);
In glm/detail/func_packing.inl, same pattern at all four call sites:
vec<2, unsigned short, defaultp> result(
static_cast<float(*)(float)>(std::round)(clamp(v, 0.0f, 1.0f) * 65535.0f));
This fix is confirmed not yet applied in GLM HEAD as of March 2025. A PR to the GLM
repository at https://github.com/g-truc/glm is planned.
Option 2: Compilation firewall (long term FunGT architecture)
Ensure GLM headers never appear in any translation unit compiled with -fsycl.
The SYCL-facing translation units (sycl_renderer.cpp, sycl_texture.cpp, particle
simulation, physics) use only fungt::Vec3 and primitive types. GLM is restricted to
host-only translation units compiled without -fsycl.
This is the correct long-term architecture regardless of the GLM fix.
Dependencies
Resolving this unblocks upgrading to newer SYCL nightlies, which may be required for
future IGC compatibility. IGC versions newer than 1.0.16510.2 may require a SYCL
build newer than nightly-2025-02-27.
Priority
Post-IWOCL 2026.
Summary
Upgrading Intel LLVM SYCL beyond the
nightly-2025-02-27tag causes a build failurein any FunGT translation unit that is compiled with
-fsycland transitively includesGLM 1.0.1 headers. The failure is a hard compiler error, not a warning.
Error
Triggered in
glm/detail/func_common.inlandglm/detail/func_packing.inl.Root cause
The new SYCL cmath wrapper (
__sycl_cmath_wrapper_impl.hpp) injects additionalroundoverloads into the global namespace earlier in the include chain than previous builds did.
GLM 1.0.1 passes
roundas a bare unqualified function pointer tofunctor1::call,which is ambiguous when multiple overloads are visible.
The affected GLM call sites are:
glm/detail/func_common.inl:return detail::functor1<vec, L, T, T, Q>::call(round, x);glm/detail/func_packing.inl(four locations, lines 17, 46, 75, 106):Affected configuration
SYCL build: Intel LLVM sycl branch, any commit after
nightly-2025-02-27GLM version: 1.0.1 (confirmed unfixed in current HEAD as of March 2025)
Compiler: Intel LLVM clang++ with
-fsyclPlatform: Linux x86_64
Workaround (current, post-IWOCL)
FunGT is pinned to SYCL
nightly-2025-02-27(commitcdcf1a6bd644) via branchfungt-working-branch-feb-2025until this is resolved.Proper fix
Two independent fixes are needed, either one alone resolves the issue:
Option 1: Fix GLM (preferred, upstream PR)
In
glm/detail/func_common.inl, qualify the function pointer:In
glm/detail/func_packing.inl, same pattern at all four call sites:This fix is confirmed not yet applied in GLM HEAD as of March 2025. A PR to the GLM
repository at
https://github.com/g-truc/glmis planned.Option 2: Compilation firewall (long term FunGT architecture)
Ensure GLM headers never appear in any translation unit compiled with
-fsycl.The SYCL-facing translation units (
sycl_renderer.cpp,sycl_texture.cpp, particlesimulation, physics) use only
fungt::Vec3and primitive types. GLM is restricted tohost-only translation units compiled without
-fsycl.This is the correct long-term architecture regardless of the GLM fix.
Dependencies
Resolving this unblocks upgrading to newer SYCL nightlies, which may be required for
future IGC compatibility. IGC versions newer than
1.0.16510.2may require a SYCLbuild newer than
nightly-2025-02-27.Priority
Post-IWOCL 2026.