matrixMul.cu can't be preprocess then be compiled separately

Hello, everyone.
Here, the sample benchmark, matrixMul.cu in the CUDA home directory, needs preprocessing, optimizing with LLVM Pass, and compiling to a .o file. The compiling command is as follows:

nvcc -v -ccbin clang++ . ./common/inc --cuda -o matrixMul.ii matrixMul.cu
clang++ -O1 -v -std=c++14 -Xclang -load -Xclang libPass.so -c -o matrixMul.o matrixMul.ii

After executing these commands, it outputs:

/usr/local/cuda/bin/nvcc -ccbin /usr/local/bin/clang -v -I…/common/inc --cuda -o matrixMul.ii matrixMul.cu
#$ NVVM_BRANCH=nvvm
#$ SPACE=
#$ CUDART=cudart
#$ HERE=/usr/local/cuda/bin
#$ THERE=/usr/local/cuda/bin
#$ TARGET_SIZE=
#$ TARGET_DIR=
#$ TARGET_DIR=targets/x86_64-linux
#$ TOP=/usr/local/cuda/bin/…
#$ NVVMIR_LIBRARY_DIR=/usr/local/cuda/bin/…/nvvm/libdevice
#$ LD_LIBRARY_PATH=/usr/local/cuda/bin/…/lib:/usr/local/cuda-11.3/lib64:
#$ PATH=/usr/local/cuda/bin/…/nvvm/bin:/usr/local/cuda/bin:/usr/local/cuda-11.3/bin:/root/anaconda3/bin:/root/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#$ INCLUDES=“-I/usr/local/cuda/bin/…/targets/x86_64-linux/include”
#$ LIBRARIES= “-L/usr/local/cuda/bin/…/targets/x86_64-linux/lib/stubs” “-L/usr/local/cuda/bin/…/targets/x86_64-linux/lib”
#$ CUDAFE_FLAGS=
#$ PTXAS_FLAGS=
#$ “/usr/local/bin”/clang -D__CUDA_ARCH__=520 -E -x c++ -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDACC__ -D__NVCC__ -I"…/common/inc" “-I/usr/local/cuda/bin/…/targets/x86_64-linux/include” -D__CUDACC_VER_MAJOR__=11 -D__CUDACC_VER_MINOR__=3 -D__CUDACC_VER_BUILD__=109 -D__CUDA_API_VER_MAJOR__=11 -D__CUDA_API_VER_MINOR__=3 -include “cuda_runtime.h” -m64 “matrixMul.cu” -o “/tmp/tmpxft_0019f077_00000000-7_matrixMul.cpp1.ii”
#$ cicc --c++14 --clang --clang_version=90000 --orig_src_file_name “matrixMul.cu” --unicode_source_kind=UTF-8 --allow_managed -arch compute_52 -m64 --no-version-ident -ftz=0 -prec_div=1 -prec_sqrt=1 -fmad=1 --include_file_name “tmpxft_0019f077_00000000-3_matrixMul.fatbin.c” -tused --gen_module_id_file --module_id_file_name “/tmp/tmpxft_0019f077_00000000-4_matrixMul.module_id” --gen_c_file_name “/tmp/tmpxft_0019f077_00000000-6_matrixMul.cudafe1.c” --stub_file_name “/tmp/tmpxft_0019f077_00000000-6_matrixMul.cudafe1.stub.c” --gen_device_file_name “/tmp/tmpxft_0019f077_00000000-6_matrixMul.cudafe1.gpu” “/tmp/tmpxft_0019f077_00000000-7_matrixMul.cpp1.ii” -o “/tmp/tmpxft_0019f077_00000000-6_matrixMul.ptx”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(70): error: qualified name is not allowed
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(72): error: expected a “(”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(72): error: expected a type specifier
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(72): error: expected a “)”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(76): error: expected a “(”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(76): error: expected a type specifier
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(77): error: expected a “;”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(78): error: expected a “(”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(78): error: expected a “;”
/usr/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/ext/numeric_traits.h(88): error: class template “__gnu_cxx::__numeric_traits_integer<_Value>” has no member “__is_signed”
10 errors detected in the compilation of “matrixMul.cu”.
#–error 0x1 –
make: *** [Makefile:24: matrixMul.o] Error 1

However, when not specifying -ccbin, which means the host compiler is g++, the first phase runs normally. But as to the second command, it outputs:

/usr/include/c++/9/utility:310:30: error: use of undeclared identifier ‘__integer_pack’
using __type = _Index_tuple< __integer_pack(_Num)…> ;
^
/usr/include/c++/9/utility:327:105: error: pack expansion does not contain any unexpanded parameter packs
template< class _Tp, _Tp _Num> using make_integer_sequence = integer_sequence< _Tp, __integer_pack(_Num)…> ;
~~~~~~~~~~~~~~~~~~~~^
/usr/include/c++/9/utility:342:52: error: no template named ‘make_integer_sequence’; did you mean ‘integer_sequence’?
template< size_t _Num> using make_index_sequence = make_integer_sequence< unsigned long, _Num> ;
^
/usr/include/c++/9/utility:320:8: note: ‘integer_sequence’ declared here
struct integer_sequence {
^
3 errors generated.
make: *** [Makefile:25: matrixMul.o] Error 1

I have tested an example .cu file, main.cu, which doesn’t include <utility> with the above two commands. Both of the two commands run successfully.

Could anyone give me any ideas about why the first file (i.e. matrixMul.cu) can’t be handled successfully?