about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/kind.rs10
-rw-r--r--src/test/compile-fail/vec-res-add.rs11
2 files changed, 21 insertions, 0 deletions
diff --git a/src/comp/middle/kind.rs b/src/comp/middle/kind.rs
index f4c23d3d4d7..da908f55429 100644
--- a/src/comp/middle/kind.rs
+++ b/src/comp/middle/kind.rs
@@ -189,6 +189,9 @@ fn need_shared_or_pinned_ctor(tcx: ty::ctxt, a: @ast::expr, descr: str) {
           ast::expr_tup(_) {
             true
           }
+          ast::expr_vec(exprs, _) {
+            true
+          }
           _ { false }
         }
     }
@@ -262,6 +265,13 @@ fn check_expr(tcx: ty::ctxt, e: @ast::expr) {
             need_shared_or_pinned_ctor(tcx, expr, "tuple parameter");
         }
       }
+      ast::expr_vec(exprs, _) {
+        // Putting pinned things into vectors is pretty useless since vector
+        // addition can't work (it's a copy)
+        for expr in exprs {
+            need_expr_kind(tcx, expr, ast::kind_shared, "vector element");
+        }
+      }
       _ { }
     }
 }
diff --git a/src/test/compile-fail/vec-res-add.rs b/src/test/compile-fail/vec-res-add.rs
new file mode 100644
index 00000000000..9389d793f71
--- /dev/null
+++ b/src/test/compile-fail/vec-res-add.rs
@@ -0,0 +1,11 @@
+// error-pattern:mismatched kinds
+
+resource r(i: int) {
+}
+
+fn main() {
+    // This can't make sense as it would copy the resources
+    let i <- [r(0)];
+    let j <- [r(1)];
+    let k = i + j;
+}
\ No newline at end of file