Change:
To replicate: (Original report follows:) I had code like this: This causes rustc to spin forever. Here's the interesting part of the stack trace:
In my attempt to replicate the bug (on a Mac OS machine), this appears to ICE now rather than hang.
(The fact that it ICE's now rather than diverges is probably thanks to )
Reproduced with
This was fixed at some point, the error message is now: which is exactly what one would expect! Flagging as needstest.

Discussion:
<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. pub struct Foo<'a, A>(&'a A); impl<'a, A> Foo<'a, A> { pub fn new(a: &'a A) -> Foo<'a, A> { Foo(a) } } </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. pub enum Foo<'a> { A, B(&'a str), } </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. trait Serializable<'self, T> { //~ ERROR: no longer a special lifetime fn serialize(val : &'self T) -> ~[u8]; fn deserialize(repr : &[u8]) -> &'self T; } impl<'self> Serializable<str> for &'self str { fn serialize(val : &'self str) -> ~[u8] { ~[1] } fn deserialize(repr: &[u8]) -> &'self str { "hi" } } fn main() { println("hello"); let x = ~"foo"; let y = x; println(y); } </ins>

<ins> // opyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. #[path = "../compile-fail"] mod foo; //~ ERROR: illegal operation on a directory fn main() {} </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // xfail-fast pub use local_alias = local; mod local { } fn main() {} </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // xfail-fast // aux-build:issue-7178.rs extern mod cross_crate_self = "issue-7178"; fn main() { let _ = cross_crate_self::Foo::new(&1i); } </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // xfail-fast // aux-build:issue-8259.rs extern mod other = "issue-8259"; static a: other::Foo<'static> = other::A; fn main() {} </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. pub struct UninterpretedOption_NamePart { name_part: Option<~str>, } impl<'a> UninterpretedOption_NamePart { pub fn default_instance() -> &'static UninterpretedOption_NamePart { static instance: UninterpretedOption_NamePart = UninterpretedOption_NamePart { name_part: None, }; &'static instance } } pub fn main() {} </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. #[feature(macro_rules)]; enum T { A(int), B(uint) } macro_rules! test( ($e:expr) => ( fn foo(t: T) -> int { match t { A(y) => $e, B(y) => $e } } ) ) test!(10 + (y as int)) pub fn main() { foo(A(20)); } </ins>

<ins> // Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. // xfail-pretty #[feature(managed_boxes, macro_rules)]; pub trait bomb { fn boom(@self, Ident); } pub struct S; impl bomb for S { fn boom(@self, _: Ident) { } } pub struct Ident { name: uint } // macro_rules! int3( () => ( unsafe { asm!( "int3" ); } ) ) macro_rules! int3( () => ( { } ) ) fn Ident_new() -> Ident { int3!(); Ident {name: 0x6789ABCD } } pub fn light_fuse(fld: @bomb) { int3!(); let f = || { int3!(); fld.boom(Ident_new()); // *** 1 }; f(); } pub fn main() { let b = @S as @bomb; light_fuse(b); } </ins>