Skip to content

large number of obligation produced in async code causing compiler stuck #103423

Closed
@skyzh

Description

@skyzh

Code

I tried this code:

risingwavelabs/risingwave#5119

Sorry for not having a very good small reproduce of this issue. Basically we found our code will stuck when compiling after upgrading compiler to nightly-2022-10-16. I suspect this is related to a not-so-recent change of trait normalization -> #102651.

I modified normalize.rs in the Rust compiler on the latest master and find that some part of code is producing a large number of obligations. The highest one hits 4052 obligations.

Digging it into a little bit, we found that the root cause is the OrderedMergeIteratorInner + UnorderedMergeIteratorInner, which produces ~50 obligations. And after some static dispatching with generic parameters, it exploded to 4052. For example, when we define something like IteratorUnion<IteratorType1, IteratorType2, IteratorType3, IteratorType4>, we will find about 4x50 obligations at the call site. If the code is wrapped in yet another enum that specializes some generics to two concrete types, it doubles again.

Anyway, one interesting observation that can workaround the bug is here:

https://github.com/risingwavelabs/risingwave/blob/a0b2a119d6b5843bde33f9937b0f1bed3e80e0c8/src/storage/src/hummock/iterator/merge_inner.rs#L306-L308
https://github.com/risingwavelabs/risingwave/blob/a0b2a119d6b5843bde33f9937b0f1bed3e80e0c8/src/storage/src/hummock/iterator/merge_inner.rs#L265-L267

Once we erase the concrete future type and replace it with BoxFuture, the compiler no longer stuck and there won't be a large number of obligations.

fn unsafe_boxed_static_future<F, O>(f: F) -> BoxFuture<'static, O>
where
    F: Future<Output = O> + Send,
{
    let b = f.boxed();
    unsafe { std::mem::transmute::<BoxFuture<'_, O>, BoxFuture<'static, O>>(b) }
}


        let f = unsafe_boxed_static_future(node.iter.next());

        match f.await {

Interestingly, any of the below changes will cause obligations to increase again:

moving the function call into the match will increase number of obligations

        match unsafe_boxed_static_future(node.iter.next()).await {

the original code before bumping toolchain

        match node.iter.next().await {

When the compiler stuck, it is resolving obligations like follows, which might take ~1sec at each call site that awaits a future including a MergeIterator.

normalize::<rustc_middle::ty::subst::GenericArg>: with 52 obligations
result=Ok([static generator@src/storage/src/hummock/iterator/mod.rs:381:55: 386:6])
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>, RePlaceholder(Placeholder { universe: U2, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::sstable::forward_sstable_iterator::SstableIterator>, RePlaceholder(Placeholder { universe: U3, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U4, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, usize>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, usize>, RePlaceholder(Placeholder { universe: U4, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>>, RePlaceholder(Placeholder { universe: U5, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, RePlaceholder(Placeholder { universe: U6, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U7, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U7, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U7, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U7, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, ()>, RePlaceholder(Placeholder { universe: U6, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Forward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, hummock::sstable::forward_sstable_iterator::SstableIterator>, RePlaceholder(Placeholder { universe: U8, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U9, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U9, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U9, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U9, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U6, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Forward>, RePlaceholder(Placeholder { universe: U6, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::forward_sstable_iterator::SstableIterator>, RePlaceholder(Placeholder { universe: U4, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U10, name: BrAnon(1) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U11, name: BrAnon(11) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U11, name: BrAnon(12) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::forward_sstable_iterator::SstableIterator, RePlaceholder(Placeholder { universe: U4, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>, RePlaceholder(Placeholder { universe: U12, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, usize>, hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, RePlaceholder(Placeholder { universe: U13, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U14, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, usize>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, usize>, RePlaceholder(Placeholder { universe: U14, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>>, RePlaceholder(Placeholder { universe: U15, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, RePlaceholder(Placeholder { universe: U16, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U17, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U17, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U17, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U17, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>, ReStatic), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::merge_inner::MergeIteratorInner<hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, ()>, RePlaceholder(Placeholder { universe: U16, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::HummockIteratorUnion<hummock::iterator::Backward, hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, RePlaceholder(Placeholder { universe: U18, name: BrAnon(3) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::shared_buffer::shared_buffer_batch::SharedBufferBatchIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U19, name: BrAnon(2) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U19, name: BrAnon(4) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U19, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U19, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U16, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::PhantomHummockIterator<hummock::iterator::Backward>, RePlaceholder(Placeholder { universe: U16, name: BrAnon(8) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::iterator::concat_inner::ConcatIteratorInner<hummock::sstable::backward_sstable_iterator::BackwardSstableIterator>, RePlaceholder(Placeholder { universe: U14, name: BrAnon(6) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U20, name: BrAnon(1) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U21, name: BrAnon(11) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U21, name: BrAnon(12) })), []), depth=0)
- Obligation(predicate=Binder(OutlivesPredicate(hummock::sstable::backward_sstable_iterator::BackwardSstableIterator, RePlaceholder(Placeholder { universe: U14, name: BrAnon(8) })), []), depth=0)

Version it worked on

nightly-07-29

Version with regression

5a0f454c021d9617c6c37ed2f703bf4a8f41c410
nightly-2022-10-16

Backtrace

Backtrace

<backtrace>

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleI-compiletimeIssue: Problems and improvements with respect to compile times.P-highHigh priorityregression-untriagedUntriaged performance or correctness regression.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions