Skip to content
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

Privacy assertion failure with staged_api and duplicated module name #104249

Closed
jruderman opened this issue Nov 10, 2022 · 2 comments · Fixed by #104602
Closed

Privacy assertion failure with staged_api and duplicated module name #104249

jruderman opened this issue Nov 10, 2022 · 2 comments · Fixed by #104602
Assignees
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-nightly This issue requires a nightly compiler in some way. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@jruderman
Copy link
Contributor

Found with a modified fuzz-rustc.

Code

#![feature(staged_api)]
pub mod a {
}
pub mod a {
    pub mod b {
    }
}
fn main(){}
Alternative input with stability attributes
#![feature(staged_api)]
#![stable(feature = "foo", since = "1.0")]

#[stable(feature = "foo", since = "1.0")]
pub mod a {
}
#[stable(feature = "foo", since = "1.0")]
pub mod a {
    #[stable(feature = "foo", since = "1.0")]
    pub mod b {
    }
}
fn main(){}

Error output with debug assertions

error[E0428]: the name `a` is defined multiple times
error: internal compiler error: compiler/rustc_middle/src/middle/privacy.rs:171:17: private Restricted(DefId(0:4 ~ perr_n[96e5]::a#1)) > direct Restricted(DefId(0:5 ~ perr_n[96e5]::a#1::b))
Full output including backtrace
error[E0428]: the name `a` is defined multiple times
 --> perr-n.rs:4:1
  |
2 | pub mod a {
  | --------- previous definition of the module `a` here
3 | }
4 | pub mod a {
  | ^^^^^^^^^ `a` redefined here
  |
  = note: `a` must be defined only once in the type namespace of this module

error: internal compiler error: compiler/rustc_middle/src/middle/privacy.rs:171:17: private Restricted(DefId(0:4 ~ perr_n[96e5]::a#1)) > direct Restricted(DefId(0:5 ~ perr_n[96e5]::a#1::b))
 --> perr-n.rs:5:5
  |
5 |     pub mod b {
  |     ^^^^^^^^^

thread 'rustc' panicked at 'Box<dyn Any>', /Users/jruderman/code/rust/compiler/rustc_errors/src/lib.rs:967:33
stack backtrace:
   0:        0x105f67b51 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hca7435eb862ff36c
   1:        0x106004448 - core::fmt::write::hda6b0e10b55724fb
   2:        0x105f655c8 - std::io::Write::write_fmt::ha9d830225ddca362
   3:        0x105f67942 - std::sys_common::backtrace::print::h1790e63dbe903794
   4:        0x105f91355 - std::panicking::default_hook::{{closure}}::h43af9d0e518d235f
   5:        0x105f91137 - std::panicking::default_hook::h66fe7c7e4fb98f6f
   6:        0x117a99198 - rustc_driver[34272412877c8d7e]::DEFAULT_HOOK::{closure#0}::{closure#0}
   7:        0x105f91a16 - std::panicking::rust_panic_with_hook::h3f2771d8587a6225
   8:        0x11c6f9527 - std[8f57673cc279a434]::panicking::begin_panic::<rustc_errors[baeb4f2523d336bf]::ExplicitBug>::{closure#0}
   9:        0x11c6f9499 - std[8f57673cc279a434]::sys_common::backtrace::__rust_end_short_backtrace::<std[8f57673cc279a434]::panicking::begin_panic<rustc_errors[baeb4f2523d336bf]::ExplicitBug>::{closure#0}, !>
  10:        0x11ccf11a9 - std[8f57673cc279a434]::panicking::begin_panic::<rustc_errors[baeb4f2523d336bf]::ExplicitBug>
  11:        0x11c708769 - std[8f57673cc279a434]::panic::panic_any::<rustc_errors[baeb4f2523d336bf]::ExplicitBug>
  12:        0x11c7086e8 - <rustc_errors[baeb4f2523d336bf]::HandlerInner>::span_bug::<rustc_span[fb729f1b9e5ac969]::span_encoding::Span, &alloc[9c4954bf8315fe26]::string::String>
  13:        0x11c7084f4 - <rustc_errors[baeb4f2523d336bf]::Handler>::span_bug::<rustc_span[fb729f1b9e5ac969]::span_encoding::Span, &alloc[9c4954bf8315fe26]::string::String>
  14:        0x11c79c7d1 - rustc_middle[6f25fe7037d6027b]::ty::context::tls::with_opt::<rustc_middle[6f25fe7037d6027b]::util::bug::opt_span_bug_fmt<rustc_span[fb729f1b9e5ac969]::span_encoding::Span>::{closure#0}, ()>
  15:        0x11c79c841 - rustc_middle[6f25fe7037d6027b]::util::bug::opt_span_bug_fmt::<rustc_span[fb729f1b9e5ac969]::span_encoding::Span>
  16:        0x11cd0285f - rustc_middle[6f25fe7037d6027b]::util::bug::span_bug_fmt::<rustc_span[fb729f1b9e5ac969]::span_encoding::Span>
  17:        0x11c7b780b - <rustc_middle[6f25fe7037d6027b]::middle::privacy::EffectiveVisibilities>::check_invariants
  18:        0x11a5307d5 - rustc_privacy[d2e26e0ea95905a7]::effective_visibilities
  19:        0x11b7be7b0 - rustc_query_system[840d768d15d12085]::query::plumbing::try_execute_query::<rustc_query_impl[c109d582984dd181]::plumbing::QueryCtxt, rustc_query_system[840d768d15d12085]::query::caches::DefaultCache<(), &rustc_middle[6f25fe7037d6027b]::middle::privacy::EffectiveVisibilities>>
  20:        0x11b868c29 - rustc_query_system[840d768d15d12085]::query::plumbing::get_query::<rustc_query_impl[c109d582984dd181]::queries::effective_visibilities, rustc_query_impl[c109d582984dd181]::plumbing::QueryCtxt>
  21:        0x11b593027 - <rustc_query_impl[c109d582984dd181]::Queries as rustc_middle[6f25fe7037d6027b]::ty::query::QueryEngine>::effective_visibilities
  22:        0x11ad6fbe6 - rustc_passes[467a399e7fc15c73]::stability::check_unused_or_stable_features
  23:        0x117be16a7 - <rustc_session[c16dc8859e010203]::session::Session>::time::<(), rustc_interface[e9616f531c09701b]::passes::analysis::{closure#0}::{closure#2}::{closure#0}>
  24:        0x117bfa508 - std[8f57673cc279a434]::panicking::try::<(), core[63810368375d8c35]::panic::unwind_safe::AssertUnwindSafe<rustc_interface[e9616f531c09701b]::passes::analysis::{closure#0}::{closure#2}>>
  25:        0x117be205c - <rustc_session[c16dc8859e010203]::session::Session>::time::<(), rustc_interface[e9616f531c09701b]::passes::analysis::{closure#0}>
  26:        0x117b9a311 - rustc_interface[e9616f531c09701b]::passes::analysis
  27:        0x11b7b61ed - rustc_query_system[840d768d15d12085]::query::plumbing::try_execute_query::<rustc_query_impl[c109d582984dd181]::plumbing::QueryCtxt, rustc_query_system[840d768d15d12085]::query::caches::DefaultCache<(), core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>>
  28:        0x11b8965d9 - rustc_query_system[840d768d15d12085]::query::plumbing::get_query::<rustc_query_impl[c109d582984dd181]::queries::analysis, rustc_query_impl[c109d582984dd181]::plumbing::QueryCtxt>
  29:        0x11b5647d7 - <rustc_query_impl[c109d582984dd181]::Queries as rustc_middle[6f25fe7037d6027b]::ty::query::QueryEngine>::analysis
  30:        0x117b173f8 - <rustc_interface[e9616f531c09701b]::passes::QueryContext>::enter::<rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}::{closure#2}::{closure#3}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>
  31:        0x117b01308 - <rustc_interface[e9616f531c09701b]::interface::Compiler>::enter::<rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}::{closure#2}, core[63810368375d8c35]::result::Result<core[63810368375d8c35]::option::Option<rustc_interface[e9616f531c09701b]::queries::Linker>, rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>
  32:        0x117a8729b - rustc_span[fb729f1b9e5ac969]::with_source_map::<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_interface[e9616f531c09701b]::interface::run_compiler<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}>::{closure#0}::{closure#1}>
  33:        0x117b0279a - <scoped_tls[a4e3500caacc884c]::ScopedKey<rustc_span[fb729f1b9e5ac969]::SessionGlobals>>::set::<rustc_interface[e9616f531c09701b]::interface::run_compiler<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}>::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>
  34:        0x117b065e0 - std[8f57673cc279a434]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[e9616f531c09701b]::util::run_in_thread_pool_with_globals<rustc_interface[e9616f531c09701b]::interface::run_compiler<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}>::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>
  35:        0x117aea94d - std[8f57673cc279a434]::panicking::try::<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, core[63810368375d8c35]::panic::unwind_safe::AssertUnwindSafe<<std[8f57673cc279a434]::thread::Builder>::spawn_unchecked_<rustc_interface[e9616f531c09701b]::util::run_in_thread_pool_with_globals<rustc_interface[e9616f531c09701b]::interface::run_compiler<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}>::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>::{closure#1}::{closure#0}>>
  36:        0x117a91b80 - <<std[8f57673cc279a434]::thread::Builder>::spawn_unchecked_<rustc_interface[e9616f531c09701b]::util::run_in_thread_pool_with_globals<rustc_interface[e9616f531c09701b]::interface::run_compiler<core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>, rustc_driver[34272412877c8d7e]::run_compiler::{closure#1}>::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[63810368375d8c35]::result::Result<(), rustc_errors[baeb4f2523d336bf]::ErrorGuaranteed>>::{closure#1} as core[63810368375d8c35]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  37:        0x105f992eb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h3d6d78cd5f090dbf
  38:        0x105fa0eef - std::sys::unix::thread::Thread::new::thread_start::h54ce6bb2ca11d46f
  39:     0x7ff80d84d4e1 - __pthread_start

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.67.0-dev running on x86_64-apple-darwin

query stack during panic:
#0 [effective_visibilities] checking effective visibilities
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0428`.

Regression

This is a new assertion, added in 448261a of #103965 (@petrochenkov). I don't know whether this indicates a pre-existing bug.

Version

Built stage1 on x86_64-apple-darwin at revision 01a6f30 with debug-assertions = true

@jruderman jruderman added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Nov 10, 2022
@pnkfelix pnkfelix added the I-prioritize Issue: Indicates that prioritization has been requested for this issue. label Nov 15, 2022
@apiraino apiraino added the requires-nightly This issue requires a nightly compiler in some way. label Nov 16, 2022
@petrochenkov petrochenkov self-assigned this Nov 17, 2022
@petrochenkov
Copy link
Contributor

#![feature(staged_api)] here is important because without it we never actually invoke the effective_visibilities query that checks these invariants, compilation stops before that because there are errors.

@petrochenkov
Copy link
Contributor

Fixed in #104546.

petrochenkov added a commit to petrochenkov/rust that referenced this issue Nov 23, 2022
Optimizations removed in the previous commit required this function to behave incorrectly, but now those optimizations are gone so we can fix the bug.

Fixes rust-lang#104249
bors added a commit to rust-lang-ci/rust that referenced this issue Nov 25, 2022
privacy: Fix more (potential) issues with effective visibilities

Continuation of rust-lang#103965.
See individual commits for more detailed description of the changes.

The shortcuts removed in rust-lang@4eb63f6 and rust-lang@c7c7d16 could actually be correct (or correct after some tweaks), but they used global reasoning like "we can skip this update because if the code compiles then some other update should do the same thing eventually".
I have some expertise in this area, but I still have doubt whether such global reasoning was correct or not, especially in presence of all possible exotic cases with imports.
After this PR all table changes should be "locally correct" after every update, even if it may be overcautious.
If similar optimizations are introduced again they will need detailed comments explaining why it's legal to do what they do and providing proofs.

Fixes rust-lang#104249.
Fixes rust-lang#104539.
@bors bors closed this as completed in f0843b8 Nov 25, 2022
@apiraino apiraino removed the I-prioritize Issue: Indicates that prioritization has been requested for this issue. label Nov 29, 2022
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this issue Apr 20, 2024
privacy: Fix more (potential) issues with effective visibilities

Continuation of rust-lang/rust#103965.
See individual commits for more detailed description of the changes.

The shortcuts removed in rust-lang/rust@4eb63f6 and rust-lang/rust@c7c7d16 could actually be correct (or correct after some tweaks), but they used global reasoning like "we can skip this update because if the code compiles then some other update should do the same thing eventually".
I have some expertise in this area, but I still have doubt whether such global reasoning was correct or not, especially in presence of all possible exotic cases with imports.
After this PR all table changes should be "locally correct" after every update, even if it may be overcautious.
If similar optimizations are introduced again they will need detailed comments explaining why it's legal to do what they do and providing proofs.

Fixes rust-lang/rust#104249.
Fixes rust-lang/rust#104539.
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this issue Apr 27, 2024
privacy: Fix more (potential) issues with effective visibilities

Continuation of rust-lang/rust#103965.
See individual commits for more detailed description of the changes.

The shortcuts removed in rust-lang/rust@4eb63f6 and rust-lang/rust@c7c7d16 could actually be correct (or correct after some tweaks), but they used global reasoning like "we can skip this update because if the code compiles then some other update should do the same thing eventually".
I have some expertise in this area, but I still have doubt whether such global reasoning was correct or not, especially in presence of all possible exotic cases with imports.
After this PR all table changes should be "locally correct" after every update, even if it may be overcautious.
If similar optimizations are introduced again they will need detailed comments explaining why it's legal to do what they do and providing proofs.

Fixes rust-lang/rust#104249.
Fixes rust-lang/rust#104539.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-nightly This issue requires a nightly compiler in some way. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
4 participants