about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2010-07-19 13:25:04 -0700
committerGraydon Hoare <graydon@mozilla.com>2010-07-19 13:25:04 -0700
commit1f0656d9084970fcc02ba9c27277265b8b3b7217 (patch)
tree6e01b1b764e009ac48a12666f5d270faf056067f /src
parentf1db420317a53eacf3dfb08b8121ea06ad1ca5b5 (diff)
Add a test for an obvious-seeming (but not actually legal) kind of cast attempted in issue #115, downgrade bug to an err in type.ml so you get a better message.
Diffstat (limited to 'src')
-rw-r--r--src/boot/me/type.ml4
-rw-r--r--src/test/compile-fail/constructor-as-cast.rs13
2 files changed, 14 insertions, 3 deletions
diff --git a/src/boot/me/type.ml b/src/boot/me/type.ml
index a631e58dd64..13f25778a6e 100644
--- a/src/boot/me/type.ml
+++ b/src/boot/me/type.ml
@@ -261,9 +261,7 @@ let check_stmt (cx:Semant.ctxt) : (fn_ctx -> Ast.stmt -> unit) =
           else
             LTYPE_poly ((Array.map (fun p -> p.Common.node) params), ty)
       | Ast.MOD_ITEM_type _ ->
-          Common.bug
-            ()
-            "internal_check_mod_item_decl: unexpected mod item type"
+          Common.err None "Type-item used in non-type context"
   in
 
   let rec internal_check_base_lval
diff --git a/src/test/compile-fail/constructor-as-cast.rs b/src/test/compile-fail/constructor-as-cast.rs
new file mode 100644
index 00000000000..2374cd2ce37
--- /dev/null
+++ b/src/test/compile-fail/constructor-as-cast.rs
@@ -0,0 +1,13 @@
+// error-pattern: non-type context
+type base =
+  obj {
+    fn foo();
+  };
+obj derived() {
+  fn foo() {}
+  fn bar() {}
+}
+fn main() {
+  let derived d = derived();
+  let base b = base(d);
+}