Skip to content

syntax const_eval ICE #6047

@jbclements

Description

@jbclements

Our current pattern syntax allows arbitrary expressions in some locations; these aren't checked properly, and result in ICEs in const_eval.rs.

to see this, compile this file:

fn f() -> int { 14 }

fn main() {
    match 15 {
        3 .. (f()) => io::println(~"success"),
        _ => fail!()
    }
}

this results in the output:

jclements-09740:/tmp clements> RUST_LOG=1 rustc /tmp/foo.rs
Running /usr/local/bin/rustc:
rust: task failed at 'Unsupported constant expr', /Users/clements/rust/src/librustc/middle/const_eval.rs:251
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug
note: try running with RUST_LOG=rustc=1,::rt::backtrace to get further details and report the results to github.com/mozilla/rust/issues
rust: task failed at 'explicit failure', /Users/clements/rust/src/librustc/rustc.rc:356
rust: domain main @0x7fe78b819a10 root task failed

Honestly, the existing text ("unsupported constant expr") is pretty good here; if there's source information at this point, fixing this may simply be a question of turning fail! into self.fatal_error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions