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

The garbage collector and autogenerated types are causing a runtime panic #5698

Closed
sdankel opened this issue Mar 5, 2024 · 5 comments
Closed
Assignees
Labels
bug Something isn't working compiler: frontend Everything to do with type checking, control flow analysis, and everything between parsing and IRgen language server LSP server team:compiler Compiler Team

Comments

@sdankel
Copy link
Member

sdankel commented Mar 5, 2024

Autocomplete in LSP is not working in many cases. It seems to be using an older version of the token map, as I see this error in the LSP logs when it doesn’t work:

thread '<unnamed>' panicked at sway-core/src/concurrent_slab.rs:90:14:
no entry found for key
@sdankel sdankel added bug Something isn't working language server LSP server labels Mar 5, 2024
@crodas crodas self-assigned this Mar 5, 2024
@sdankel
Copy link
Member Author

sdankel commented Mar 5, 2024

concurrent_slab.rs:

    pub fn get(&self, index: usize) -> Arc<T> {
        let inner = self.inner.read().unwrap();

        let value = inner.get(&index).unwrap_or_else(|| {
            let backtrace = std::backtrace::Backtrace::force_capture();
            eprintln!("backtrace: {:#?}", backtrace);
            panic!("Failed to get value from index: {}", index);
        });

        value.clone()
    }
Backtrace [
    { fn: "std::backtrace_rs::backtrace::libunwind::trace", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/../../backtrace/src/backtrace/libunwind.rs", line: 104 },
    { fn: "std::backtrace_rs::backtrace::trace_unsynchronized", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/../../backtrace/src/backtrace/mod.rs", line: 66 },
    { fn: "std::backtrace::Backtrace::create", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/backtrace.rs", line: 331 },
    { fn: "std::backtrace::Backtrace::force_capture", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/backtrace.rs", line: 313 },
    { fn: "sway_core::concurrent_slab::ConcurrentSlab<T>::get" },
    { fn: "sway_core::semantic_analysis::namespace::trait_map::TraitMap::insert_for_type" },
    { fn: "sway_core::semantic_analysis::namespace::trait_map::TraitMap::check_if_trait_constraints_are_satisfied_for_type" },
    { fn: "sway_core::semantic_analysis::ast_node::declaration::auto_impl::AutoImplAbiEncodeContext::auto_impl_abi_encode" },
    { fn: "sway_core::semantic_analysis::module::<impl sway_core::language::ty::module::TyModule>::type_check" },
    { fn: "sway_core::semantic_analysis::program::<impl sway_core::language::ty::program::TyProgram>::type_check" },
    { fn: "sway_core::parsed_to_ast" },
    { fn: "sway_core::compile_to_ast" },
    { fn: "forc_pkg::pkg::check" },
    { fn: "sway_lsp::core::session::compile" },
    { fn: "sway_lsp::core::session::parse_project" },
    { fn: "std::sys_common::backtrace::__rust_begin_short_backtrace" },
    { fn: "core::ops::function::FnOnce::call_once{{vtable.shim}}" },
    { fn: "<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/boxed.rs", line: 2007 },
    { fn: "<alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/boxed.rs", line: 2007 },
    { fn: "std::sys::unix::thread::Thread::new::thread_start", file: "/rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/sys/unix/thread.rs", line: 108 },
    { fn: "__pthread_start" },
]
thread '<unnamed>' panicked at sway-core/src/concurrent_slab.rs:94:13:

@JoshuaBatty JoshuaBatty assigned JoshuaBatty and unassigned crodas Mar 5, 2024
@JoshuaBatty
Copy link
Member

I've been digging into this, it actually isn't caused by auto complete, it just so happens that auto complete LSP request is triggered when a key is pressed.

It appears this only started happening after #5306 was introduced. There is a conflict with how the garbage collection is operating and how types are constructed in the below functions.

pub fn auto_impl_abi_encode(&mut self, decl: &ty::TyDecl) -> Option<TyAstNode> {
    match decl {
        TyDecl::StructDecl(_) => self.struct_auto_impl_abi_encode(decl),
        TyDecl::EnumDecl(_) => self.enum_auto_impl_abi_encode(decl),
        _ => None,
    }
} 

We should have had a CI test to catch this when the garbage collector PR was implemented in #5251. However, at that time, we were only performing GC every 10th keystroke and it was overloading the stack in CI. Now that we have reduced this to every 3rd keystroke it seems to be fine for CI. I've just put up a PR #5704 that can recreate this crash. Hopefully it will help debug how to resolve the underlying issue, and also prevent this sort of bug to creep through in the future.

Here is a stack trace of the error that is happening for reference. It's getting triggered by the .get call below at line 738 in trait_map.rs

let traitItems = map_trait_items
    .clone()
    .into_iter()
    .map(|(name, item)| match &item {
        ty::TyTraitItem::Fn(decl_ref) => {
            let mut decl = (*decl_engine.get(decl_ref.id())).clone();
thread '<unnamed>' panicked at sway-core/src/concurrent_slab.rs:90:14:
no entry found for key
stack backtrace:
   0: rust_begin_unwind
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:72:14
   2: core::panicking::panic_display
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:178:5
   3: core::panicking::panic_str
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:152:5
   4: core::option::expect_failed
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:1985:5
   5: core::option::Option<T>::expect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:894:21
   6: <std::collections::hash::map::HashMap<K,V,S> as core::ops::index::Index<&Q>>::index
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/collections/hash/map.rs:1341:23
   7: sway_core::concurrent_slab::ConcurrentSlab<T>::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/concurrent_slab.rs:90:14
   8: <sway_core::decl_engine::engine::DeclEngine as sway_core::decl_engine::engine::DeclEngineGet<sway_core::decl_engine::id::DeclId<sway_core::language::ty::declaration::function::TyFunctionDecl>,sway_core::language::ty::declaration::function::TyFunctionDecl>>::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/decl_engine/engine.rs:89:17
   9: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type_inner::{{closure}}
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:739:50
  10: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:305:13
  11: core::option::Option<T>::map
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:1072:29
  12: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/adapters/map.rs:103:26
  13: <im::hash::map::HashMap<K,V,S> as core::iter::traits::collect::FromIterator<(K,V)>>::from_iter
             at /Users/josh/.cargo/registry/src/index.crates.io-6f17d22bba15001f/im-15.1.0/./src/hash/map.rs:1982:23
  14: core::iter::traits::iterator::Iterator::collect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/traits/iterator.rs:2054:9
  15: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type_inner
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:733:51
  16: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:603:9
  17: sway_core::semantic_analysis::namespace::trait_map::TraitMap::insert_for_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:450:21
  18: sway_core::semantic_analysis::namespace::trait_map::TraitMap::check_if_trait_constraints_are_satisfied_for_type::{{closure}}
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:1095:21
  19: sway_error::handler::Handler::scope
             at /Users/josh/Documents/rust/fuel/sway/sway-error/src/handler.rs:60:27
  20: sway_core::semantic_analysis::namespace::trait_map::TraitMap::check_if_trait_constraints_are_satisfied_for_type

also, if i add the following eprintln!("decl_ref: {:#?}", decl_ref.name().span()); before it crashes, i get

decl_ref: Span {
    src (ptr): 0x0000000128209020,
    source_id: None,
    start: 0,
    end: 0,
    as_str(): "",
}

It seems that some of these dummy spans are slipping in which the GC see's and clears from the engines. I would have expected these to be recreated again on the next compilation but they don't seem to be?

Here are some more observations.

So it seems that possibly a TyFunctionDecl is being cleared from the DeclEngine during GC that it still expects to be there.

So If i then don’t remove ``TyFunctionDecls during GC and then run again it now crashes when trying to access TyImplTrait`s. I also get it with `TyStructDecl` && `TyAbiDecl`

8: <sway_core::decl_engine::engine::DeclEngine as sway_core::decl_engine::engine::DeclEngineGet<sway_core::decl_engine::id::DeclId<sway_core::language::ty::declaration::impl_trait::TyImplTrait>,sway_core::language::ty::declaration::impl_trait::TyImplTrait>>::get

If I disable clearing the type engine and only clear the decl engine with the below then this seems to work.

decl_engine_clear_module!(
    // function_slab, ty::TyFunctionDecl;
    trait_slab, ty::TyTraitDecl;
    trait_fn_slab, ty::TyTraitFn;
    trait_type_slab, ty::TyTraitType;
    // impl_trait_slab, ty::TyImplTrait;
    // struct_slab, ty::TyStructDecl;
    storage_slab, ty::TyStorageDecl;
    // abi_slab, ty::TyAbiDecl;
    constant_slab, ty::TyConstantDecl;
    enum_slab, ty::TyEnumDecl;
    type_alias_slab, ty::TyTypeAliasDecl;
);

So the above seems to be 1 issue. If I comment out clearing the decl engine and just do the type engine then we encounter a whole seperate problem.

thread '<unnamed>' panicked at sway-core/src/concurrent_slab.rs:90:14:
no entry found for key
stack backtrace:
   0: rust_begin_unwind
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:72:14
   2: core::panicking::panic_display
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:178:5
   3: core::panicking::panic_str
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:152:5
   4: core::option::expect_failed
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:1985:5
   5: core::option::Option<T>::expect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:894:21
   6: <std::collections::hash::map::HashMap<K,V,S> as core::ops::index::Index<&Q>>::index
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/collections/hash/map.rs:1341:23
   7: sway_core::concurrent_slab::ConcurrentSlab<T>::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/concurrent_slab.rs:90:14
   8: sway_core::type_system::engine::TypeEngine::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/engine.rs:92:9
   9: sway_core::semantic_analysis::ast_node::expression::typed_expression::method_application::monomorphize_method_application
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression/method_application.rs:599:19
  10: sway_core::semantic_analysis::ast_node::expression::typed_expression::method_application::type_check_method_application
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression/method_application.rs:363:5
  11: sway_core::semantic_analysis::ast_node::expression::typed_expression::<impl sway_core::language::ty::expression::expression::TyExpression>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression.rs:264:17
  12: sway_core::semantic_analysis::ast_node::<impl sway_core::language::ty::ast_node::TyAstNode>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/mod.rs:148:33
  13: sway_core::semantic_analysis::ast_node::code_block::<impl sway_core::language::ty::code_block::TyCodeBlock>::type_check::{{closure}}
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/code_block.rs:23:17
  14: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:294:13
  15: <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/slice/iter/macros.rs:319:38
  16: <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/adapters/filter_map.rs:62:9
  17: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/spec_from_iter_nested.rs:26:32
  18: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/spec_from_iter.rs:33:9
  19: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/mod.rs:2753:9
  20: core::iter::traits::iterator::Iterator::collect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/traits/iterator.rs:2054:9
  21: sway_core::semantic_analysis::ast_node::code_block::<impl sway_core::language::ty::code_block::TyCodeBlock>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/code_block.rs:18:34
  22: sway_core::semantic_analysis::ast_node::declaration::function::<impl sway_core::language::ty::declaration::function::TyFunctionDecl>::type_check_body
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/function.rs:200:20
  23: sway_core::semantic_analysis::ast_node::declaration::function::<impl sway_core::language::ty::declaration::function::TyFunctionDecl>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/function.rs:36:9
  24: sway_core::semantic_analysis::ast_node::declaration::impl_trait::type_check_impl_method
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:996:9
  25: sway_core::semantic_analysis::ast_node::declaration::impl_trait::type_check_trait_implementation
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:814:39
  26: sway_core::semantic_analysis::ast_node::declaration::impl_trait::<impl sway_core::language::ty::declaration::impl_trait::TyImplTrait>::type_check_impl_trait
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:162:33
  27: sway_core::semantic_analysis::ast_node::declaration::declaration::<impl sway_core::language::ty::declaration::declaration::TyDecl>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs:171:27

@JoshuaBatty JoshuaBatty changed the title LSP autocomplete causes panic The garbage collector and autogenerated types are causing a runtime panic Mar 7, 2024
@JoshuaBatty JoshuaBatty added the compiler: frontend Everything to do with type checking, control flow analysis, and everything between parsing and IRgen label Mar 7, 2024
@xunilrj
Copy link
Contributor

xunilrj commented Mar 7, 2024

The issue is that auto generated code, or anything using Span:dummy(), does not have a source_id nor a module_id and it is being collected in every gc. We just need to retain them.

@JoshuaBatty
Copy link
Member

I did suspect that and replaced all of the Span::dummy() 's with a dummy span containing a source_id = Some(SourceId::reserved()) so that it wouldn't get cleared by the GC. However, I was then running into other compiler panics with unify_check.

thread '<unnamed>' panicked at sway-core/src/concurrent_slab.rs:90:14:
no entry found for key
stack backtrace:
   0: rust_begin_unwind
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:72:14
   2: core::panicking::panic_display
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:178:5
   3: core::panicking::panic_str
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/panicking.rs:152:5
   4: core::option::expect_failed
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:1985:5
   5: core::option::Option<T>::expect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/option.rs:894:21
   6: <std::collections::hash::map::HashMap<K,V,S> as core::ops::index::Index<&Q>>::index
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/std/src/collections/hash/map.rs:1341:23
   7: sway_core::concurrent_slab::ConcurrentSlab<T>::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/concurrent_slab.rs:90:14
   8: sway_core::type_system::engine::TypeEngine::get
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/engine.rs:100:9
   9: sway_core::type_system::unify::unify_check::UnifyCheck::check_inner
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/unify/unify_check.rs:232:26
  10: sway_core::type_system::unify::unify_check::UnifyCheck::check_multiple
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/unify/unify_check.rs:662:17
  11: sway_core::type_system::unify::unify_check::UnifyCheck::check_inner
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/unify/unify_check.rs:270:24
  12: sway_core::type_system::unify::unify_check::UnifyCheck::check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/type_system/unify/unify_check.rs:220:9
  13: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type::{{closure}}
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:599:53
  14: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type_inner
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:725:27
  15: sway_core::semantic_analysis::namespace::trait_map::TraitMap::filter_by_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:603:9
  16: sway_core::semantic_analysis::namespace::trait_map::TraitMap::insert_for_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/namespace/trait_map.rs:450:21
  17: sway_core::semantic_analysis::type_check_context::TypeCheckContext::insert_trait_implementation_for_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/type_check_context.rs:1536:9
  18: sway_core::semantic_analysis::type_check_context::TypeCheckContext::find_method_for_type
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/type_check_context.rs:1177:17
  19: sway_core::semantic_analysis::ast_node::expression::typed_expression::method_application::resolve_method_name
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression/method_application.rs:507:28
  20: sway_core::semantic_analysis::ast_node::expression::typed_expression::method_application::type_check_method_application
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression/method_application.rs:52:49
  21: sway_core::semantic_analysis::ast_node::expression::typed_expression::<impl sway_core::language::ty::expression::expression::TyExpression>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/expression/typed_expression.rs:264:17
  22: sway_core::semantic_analysis::ast_node::<impl sway_core::language::ty::ast_node::TyAstNode>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/mod.rs:148:33
  23: sway_core::semantic_analysis::ast_node::code_block::<impl sway_core::language::ty::code_block::TyCodeBlock>::type_check::{{closure}}
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/code_block.rs:23:17
  24: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/ops/function.rs:294:13
  25: <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::find_map
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/slice/iter/macros.rs:319:38
  26: <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::next
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/adapters/filter_map.rs:62:9
  27: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/spec_from_iter_nested.rs:26:32
  28: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/spec_from_iter.rs:33:9
  29: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/alloc/src/vec/mod.rs:2753:9
  30: core::iter::traits::iterator::Iterator::collect
             at /rustc/82e1608dfa6e0b5569232559e3d385fea5a93112/library/core/src/iter/traits/iterator.rs:2054:9
  31: sway_core::semantic_analysis::ast_node::code_block::<impl sway_core::language::ty::code_block::TyCodeBlock>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/code_block.rs:18:34
  32: sway_core::semantic_analysis::ast_node::declaration::function::<impl sway_core::language::ty::declaration::function::TyFunctionDecl>::type_check_body
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/function.rs:200:20
  33: sway_core::semantic_analysis::ast_node::declaration::function::<impl sway_core::language::ty::declaration::function::TyFunctionDecl>::type_check
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/function.rs:36:9
  34: sway_core::semantic_analysis::ast_node::declaration::impl_trait::type_check_impl_method
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:996:9
  35: sway_core::semantic_analysis::ast_node::declaration::impl_trait::type_check_trait_implementation
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:814:39
  36: sway_core::semantic_analysis::ast_node::declaration::impl_trait::<impl sway_core::language::ty::declaration::impl_trait::TyImplTrait>::type_check_impl_trait
             at /Users/josh/Documents/rust/fuel/sway/sway-core/src/semantic_analysis/ast_node/declaration/impl_trait.rs:238:33

tritao added a commit that referenced this issue Mar 11, 2024
## Description

This PR makes sure we assign specific module ids to the generated auto
impl decls.

Helps with #5698.

## Checklist

- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [x] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [x] I have added tests that prove my fix is effective or that my
feature works.
- [x] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.

---------

Co-authored-by: IGI-111 <igi-111@protonmail.com>
@JoshuaBatty
Copy link
Member

Should be addressed in #5813

@IGI-111 IGI-111 added the team:compiler Compiler Team label Feb 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working compiler: frontend Everything to do with type checking, control flow analysis, and everything between parsing and IRgen language server LSP server team:compiler Compiler Team
Projects
None yet
Development

No branches or pull requests

6 participants