From 5e8ef74e22eaf49518cd93838ec8b2843bc916a9 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 6 Jun 2012 14:20:31 -0700 Subject: [PATCH] Revert "Revert "Forbid classes with no fields" due to test failures" This reverts commit e56a6e8cb0ca2be26bb71918447459865803a630. --- src/rustc/middle/typeck/check.rs | 6 ++++++ src/test/compile-fail/issue-2509-a.rs | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/test/compile-fail/issue-2509-a.rs diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index 70167192afc8..b3f7c5a93885 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -387,6 +387,12 @@ fn check_item(ccx: @crate_ctxt, it: @ast::item) { }; // typecheck the members for members.each {|m| check_class_member(class_ccx, class_t, m); } + // Check that there's at least one field + let (fields,_) = split_class_items(members); + if fields.len() < 1u { + ccx.tcx.sess.span_err(it.span, "A class must have at least one \ + field"); + } // Check that the class is instantiable check_instantiable(ccx.tcx, it.span, it.id); } diff --git a/src/test/compile-fail/issue-2509-a.rs b/src/test/compile-fail/issue-2509-a.rs new file mode 100644 index 000000000000..a500d249c07a --- /dev/null +++ b/src/test/compile-fail/issue-2509-a.rs @@ -0,0 +1,9 @@ +class c { //! ERROR A class must have at least one field + new() { } +} + +fn main() { + let a = c(); + let x = [a]; + let _y = x[0]; +}