diff --git a/src/rustc/middle/liveness.rs b/src/rustc/middle/liveness.rs index cc8b0383e36..9ad4009c513 100644 --- a/src/rustc/middle/liveness.rs +++ b/src/rustc/middle/liveness.rs @@ -1669,7 +1669,14 @@ impl check_methods for @liveness { #fmt["illegal move from field `%s`", *name]); ret; } - vk_local(*) | vk_self | vk_implicit_ret { + vk_self { + self.tcx.sess.span_err( + move_span, + "illegal move from self (cannot move out of a field of \ + self)"); + ret; + } + vk_local(*) | vk_implicit_ret { self.tcx.sess.span_bug( move_span, #fmt["illegal reader (%?) for `%?`", diff --git a/src/test/compile-fail/issue-2590.rs b/src/test/compile-fail/issue-2590.rs new file mode 100644 index 00000000000..c27fee9f8a8 --- /dev/null +++ b/src/test/compile-fail/issue-2590.rs @@ -0,0 +1,13 @@ +import dvec::dvec; + +type parser = { + tokens: dvec, +}; + +impl parser for parser { + fn parse() -> [mut int] { + dvec::unwrap(self.tokens) //! ERROR illegal move from self + } +} + +fn main() {}