build: Boost 1.74.0 incompatible with Clang 18 #30751

issue fanquake openend this issue on August 29, 2024
  1. fanquake commented at 9:51 am on August 29, 2024: member

    Pointed out here: #30739#pullrequestreview-2267576746. Compiling with Clang 18 and Boost 1.74.0 fails:

     0In file included from /usr/include/boost/mpl/integral_c.hpp:32:
     1/usr/include/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: integer value -1 is outside the valid range of values [0, 3] for the enumeration type 'udt_builtin_mixture_enum' [-Wenum-constexpr-conversion]
     2   73 |     typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
     3      |                               ^
     4/usr/include/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
     5   24 | #   define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
     6      |                                               ^
     7In file included from ../../../src/test/validation_chainstatemanager_tests.cpp:8:
     8In file included from ../../../src/node/chainstatemanager_args.h:9:
     9In file included from ../../../src/validation.h:28:
    10In file included from ../../../src/txmempool.h:26:
    11In file included from /usr/include/boost/multi_index/hashed_index.hpp:38:
    12In file included from /usr/include/boost/multi_index/detail/node_handle.hpp:22:
    13In file included from /usr/include/boost/multi_index_container_fwd.hpp:18:
    14In file included from /usr/include/boost/multi_index/indexed_by.hpp:17:
    15In file included from /usr/include/boost/mpl/vector.hpp:36:
    16In file included from /usr/include/boost/mpl/vector/vector20.hpp:18:
    17In file included from /usr/include/boost/mpl/vector/vector10.hpp:18:
    18In file included from /usr/include/boost/mpl/vector/vector0.hpp:24:
    19In file included from /usr/include/boost/mpl/vector/aux_/clear.hpp:18:
    20In file included from /usr/include/boost/mpl/vector/aux_/vector0.hpp:22:
    21In file included from /usr/include/boost/mpl/vector/aux_/iterator.hpp:19:
    22In file included from /usr/include/boost/mpl/plus.hpp:19:
    23In file included from /usr/include/boost/mpl/aux_/arithmetic_op.hpp:17:
    24In file included from /usr/include/boost/mpl/integral_c.hpp:32:
    25/usr/include/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: integer value -1 is outside the valid range of values [0, 3] for the enumeration type 'int_float_mixture_enum' [-Wenum-constexpr-conversion]
    26/usr/include/boost/mpl/aux_/static_cast.hpp:24:47: note: expanded from macro 'BOOST_MPL_AUX_STATIC_CAST'
    27   24 | #   define BOOST_MPL_AUX_STATIC_CAST(T, expr) static_cast<T>(expr)
    28      |                                               ^
    292 errors generated.
    

    The same failure does not happen with GCC (12), but may do with later versions: https://sourceware.org/bugzilla/show_bug.cgi?id=31331.

    Given our documentation currently claims that Boost 1.73.0 is supported, this should be fixed in some way, the documentation updated to drop support for this version, etc. Although, it looks like part of the fix for the Boost code only landed as of 1.86.0? https://github.com/boostorg/mpl/issues/69 (currently the latest release).

  2. fanquake added this to the milestone 28.0 on Aug 29, 2024
  3. maflcko commented at 10:00 am on August 29, 2024: member

    Boost code only landed as of 1.86.0?

    Ugh. I guess depends can be bumped, but using that as the minimum requirement seems a bit strict.

    While this is technically UB, is it actually observable in the compiled bitcoind?

  4. maflcko added the label Build system on Aug 29, 2024
  5. hebasto commented at 12:59 pm on August 29, 2024: member

    Compiling with Clang 18 and Boost 1.74.0 fails:

    Clang 18 is used for macOS targets in Guix. Why does it work?

  6. fanquake commented at 1:02 pm on August 29, 2024: member
    Because it’s not using 1.74.0? The change to Boost Numeric in 1.81.0 may be enough to avoid the issue.
  7. maflcko commented at 2:34 pm on August 29, 2024: member

    Maybe the fixes can be reverted, then an objdump of bitcoind can be compared to see if it differs? If not, then it could be dead code that just happens to be compiled.

    In that case, maybe turning the error into a warning could be an alternative?

  8. justinvforvendetta commented at 10:44 pm on September 3, 2024: contributor
    can confirm this issue exists with boost 1.76 as well, under the same environment.
  9. remyers commented at 9:11 am on September 4, 2024: contributor

    Fwiw, I also ran across this problem (Ubuntu 20.04) while trying to run clang-tidy-diff on my code. A workaround is to just install and use clang-17.

    0cmake -B build -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    1cmake --build build -j $(nproc)
    2git diff HEAD~2 | ( cd ./src/ && clang-tidy-diff -p2 -path ../build -j $(nproc) )
    
  10. maflcko commented at 9:34 am on September 4, 2024: member

    Fwiw, I also ran across this problem (Ubuntu 20.04)

    I guess you also installed a different boost version, because the 1.71 boost version in Ubuntu Focal 20.04 is not supported starting with #29066 and shouldn’t even pass the cmake -B command.

  11. remyers commented at 11:12 am on September 4, 2024: contributor

    Fwiw, I also ran across this problem (Ubuntu 20.04)

    I guess you also installed a different boost version, because the 1.71 boost version in Ubuntu Focal 20.04 is not supported starting with #29066 and shouldn’t even pass the cmake -B command.

    Yup, I have boost 1.74.0.3 installed.

    0dpkg -s libboost-dev | grep 'Version'
    1Version: 1.74.0.3ubuntu7
    
  12. fanquake referenced this in commit 3f6092a671 on Sep 5, 2024
  13. fanquake commented at 1:24 pm on September 5, 2024: member

    The change to Boost Numeric in 1.81.0 may be enough to avoid the issue.

    I think this is the case, PR’d a change in #30821.

  14. fanquake referenced this in commit cd062d6684 on Sep 5, 2024
  15. achow101 closed this on Sep 5, 2024


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-12-22 15:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me