diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2012-08-20 20:05:00 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2012-08-20 20:05:00 -0400 |
| commit | c321cdbac6c4ddd9fedb89e1cc8bce1569347c5a (patch) | |
| tree | 8f9b80118f57c9e887e0d796544e67b1f18a177f /src/rustc | |
| parent | 849d5649ef0c113d75bf9f9b1c3ddcd9a2508e49 (diff) | |
Disallow deconstructing destructing structs (fixes #3147)
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/typeck/check/alt.rs | 6 |
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| { |
