Skip to content

Monomorphizing an infinitely expanding fn generates an ICE #2220

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
nikomatsakis opened this issue Apr 16, 2012 · 0 comments
Closed

Monomorphizing an infinitely expanding fn generates an ICE #2220

nikomatsakis opened this issue Apr 16, 2012 · 0 comments
Labels
A-codegen Area: Code generation I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.

Comments

@nikomatsakis
Copy link
Contributor

This example causes an ICE, which I believe is due to the fact that it requires an infinite series of functions to compile monomorphically:

iface to_opt {
    fn to_option() -> option<self>;
}

impl of to_opt for uint {
    fn to_option() -> option<uint> {
        some(self)
    }
}

impl<T:copy> of to_opt for option<T> {
    fn to_option() -> option<option<T>> {
        some(self)
    }
}

fn function<T:to_opt>(counter: uint, t: T) {
    if counter > 0u {
        function(counter - 1u, t.to_option());
    }
}

fn main() {
    function(22u, 22u);
}

Clearly, I don't think we should compile such a thing. But we should give a better error. It's somewhat unclear to me where would be the best place to detect this pattern.

@ghost ghost assigned marijnh Apr 19, 2012
celinval pushed a commit to celinval/rust-dev that referenced this issue Jun 4, 2024
BoxyUwU pushed a commit to BoxyUwU/rust that referenced this issue Jan 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-codegen Area: Code generation I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.
Projects
None yet
Development

No branches or pull requests

2 participants