rustc: Register crates under their real names
Whenever we register a crate into the crate store, make sure to use the real name mentioned in the metadata instead of the name mentioned in the `extern crate` statement, as the statement can be wrong! Closes #51796
This commit is contained in:
parent
e842dea7a3
commit
f069a57bb1
|
@ -188,13 +188,12 @@ impl<'a> CrateLoader<'a> {
|
||||||
fn register_crate(&mut self,
|
fn register_crate(&mut self,
|
||||||
root: &Option<CratePaths>,
|
root: &Option<CratePaths>,
|
||||||
ident: Symbol,
|
ident: Symbol,
|
||||||
name: Symbol,
|
|
||||||
span: Span,
|
span: Span,
|
||||||
lib: Library,
|
lib: Library,
|
||||||
dep_kind: DepKind)
|
dep_kind: DepKind)
|
||||||
-> (CrateNum, Lrc<cstore::CrateMetadata>) {
|
-> (CrateNum, Lrc<cstore::CrateMetadata>) {
|
||||||
info!("register crate `extern crate {} as {}`", name, ident);
|
|
||||||
let crate_root = lib.metadata.get_root();
|
let crate_root = lib.metadata.get_root();
|
||||||
|
info!("register crate `extern crate {} as {}`", crate_root.name, ident);
|
||||||
self.verify_no_symbol_conflicts(span, &crate_root);
|
self.verify_no_symbol_conflicts(span, &crate_root);
|
||||||
|
|
||||||
// Claim this crate number and cache it
|
// Claim this crate number and cache it
|
||||||
|
@ -233,7 +232,7 @@ impl<'a> CrateLoader<'a> {
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let cmeta = cstore::CrateMetadata {
|
let cmeta = cstore::CrateMetadata {
|
||||||
name,
|
name: crate_root.name,
|
||||||
extern_crate: Lock::new(None),
|
extern_crate: Lock::new(None),
|
||||||
def_path_table: Lrc::new(def_path_table),
|
def_path_table: Lrc::new(def_path_table),
|
||||||
trait_impls,
|
trait_impls,
|
||||||
|
@ -328,7 +327,7 @@ impl<'a> CrateLoader<'a> {
|
||||||
(cnum, data)
|
(cnum, data)
|
||||||
}
|
}
|
||||||
LoadResult::Loaded(library) => {
|
LoadResult::Loaded(library) => {
|
||||||
self.register_crate(root, ident, name, span, library, dep_kind)
|
self.register_crate(root, ident, span, library, dep_kind)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
-include ../tools.mk
|
||||||
|
|
||||||
|
all:
|
||||||
|
$(RUSTC) foo.rs
|
||||||
|
$(RUSTC) bar.rs
|
||||||
|
$(RUSTC) baz.rs --extern a=$(TMPDIR)/libfoo.rlib
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2018 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 foo;
|
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2018 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 a;
|
||||||
|
extern crate bar;
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Copyright 2018 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"]
|
Loading…
Reference in New Issue