{"record":{"id":"ce81f25da0b07576","repo":"golang/go","slug":"unqualified-symbol-name-v","errorCode":null,"errorMessage":"unqualified symbol name: %v","messagePattern":"unqualified symbol name: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cmd/internal/dwarf/dwarf.go","lineNumber":1214,"sourceCode":"\n// Emit DWARF attributes and child DIEs for an 'abstract' subprogram.\n// The abstract subprogram DIE for a function contains its\n// location-independent attributes (name, type, etc). Other instances\n// of the function (any inlined copy of it, or the single out-of-line\n// 'concrete' instance) will contain a pointer back to this abstract\n// DIE (as a space-saving measure, so that name/type etc doesn't have\n// to be repeated for each inlined copy).\nfunc PutAbstractFunc(ctxt Context, s *FnState) error {\n\tif logDwarf {\n\t\tctxt.Logf(\"PutAbstractFunc(%v)\\n\", s.Absfn)\n\t}\n\n\tabbrev := DW_ABRV_FUNCTION_ABSTRACT\n\tUleb128put(ctxt, s.Absfn, int64(abbrev))\n\n\tfullname := s.Name\n\tif strings.HasPrefix(s.Name, `\"\".`) {\n\t\treturn fmt.Errorf(\"unqualified symbol name: %v\", s.Name)\n\t}\n\tputattr(ctxt, s.Absfn, abbrev, DW_FORM_string, DW_CLS_STRING, int64(len(fullname)), fullname)\n\n\t// DW_AT_inlined value\n\tputattr(ctxt, s.Absfn, abbrev, DW_FORM_data1, DW_CLS_CONSTANT, int64(DW_INL_inlined), nil)\n\n\t// TODO(mdempsky): Shouldn't we write out StartPos.FileIndex() too?\n\tputattr(ctxt, s.Absfn, abbrev, DW_FORM_udata, DW_CLS_CONSTANT, int64(s.StartPos.RelLine()), nil)\n\n\tvar ev int64\n\tif s.External {\n\t\tev = 1\n\t}\n\tputattr(ctxt, s.Absfn, abbrev, DW_FORM_flag, DW_CLS_FLAG, ev, 0)\n\n\t// Child variables (may be empty)\n\tvar flattened []*Var\n","sourceCodeStart":1196,"sourceCodeEnd":1232,"githubUrl":"https://github.com/golang/go/blob/b6b368adc57c96c3151d224d172029f233ead2c3/src/cmd/internal/dwarf/dwarf.go#L1196-L1232","documentation":"Returned by PutAbstractFunc when s.Name begins with the literal prefix `\"\".` — the symbol's package qualifier is empty, meaning the name was not fully qualified (package path missing). DWARF abstract-origin function DIEs must carry a fully-qualified name so concrete inlined instances can reference them unambiguously; an unqualified name breaks that contract and is rejected before emission.","triggerScenarios":"The compiler/linker passes a function name to PutAbstractFunc whose package path resolved to empty (the `\"\".` placeholder). This reflects a downstream symbol-name plumbing bug where packagepath was not set, not a user Go-source error.","commonSituations":"Encountered with packages whose import path computation yields empty (path-agnostic builds, unusual build modes like -overlay, plugin/shared builds, or tip regressions in the symbol table). Essentially an internal invariant violation.","solutions":["Rebuild on a stable released Go toolchain.","Report with the reproducer at https://go.dev/issue.","If using -overlay or exotic build modes, try a normal build to see if the path resolves.","Temporarily disable inlining/DWARF to confirm linkage works without abstract DIEs."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use released toolchains; report internal plumbing bugs upstream.","Avoid -overlay/exotic build modes if you see this; try a normal build.","Disable DWARF as a workaround while the bug is fixed."],"tags":["dwarf","linker","symbols","debug-info","internal"],"backgroundTag":null,"analyzedSha":"b6b368adc57c96c3151d224d172029f233ead2c3","analyzedAt":"2026-08-12T00:22:02.250Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}