-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix spurious trait privacy error #31920
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