Skip to content

Commit 05dc519

Browse files
authored
[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.
1 parent 180ae2f commit 05dc519

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

llvm/include/llvm/IR/Instruction.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class Instruction : public User,
7878
: iterator_adaptor_base<succ_iterator, op_iterator,
7979
std::random_access_iterator_tag, BasicBlock *,
8080
ptrdiff_t, BasicBlock *, BasicBlock *> {
81+
succ_iterator() = default;
8182
explicit succ_iterator(op_iterator I) : iterator_adaptor_base(I) {}
8283

8384
BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
@@ -92,6 +93,7 @@ class Instruction : public User,
9293
std::random_access_iterator_tag,
9394
const BasicBlock *, ptrdiff_t, const BasicBlock *,
9495
const BasicBlock *> {
96+
const_succ_iterator() = default;
9597
explicit const_succ_iterator(const_op_iterator I)
9698
: iterator_adaptor_base(I) {}
9799

0 commit comments

Comments
 (0)