Skip to content

impl trait: rustc stack overflow #35706

Closed
@dwrensha

Description

@dwrensha

I get the error thread 'rustc' has overflowed its stack when I try to compile the following program:

[package]
name = "test-futures"
version = "0.1.0"
authors = ["David Renshaw"]

[dependencies]
futures = { git = "https://github.com/alexcrichton/futures-rs", rev="b7b728c00ef98d35e0d124abec6b84e3d8f9f3b3"}
futures-io = { git = "https://github.com/alexcrichton/futures-rs", rev="b7b728c00ef98d35e0d124abec6b84e3d8f9f3b3"}
futures-mio = { git = "https://github.com/alexcrichton/futures-rs", rev="b7b728c00ef98d35e0d124abec6b84e3d8f9f3b3"}

[[bin]]
name = "main"
path = "src/main.rs"
#![feature(conservative_impl_trait)]

extern crate futures;
extern crate futures_io;
extern crate futures_mio;

use futures::Future;
use futures::stream::Stream;
use futures_io::{IoStream};
use futures_mio::{TcpStream};

fn incoming_loop(incoming: IoStream<(TcpStream, ::std::net::SocketAddr)>)
                 -> impl Future<Item=(), Error=::std::io::Error> {
    incoming.into_future().then(|r| {
        match r {
            Ok((_stream, rest)) => {
                incoming_loop(rest)
            }
            Err(_) => {
                unimplemented!()
            }
        }
    })
}

pub fn main() {
    let mut l = futures_mio::Loop::new().unwrap();
    let srv = l.handle().tcp_listen(&"127.0.0.1:5000".parse().unwrap());

    let future = srv.and_then(move |server| {
        incoming_loop(server.incoming())
    });

    let _ = l.run(future);
}
$ rustc --version
rustc 1.12.0-nightly (1deb02ea6 2016-08-12)
$ cargo build
   Compiling test-futures v0.1.0 (file:///Users/dwrensha/Desktop/test-futures)

thread 'rustc' has overflowed its stack
fatal runtime error: stack overflow
error: Could not compile `test-futures`.

Metadata

Metadata

Assignees

Labels

C-bugCategory: This is a bug.I-crashIssue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions