'make mlir' build error

Hi all,

I’ve just forked PennyLaneAI/catalyst today, and I’m following the Detailed Building From Source
guide, and getting an error while making mlir.

I’m pretty sure it has to do with clang++ or libstdc++ versions, but wanted to check with you if you had seen it before, and how you fixed it.

This is the whole error:

-- Build files have been written to: /home/rturrado/Projects/catalyst/mlir/build
cmake --build /home/rturrado/Projects/catalyst/mlir//build --target check-dialects quantum-lsp-server catalyst-cli check-unit-tests
[97/342] Building CXX object lib/Quantum/Transforms/CMakeFiles/obj.quantum-transforms.dir/AdjointPatterns.cpp.o
FAILED: lib/Quantum/Transforms/CMakeFiles/obj.quantum-transforms.dir/AdjointPatterns.cpp.o 
/usr/bin/ccache /usr/bin/clang++ -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/rturrado/Projects/catalyst/mlir/include -I/home/rturrado/Projects/catalyst/mlir/build/include -I/home/rturrado/Projects/catalyst/mlir/lib/Quantum/Transforms/. -isystem /home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include -isystem /home/rturrado/Projects/catalyst/mlir/llvm-project/build/include -isystem /home/rturrado/Projects/catalyst/mlir/llvm-project/mlir/include -isystem /home/rturrado/Projects/catalyst/mlir/llvm-project/build/tools/mlir/include -isystem /home/rturrado/Projects/catalyst/mlir/mlir-hlo -isystem /home/rturrado/Projects/catalyst/mlir/mlir-hlo/bazel-build -isystem /home/rturrado/Projects/catalyst/mlir/mlir-hlo/stablehlo -isystem /home/rturrado/Projects/catalyst/mlir/mlir-hlo/bazel-build/stablehlo -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -std=gnu++20   -D_DEBUG -D_GLIBCXX_ASSERTIONS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS  -fno-exceptions -funwind-tables -fno-rtti -Wall -UNDEBUG -Werror -MD -MT lib/Quantum/Transforms/CMakeFiles/obj.quantum-transforms.dir/AdjointPatterns.cpp.o -MF lib/Quantum/Transforms/CMakeFiles/obj.quantum-transforms.dir/AdjointPatterns.cpp.o.d -o lib/Quantum/Transforms/CMakeFiles/obj.quantum-transforms.dir/AdjointPatterns.cpp.o -c /home/rturrado/Projects/catalyst/mlir/lib/Quantum/Transforms/AdjointPatterns.cpp
In file included from /home/rturrado/Projects/catalyst/mlir/lib/Quantum/Transforms/AdjointPatterns.cpp:17:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/algorithm:60:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algobase.h:67:
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_iterator.h:180:37: error: no matching constructor for initialization of 'llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator'
  180 |       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator()))
      |                                     ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/type_traits:1312:42: note: in instantiation of exception specification for 'reverse_iterator' requested here
 1312 |       = requires (void(&__f)(_Tp)) { __f({}); };
      |                                          ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/type_traits:1312:38: note: in instantiation of requirement here
 1312 |       = requires (void(&__f)(_Tp)) { __f({}); };
      |                                      ^~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/tuple:963:18: note: in instantiation of variable template specialization 'std::__is_implicitly_default_constructible_v<std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>' requested here
  963 |       explicit(!(__is_implicitly_default_constructible_v<_Elements> && ...))
      |                  ^
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:713:24: note: in instantiation of template class 'std::tuple<llvm::detail::index_iterator, std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>' requested here
  713 |   std::tuple<Iters...> iterators;
      |                        ^
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2277:25: note: in instantiation of template class 'llvm::detail::zip_common<llvm::detail::zip_enumerator<llvm::detail::index_iterator, std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>, llvm::detail::enumerator_result<unsigned long, mlir::Value>, llvm::detail::index_iterator, std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>' requested here
 2277 | struct zip_enumerator : zip_common<zip_enumerator<Iters...>,
      |                         ^
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:823:38: note: in instantiation of template class 'llvm::detail::zip_enumerator<llvm::detail::index_iterator, std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>' requested here
  823 |   using iterator_category = typename iterator::iterator_category;
      |                                      ^
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2467:10: note: in instantiation of template class 'llvm::detail::zippy<llvm::detail::zip_enumerator, llvm::detail::index_stream, llvm::iterator_range<std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>>' requested here
 2467 |   return enumerator(detail::index_stream{}, std::forward<FirstRange>(First),
      |          ^
/home/rturrado/Projects/catalyst/mlir/lib/Quantum/Transforms/AdjointPatterns.cpp:172:44: note: in instantiation of function template specialization 'llvm::enumerate<llvm::iterator_range<std::reverse_iterator<llvm::detail::indexed_accessor_range_base<mlir::ValueRange, llvm::PointerUnion<const mlir::Value *, mlir::OpOperand *, mlir::detail::OpResultImpl *>, mlir::Value, mlir::Value, mlir::Value>::iterator>>>' requested here
  172 |             for (auto [idx, param] : llvm::enumerate(llvm::reverse(params))) {
      |                                            ^
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1266:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
 1266 |   class iterator : public indexed_accessor_iterator<iterator, BaseT, T,
      |         ^~~~~~~~
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1266:9: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided
 1266 |   class iterator : public indexed_accessor_iterator<iterator, BaseT, T,
      |         ^~~~~~~~
/home/rturrado/Projects/catalyst/mlir/llvm-project/llvm/include/llvm/ADT/STLExtras.h:1275:5: note: candidate constructor not viable: requires 2 arguments, but 0 were provided
 1275 |     iterator(BaseT owner, ptrdiff_t curIndex)
      |     ^        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
[114/342] Building CXX object lib/Gradient/Transforms/CMakeFiles/obj.gradient-transforms.dir/gradient_to_llvm.cpp.o
ninja: build stopped: subcommand failed.
make[1]: *** [Makefile:167: dialects] Error 1
make[1]: Leaving directory '/home/rturrado/Projects/catalyst/mlir'
make: *** [Makefile:124: mlir] Error 2

It also fails with make dialects.

I’m using:

  • clang+±18.1.3
  • libstdc+±14-dev

Many thanks,
Roberto.

Thanks to @mlxd, I got it working by using make all C_COMPILER=$(which gcc-13) CXX_COMPILER=$(which g++-13). See GitHub issue for more details.

Hi @rturrado ,

Welcome to the Forum and thanks for linking the GitHub issue! I’m glad you could get everything working quickly! We’re looking into fixing the core issue mentioned on GitHub. :heart:

Hi @rturrado , the issue has now been fixed! :partying_face:

Thanks again for reporting it.

Indeed. Thanks so much for the quick response and fix.

I’ve just tested it and it seems it’s working now. I mean, what I did was:

  • Sync my fork in GitHub.
  • git pull locally to get the fix.
  • make clean-all.
  • make all. This command still complains of ld not being able to find lstdc++.
  • sudo apt install libstdc++-14-dev.
  • make all. No errors now.
2 Likes