From 2c25fd5d51d2fdebd6276eac8b9bd3fd9f6f8f04 Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Thu, 18 Jun 2026 14:25:39 -0700 Subject: [PATCH] Treat missing trait declaration as not builtin in trait_impl_is_builtin Signed-off-by: Sai Asish Y --- src/Translate.ml | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/Translate.ml b/src/Translate.ml index de8040141..50437f1c8 100644 --- a/src/Translate.ml +++ b/src/Translate.ml @@ -1046,20 +1046,25 @@ let trait_impl_is_builtin (ctx : gen_ctx) (id : Pure.trait_impl_id) : bool = [%silent_unwrap_opt_span] None (TraitImplId.Map.find_opt id ctx.trans_trait_impls) in - let trait_decl = - Pure.TraitDeclId.Map.find trait_impl.impl_trait.trait_decl_id + (* The trait declaration may have been dropped earlier while the impl is + still exported (e.g. mutually recursive trait clusters): in that case we + can't be looking at a builtin impl, so treat it as not builtin. *) + match + Pure.TraitDeclId.Map.find_opt trait_impl.impl_trait.trait_decl_id ctx.trans_trait_decls - in - let builtin_info = - let open ExtractBuiltin in - let trait_impl = - TraitImplId.Map.find trait_impl.def_id ctx.crate.trait_impls - in - match_name_with_generics_find_opt ctx.trans_ctx trait_decl.item_meta.name - trait_impl.impl_trait.generics - (builtin_trait_impls_map ()) - in - Option.is_some builtin_info + with + | None -> false + | Some trait_decl -> + let builtin_info = + let open ExtractBuiltin in + let trait_impl = + TraitImplId.Map.find trait_impl.def_id ctx.crate.trait_impls + in + match_name_with_generics_find_opt ctx.trans_ctx + trait_decl.item_meta.name trait_impl.impl_trait.generics + (builtin_trait_impls_map ()) + in + Option.is_some builtin_info (** Export a trait declaration. *) let export_trait_decl (fmt : Format.formatter) (_config : gen_config)