Daniel Hoekwater 05dc519011
[IR] Make succ_iterator compliant with C++20 (#188601)
GCC 15.2 enforces the `DefaultConstructible` requirement for
`std::reverse_iterator<llvm::succ_iterator>` causing LLVM to fail to
build with C++20 (see https://discourse.llvm.org/t/suspicious-usages-of-std-reverse-iterator-and-associated-llvm-build-failures-with-gcc-15-2-1/89426, issue #182417).

```
$ cmake -G Ninja -S llvm -B llvm/build \
    -DCMAKE_INSTALL_PREFIX=$(mktemp -d) \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=gcc \
    -DCMAKE_CXX_COMPILER=g++ \
    -DLLVM_ENABLE_PROJECTS="clang;" \
    -DLLVM_ENABLE_ASSERTIONS=ON \
    -DLLVM_USE_LINKER=lld \
    -DCMAKE_CXX_STANDARD=20 \
    -DLLVM_OPTIMIZED_TABLEGEN=ON \
    -DLLVM_PARALLEL_LINK_JOBS=4

$ ninja -C llvm/build bin/llvm-lib

...
/usr/include/c++/15/bits/stl_iterator.h:182:7: error: no matching function for call to ‘llvm::Instruction::succ_iterator::succ_iterator()’
  182 |       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator()))
...
```

Adding a default constructor fixes this error.

Fixes #182417.
2026-03-25 19:05:21 -04:00
..