Closed
Description
Summary of the bug is in the title
I tried with this code :
enum Event {
ENTRY,
EXIT,
}
struct Data;
struct State<'a> {
f: Fn(&mut Data, &Event) -> &'a Signal<'a>,
}
enum Signal<'a> {
UNHANDLED,
HANDLED,
TRAN(Fn(&mut Data, &Event) -> &'a Signal<'a>),
}
struct FSM<'a> {
current : Option<&'a State<'a>>,
data : Data,
}
impl <'a> FSM<'a> {
pub fn start(&mut self) {
match self.current {
None => panic!("Ola !"),
Some(current) => {(current.f)(&mut self.data, &Event::ENTRY);},
}
}
pub fn event(&mut self,event : Event) {
let signal = (self.current.unwrap().f)(&mut self.data, &event);
}
}
I expected rustc would have kept yelling at me about errors in my code :)
Instead, I get the following output
[miK@i5760-miK bug]$ cargo build --verbose
Compiling hello_world v0.0.1 (file:///home/miK/workspaces/Rust/bug)
Running `rustc src/lib.rs --crate-name hello_world --crate-type lib -g --out-dir /home/miK/workspaces/Rust/bug/target/debug --emit=dep-info,link -L dependency=/home/miK/workspaces/Rust/bug/target/debug -L dependency=/home/miK/workspaces/Rust/bug/target/debug/deps`
src/lib.rs:2:1: 5:2 warning: enum is never used: `Event`, #[warn(dead_code)] on by default
src/lib.rs:2 enum Event {
src/lib.rs:3 ENTRY,
src/lib.rs:4 EXIT,
src/lib.rs:5 }
src/lib.rs:7:1: 7:13 warning: struct is never used: `Data`, #[warn(dead_code)] on by default
src/lib.rs:7 struct Data;
^~~~~~~~~~~~
src/lib.rs:9:1: 11:2 warning: struct is never used: `State`, #[warn(dead_code)] on by default
src/lib.rs:9 struct State<'a> {
src/lib.rs:10 f: Fn(&mut Data, &Event) -> &'a Signal<'a>,
src/lib.rs:11 }
src/lib.rs:13:1: 17:2 warning: enum is never used: `Signal`, #[warn(dead_code)] on by default
src/lib.rs:13 enum Signal<'a> {
src/lib.rs:14 UNHANDLED,
src/lib.rs:15 HANDLED,
src/lib.rs:16 TRAN(Fn(&mut Data, &Event) -> &'a Signal<'a>),
src/lib.rs:17 }
src/lib.rs:19:1: 22:2 warning: struct is never used: `FSM`, #[warn(dead_code)] on by default
src/lib.rs:19 struct FSM<'a> {
src/lib.rs:20 current : Option<&'a State<'a>>,
src/lib.rs:21 data : Data,
src/lib.rs:22 }
src/lib.rs:20:5: 20:36 warning: struct field is never used: `current`, #[warn(dead_code)] on by default
src/lib.rs:20 current : Option<&'a State<'a>>,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/lib.rs:21:5: 21:16 warning: struct field is never used: `data`, #[warn(dead_code)] on by default
src/lib.rs:21 data : Data,
^~~~~~~~~~~
src/lib.rs:26:5: 32:6 warning: method is never used: `start`, #[warn(dead_code)] on by default
src/lib.rs:26 pub fn start(&mut self) {
src/lib.rs:27 match self.current {
src/lib.rs:28 None => panic!("Ola !"),
src/lib.rs:29 Some(current) => {(current.f)(&mut self.data, &Event::ENTRY);},
src/lib.rs:30 }
src/lib.rs:31
...
src/lib.rs:34:5: 36:6 warning: method is never used: `event`, #[warn(dead_code)] on by default
src/lib.rs:34 pub fn event(&mut self,event : Event) {
src/lib.rs:35 let signal = (self.current.unwrap().f)(&mut self.data, &event);
src/lib.rs:36 }
src/lib.rs:35:13: 35:19 warning: unused variable: `signal`, #[warn(unused_variables)] on by default
src/lib.rs:35 let signal = (self.current.unwrap().f)(&mut self.data, &event);
^~~~~~
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'Unexpected type returned from struct_tail: Signal for ty=Signal', /home/rustbuild/src/rust-buildbot/slave/stable-dist-rustc-linux/build/src/librustc_trans/trans/type_of.rs:366
stack backtrace:
1: 0x7f4a6dfdf529 - sys::backtrace::write::ha3b8868b13c6f5b594r
2: 0x7f4a6dfe7449 - panicking::on_panic::h0d4f0a7bb69824a9iJw
3: 0x7f4a6dfa8242 - rt::unwind::begin_unwind_inner::h6eae1ff9ccde81e1sow
4: 0x7f4a6dfa8fd7 - rt::unwind::begin_unwind_fmt::h1b64aa0dc7f97d91ynw
5: 0x7f4a6cd84041 - trans::type_of::in_memory_type_of::h8394fa8ab4d78a04xNL
6: 0x7f4a6ce4c42f - trans::type_of::type_of_rust_fn::hd912a43908d09915gBL
7: 0x7f4a6cd9092b - trans::declare::declare_rust_fn::h9be6db25c327fe6dRNz
8: 0x7f4a6cea5442 - trans::meth::trans_object_shim::hb599a1c833cfc4e8BwJ
9: 0x7f4a6cdee7a8 - trans::meth::trans_method_callee::hccc5b8b91d6ac958o2I
10: 0x7f4a6ce6f845 - trans::callee::trans_call_inner::h3335664676729396018
11: 0x7f4a6ce4fc13 - trans::expr::trans_rvalue_dps_unadjusted::h6f98c3ba8230a493FkB
12: 0x7f4a6ce245dc - trans::expr::trans_into::h5caadbac159cf74aXaA
13: 0x7f4a6ce2414a - trans::controlflow::trans_stmt_semi::h1d1c29c8dbdd3907D2u
14: 0x7f4a6cda84ba - trans::controlflow::trans_block::he9bca081d3f8c1c7z3u
15: 0x7f4a6ce4e45d - trans::expr::trans_rvalue_dps_unadjusted::h6f98c3ba8230a493FkB
16: 0x7f4a6ce245dc - trans::expr::trans_into::h5caadbac159cf74aXaA
17: 0x7f4a6ce8b007 - trans::_match::trans_match_inner::h57034bb4c897c3296uI
18: 0x7f4a6ce4e425 - trans::expr::trans_rvalue_dps_unadjusted::h6f98c3ba8230a493FkB
19: 0x7f4a6ce245dc - trans::expr::trans_into::h5caadbac159cf74aXaA
20: 0x7f4a6cda8806 - trans::controlflow::trans_block::he9bca081d3f8c1c7z3u
21: 0x7f4a6cda7121 - trans::base::trans_closure::h502004b16ea01ff9jHh
22: 0x7f4a6cda8dfa - trans::base::trans_fn::h5f2be6a1df79e5691Rh
23: 0x7f4a6cdac652 - trans::base::trans_item::hfa0f4f4b559a2855dgi
24: 0x7f4a6cdb9a32 - trans::base::trans_crate::hf005d8f63d50ea8004i
25: 0x7f4a6e537466 - driver::phase_4_translate_to_llvm::h86819ae7902c932bnOa
26: 0x7f4a6e513266 - driver::compile_input::h6e596544d26b4394Qba
27: 0x7f4a6e5c9041 - run_compiler::haa6c0289fab7415475b
28: 0x7f4a6e5c6892 - boxed::F.FnBox<A>::call_box::h10721825727138786690
29: 0x7f4a6e5c5e59 - rt::unwind::try::try_fn::h6014602198652783625
30: 0x7f4a6e05fb58 - rust_try_inner
31: 0x7f4a6e05fb45 - rust_try
32: 0x7f4a6e5c60f4 - boxed::F.FnBox<A>::call_box::h5510246712457526188
33: 0x7f4a6dfe61e1 - sys::thread::Thread::new::thread_start::h11fbc90f6ba541f9zvv
34: 0x7f4a68877ee4 - start_thread
35: 0x7f4a6dc29d1c - clone
36: 0x0 - <unknown>
Could not compile `hello_world`.
Caused by:
Process didn't exit successfully: `rustc src/lib.rs --crate-name hello_world --crate-type lib -g --out-dir /home/miK/workspaces/Rust/bug/target/debug --emit=dep-info,link -L dependency=/home/miK/workspaces/Rust/bug/target/debug -L dependency=/home/miK/workspaces/Rust/bug/target/debug/deps` (exit code: 101)
Metadata
[miK@i5760-miK bug]$ rustc --verbose --version
rustc 1.1.0 (35ceea399 2015-06-19)
binary: rustc
commit-hash: 35ceea3997c79a3b7562e89b462ab76af5b86b22
commit-date: 2015-06-19
host: x86_64-unknown-linux-gnu
release: 1.1.0