Skip to content

rustc takes too much time to evaluate a struct type with recursion using Rc #24600

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
bombless opened this issue Apr 19, 2015 · 8 comments
Closed
Labels
I-slow Issue: Problems and improvements with respect to performance of generated code.

Comments

@bombless
Copy link
Contributor

Check my code here to reproduce:
bombless/bfvm-rs@ff03a10
(see that sexp crate)

$ rustc -Vv
rustc 1.0.0-dev (bd6c30e02 2015-04-18) (built 2015-04-18)
binary: rustc
commit-hash: bd6c30e0235f1903c12321be173d1c26e4e6e3ed
commit-date: 2015-04-18
build-date: 2015-04-18
host: x86_64-pc-windows-gnu
release: 1.0.0-dev

here's "-Z time-passes" output:

time: 0.003     parsing
time: 0.000     recursion limit
time: 0.000     configuration 1
time: 0.000     gated macro checking
time: 0.000     crate injection
time: 0.026     macro loading
time: 0.000     plugin loading
time: 0.000     plugin registration
time: 0.022     expansion
time: 0.000     complete gated feature checking 1
time: 0.001     configuration 2
time: 0.001     maybe building test harness
time: 0.000     prelude injection
time: 0.000     checking that all macro invocations are gone
time: 0.000     complete gated feature checking 2
time: 0.000     assigning node ids and indexing ast
time: 0.000     external crate/lib resolution
time: 0.000     language item collection
time: 0.014     resolution
time: 0.000     lifetime resolution
time: 0.000     looking for entry point
time: 0.000     looking for plugin registrar
time: 0.000     region resolution
time: 0.000     loop checking
time: 0.000     static item recursion checking
time: 0.000     type collecting
time: 0.000     variance inference
time: 0.750     coherence checking
time: 0.472     type checking
time: 0.080     const checking
time: 0.000     privacy checking
time: 0.000     stability index
time: 0.000     intrinsic checking
time: 0.000     effect checking
time: 0.012     match checking
time: 0.000     liveness checking
time: 0.049     borrow checking
time: 0.040     rvalue checking
time: 0.000     reachability checking
time: 0.000     death checking
time: 0.043     stability checking
time: 0.000     unused lib feature checking
sexp/lib.rs:121:1: 123:2 warning: function is never used: `main`, #[warn(dead_code)] on by default
sexp/lib.rs:121 fn main() {
sexp/lib.rs:122     parse_sexp(&mut b"()".iter().cloned().peekable()).unwrap();
sexp/lib.rs:123 }
time: 0.048     lint checking
time: 0.000     resolving dependency formats

FWIW, 2 weeks ago rustc reported "overflow evaluating the requirement _ : core::marker::Sized" in a minute instead of hanging for this code.

@tomaka may have other ways to reproduce this.

@bombless bombless changed the title rustc hangs on "resolving dependency formats" rustc hangs after "resolving dependency formats" Apr 19, 2015
@bombless
Copy link
Contributor Author

Oh after Ctrl+D to kill the process, the terminal prints "error: overflow evaluating the requirement _ : core::marker::Sized [E0275]" now, but still hang after printing "error: aborting due to previous error"

@nagisa
Copy link
Member

nagisa commented Apr 19, 2015

NB: after “resolving dependency formats” comes “translation”.

@nagisa
Copy link
Member

nagisa commented Apr 19, 2015

Got

sexp/lib.rs:1:1: 1:1 error: overflow evaluating the requirement `_ : core::marker::Sized` [E0275]
sexp/lib.rs:1 use std::iter::Peekable;

after a few minutes of trans (and an exhausted randomness pool).

(1284be4 2015-04-18 on linux)

@bombless
Copy link
Contributor Author

beta.2 took several minutes but doesn't hang.

time: 0.001     parsing
time: 0.000     recursion limit
time: 0.000     configuration 1
time: 0.000     gated macro checking
time: 0.000     crate injection
time: 0.009     macro loading
time: 0.000     plugin loading
time: 0.000     plugin registration
time: 0.004     expansion
time: 0.000     complete gated feature checking 1
time: 0.000     configuration 2
time: 0.000     maybe building test harness
time: 0.000     prelude injection
time: 0.000     checking that all macro invocations are gone
time: 0.000     complete gated feature checking 2
time: 0.000     assigning node ids and indexing ast
time: 0.000     external crate/lib resolution
time: 0.000     language item collection
time: 0.006     resolution
time: 0.000     lifetime resolution
time: 0.000     looking for entry point
time: 0.000     looking for plugin registrar
time: 0.000     region resolution
time: 0.000     loop checking
time: 0.000     static item recursion checking
time: 0.000     type collecting
time: 0.000     variance inference
time: 0.214     coherence checking
time: 0.105     type checking
time: 0.023     const checking
time: 0.000     privacy checking
time: 0.000     stability index
time: 0.000     intrinsic checking
time: 0.000     effect checking
time: 0.001     match checking
time: 0.000     liveness checking
time: 0.011     borrow checking
time: 0.008     rvalue checking
time: 0.000     reachability checking
time: 0.000     death checking
time: 0.011     stability checking
time: 0.000     unused lib feature checking
lib.rs:121:1: 123:2 warning: function is never used: `main`, #[warn(dead_code)] on by default
lib.rs:121 fn main() {
lib.rs:122     parse_sexp(&mut b"()".iter().cloned().peekable()).unwrap();
lib.rs:123 }
time: 0.014     lint checking
time: 0.000     resolving dependency formats
lib.rs:1:1: 1:1 error: overflow evaluating the requirement `_ : core::marker::Sized` [E0275]
lib.rs:1 use std::iter::Peekable;
         ^
lib.rs:1:1: 1:1 note: consider adding a `#![recursion_limit="128"]` attribute to your crate
lib.rs:1 use std::iter::Peekable;
         ^
error: aborting due to previous error

with

real    2m23.430s
user    0m0.000s
sys     0m0.030s

Maybe it's because my ./configure --enable-debug --enable-optimize, and per #24601 it's probably a Windows-only thing (I'd admit it's likely that these are 2 different things).

I'm using Windows 8.1 64 bit.

@bombless
Copy link
Contributor Author

I tested rustc 1.0.0-nightly (00978a987 2015-04-18) (built 2015-04-19) resulted in

real    2m41.611s
user    0m0.000s
sys     0m0.030s

(it seems that "-Z time-passes" is not useful in this case)

@bombless
Copy link
Contributor Author

Okay my local rustc take 10 minutes to compile now.

real    9m5.706s
user    0m0.000s
sys     0m0.015s

The thing is, last time I tried I was using a rustc without --enable-optimize (see #24405), so rustc didn't make it to compile within 1 hour.

edit: fixed a miss-copy&paste

@bombless bombless changed the title rustc hangs after "resolving dependency formats" rustc takes to much time to evaluate a struct type with recursion using Rc Apr 19, 2015
@bombless
Copy link
Contributor Author

FWIW: removing the main() makes the error go away.

@bombless bombless changed the title rustc takes to much time to evaluate a struct type with recursion using Rc rustc takes too much time to evaluate a struct type with recursion using Rc Apr 20, 2015
@steveklabnik steveklabnik added the I-slow Issue: Problems and improvements with respect to performance of generated code. label Apr 20, 2015
@steveklabnik
Copy link
Member

Triage: today, that commit fails to compile with a... hilarious error message:

[steve@becoming bfvm-rs ((ff03a10...))]$ rustup run nightly cargo build
   Compiling bencode v0.0.1 (file:///home/steve/tmp/bfvm-rs/bencode)
   Compiling sexp v0.0.1 (file:///home/steve/tmp/bfvm-rs/sexp)
   Compiling bf v0.0.1 (file:///home/steve/tmp/bfvm-rs/bf)
bencode/lib.rs:77:14: 77:24 warning: unnecessary parentheses around `for` head expression, #[warn(unused_parens)] on by default
bencode/lib.rs:77     for _ in (0 .. len) {
                               ^~~~~~~~~~
sexp/lib.rs:121:1: 123:2 warning: function is never used: `main`, #[warn(dead_code)] on by default
sexp/lib.rs:121 fn main() {
                ^
error: overflow evaluating the requirement `<std::slice::Iter<u8> as std::iter::Iterator>::Item` [E0275]
note: consider adding a `#![recursion_limit="128"]` attribute to your crate
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Cloned<std::slice::Iter<u8>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
note: required because of the requirements on the impl of `std::iter::Iterator` for `std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Chain<std::option::IntoIter<u8>, &mut std::iter::Peekable<std::iter::Cloned<std::slice::Iter<u8>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
error: aborting due to previous error
Build failed, waiting for other jobs to finish...
error: Could not compile `sexp`.

but it does so instantaneously. Considering this closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-slow Issue: Problems and improvements with respect to performance of generated code.
Projects
None yet
Development

No branches or pull requests

3 participants