Skip to content

Commit 2408095

Browse files
committed
Auto merge of #51017 - estebank:crate-name-in-path, r=michaelwoerister
Use crate name for reexported `extern crate` paths Fix #43189.
2 parents 8372e7b + 43d863b commit 2408095

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed

src/librustc/ty/item_path.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
169169

170170
let data = cur_def_key.disambiguated_data.data;
171171
let symbol = data.get_opt_name().map(|n| n.as_str()).unwrap_or_else(|| {
172-
Symbol::intern("<unnamed>").as_str()
172+
if let DefPathData::CrateRoot = data { // reexported `extern crate` (#43189)
173+
self.original_crate_name(cur_def.krate).as_str()
174+
} else {
175+
Symbol::intern("<unnamed>").as_str()
176+
}
173177
});
174178
cur_path.push(symbol);
175179

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type="lib"]
12+
13+
14+
pub trait A {
15+
fn a(&self) {}
16+
}
17+
impl A for () {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type="lib"]
12+
13+
pub extern crate xcrate_issue_43189_a;

src/test/ui/issue-43189.rs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Issue 46112: An extern crate pub re-exporting libcore was causing
12+
// paths rooted from `std` to be misrendered in the diagnostic output.
13+
14+
// ignore-windows
15+
// aux-build:xcrate_issue_43189_a.rs
16+
// aux-build:xcrate_issue_43189_b.rs
17+
18+
extern crate xcrate_issue_43189_b;
19+
fn main() {
20+
().a();
21+
//~^ ERROR no method named `a` found for type `()` in the current scope [E0599]
22+
}

src/test/ui/issue-43189.stderr

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
error[E0599]: no method named `a` found for type `()` in the current scope
2+
--> $DIR/issue-43189.rs:20:8
3+
|
4+
LL | ().a();
5+
| ^
6+
|
7+
= help: items from traits can only be used if the trait is in scope
8+
help: the following trait is implemented but not in scope, perhaps add a `use` for it:
9+
|
10+
LL | use xcrate_issue_43189_b::xcrate_issue_43189_a::A;
11+
|
12+
13+
error: aborting due to previous error
14+
15+
For more information about this error, try `rustc --explain E0599`.

0 commit comments

Comments
 (0)