Closed
Description
Summary
Can't build oneflow in my WSL2 (ubuntu22) with clang++ 14 compiler
Code to reproduce bug
git clone https://github.com/Oneflow-Inc/oneflow --depth=1
cd oneflow
mkdir build && cd build
cmake .. -C ../cmake/caches/cn/cpu.cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -GNinja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=YES
ninja
Errors:
[28/1629] Performing build step for 'absl'
FAILED: absl/src/absl-stamp/absl-build third_party_install/absl/lib/libabsl_spinlock_wait.a third_party_install/absl/lib/libabsl_dynamic_annotations.a third_party_install/absl/lib/libabsl_malloc_internal.a third_party_install/absl/lib/libabsl_throw_delegate.a third_party_install/absl/lib/libabsl_int128.a third_party_install/absl/lib/libabsl_strings.a third_party_install/absl/lib/libabsl_str_format_internal.a third_party_install/absl/lib/libabsl_time.a third_party_install/absl/lib/libabsl_bad_optional_access.a third_party_install/absl/lib/libabsl_base.a /home/jun/dev/oneflow/build/absl/src/absl-stamp/absl-build /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_spinlock_wait.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_dynamic_annotations.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_malloc_internal.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_throw_delegate.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_int128.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_strings.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_str_format_internal.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_time.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_bad_optional_access.a /home/jun/dev/oneflow/build/third_party_install/absl/lib/libabsl_base.a
cd /home/jun/dev/oneflow/build/absl/src/absl-build && /usr/bin/cmake --build . && /usr/bin/cmake -E touch /home/jun/dev/oneflow/build/absl/src/absl-stamp/absl-build
[1/55] Linking CXX static library absl/numeric/libabsl_int128.a
[2/55] Linking CXX static library absl/strings/libabsl_strings_internal.a
[3/55] Linking CXX static library absl/strings/libabsl_strings.a
[4/55] Building CXX object absl/strings/CMakeFiles/str_format_internal.dir/internal/str_format/extension.cc.o
[5/55] Building CXX object absl/synchronization/CMakeFiles/synchronization.dir/barrier.cc.o
[6/55] Building CXX object absl/debugging/CMakeFiles/failure_signal_handler.dir/failure_signal_handler.cc.o
FAILED: absl/debugging/CMakeFiles/failure_signal_handler.dir/failure_signal_handler.cc.o
/usr/bin/c++ -D__CLANG_SUPPORT_DYN_ANNOTATION__ -I/home/jun/dev/oneflow/build/absl/src/absl -g -fPIC -Wall -Wextra -Wcast-qual -Wconversion-null -Wmissing-declarations -Woverlength-strings -Wpointer-arith -Wunused-local-typedefs -Wunused-result -Wvarargs -Wvla -Wwrite-strings -Wno-missing-field-initializers -Wno-sign-compare -std=gnu++11 -MD -MT absl/debugging/CMakeFiles/failure_signal_handler.dir/failure_signal_handler.cc.o -MF absl/debugging/CMakeFiles/failure_signal_handler.dir/failure_signal_handler.cc.o.d -o absl/debugging/CMakeFiles/failure_signal_handler.dir/failure_signal_handler.cc.o -c /home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc: In function ‘bool absl::SetupAlternateStackOnce()’:
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32: error: no matching function for call to ‘max(long int, int)’
127 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/algorithm:61,
from /home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:31:
/usr/include/c++/11/bits/stl_algobase.h:254:5: note: candidate: ‘template<class _Tp> const _Tp& std::max(const _Tp&, const _Tp&)’
254 | max(const _Tp& __a, const _Tp& __b)
| ^~~
/usr/include/c++/11/bits/stl_algobase.h:254:5: note: template argument deduction/substitution failed:
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32: note: deduced conflicting types for parameter ‘const _Tp’ (‘long int’ and ‘int’)
127 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/algorithm:61,
from /home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:31:
/usr/include/c++/11/bits/stl_algobase.h:300:5: note: candidate: ‘template<class _Tp, class _Compare> const _Tp& std::max(const _Tp&, const _Tp&, _Compare)’
300 | max(const _Tp& __a, const _Tp& __b, _Compare __comp)
| ^~~
/usr/include/c++/11/bits/stl_algobase.h:300:5: note: template argument deduction/substitution failed:
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32: note: deduced conflicting types for parameter ‘const _Tp’ (‘long int’ and ‘int’)
127 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/algorithm:62,
from /home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:31:
/usr/include/c++/11/bits/stl_algo.h:3461:5: note: candidate: ‘template<class _Tp> _Tp std::max(std::initializer_list<_Tp>)’
3461 | max(initializer_list<_Tp> __l)
| ^~~
/usr/include/c++/11/bits/stl_algo.h:3461:5: note: template argument deduction/substitution failed:
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘long int’
127 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/algorithm:62,
from /home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:31:
/usr/include/c++/11/bits/stl_algo.h:3467:5: note: candidate: ‘template<class _Tp, class _Compare> _Tp std::max(std::initializer_list<_Tp>, _Compare)’
3467 | max(initializer_list<_Tp> __l, _Compare __comp)
| ^~~
/usr/include/c++/11/bits/stl_algo.h:3467:5: note: template argument deduction/substitution failed:
/home/jun/dev/oneflow/build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘long int’
127 | size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
| ~~~~~~~~^~~~~~~~~~~~~~~~~
The compile error is from abseil. More specific: build/absl/src/absl/absl/debugging/failure_signal_handler.cc:127:32
size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
The current workaround is to cast both operands to size_t.
Note this seems to be fixed in upstream:
abseil/abseil-cpp@f073fe8#diff-f8c3d5f5f08c7c6acbb7bec88ab5f2e4d86bb8c2a0e2f25c27e23ef2e3ee1173
OS:
❯ uname -a
Linux Diana 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Compiler:
❯ clang --version
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin