-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Fix spurious trait privacy error #31920
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
Some(ast_map::NodeForeignItem(_)) => { | ||
self.tcx.map.get_foreign_vis(closest_private_id) | ||
} | ||
Some(ast_map::NodeVariant(..)) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This arm was unreachable. Variants are always DefModifiers::PUBLIC
in resolve
, so the LastPrivate
is never a variant.
7d12dab
to
ee090ec
Compare
LGTM |
Weird, I thought that loop was at the core of one of the required parts of the privacy check... But hey if the tests pass looks like a great cleanup to me! |
2b3db8c
to
0b06658
Compare
r=me |
0b06658
to
a84268b
Compare
@nikomatsakis According to my measurements, loading the public external modules eagerly slows down the I decided to fix #21670 without slowing anything down in separate PR. |
@bors: r=nikomatsakis |
📌 Commit a84268b has been approved by |
⌛ Testing commit a84268b with merge 59fa34a... |
💔 Test failed - auto-linux-64-x-android-t |
The test failed because of implicit merge conflicts (unused function) |
Improve trait privacy error message
a84268b
to
d908ff1
Compare
@bors r=nikomatsakis |
📌 Commit d908ff1 has been approved by |
⌛ Testing commit d908ff1 with merge 45f0ce7... |
…tsakis This PR allows using methods from traits that are visible but are defined in an inaccessible module (fixes #18241). For example, ```rust mod foo { pub use foo::bar::Tr; mod bar { // This module is inaccessible from `g` pub trait Tr { fn f(&self) {} } } } fn g<T: foo::Tr>(t: T) { t.f(); // Currently, this is a privacy error even though `foo::Tr` is visible } ``` After this PR, it will continue to be a privacy error to use a method from a trait that is not visible. This can happen when a public trait inherits from a private trait (in violation of the `public_in_private` lint) -- see @petrochenkov's example in #28504. r? @nikomatsakis
This PR allows using methods from traits that are visible but are defined in an inaccessible module (fixes #18241). For example,
After this PR, it will continue to be a privacy error to use a method from a trait that is not visible. This can happen when a public trait inherits from a private trait (in violation of the
public_in_private
lint) -- see @petrochenkov's example in #28504.r? @nikomatsakis