about summary refs log tree commit diff
path: root/src/rustc
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2012-08-20 20:05:00 -0400
committerBen Blum <bblum@andrew.cmu.edu>2012-08-20 20:05:00 -0400
commitc321cdbac6c4ddd9fedb89e1cc8bce1569347c5a (patch)
tree8f9b80118f57c9e887e0d796544e67b1f18a177f /src/rustc
parent849d5649ef0c113d75bf9f9b1c3ddcd9a2508e49 (diff)
Disallow deconstructing destructing structs (fixes #3147)
Diffstat (limited to 'src/rustc')
-rw-r--r--src/rustc/middle/typeck/check/alt.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/rustc/middle/typeck/check/alt.rs b/src/rustc/middle/typeck/check/alt.rs
index 82e8083a654..e99836e078b 100644
--- a/src/rustc/middle/typeck/check/alt.rs
+++ b/src/rustc/middle/typeck/check/alt.rs
@@ -270,6 +270,12 @@ fn check_pat(pcx: pat_ctxt, pat: @ast::pat, expected: ty::t) {
             }
         }
 
+        // Forbid pattern-matching structs with destructors.
+        if ty::has_dtor(tcx, class_id) {
+            tcx.sess.span_err(pat.span, ~"deconstructing struct not allowed \
+                                          in pattern (it has a destructor)");
+        }
+
         // Index the class fields.
         let field_map = std::map::box_str_hash();
         for class_fields.eachi |i, class_field| {