Skip to content

MaskedMinMax.cu does not compile in CUDA 13.4 due to a const correctness error #386

Description

@jplzhan

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions