From 1f0656d9084970fcc02ba9c27277265b8b3b7217 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Mon, 19 Jul 2010 13:25:04 -0700 Subject: 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. --- src/boot/me/type.ml | 4 +--- src/test/compile-fail/constructor-as-cast.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/test/compile-fail/constructor-as-cast.rs (limited to 'src') diff --git a/src/boot/me/type.ml b/src/boot/me/type.ml index a631e58d..13f25778 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 00000000..2374cd2c --- /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); +} -- cgit v1.2.3