{"record":{"id":"692cdef2d5d8f34a","repo":"gleam-lang/gleam","slug":"uninferred-constructor-made-it-to-codegen","errorCode":null,"errorMessage":"uninferred constructor made it to codegen ","messagePattern":"uninferred constructor made it to codegen ","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"compiler-core/src/erlang/pattern.rs","lineNumber":207,"sourceCode":"                if let Some(tail) = tail {\n                    self.pattern(builder, &tail.pattern);\n                } else {\n                    builder.empty_list_pattern(SrcSpan {\n                        start: location.end,\n                        end: location.end,\n                    });\n                }\n            }\n\n            Pattern::Constructor {\n                arguments,\n                constructor,\n                location,\n                name_location,\n                ..\n            } => {\n                let Inferred::Known(PatternConstructor { name, .. }) = constructor else {\n                    panic!(\"uninferred constructor made it to codegen \")\n                };\n\n                if arguments.is_empty() {\n                    builder.atom_pattern(*name_location, &to_snake_case(name));\n                } else {\n                    let tuple = builder.start_tuple_pattern(*location);\n                    builder.atom_pattern(*name_location, &to_snake_case(name));\n                    for argument in arguments {\n                        self.pattern(builder, &argument.value);\n                    }\n                    builder.end_tuple_pattern(tuple);\n                }\n            }\n\n            Pattern::StringPrefix {\n                left_side_string,\n                left_side_assignment,\n                right_side_assignment,","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/gleam-lang/gleam/blob/15b07c783065c92bb016b1b74ed0995a5259850f/compiler-core/src/erlang/pattern.rs#L189-L225","documentation":"An internal compiler assertion raised while generating Erlang code for a constructor pattern: the pattern's `constructor` field holds Inferred::Unknown instead of a known PatternConstructor. Constructor names must be resolved during type inference before codegen, so an uninferred constructor indicates an earlier phase failed to annotate the pattern.","triggerScenarios":"Generating code for a Pattern::Constructor whose type inference did not resolve its constructor (e.g. inference was interrupted by earlier errors, or a compiler bug left the inference unresolved).","commonSituations":"Compiling code with pattern matches on custom types where an earlier inference error occurred; usually accompanied by prior error diagnostics; otherwise a compiler bug.","solutions":["Fix any type errors reported earlier in the module; unresolved inference is often downstream of them.","Update gleam to the latest version.","Reduce to a minimal module and file a bug at github.com/gleam-lang/gleam if no prior error was reported."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Ensure inference completed: build and fix all reported type errors before codegen\ngleam check || exit 1","typeGuard":"let Inferred::Known(constructor) = &pattern.constructor else { return Err(...); };","tryCatchPattern":"let status = Command::new(\"gleam\").args([\"build\"]).status()?;\nif !status.success() { /* treat as compiler failure */ }","preventionTips":["Run `gleam check` and clear all type errors before building.","Match only on values of fully resolved custom types.","Report uninferred-constructor panics with a minimal reproducer."],"tags":["compiler","internal","pattern-matching","codegen"],"backgroundTag":"internal-invariant-violation","analyzedSha":"15b07c783065c92bb016b1b74ed0995a5259850f","analyzedAt":"2026-09-14T11:14:59.388Z","contentChangedAt":"2026-09-14T11:14:59.388Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}