AztecProtocol / aztec-packages

Apache License 2.0
173 stars 177 forks source link

Building BB fails with `fatal error: no matching function for call to 'max'` #8341

Open koxu1996 opened 1 week ago

koxu1996 commented 1 week ago

When trying to build BB:

cd ./aztec-packages/barretenberg/cpp/
cmake --preset default -DCMAKE_BUILD_TYPE=RelWithAssert
cmake --build --preset default --target bb

There is one ASSERT that fails to compile:

FAILED: src/barretenberg/sumcheck/CMakeFiles/sumcheck_objects.dir/instance/prover_instance.cpp.o
/usr/bin/clang++ -DDISABLE_ASM=1 -DNO_OMP_MULTITHREADING -DNO_TBB -I/home/andrew/aztec/aztec-packages/barretenberg/cpp/src -I/home/andrew/aztec/aztec-packages/barretenberg/cpp/build/_deps/msgpack-c/src/msgpack-c/include -I
/home/andrew/aztec/aztec-packages/barretenberg/cpp/build/_deps/tracy-src/public -std=gnu++20 -fbracket-depth=1024 -O3 -march=skylake -pthread -Werror -Wall -Wextra -Wconversion -Wsign-conversion -Wfatal-errors -fcolor-diagnostics -fconstex
pr-steps=100000000 -Wno-vla-cxx-extension -MD -MT src/barretenberg/sumcheck/CMakeFiles/sumcheck_objects.dir/instance/prover_instance.cpp.o -MF src/barretenberg/sumcheck/CMakeFiles/sumcheck_objects.dir/instance/prover_instance.cpp.o.d -o src/barretenberg/su
mcheck/CMakeFiles/sumcheck_objects.dir/instance/prover_instance.cpp.o -c /home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp
In file included from /home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.cpp:1:
In file included from /home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/sumcheck/instance/prover_instance.hpp:2:
In file included from /home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/execution_trace/execution_trace.hpp:2:
In file included from /home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/flavor/flavor.hpp:70:
/home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/common/zip_view.hpp:194:16: fatal error: no matching function for call to 'max'
  194 |         return std::max({ std::size_t(std::get<I>(args).size())... });
      |                ^~~~~~~~
/home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/common/zip_view.hpp:167:26: note: in instantiation of function template specialization 'zip_view<bb::RefArray<bb::field<bb::Bn254FrParams>, 63>, bb::RefArray<const bb::Pol
ynomial<bb::field<bb::Bn254FrParams>>, 63>>::max_size_impl<0UL, 1UL>' requested here
  167 |         ASSERT(size() == max_size_impl(arg_indexes{}));
      |                          ^
/home/andrew/aztec/aztec-packages/barretenberg/cpp/src/barretenberg/stdlib_circuit_builders/mega_flavor.hpp:395:52: note: in instantiation of member function 'zip_view<bb::RefArray<bb::field<bb::Bn254FrParams>, 63>, bb::RefArray<const bb::
Polynomial<bb::field<bb::Bn254FrParams>>, 63>>::zip_view' requested here
  395 |             for (auto [result_field, polynomial] : zip_view(result.get_all(), this->get_all())) {
      |                                                    ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h:257:5: note: candidate function template not viable: requires 2 arguments, but 1 was provided
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h:303:5: note: candidate function template not viable: requires 3 arguments, but 1 was provided
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Additional info

Compiler: clang 18.1.8 Target: x86_64-pc-linux-gnu

koxu1996 commented 1 week ago

As a workaround I commented it out:

diff --git a/barretenberg/cpp/src/barretenberg/common/zip_view.hpp b/barretenberg/cpp/src/barretenberg/common/zip_view.hpp
index 964888ac64..452a82e2d7 100644
--- a/barretenberg/cpp/src/barretenberg/common/zip_view.hpp
+++ b/barretenberg/cpp/src/barretenberg/common/zip_view.hpp
@@ -164,7 +164,7 @@ template <class... S> class zip_view {
         : args(std::forward<S>(args)...)
     {
         // min size matches max size
-        ASSERT(size() == max_size_impl(arg_indexes{}));
+        //ASSERT(size() == max_size_impl(arg_indexes{}));
     }
     zip_view(ZipAllowDifferentSizes /*unused*/, S... args)
         : args(std::forward<S>(args)...)
@@ -189,10 +189,10 @@ template <class... S> class zip_view {
     {
         return std::min({ std::size_t(std::get<I>(args).size())... });
     }
-    template <std::size_t... I> auto max_size_impl(std::index_sequence<I...>) const
-    {
-        return std::max({ std::size_t(std::get<I>(args).size())... });
-    }
+    //template <std::size_t... I> auto max_size_impl(std::index_sequence<I...>) const
+    //{
+    //    return std::max({ std::size_t(std::get<I>(args).size())... });
+    //}

     template <class A, std::size_t... I> bool if_any_impl(const A& t, std::index_sequence<I...>) const
     {