about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2019-05-27 12:08:10 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2019-05-27 12:10:58 +0200
commitc8887abf20f72631eeeb72eaf14fa27fc4e550fa (patch)
treedb6cfececf4103517656b532c4b7e861153ed73d /src
parent4e60f53280c34d35c29b007b28e32b9a6f695d1b (diff)
downloadrust-c8887abf20f72631eeeb72eaf14fa27fc4e550fa.tar.gz
rust-c8887abf20f72631eeeb72eaf14fa27fc4e550fa.zip
Tests for external linkage symbol collision check.
Fix #61232
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/linkage-attr/auxiliary/def_colliding_external.rs7
-rw-r--r--src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs21
-rw-r--r--src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.stderr8
-rw-r--r--src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs23
-rw-r--r--src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr8
5 files changed, 67 insertions, 0 deletions
diff --git a/src/test/ui/linkage-attr/auxiliary/def_colliding_external.rs b/src/test/ui/linkage-attr/auxiliary/def_colliding_external.rs
new file mode 100644
index 00000000000..bbbfc485791
--- /dev/null
+++ b/src/test/ui/linkage-attr/auxiliary/def_colliding_external.rs
@@ -0,0 +1,7 @@
+#![feature(linkage)]
+#![crate_type = "lib"]
+
+extern {
+    #[linkage="external"]
+    pub static collision: *const i32;
+}
diff --git a/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs b/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs
new file mode 100644
index 00000000000..85a9a336b0d
--- /dev/null
+++ b/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs
@@ -0,0 +1,21 @@
+// rust-lang/rust#61232: We used to ICE when trying to detect a
+// collision on the symbol generated for the external linkage item in
+// an extern crate.
+
+// aux-build:def_colliding_external.rs
+
+extern crate def_colliding_external as dep1;
+
+#[no_mangle]
+pub static _rust_extern_with_linkage_collision: i32 = 0;
+
+mod dep2 {
+    #[no_mangle]
+    pub static collision: usize = 0;
+}
+
+fn main() {
+    unsafe {
+       println!("{:p}", &dep1::collision);
+    }
+}
diff --git a/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.stderr b/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.stderr
new file mode 100644
index 00000000000..dcb954a4bc0
--- /dev/null
+++ b/src/test/ui/linkage-attr/linkage-detect-extern-generated-name-collision.stderr
@@ -0,0 +1,8 @@
+error: symbol `collision` is already defined
+  --> $DIR/auxiliary/def_colliding_external.rs:6:5
+   |
+LL |     pub static collision: *const i32;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs b/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs
new file mode 100644
index 00000000000..dc15798e16a
--- /dev/null
+++ b/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs
@@ -0,0 +1,23 @@
+#![feature(linkage)]
+
+mod dep1 {
+    extern {
+        #[linkage="external"]
+        #[no_mangle]
+        pub static collision: *const i32; //~ ERROR symbol `collision` is already defined
+    }
+}
+
+#[no_mangle]
+pub static _rust_extern_with_linkage_collision: i32 = 0;
+
+mod dep2 {
+    #[no_mangle]
+    pub static collision: usize = 0;
+}
+
+fn main() {
+    unsafe {
+       println!("{:p}", &dep1::collision);
+    }
+}
diff --git a/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr b/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr
new file mode 100644
index 00000000000..117c76f7f26
--- /dev/null
+++ b/src/test/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr
@@ -0,0 +1,8 @@
+error: symbol `collision` is already defined
+  --> $DIR/linkage-detect-local-generated-name-collision.rs:7:9
+   |
+LL |         pub static collision: *const i32;
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+