{"record":{"id":"306f4b828da0d2db","repo":"rust-lang/rust","slug":"item-requires-monomorphization","errorCode":null,"errorMessage":"Item requires monomorphization","messagePattern":"Item requires monomorphization","errorType":"validation","errorClass":"bridge::Error","httpStatus":null,"severity":"error","filePath":"compiler/rustc_public/src/mir/mono.rs","lineNumber":221,"sourceCode":"            .field(\"kind\", &self.kind)\n            .field(\"def\", &self.mangled_name())\n            .field(\"args\", &self.args())\n            .finish()\n    }\n}\n\n/// Try to convert a crate item into an instance.\n/// The item cannot be generic in order to be converted into an instance.\nimpl TryFrom<CrateItem> for Instance {\n    type Error = crate::Error;\n\n    fn try_from(item: CrateItem) -> Result<Self, Self::Error> {\n        with(|context| {\n            let def_id = item.def_id();\n            if !context.requires_monomorphization(def_id) {\n                Ok(context.mono_instance(def_id))\n            } else {\n                Err(bridge::Error::new(\"Item requires monomorphization\".to_string()))\n            }\n        })\n    }\n}\n\n/// Try to convert an instance into a crate item.\n/// Only user defined instances can be converted.\nimpl TryFrom<Instance> for CrateItem {\n    type Error = crate::Error;\n\n    fn try_from(value: Instance) -> Result<Self, Self::Error> {\n        with(|context| {\n            if value.kind == InstanceKind::Item && context.has_body(value.def.def_id()) {\n                Ok(CrateItem(context.instance_def_id(value.def)))\n            } else {\n                Err(bridge::Error::new(format!(\"Item kind `{:?}` cannot be converted\", value.kind)))\n            }\n        })","sourceCodeStart":203,"sourceCodeEnd":239,"githubUrl":"https://github.com/rust-lang/rust/blob/7088e4b63a9516ebfbfe2ab2d999cf01a528ac14/compiler/rustc_public/src/mir/mono.rs#L203-L239","documentation":"Thrown by `impl TryFrom<CrateItem> for Instance` (mono.rs:218) when a crate item is converted to an `Instance` but the item requires monomorphization (i.e. it is generic). A non-generic item can become a single concrete instance; a generic one cannot without explicit type arguments.","triggerScenarios":"Calling `Instance::try_from(crate_item)` / `crate_item.try_into()` on a `CrateItem` whose definition has type parameters, so `context.requires_monomorphization(def_id)` returns true.","commonSituations":"Iterating over `crate_items()` and blindly converting each to an `Instance`; handling a function that was just made generic during a refactor; version changes that add a generic parameter to a previously concrete item.","solutions":["For generic items, use `Instance::resolve(fn_def, &generic_args)` with concrete args instead of `TryFrom`.","Before converting, call the item's generic-count check / inspect `generics_of` and branch to `resolve` when parameters exist.","If you truly need a non-generic instance, ensure the source item has no type parameters."],"exampleFix":"// before\nlet inst: Instance = crate_item.try_into()?;\n\n// after\nlet def = FnDef::try_from(crate_item)?;\nlet args = GenericArgs::empty_for(&def); // or concrete type args\nlet inst = Instance::resolve(def, &args)?;","handlingStrategy":"validation","validationCode":"// Check whether the item is generic before attempting TryFrom conversion.\n// requires_monomorphization is exposed via the context; if unavailable, inspect generics_of.\nif item_has_type_params(crate_item) {\n    // must resolve with explicit args, cannot use TryFrom\n    return Instance::resolve(fn_def, &concrete_args);\n}\nInstance::try_from(crate_item)","typeGuard":"fn is_non_generic_item(item: &CrateItem) -> bool {\n    // heuristic: an item convertible to a mono instance has no type params\n    !item.requires_monomorphization()\n}","tryCatchPattern":null,"preventionTips":["Never assume a crate item is non-generic; branch on generics before TryFrom.","Prefer Instance::resolve with explicit args when walking arbitrary items."],"tags":["rustc-public","instance","monomorphization","generics"],"backgroundTag":null,"analyzedSha":"7088e4b63a9516ebfbfe2ab2d999cf01a528ac14","analyzedAt":"2026-08-10T14:17:03.603Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}