]> git.lizzy.rs Git - rust.git/commitdiff
librustc: Fix bug preventing cross-crate struct destructuring from working. rs=bugfix
authorPatrick Walton <pcwalton@mimiga.net>
Mon, 10 Dec 2012 20:37:50 +0000 (12:37 -0800)
committerPatrick Walton <pcwalton@mimiga.net>
Mon, 10 Dec 2012 20:38:31 +0000 (12:38 -0800)
src/librustc/middle/resolve.rs
src/test/auxiliary/struct_destructuring_cross_crate.rs [new file with mode: 0644]
src/test/run-pass/struct-destructuring-cross-crate.rs [new file with mode: 0644]

index 1e72e9dfff9b0bf0cd542a26367aa9c4b4b3b39a..992fe56734bdd0f9640cc2b1d58439573116489e 100644 (file)
@@ -4454,11 +4454,17 @@ struct in scope",
                             let class_def = def_class(class_id);
                             self.record_def(pattern.id, class_def);
                         }
+                        Some(definition @ def_class(class_id))
+                                if self.structs.contains_key(class_id) => {
+                            self.record_def(pattern.id, definition);
+                        }
                         Some(definition @ def_variant(_, variant_id))
                                 if self.structs.contains_key(variant_id) => {
                             self.record_def(pattern.id, definition);
                         }
-                        _ => {
+                        result => {
+                            debug!("(resolving pattern) didn't find struct \
+                                    def: %?", result);
                             self.session.span_err(
                                 path.span,
                                 fmt!("`%s` does not name a structure",
diff --git a/src/test/auxiliary/struct_destructuring_cross_crate.rs b/src/test/auxiliary/struct_destructuring_cross_crate.rs
new file mode 100644 (file)
index 0000000..12a13ee
--- /dev/null
@@ -0,0 +1,7 @@
+#[crate_type="lib"];
+
+pub struct S {
+    x: int,
+    y: int
+}
+
diff --git a/src/test/run-pass/struct-destructuring-cross-crate.rs b/src/test/run-pass/struct-destructuring-cross-crate.rs
new file mode 100644 (file)
index 0000000..aefebb1
--- /dev/null
@@ -0,0 +1,9 @@
+// xfail-fast
+extern mod struct_destructuring_cross_crate;
+
+fn main() {
+    let x = struct_destructuring_cross_crate::S { x: 1, y: 2 };
+    let struct_destructuring_cross_crate::S { x: a, y: b } = x;
+    assert a == 1;
+    assert b == 2;
+}