summaryrefslogtreecommitdiffstats
path: root/tests/run-make/extern-flag-disambiguates
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run-make/extern-flag-disambiguates')
-rw-r--r--tests/run-make/extern-flag-disambiguates/Makefile26
-rw-r--r--tests/run-make/extern-flag-disambiguates/a.rs6
-rw-r--r--tests/run-make/extern-flag-disambiguates/b.rs9
-rw-r--r--tests/run-make/extern-flag-disambiguates/c.rs9
-rw-r--r--tests/run-make/extern-flag-disambiguates/d.rs11
5 files changed, 61 insertions, 0 deletions
diff --git a/tests/run-make/extern-flag-disambiguates/Makefile b/tests/run-make/extern-flag-disambiguates/Makefile
new file mode 100644
index 000000000..e54a537ec
--- /dev/null
+++ b/tests/run-make/extern-flag-disambiguates/Makefile
@@ -0,0 +1,26 @@
+# ignore-cross-compile
+include ../tools.mk
+
+# Attempt to build this dependency tree:
+#
+# A.1 A.2
+# |\ |
+# | \ |
+# B \ C
+# \ | /
+# \|/
+# D
+#
+# Note that A.1 and A.2 are crates with the same name.
+
+all:
+ $(RUSTC) -C metadata=1 -C extra-filename=-1 a.rs
+ $(RUSTC) -C metadata=2 -C extra-filename=-2 a.rs
+ $(RUSTC) b.rs --extern a=$(TMPDIR)/liba-1.rlib
+ $(RUSTC) c.rs --extern a=$(TMPDIR)/liba-2.rlib
+ @echo before
+ $(RUSTC) --cfg before d.rs --extern a=$(TMPDIR)/liba-1.rlib
+ $(call RUN,d)
+ @echo after
+ $(RUSTC) --cfg after d.rs --extern a=$(TMPDIR)/liba-1.rlib
+ $(call RUN,d)
diff --git a/tests/run-make/extern-flag-disambiguates/a.rs b/tests/run-make/extern-flag-disambiguates/a.rs
new file mode 100644
index 000000000..2b1a31901
--- /dev/null
+++ b/tests/run-make/extern-flag-disambiguates/a.rs
@@ -0,0 +1,6 @@
+#![crate_name = "a"]
+#![crate_type = "rlib"]
+
+static FOO: usize = 3;
+
+pub fn token() -> &'static usize { &FOO }
diff --git a/tests/run-make/extern-flag-disambiguates/b.rs b/tests/run-make/extern-flag-disambiguates/b.rs
new file mode 100644
index 000000000..1d7a7339c
--- /dev/null
+++ b/tests/run-make/extern-flag-disambiguates/b.rs
@@ -0,0 +1,9 @@
+#![crate_name = "b"]
+#![crate_type = "rlib"]
+
+extern crate a;
+
+static FOO: usize = 3;
+
+pub fn token() -> &'static usize { &FOO }
+pub fn a_token() -> &'static usize { a::token() }
diff --git a/tests/run-make/extern-flag-disambiguates/c.rs b/tests/run-make/extern-flag-disambiguates/c.rs
new file mode 100644
index 000000000..3f9d143ed
--- /dev/null
+++ b/tests/run-make/extern-flag-disambiguates/c.rs
@@ -0,0 +1,9 @@
+#![crate_name = "c"]
+#![crate_type = "rlib"]
+
+extern crate a;
+
+static FOO: usize = 3;
+
+pub fn token() -> &'static usize { &FOO }
+pub fn a_token() -> &'static usize { a::token() }
diff --git a/tests/run-make/extern-flag-disambiguates/d.rs b/tests/run-make/extern-flag-disambiguates/d.rs
new file mode 100644
index 000000000..249c6a107
--- /dev/null
+++ b/tests/run-make/extern-flag-disambiguates/d.rs
@@ -0,0 +1,11 @@
+#[cfg(before)] extern crate a;
+extern crate b;
+extern crate c;
+#[cfg(after)] extern crate a;
+
+fn t(a: &'static usize) -> usize { a as *const _ as usize }
+
+fn main() {
+ assert_eq!(t(a::token()), t(b::a_token()));
+ assert!(t(a::token()) != t(c::a_token()));
+}