From b929f721198c9c9467c0a427a23a974be0baa0d4 Mon Sep 17 00:00:00 2001 From: Dan Aloni Date: Sat, 11 Jul 2020 11:03:54 +0300 Subject: [PATCH 1/2] Fix try_print_visible_def_path_recur for opt_def_id usage This to fix #74081. --- src/librustc_middle/ty/print/pretty.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc_middle/ty/print/pretty.rs b/src/librustc_middle/ty/print/pretty.rs index 9dda208b5a0da..3809c8d245bbe 100644 --- a/src/librustc_middle/ty/print/pretty.rs +++ b/src/librustc_middle/ty/print/pretty.rs @@ -393,7 +393,7 @@ pub trait PrettyPrinter<'tcx>: .tcx() .item_children(visible_parent) .iter() - .find(|child| child.res.def_id() == def_id) + .find(|child| child.res.opt_def_id() == Some(def_id)) .map(|child| child.ident.name); if let Some(reexport) = reexport { *name = reexport; From f5de23b5c132db8064c98e0e20ef216d6defdc44 Mon Sep 17 00:00:00 2001 From: Dan Aloni Date: Sat, 11 Jul 2020 14:42:08 +0300 Subject: [PATCH 2/2] Add the test case mentioned in #74236 --- src/test/ui/issues/issue-74236/auxiliary/dep.rs | 8 ++++++++ src/test/ui/issues/issue-74236/main.rs | 9 +++++++++ src/test/ui/issues/issue-74236/main.stderr | 11 +++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/test/ui/issues/issue-74236/auxiliary/dep.rs create mode 100644 src/test/ui/issues/issue-74236/main.rs create mode 100644 src/test/ui/issues/issue-74236/main.stderr diff --git a/src/test/ui/issues/issue-74236/auxiliary/dep.rs b/src/test/ui/issues/issue-74236/auxiliary/dep.rs new file mode 100644 index 0000000000000..45f2601d307c8 --- /dev/null +++ b/src/test/ui/issues/issue-74236/auxiliary/dep.rs @@ -0,0 +1,8 @@ +// edition:2018 + +mod private { pub struct Pub; } + +// Reexport built-in attribute without a DefId (requires Rust 2018). +pub use cfg_attr as attr; +// This export needs to be after the built-in attribute to trigger the bug. +pub use private::Pub as Renamed; diff --git a/src/test/ui/issues/issue-74236/main.rs b/src/test/ui/issues/issue-74236/main.rs new file mode 100644 index 0000000000000..daa7cfcf9a106 --- /dev/null +++ b/src/test/ui/issues/issue-74236/main.rs @@ -0,0 +1,9 @@ +// edition:2018 +// aux-build:dep.rs +// compile-flags:--extern dep + +fn main() { + // Trigger an error that will print the path of dep::private::Pub (as "dep::Renamed"). + let () = dep::Renamed; + //~^ ERROR mismatched types +} diff --git a/src/test/ui/issues/issue-74236/main.stderr b/src/test/ui/issues/issue-74236/main.stderr new file mode 100644 index 0000000000000..51d4833e01432 --- /dev/null +++ b/src/test/ui/issues/issue-74236/main.stderr @@ -0,0 +1,11 @@ +error[E0308]: mismatched types + --> $DIR/main.rs:7:9 + | +LL | let () = dep::Renamed; + | ^^ ------------ this expression has type `dep::Renamed` + | | + | expected struct `dep::Renamed`, found `()` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`.