Skip to content
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

Compiler hangs when compiling mutually-defined enums #55625

Closed
varkor opened this issue Nov 2, 2018 · 6 comments
Closed

Compiler hangs when compiling mutually-defined enums #55625

varkor opened this issue Nov 2, 2018 · 6 comments
Labels
I-hang Issue: The compiler never terminates, due to infinite loops, deadlock, livelock, etc. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@varkor
Copy link
Member

varkor commented Nov 2, 2018

#[derive(Clone)]
enum A<T> {
    A1(B<T>),
    A2(B<Option<T>>),
}

#[derive(Clone)]
enum B<T> {
    B1(T),
    B2(Box<A<B<T>>>),
}

fn main() {}

The following fails to halt or emit any warnings or errors.

@pnkfelix
Copy link
Member

pnkfelix commented Nov 2, 2018

Back in rustc 1.20.0, we would explicitly end the compilation with an overflow error, as illustrated in the details block below.

% rustc +1.20.0 issue-55625.rs
error[E0320]: overflow while adding drop-check rules for A<T>
 --> issue-55625.rs:1:10
  |
1 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for A<T>
 --> issue-55625.rs:1:10
  |
1 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for A<T>
 --> issue-55625.rs:1:10
  |
1 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
error[E0320]: overflow while adding drop-check rules for B<T>
 --> issue-55625.rs:3:8
  |
3 |     A1(B<T>),
  |        ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for A<T>
 --> issue-55625.rs:1:10
  |
1 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for B<std::option::Option<T>>
 --> issue-55625.rs:4:8
  |
4 |     A2(B<Option<T>>),
  |        ^^^^^^^^^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
rror[E0320]: overflow while adding drop-check rules for B<T>
 --> issue-55625.rs:7:10
  |
7 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for B<T>
 --> issue-55625.rs:7:10
  |
7 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for B<T>
 --> issue-55625.rs:7:10
  |
7 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for B<T>
 --> issue-55625.rs:7:10
  |
7 | #[derive(Clone)]
  |          ^^^^^
  |
  = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::o\
ption::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Optio\
n<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opt\
ion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<\
B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::optio\
n::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<\
std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option:\
:Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error[E0320]: overflow while adding drop-check rules for std::boxed::Box<A<B<T>>>
  --> issue-55625.rs:10:8
   |
10 |     B2(Box<A<B<T>>>),
   |        ^^^^^^^^^^^^^
   |
   = note: overflowed on A<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::\
option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Opti\
on<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::op\
tion::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option\
<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::opti\
on::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B\
<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option\
::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<std::option::Option<B<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

error: aborting due to 11 previous errors

@pnkfelix
Copy link
Member

pnkfelix commented Nov 2, 2018

(Also, this might be an instance of a polymorphic recursion (#4287) in the types? Not 100% sure, I'd have to review the structure more carefully. I mention that mostly because we have historically had a less than stellar record in handling polymorphic recursion in an elegant manner...)


Update June 2019: it is polymorphic recursion

@varkor
Copy link
Member Author

varkor commented Nov 2, 2018

If you make minor adjustments to the definitions (e.g. removing a variant), you get the overflow error. It seems to be very volatile.

@pnkfelix pnkfelix added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Nov 2, 2018
@varkor varkor added the I-hang Issue: The compiler never terminates, due to infinite loops, deadlock, livelock, etc. label Dec 20, 2018
@pnkfelix
Copy link
Member

pnkfelix commented Jun 24, 2019

Inlining the definition of A into the definition of B yields this, which might be easier to reason about, as it more clearly shows that there is a nested datatype (aka non-regular recursion), and appears to exhibit the same behavior:

enum B<T> {
    B1(T),
    B2(Box<B<B<T>>>),
    B3(Box<B<Option<B<T>>>>),
}

Note also that to see the hang without using #[derive(Clone)], you can just make a function that has a local that might hold a B, like so (play):

fn main() {
    let b1: Option<B<&'static str>>;
}

That seems to be enough to cause the drop-check rules analysis to fire (and then get into trouble).

@pnkfelix
Copy link
Member

(something a tiny bit worrisome: for some reason, the hang that I see with a let local definition does not occur if the same type is provided as a function's formal argument, like so (play):

fn boo(b: Option<B<&'static str>>) {
    // let b1 = b; // uncommenting this brings the hang back.
}

@Mark-Simulacrum
Copy link
Member

Mark-Simulacrum commented Sep 18, 2019

I'm going to close in favor of #4287 which is the same bug (hang on dropck)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-hang Issue: The compiler never terminates, due to infinite loops, deadlock, livelock, etc. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

3 participants