about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2013-08-07 11:52:33 -0700
committerCorey Richardson <corey@octayn.net>2013-08-07 22:41:13 -0400
commitffd80aa276224c8343d3f8b0942c7497b16df10f (patch)
treec917755e174cf9e04b59e17756f62fc204dbefaf /src/test
parentcc160a00285b2856610b31004eee7704ca0806d1 (diff)
downloadrust-ffd80aa276224c8343d3f8b0942c7497b16df10f.tar.gz
rust-ffd80aa276224c8343d3f8b0942c7497b16df10f.zip
Fix unit structs in cross-crate situtations
Diffstat (limited to 'src/test')
-rw-r--r--src/test/auxiliary/xcrate_unit_struct.rs31
-rw-r--r--src/test/compile-fail/xcrate-unit-struct.rs21
-rw-r--r--src/test/run-pass/xcrate-unit-struct.rs35
3 files changed, 87 insertions, 0 deletions
diff --git a/src/test/auxiliary/xcrate_unit_struct.rs b/src/test/auxiliary/xcrate_unit_struct.rs
new file mode 100644
index 00000000000..a72bf307e5d
--- /dev/null
+++ b/src/test/auxiliary/xcrate_unit_struct.rs
@@ -0,0 +1,31 @@
+// Copyright 2013 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.
+
+#[crate_type = "lib"];
+
+// used by the rpass test
+
+pub struct Struct;
+
+pub enum Unit {
+    Unit,
+    Argument(Struct)
+}
+
+// used by the cfail test
+
+pub struct StructWithFields {
+    foo: int,
+}
+
+pub enum EnumWithVariants {
+    EnumVariant,
+    EnumVariantArg(int)
+}
diff --git a/src/test/compile-fail/xcrate-unit-struct.rs b/src/test/compile-fail/xcrate-unit-struct.rs
new file mode 100644
index 00000000000..e71a0f05dff
--- /dev/null
+++ b/src/test/compile-fail/xcrate-unit-struct.rs
@@ -0,0 +1,21 @@
+// Copyright 2013 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.
+
+// aux-build:xcrate_unit_struct.rs
+
+// Make sure that when we have cross-crate unit structs we don't accidentally
+// make values out of cross-crate structs that aren't unit.
+
+extern mod xcrate_unit_struct;
+
+fn main() {
+    let _ = xcrate_unit_struct::StructWithFields; //~ ERROR: unresolved name
+    let _ = xcrate_unit_struct::Struct;
+}
diff --git a/src/test/run-pass/xcrate-unit-struct.rs b/src/test/run-pass/xcrate-unit-struct.rs
new file mode 100644
index 00000000000..58676f7cd70
--- /dev/null
+++ b/src/test/run-pass/xcrate-unit-struct.rs
@@ -0,0 +1,35 @@
+// Copyright 2013 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.
+
+// aux-build:xcrate_unit_struct.rs
+
+extern mod xcrate_unit_struct;
+
+use std::util;
+
+static s1: xcrate_unit_struct::Struct = xcrate_unit_struct::Struct;
+static s2: xcrate_unit_struct::Unit = xcrate_unit_struct::Unit;
+static s3: xcrate_unit_struct::Unit =
+                xcrate_unit_struct::Argument(xcrate_unit_struct::Struct);
+static s4: xcrate_unit_struct::Unit = xcrate_unit_struct::Argument(s1);
+
+fn f1(_: xcrate_unit_struct::Struct) {}
+fn f2(_: xcrate_unit_struct::Unit) {}
+
+fn main() {
+    f1(xcrate_unit_struct::Struct);
+    f2(xcrate_unit_struct::Unit);
+    f2(xcrate_unit_struct::Argument(xcrate_unit_struct::Struct));
+
+    f1(s1);
+    f2(s2);
+    f2(s3);
+    f2(s4);
+}