Issue 1:
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

Issue 2:
enum Foo {
Bar(int, [int]),
}

fn main() {
// Either of these lines can cause the ICE
let _x: &(int, [int]);
let _y: &Foo;
}

Backtrace:

1: 0x7f2a127e8580 - rt::backtrace::imp::write::h0180e7ded76a3ff2c0q
2: 0x7f2a127eb770 - failure::on_fail::h3f169393c89b5f90Tlr
3: 0x7f2a12fd24f0 - unwind::begin_unwind_inner::haeb9517b5061bc86Zie
4: 0x7f2a133ad670 - unwind::begin_unwind::h17017358962417336117
5: 0x7f2a13803a20 - middle::ty::unsized_part_of_type::h8eae6d239e9b7af3tnG
6: 0x7f2a138037c0 - middle::trans::type_of::type_of::type_of_unsize_info::h67819f63aa2acfb5Xh9
7: 0x7f2a1377b050 - middle::trans::type_of::type_of::h3c89a1738d384c45Ih9
8: 0x7f2a1377b050 - middle::trans::type_of::type_of::h3c89a1738d384c45Ih9
9: 0x7f2a137b0860 - middle::trans::base::alloc_ty::h5485998eeb61d023mTd
10: 0x7f2a13859870 - middle::trans::_match::mk_binding_alloca::h11628361498234501597
11: 0x7f2a1385bdf0 - middle::trans::_match::store_local::create_dummy_locals::closure.119283
12: 0x7f2a13681560 - middle::pat_util::pat_bindings::closure.112016
13: 0x7f2a0ea1ccb0 - ast_util::walk_pat::hc858153057fb5965oRB
14: 0x7f2a138205f0 - middle::trans::_match::store_local::h9195017fe21b4124A2h
15: 0x7f2a13772d10 - middle::trans::base::init_local::h5e8a493dc2ae05b1WFd
16: 0x7f2a13772220 - middle::trans::controlflow::trans_stmt::hf26d5cee55a6056blhY
17: 0x7f2a13773c40 - middle::trans::controlflow::trans_block::h004dea36138a75c8wmY
18: 0x7f2a13829560 - middle::trans::base::trans_closure::h655acfc433ac13fevye
19: 0x7f2a13764670 - middle::trans::base::trans_fn::hf0a444fa9ff43aebiKe
20: 0x7f2a1375f9b0 - middle::trans::base::trans_item::hda4d4160cb2b58dfi2e
21: 0x7f2a138341f0 - middle::trans::base::trans_crate::hff0f87c98e6356c8JWf
22: 0x7f2a13c058d0 - driver::driver::phase_4_translate_to_llvm::h8223ee9d7ab4951cpzy
23: 0x7f2a13bfd280 - driver::driver::compile_input::hfa4fd95c9e6a2ceeQby
24: 0x7f2a13c8f0a0 - driver::run_compiler::h32bdccca6ed9465cJIB
25: 0x7f2a13c8efb0 - driver::main_args::closure.138206
26: 0x7f2a13ca1240 - task::TaskBuilder<S>::try_future::closure.139324
27: 0x7f2a13ca1040 - task::TaskBuilder<S>::spawn_internal::closure.139301
28: 0x7f2a146dcf10 - task::spawn_opts::closure.8369
29: 0x7f2a1302af90 - rust_try_inner
30: 0x7f2a1302af80 - rust_try
31: 0x7f2a12fcfb20 - unwind::try::h03d8d1d4cb0de0c1f7d
32: 0x7f2a12fcf8e0 - task::Task::run::hafab6bcab45e61e5zdd
33: 0x7f2a146dcc70 - task::spawn_opts::closure.8315
34: 0x7f2a12fd16e0 - thread::thread_start::hba588af1f803bb5blCd
35: 0x7f2a1227f0c0 - start_thread
36: 0x7f2a12c99359 - __clone
37: 0x0 - <unknown>

This seems to occur when using a non-struct type that contains an unsized type. This is probably because unsized_part_of_type only handles ty_struct and the base unsized types. This should be extended to handle enums and tuples as well.