about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-04-02 23:34:58 -0700
committerbors <bors@rust-lang.org>2016-04-02 23:34:58 -0700
commita09f386e8d1c31133f0ce1123fbeaedcff40a77d (patch)
treeb25c06d2cc1aefa20d7492b700ec2a581726a194
parent080edd9957e3587e90314e02af7955fef14a6bd7 (diff)
parentc2ede7e185fe32d9b0b8b85bd06fc0741cd14cf3 (diff)
downloadrust-a09f386e8d1c31133f0ce1123fbeaedcff40a77d.tar.gz
rust-a09f386e8d1c31133f0ce1123fbeaedcff40a77d.zip
Auto merge of #32579 - michaelwoerister:stable-symbol-name-fix, r=eddyb
Fix typo in TxCtxt::crate_disambiguator() and add test case.

r? @nikomatsakis

Fixes #32554
-rw-r--r--src/librustc/ty/context.rs2
-rw-r--r--src/test/run-make/stable-symbol-names/Makefile18
-rw-r--r--src/test/run-make/stable-symbol-names/stable-symbol-names1.rs22
-rw-r--r--src/test/run-make/stable-symbol-names/stable-symbol-names2.rs20
4 files changed, 61 insertions, 1 deletions
diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs
index 842a58571e0..2074339f2e6 100644
--- a/src/librustc/ty/context.rs
+++ b/src/librustc/ty/context.rs
@@ -434,7 +434,7 @@ impl<'tcx> TyCtxt<'tcx> {
         if cnum == LOCAL_CRATE {
             self.sess.crate_disambiguator.get().as_str()
         } else {
-            self.sess.cstore.crate_name(cnum)
+            self.sess.cstore.crate_disambiguator(cnum)
         }
     }
 
diff --git a/src/test/run-make/stable-symbol-names/Makefile b/src/test/run-make/stable-symbol-names/Makefile
new file mode 100644
index 00000000000..da96d1b1dcf
--- /dev/null
+++ b/src/test/run-make/stable-symbol-names/Makefile
@@ -0,0 +1,18 @@
+-include ../tools.mk
+
+# This test case makes sure that monomorphizations of the same function with the
+# same set of generic arguments will have the same symbol names when
+# instantiated in different crates.
+
+dump-symbols = nm "$(TMPDIR)/lib$(1).rlib" \
+             |  grep "some_test_function" \
+             | sed "s/^[0-9a-f]\{8,16\}/00000000/" \
+             | sort \
+             > "$(TMPDIR)/$(1).nm"
+
+all:
+	$(RUSTC) stable-symbol-names1.rs
+	$(RUSTC) stable-symbol-names2.rs
+	$(call dump-symbols,stable_symbol_names1)
+	$(call dump-symbols,stable_symbol_names2)
+	cmp "$(TMPDIR)/stable_symbol_names1.nm" "$(TMPDIR)/stable_symbol_names2.nm"
diff --git a/src/test/run-make/stable-symbol-names/stable-symbol-names1.rs b/src/test/run-make/stable-symbol-names/stable-symbol-names1.rs
new file mode 100644
index 00000000000..7b2cd857113
--- /dev/null
+++ b/src/test/run-make/stable-symbol-names/stable-symbol-names1.rs
@@ -0,0 +1,22 @@
+// Copyright 2016 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="rlib"]
+
+pub fn some_test_function<T>(t: T) -> T {
+  t
+}
+
+pub fn user() {
+  some_test_function(0u32);
+  some_test_function("abc");
+  let x = 2u64;
+  some_test_function(&x);
+}
diff --git a/src/test/run-make/stable-symbol-names/stable-symbol-names2.rs b/src/test/run-make/stable-symbol-names/stable-symbol-names2.rs
new file mode 100644
index 00000000000..ff027d6b46c
--- /dev/null
+++ b/src/test/run-make/stable-symbol-names/stable-symbol-names2.rs
@@ -0,0 +1,20 @@
+// Copyright 2016 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="rlib"]
+
+extern crate stable_symbol_names1;
+
+pub fn user() {
+  stable_symbol_names1::some_test_function(1u32);
+  stable_symbol_names1::some_test_function("def");
+  let x = 2u64;
+  stable_symbol_names1::some_test_function(&x);
+}