about summary refs log tree commit diff
path: root/src/comp/util
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2011-07-11 17:26:40 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2011-07-11 17:32:00 -0700
commite1620def9f4e1da73f798f5deb3d8dbe410fce90 (patch)
tree9be1f3027af3c566630cbade4f9e4898b2ad99e0 /src/comp/util
parent9fe03b3c556eddd99887e7968f9757f7bdf91cc1 (diff)
downloadrust-e1620def9f4e1da73f798f5deb3d8dbe410fce90.tar.gz
rust-e1620def9f4e1da73f798f5deb3d8dbe410fce90.zip
In typeck, check for dynamically sized by-value arguments to thunks
A check in trans didn't have a corresponding check in typeck, causing
some programs (to wit, compile-fail/chan-parameterized-args.rs - part of this
commit) to fail with an assertion failure in trans instead of a type error.
Fixed it. In short, arguments that are future thunk arguments (any spawn
arguments, and _ arguments in bind) need to either not contain type params
or type vars, or be by-reference.

Closes #665.
Diffstat (limited to 'src/comp/util')
-rw-r--r--src/comp/util/common.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/comp/util/common.rs b/src/comp/util/common.rs
index 04243a204c9..c2281739bf5 100644
--- a/src/comp/util/common.rs
+++ b/src/comp/util/common.rs
@@ -182,6 +182,19 @@ fn any[T](&fn(&T) -> bool f, &vec[T] v) -> bool {
     ret false;
 }
 
+tag call_kind {
+    kind_call;
+    kind_spawn;
+    kind_bind;
+}
+
+fn call_kind_str(call_kind c) -> str {
+    alt (c) {
+        case (kind_call)  { "Call" }
+        case (kind_spawn) { "Spawn" }
+        case (kind_bind)  { "Bind" }
+    }
+}
 //
 // Local Variables:
 // mode: rust