Two comparison functions declared for finding min and max values with a mask from thrust::tuple were marked as belonging to a struct but were not pedantically marked as const functions. This creates an issue because in CUDA 13.4, the struct hosting the comparison function seems to now be initialized as a const object, so when operator() is called, it creates a compile time error if the operator() is not also marked as a const member function. The offending lines are as follows:
|
__host__ __device__ bool operator()( |
|
const double_mask lhs, const double_mask rhs) |
|
__host__ __device__ bool operator()( |
|
const double_mask lhs, const double_mask rhs) |
The quick solution would be the mark the functions as const after the parameter list, with no other changes.
Here is the beginning of the error in question:
2026-09-25T21:13:32.2244645Z [147/527] Building CUDA object cxx/isce3/cuda/CMakeFiles/isce3-cuda.dir/geocode/MaskedMinMax.cu.o
2026-09-25T21:13:32.2250460Z FAILED: [code=1] cxx/isce3/cuda/CMakeFiles/isce3-cuda.dir/geocode/MaskedMinMax.cu.o
2026-09-25T21:13:32.2256682Z /home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_build_env/bin/nvcc -forward-unknown-to-host-compiler -DISCE3_CUDA -DNDEBUG -DTHRUST_DISABLE_ABI_NAMESPACE -DTHRUST_IGNORE_ABI_NAMESPACE_ERROR -D_FORTIFY_SOURCE=2 -Disce3_cuda_EXPORTS -I/home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_build_env/targets/x86_64-linux/include -I/home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_build_env/targets/x86_64-linux/include/cccl -I/home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/work/cxx/isce3/.. -I/home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/work/build/cxx/isce3/.. -isystem /home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/include/eigen3 -isystem /home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/include --extended-lambda -O3 -DNDEBUG -std=c++17 -arch=all-major -Xcompiler=-fPIC --expt-relaxed-constexpr -Werror=cross-execution-space-call -MD -MT cxx/isce3/cuda/CMakeFiles/isce3-cuda.dir/geocode/MaskedMinMax.cu.o -MF cxx/isce3/cuda/CMakeFiles/isce3-cuda.dir/geocode/MaskedMinMax.cu.o.d -x cu -rdc=true -c /home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/work/cxx/isce3/cuda/geocode/MaskedMinMax.cu -o cxx/isce3/cuda/CMakeFiles/isce3-cuda.dir/geocode/MaskedMinMax.cu.o
2026-09-25T21:13:32.2263706Z /home/conda/feedstock_root/build_artifacts/isce3-split_1790370355846/_build_env/targets/x86_64-linux/include/cccl/cub/thread/thread_operators.cuh(132): error: no instance of function "isce3::cuda::geocode::masked_min_compare::operator()" matches the argument list and object (the object has type qualifiers that prevent a match)
2026-09-25T21:13:32.2265123Z argument types are: (const cuda::std::__4::tuple<double, __nv_bool>, const cuda::std::__4::tuple<double, __nv_bool>)
2026-09-25T21:13:32.2265833Z object type is: const isce3::cuda::geocode::masked_min_compare
2026-09-25T21:13:32.2266498Z if (less(b.value, a.value) || (!less(a.value, b.value) && b.key < a.key))
2026-09-25T21:13:32.2266928Z ^
object type is: const isce3::cuda::geocode::masked_min_compare I believe indicates that the object cannot call operator() as it is not an explicitly const member function.
Two comparison functions declared for finding min and max values with a mask from
thrust::tuplewere marked as belonging to astructbut were not pedantically marked asconstfunctions. This creates an issue because in CUDA 13.4, thestructhosting the comparison function seems to now be initialized as aconstobject, so whenoperator()is called, it creates a compile time error if theoperator()is not also marked as aconstmember function. The offending lines are as follows:isce3/cxx/isce3/cuda/geocode/MaskedMinMax.cu
Lines 28 to 29 in 404c0de
isce3/cxx/isce3/cuda/geocode/MaskedMinMax.cu
Lines 63 to 64 in 404c0de
The quick solution would be the mark the functions as
constafter the parameter list, with no other changes.Here is the beginning of the error in question:
object type is: const isce3::cuda::geocode::masked_min_compareI believe indicates that the object cannot calloperator()as it is not an explicitlyconstmember function.