Issue 1:
(gdb) bt
#0 0x00007ffff7727630 in rust_fail ()
from /usr/bin/../lib/libstd-966edb7e-0.10-pre.so
#1 0x00007ffff75cbd39 in rt::unwind::Unwinder::begin_unwind::h3b1cb9a3eb8d991bXOaD::v0.10.pre () from /usr/bin/../lib/libstd-966edb7e-0.10-pre.so
#2 0x00007ffff2dd6aa8 in rt::unwind::begin_unwind::hd9a1d253d4a33d5aaQ::v0.10.pre () from /usr/bin/../lib/librustc-0d83f02f-0.10-pre.so
#3 0x00007ffff3976efb in option::Option::unwrap::h144931b46c7e68dblhaV::v0.10.pre () from /usr/bin/../lib/librustc-0d83f02f-0.10-pre.so
#4 0x00007ffff3869351 in metadata::creader::CrateLoader$Loader::load_crate::he9aa556ffd45c033OYae::v0.10.pre ()
from /usr/bin/../lib/librustc-0d83f02f-0.10-pre.so
#5 0x00007ffff62db6ab in ext::expand::load_extern_macros::h9b911bdebace7cc7aw::v0.10.pre () from /usr/bin/../lib/libsyntax-ebc61d75-0.10-pre.so
#6 0x00007ffff62db384 in ext::expand::expand_view_item::hf01392e46aef41d3an::v0.10.pre () from /usr/bin/../lib/libsyntax-ebc61d75-0.10-pre.so
#7 0x00007ffff62c9434 in ext::expand::Folder$MacroExpander::fold_view_item::hc549b12bf2909253TxaX::v0.10.pre ()
from /usr/bin/../lib/libsyntax-ebc61d75-0.10-pre.so
#8 0x00007ffff62c93c8 in fold::noop_fold_mod::anon::expr_fn::aVaW ()
from /usr/bin/../lib/libsyntax-ebc61d75-0.10-pre.so
#9 0x00007ffff62c98d6 in iter::Map::do_map::hcd7f6781e31a9c951za2::v0.10.pre
() from /usr/bin/../lib/libsyntax-ebc61d75-0.10-pre.so
#10 0x00007ffff62c9818 in iter::Iterator$Map::next::h9083bbf0fab46094r6a1::v0.10

Issue 2:
Updated Bug Report

We do not provide enough user feedback explaining why a type is non-copyable. The error messages just say "error: copying a value of non-copyable type Type"

Things have gotten a bit better since this bug was filed, in part because our story has changed somewhat (we no longer implicitly copy vectors/strings; we no longer have @fn), but we still do not have great user feedback, particularly with respect to explaining how a type ended up being put into the "non-copyable" bucket.

Sample Code Enumerating Non-copyable Cases

// Issue 2634
// Better explanations for why non-implicitly copyable things are that way.

use NC = std::util::NonCopyable;
use NonCopyExamples::*;

mod NonCopyExamples {
use NC = std::util::NonCopyable;
enum Void {}

pub struct S { a: int, nc: NC }
pub struct T { a: int, own: ~int }
pub struct U<'self> { a: int, mu: &'self mut int }
pub struct V { a: int }
impl Drop for V { fn drop(&mut self) { } }
pub struct W<'self> { a: int, fun: &'self fn () }
pub struct X { a: int, oyvey: Option<Void> } // (strcat: maybe bug)
}

static mut global_u : int = 3;

fn fun() { println("Hello World"); }

fn construct() -> (S,T,U,V,W,X) {
let s = S{ a: 1, nc: NC };
let t = T{ a: 2, own: ~2 };
let u = unsafe { U{ a: 3, mu: &mut global_u } };
let v = V{ a: 4 };
let w = W{ a: 5, fun: fun };
let x = X{ a: 6, oyvey: None };
(s,t,u,v,w,x)
}

fn g<A>(a: A) { println!("{:?}", a); }

#[cfg(not(no_funcall_twice))]
fn funcall_twice() {
use NonCopyExamples::*;

let (s,t,u,v,w,x) = construct();

g(s); g(s);
g(t); g(t);
g(u); g(u);
g(v); g(v);
g(w); g(w);
g(x); g(x);
}
#[cfg(no_funcall_twice)] fn funcall_twice() { }

#[cfg(not(no_assign))]
fn assign() {
use NonCopyExamples::*;

let (s,t,u,v,w,x) = construct();

let s_1 = s; let s_2 = s;
let t_1 = t; let t_2 = t;
let u_1 = u; let u_2 = u;
let v_1 = v; let v_2 = v;
let w_1 = w; let w_2 = w;
let x_1 = x; let x_2 = x;
}
#[cfg(no_assign)] fn assign() { }

#[cfg(not(no_repeat))]
fn repeat() {
use NonCopyExamples::*;

let (s,t,u,v,w,x) = construct();

let ss = [s, ..2];
let tt = [t, ..2];
let uu = [u, ..2];
let vv = [v, ..2];
let ww = [w, ..2];
let xx = [x, ..2];
}
#[cfg(no_repeat)] fn repeat() { }

fn main() {
funcall_twice();
assign();
repeat();
}

Original Bug Report follows

I think the error messages would be clearer if they were along these lines:

foo.rs:10: warning: copying a value of type '~str' requires memory allocation
foo.rs:10: note: suggest use of 'move' to avoid this copy
foo.rs:20: warning: copying a value of type `BlockContext` duplicates mutable fields
foo.rs:20: note: use 'copy' if the copy is desired
foo.rs:30: warning: call to 'f' might copy values of type '~str', incurring memory allocation
foo.rs:30: note: see 'copy' interface bound here
foo.rs:40: warning: call to 'g' might copy values of type '~BlockContext', incurring memory allocation and duplicating mutable fields
foo.rs:40: note: see 'copy' interface bound here