about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJakub Wieczorek <jakub@jakub.cc>2014-06-09 01:28:26 +0200
committerJakub Wieczorek <jakub@jakub.cc>2014-06-20 17:08:57 +0200
commit76f7eeef52fac46f74c84f4fc05073745c741cb3 (patch)
treea05e5bf83a40a78dad94f2eb813dce6caef1dafd /src
parent9dca26cf92b26ea878b142430d2309919a85aee6 (diff)
downloadrust-76f7eeef52fac46f74c84f4fc05073745c741cb3.tar.gz
rust-76f7eeef52fac46f74c84f4fc05073745c741cb3.zip
Fix #14393
String patterns should have a single constructor of arity 0.
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/check_match.rs2
-rw-r--r--src/test/run-pass/issue-14393.rs17
2 files changed, 19 insertions, 0 deletions
diff --git a/src/librustc/middle/check_match.rs b/src/librustc/middle/check_match.rs
index 44657147d05..9eda72b895d 100644
--- a/src/librustc/middle/check_match.rs
+++ b/src/librustc/middle/check_match.rs
@@ -240,6 +240,7 @@ fn construct_witness(cx: &MatchCheckCtxt, ctor: &ctor, pats: Vec<Gc<Pat>>, lty:
                     &vec(_) => PatVec(pats, None, vec!()),
                     _ => unreachable!()
                 },
+                ty::ty_str => PatWild,
                 _ => {
                     assert_eq!(pats.len(), 1);
                     PatRegion(pats.get(0).clone())
@@ -479,6 +480,7 @@ fn constructor_arity(cx: &MatchCheckCtxt, ctor: &ctor, ty: ty::t) -> uint {
                 vec(n) => n,
                 _ => 0u
             },
+            ty::ty_str => 0u,
             _ => 1u
         },
         ty::ty_enum(eid, _) => {
diff --git a/src/test/run-pass/issue-14393.rs b/src/test/run-pass/issue-14393.rs
new file mode 100644
index 00000000000..e97021b4869
--- /dev/null
+++ b/src/test/run-pass/issue-14393.rs
@@ -0,0 +1,17 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {
+    match ("", 1u) {
+        (_, 42u) => (),
+        ("", _) => (),
+        _ => ()
+    }
+}