Closed
Description
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
Labels
No labels