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

ICE: Weak and Inherent aliases should have been normalized away already #120891

Closed
matthiaskrgr opened this issue Feb 10, 2024 · 1 comment · Fixed by #120899
Closed

ICE: Weak and Inherent aliases should have been normalized away already #120891

matthiaskrgr opened this issue Feb 10, 2024 · 1 comment · Fixed by #120899
Assignees
Labels
C-bug Category: This is a bug. F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` 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. WG-trait-system-refactor The Rustc Trait System Refactor Initiative

Comments

@matthiaskrgr
Copy link
Member

auto-reduced (treereduce-rust):

trait Foo {}

type Bar<T: Foo> = impl std::fmt::Debug;

trait Bop {}

impl Bop for Bar<usize> {}

type Barr = impl std::fmt::Debug;

impl Bop for Barr {}

original:

#![feature(type_alias_impl_trait)]

trait Foo {}
impl Foo for () {}
impl Foo for i32 {}

type Bar<T: Foo> = impl std::fmt::Debug;
fn defining_use<T: Foo>() -> Bar<T> {
    42
}

trait Bop {}

impl Bop for Bar<()> {}

// If the hidden type is the same, this is effectively a second impl for the same type.
impl Bop for Bar<usize> {}
//~^ ERROR conflicting implementations

type Barr = impl std::fmt::Debug;
fn defining_use2() -> Barr {
    42
}

// Even completely different opaque types must conflict.
impl Bop for Barr {}
//~^ ERROR conflicting implementations

// And obviously the hidden type must conflict, too.
impl Bop for i32 {}
//~^ ERROR conflicting implementations

fn main() {}

Version information

rustc 1.78.0-nightly (6cc484351 2024-02-10)
binary: rustc
commit-hash: 6cc4843512d613f51ec81aba689180c31b0b28b6
commit-date: 2024-02-10
host: x86_64-unknown-linux-gnu
release: 1.78.0-nightly
LLVM version: 17.0.6

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc -Znext-solver=coherence

Program output

error[E0658]: `impl Trait` in type aliases is unstable
 --> /tmp/icemaker_global_tempdir.RM2beP5WREmU/rustc_testrunner_tmpdir_reporting.WcwnBtogFJ2R/mvce.rs:3:20
  |
3 | type Bar<T: Foo> = impl std::fmt::Debug;
  |                    ^^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
  = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable
  = note: this compiler was built on 2024-02-10; consider upgrading it if it is out of date

error[E0658]: `impl Trait` in type aliases is unstable
 --> /tmp/icemaker_global_tempdir.RM2beP5WREmU/rustc_testrunner_tmpdir_reporting.WcwnBtogFJ2R/mvce.rs:9:13
  |
9 | type Barr = impl std::fmt::Debug;
  |             ^^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information
  = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable
  = note: this compiler was built on 2024-02-10; consider upgrading it if it is out of date

error[E0601]: `main` function not found in crate `mvce`
  --> /tmp/icemaker_global_tempdir.RM2beP5WREmU/rustc_testrunner_tmpdir_reporting.WcwnBtogFJ2R/mvce.rs:11:21
   |
11 | impl Bop for Barr {}
   |                     ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.RM2beP5WREmU/rustc_testrunner_tmpdir_reporting.WcwnBtogFJ2R/mvce.rs`

thread 'rustc' panicked at compiler/rustc_trait_selection/src/solve/assembly/mod.rs:615:17:
internal error: entered unreachable code: Weak and Inherent aliases should have been normalized away already
stack backtrace:
   0:     0x7f6dd758b936 - std::backtrace_rs::backtrace::libunwind::trace::hce337a0fd0c5e1da
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x7f6dd758b936 - std::backtrace_rs::backtrace::trace_unsynchronized::hbc9b4a5cec9b81eb
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f6dd758b936 - std::sys_common::backtrace::_print_fmt::habe453adcd959f3b
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7f6dd758b936 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h67bb2d10ecb8af10
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f6dd75de380 - core::fmt::rt::Argument::fmt::hd5debad710e176b4
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/core/src/fmt/rt.rs:142:9
   5:     0x7f6dd75de380 - core::fmt::write::h5987d5bee25e3bd6
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/core/src/fmt/mod.rs:1120:17
   6:     0x7f6dd757f0ef - std::io::Write::write_fmt::h0876e0f4bddb923c
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/io/mod.rs:1854:15
   7:     0x7f6dd758b714 - std::sys_common::backtrace::_print::h4ae69e83d64cbf46
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7f6dd758b714 - std::sys_common::backtrace::print::h1d97d5831d0262fb
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7f6dd758e4d7 - std::panicking::default_hook::{{closure}}::h39fabb1b3e65f47a
  10:     0x7f6dd758e239 - std::panicking::default_hook::h416520d6bb2cb53f
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/panicking.rs:292:9
  11:     0x7f6dda3266dc - std[3acc11fb688f3d76]::panicking::update_hook::<alloc[408654ec2a1215fa]::boxed::Box<rustc_driver_impl[a7481a600b2f11a0]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7f6dd758ec26 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h2450ecbe2b1c1ea3
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/alloc/src/boxed.rs:2030:9
  13:     0x7f6dd758ec26 - std::panicking::rust_panic_with_hook::h99ef5cbc4b3b0ae4
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/panicking.rs:785:13
  14:     0x7f6dd758e939 - std::panicking::begin_panic_handler::{{closure}}::h2284f60633c08873
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/panicking.rs:651:13
  15:     0x7f6dd758be36 - std::sys_common::backtrace::__rust_end_short_backtrace::h84bc49437da26b5c
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys_common/backtrace.rs:171:18
  16:     0x7f6dd758e6c4 - rust_begin_unwind
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/panicking.rs:647:5
  17:     0x7f6dd75daa85 - core::panicking::panic_fmt::hfa0af2309df9012f
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/core/src/panicking.rs:72:14
  18:     0x7f6ddadbf083 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::assemble_alias_bound_candidates_recur::<rustc_middle[9f94bb95ba4eb693]::ty::predicate::TraitPredicate>
  19:     0x7f6ddae37b43 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::assemble_alias_bound_candidates::<rustc_middle[9f94bb95ba4eb693]::ty::predicate::TraitPredicate>
  20:     0x7f6ddadbbf1f - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::assemble_and_evaluate_candidates::<rustc_middle[9f94bb95ba4eb693]::ty::predicate::TraitPredicate>
  21:     0x7f6ddadd419d - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>::{closure#3}
  22:     0x7f6ddadd0832 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>
  23:     0x7f6ddadc4d06 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_goal
  24:     0x7f6ddae3ab45 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::try_evaluate_added_goals
  25:     0x7f6ddae37fd1 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_added_goals_and_make_canonical_response
  26:     0x7f6ddadd31a8 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>::{closure#3}
  27:     0x7f6ddadd0832 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>
  28:     0x7f6ddadc4d06 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_goal
  29:     0x7f6ddae3ab45 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::try_evaluate_added_goals
  30:     0x7f6ddae37fd1 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_added_goals_and_make_canonical_response
  31:     0x7f6ddadd5e54 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>::{closure#3}
  32:     0x7f6ddadd0832 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::search_graph::SearchGraph>::with_new_goal::<<rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>
  33:     0x7f6ddadc4d06 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::EvalCtxt>::evaluate_goal
  34:     0x7f6ddae3a11e - <rustc_infer[81d54d7e65d62577]::infer::InferCtxt as rustc_trait_selection[c406a89a2b7dc7ed]::solve::eval_ctxt::InferCtxtEvalExt>::evaluate_root_goal
  35:     0x7f6ddadc6a52 - <rustc_trait_selection[c406a89a2b7dc7ed]::solve::fulfill::FulfillmentCtxt as rustc_infer[81d54d7e65d62577]::traits::engine::TraitEngine>::select_where_possible
  36:     0x7f6dd86e7577 - <rustc_infer[81d54d7e65d62577]::infer::InferCtxt as rustc_trait_selection[c406a89a2b7dc7ed]::traits::query::evaluate_obligation::InferCtxtExt>::evaluate_obligation
  37:     0x7f6ddba7bb01 - rustc_trait_selection[c406a89a2b7dc7ed]::traits::coherence::overlap
  38:     0x7f6ddbb5995e - <rustc_middle[9f94bb95ba4eb693]::traits::specialization_graph::Children as rustc_trait_selection[c406a89a2b7dc7ed]::traits::specialize::specialization_graph::ChildrenExt>::insert
  39:     0x7f6ddbb58878 - <rustc_middle[9f94bb95ba4eb693]::traits::specialization_graph::Graph as rustc_trait_selection[c406a89a2b7dc7ed]::traits::specialize::specialization_graph::GraphExt>::insert
  40:     0x7f6ddc0e9dc9 - rustc_trait_selection[c406a89a2b7dc7ed]::traits::specialize::specialization_graph_provider
  41:     0x7f6ddc0e96d9 - rustc_query_impl[60cfa4eef1128f6c]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[60cfa4eef1128f6c]::query_impl::specialization_graph_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 8usize]>>
  42:     0x7f6ddb6744e1 - rustc_query_system[30cc65df29d7d3a8]::query::plumbing::try_execute_query::<rustc_query_impl[60cfa4eef1128f6c]::DynamicConfig<rustc_query_system[30cc65df29d7d3a8]::query::caches::DefIdCache<rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[60cfa4eef1128f6c]::plumbing::QueryCtxt, false>
  43:     0x7f6ddbebdebc - rustc_query_impl[60cfa4eef1128f6c]::query_impl::specialization_graph_of::get_query_non_incr::__rust_end_short_backtrace
  44:     0x7f6ddbebdfbf - rustc_hir_analysis[1799a6ccb3095d3d]::coherence::coherent_trait
  45:     0x7f6ddbebdee3 - rustc_query_impl[60cfa4eef1128f6c]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[60cfa4eef1128f6c]::query_impl::coherent_trait::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 1usize]>>
  46:     0x7f6ddbb128b4 - rustc_query_system[30cc65df29d7d3a8]::query::plumbing::try_execute_query::<rustc_query_impl[60cfa4eef1128f6c]::DynamicConfig<rustc_query_system[30cc65df29d7d3a8]::query::caches::DefIdCache<rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[60cfa4eef1128f6c]::plumbing::QueryCtxt, false>
  47:     0x7f6ddbd05e4d - rustc_query_impl[60cfa4eef1128f6c]::query_impl::coherent_trait::get_query_non_incr::__rust_end_short_backtrace
  48:     0x7f6ddb7cfd9a - rustc_hir_analysis[1799a6ccb3095d3d]::check_crate
  49:     0x7f6ddbf8bd92 - rustc_interface[57a4cb1189ffa880]::passes::analysis
  50:     0x7f6ddbf8b9df - rustc_query_impl[60cfa4eef1128f6c]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[60cfa4eef1128f6c]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 1usize]>>
  51:     0x7f6ddc324372 - rustc_query_system[30cc65df29d7d3a8]::query::plumbing::try_execute_query::<rustc_query_impl[60cfa4eef1128f6c]::DynamicConfig<rustc_query_system[30cc65df29d7d3a8]::query::caches::SingleCache<rustc_middle[9f94bb95ba4eb693]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[60cfa4eef1128f6c]::plumbing::QueryCtxt, false>
  52:     0x7f6ddc3240d5 - rustc_query_impl[60cfa4eef1128f6c]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  53:     0x7f6ddc33a582 - rustc_interface[57a4cb1189ffa880]::interface::run_compiler::<core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>, rustc_driver_impl[a7481a600b2f11a0]::run_compiler::{closure#0}>::{closure#0}
  54:     0x7f6ddc3d2b46 - std[3acc11fb688f3d76]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[57a4cb1189ffa880]::util::run_in_thread_with_globals<rustc_interface[57a4cb1189ffa880]::util::run_in_thread_pool_with_globals<rustc_interface[57a4cb1189ffa880]::interface::run_compiler<core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>, rustc_driver_impl[a7481a600b2f11a0]::run_compiler::{closure#0}>::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>
  55:     0x7f6ddc3d2973 - <<std[3acc11fb688f3d76]::thread::Builder>::spawn_unchecked_<rustc_interface[57a4cb1189ffa880]::util::run_in_thread_with_globals<rustc_interface[57a4cb1189ffa880]::util::run_in_thread_pool_with_globals<rustc_interface[57a4cb1189ffa880]::interface::run_compiler<core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>, rustc_driver_impl[a7481a600b2f11a0]::run_compiler::{closure#0}>::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[8df037f8ced6ea1f]::result::Result<(), rustc_span[4a89bdba9678f8e0]::ErrorGuaranteed>>::{closure#1} as core[8df037f8ced6ea1f]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  56:     0x7f6dd7597eb5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61e4d902e063b23d
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/alloc/src/boxed.rs:2016:9
  57:     0x7f6dd7597eb5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hfa3eaf4f75275f59
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/alloc/src/boxed.rs:2016:9
  58:     0x7f6dd7597eb5 - std::sys::pal::unix::thread::Thread::new::thread_start::hb901d27f412b0ecd
                               at /rustc/6cc4843512d613f51ec81aba689180c31b0b28b6/library/std/src/sys/pal/unix/thread.rs:108:17
  59:     0x7f6dd73819eb - <unknown>
  60:     0x7f6dd74057cc - <unknown>
  61:                0x0 - <unknown>

error: 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.78.0-nightly (6cc484351 2024-02-10) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z next-solver=coherence -Z dump-mir-dir=dir

query stack during panic:
#0 [specialization_graph_of] building specialization graph of trait `Bop`
#1 [coherent_trait] coherence checking all impls of trait `Bop`
#2 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0601, E0658.
For more information about an error, try `rustc --explain E0601`.

@matthiaskrgr matthiaskrgr added 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. C-bug Category: This is a bug. WG-trait-system-refactor The Rustc Trait System Refactor Initiative labels Feb 10, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Feb 10, 2024
@matthiaskrgr
Copy link
Member Author

#120584 cc @compiler-errors

@fmease fmease added F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Feb 10, 2024
@compiler-errors compiler-errors self-assigned this Feb 10, 2024
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Feb 12, 2024
Gracefully handle non-WF alias in `assemble_alias_bound_candidates_recur`

See explanation in test. I think it's fine to delay a bug here -- I don't believe we ever construct a non-wf alias on the good path? If so, then we can just remove the delay.

Fixes rust-lang#120891

r? lcnr
@bors bors closed this as completed in 733f93d Feb 12, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this issue Feb 12, 2024
Rollup merge of rust-lang#120899 - compiler-errors:non-wf-alias, r=lcnr

Gracefully handle non-WF alias in `assemble_alias_bound_candidates_recur`

See explanation in test. I think it's fine to delay a bug here -- I don't believe we ever construct a non-wf alias on the good path? If so, then we can just remove the delay.

Fixes rust-lang#120891

r? lcnr
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. F-type_alias_impl_trait `#[feature(type_alias_impl_trait)]` 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. WG-trait-system-refactor The Rustc Trait System Refactor Initiative
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants