Running x/tools/cmd/deadcode over the cmd module turned up the following non-test functions that are unreachable (at least on darwin/arm64). Although some are debugging helpers, functions for other OS/ARCHes, or are provided for API symmetry or anticipated future use, many look like vestiges of things no longer needed. It might be worth a quick audit to see how much dead wood can be removed.
cmd/asm/internal/arch/loong64.go:28:6: unreachable func: IsLoong64MUL cmd/asm/internal/asm/asm.go:978:18: unreachable func: Parser.getImmediate cmd/compile/internal/arm/ssa.go:79:16: unreachable func: shift.String cmd/compile/internal/base/hashdebug.go:131:6: unreachable func: DebugHashMatchPos cmd/compile/internal/importer/support.go:22:6: unreachable func: errorf cmd/compile/internal/importer/support.go:34:23: unreachable func: fakeFileSet.pos cmd/compile/internal/importer/support.go:69:6: unreachable func: chanDir cmd/compile/internal/inline/inl.go:1218:6: unreachable func: numNonClosures cmd/compile/internal/inline/inlheur/scoring.go:406:6: unreachable func: LargestPositiveScoreAdjustment cmd/compile/internal/inline/inlheur/trace_off.go:11:6: unreachable func: enableDebugTrace cmd/compile/internal/ir/copy.go:37:6: unreachable func: DeepCopyList cmd/compile/internal/ir/dump.go:24:6: unreachable func: DumpAny cmd/compile/internal/ir/dump.go:45:6: unreachable func: FDumpAny cmd/compile/internal/ir/dump.go:80:18: unreachable func: dumper.Write cmd/compile/internal/ir/dump.go:113:18: unreachable func: dumper.printf cmd/compile/internal/ir/dump.go:123:18: unreachable func: dumper.addr cmd/compile/internal/ir/dump.go:137:18: unreachable func: dumper.dump cmd/compile/internal/ir/dump.go:251:6: unreachable func: commonPrefixLen cmd/compile/internal/ir/expr.go:43:18: unreachable func: miniExpr.isExpr cmd/compile/internal/ir/expr.go:205:18: unreachable func: CallExpr.isStmt cmd/compile/internal/ir/func.go:191:16: unreachable func: Func.isStmt cmd/compile/internal/ir/mini.go:39:20: unreachable func: miniNode.posOr cmd/compile/internal/ir/name.go:67:16: unreachable func: Name.isExpr cmd/compile/internal/ir/stmt.go:33:14: unreachable func: Decl.isStmt cmd/compile/internal/ir/stmt.go:53:18: unreachable func: miniStmt.isStmt cmd/compile/internal/ir/visit.go:162:6: unreachable func: AnyList cmd/compile/internal/liveness/arg.go:53:18: unreachable func: nameOff.String cmd/compile/internal/liveness/arg.go:263:24: unreachable func: argLiveness.print cmd/compile/internal/liveness/arg.go:294:24: unreachable func: argLiveness.printLivenessVec cmd/compile/internal/noder/posmap.go:26:18: unreachable func: posMap.end cmd/compile/internal/noder/reader.go:3667:6: unreachable func: usedLocals cmd/compile/internal/noder/writer.go:2416:18: unreachable func: writer.exprList cmd/compile/internal/reflectdata/reflect.go:1481:6: unreachable func: deref cmd/compile/internal/ssa/biasedsparsemap.go:84:27: unreachable func: biasedSparseMap.add cmd/compile/internal/ssa/debug.go:77:20: unreachable func: liveSlot.absent cmd/compile/internal/ssa/expand_calls.go:810:26: unreachable func: registerCursor.String cmd/compile/internal/ssa/expand_calls.go:844:26: unreachable func: registerCursor.plus cmd/compile/internal/ssa/expand_calls.go:852:26: unreachable func: registerCursor.at cmd/compile/internal/ssa/expand_calls.go:931:23: unreachable func: expandState.intPairTypes cmd/compile/internal/ssa/expand_calls.go:963:23: unreachable func: expandState.regWidth cmd/compile/internal/ssa/expand_calls.go:968:23: unreachable func: expandState.regOffset cmd/compile/internal/ssa/prove.go:26:17: unreachable func: branch.String cmd/compile/internal/ssa/prove.go:147:16: unreachable func: limit.signedMax cmd/compile/internal/ssa/regalloc.go:2940:24: unreachable func: desiredState.clear cmd/compile/internal/ssa/rewrite.go:641:6: unreachable func: extend32Fto64F cmd/compile/internal/ssa/rewrite.go:659:6: unreachable func: auxFrom64F cmd/compile/internal/ssa/rewrite.go:667:6: unreachable func: auxFrom32F cmd/compile/internal/ssa/rewrite.go:680:6: unreachable func: auxTo64F cmd/compile/internal/ssa/rewrite.go:717:6: unreachable func: auxIntToInt128 cmd/compile/internal/ssa/rewrite.go:764:6: unreachable func: int128ToAuxInt cmd/compile/internal/ssa/rewrite.go:843:6: unreachable func: loadLSymOffset cmd/compile/internal/ssa/rewrite.go:1095:6: unreachable func: noteRule cmd/compile/internal/ssa/rewrite.go:1105:6: unreachable func: countRule cmd/compile/internal/ssa/rewrite.go:1270:6: unreachable func: logRule cmd/compile/internal/ssa/rewrite.go:1578:6: unreachable func: GetPPC64Shiftme cmd/compile/internal/ssa/sparsemap.go:60:21: unreachable func: sparseMap.setBit cmd/compile/internal/ssa/sparseset.go:49:21: unreachable func: sparseSet.addAllValues cmd/compile/internal/ssagen/ssa.go:1085:17: unreachable func: state.Logf cmd/compile/internal/ssagen/ssa.go:1086:17: unreachable func: state.Log cmd/compile/internal/ssagen/ssa.go:1090:17: unreachable func: state.Warnl cmd/compile/internal/ssagen/ssa.go:1091:17: unreachable func: state.Debug_checknil cmd/compile/internal/ssagen/ssa.go:1363:17: unreachable func: state.constOffPtrSP cmd/compile/internal/ssagen/ssa.go:5428:17: unreachable func: state.storeArgWithBase cmd/compile/internal/syntax/nodes.go:32:14: unreachable func: node.aNode cmd/compile/internal/syntax/nodes.go:118:14: unreachable func: decl.aDecl cmd/compile/internal/syntax/nodes.go:320:14: unreachable func: expr.aExpr cmd/compile/internal/syntax/nodes.go:461:13: unreachable func: stmt.aStmt cmd/compile/internal/syntax/nodes.go:467:19: unreachable func: simpleStmt.aSimpleStmt cmd/compile/internal/syntax/printer.go:141:6: unreachable func: lineComment cmd/compile/internal/typecheck/iexport.go:247:6: unreachable func: TparamName cmd/compile/internal/typecheck/stmt.go:22:6: unreachable func: typecheckrangeExpr cmd/compile/internal/types/type.go:1726:6: unreachable func: newBasic cmd/compile/internal/types2/api.go:190:6: unreachable func: srcimporter_setUsesCgo cmd/compile/internal/types2/api_predicates.go:67:6: unreachable func: Satisfies cmd/compile/internal/types2/compilersupport.go:17:6: unreachable func: AsSignature cmd/compile/internal/types2/object.go:168:20: unreachable func: object.scopePos cmd/compile/internal/types2/object.go:171:20: unreachable func: object.setType cmd/compile/internal/types2/object.go:272:15: unreachable func: Const.isDependency cmd/compile/internal/types2/object.go:431:13: unreachable func: Var.isDependency cmd/compile/internal/types2/object.go:525:14: unreachable func: Func.isDependency cmd/compile/internal/types2/scope.go:221:20: unreachable func: lazyObject.setType cmd/compile/internal/types2/scope.go:225:20: unreachable func: lazyObject.sameId cmd/compile/internal/types2/scope.go:226:20: unreachable func: lazyObject.scopePos cmd/compile/internal/types2/stmt.go:358:23: unreachable func: Checker.caseTypes_currently_unused cmd/compile/internal/types2/unify.go:150:19: unreachable func: unifier.String cmd/compile/internal/types2/unify.go:177:25: unreachable func: typeParamsById.Len cmd/compile/internal/types2/unify.go:178:25: unreachable func: typeParamsById.Less cmd/compile/internal/types2/unify.go:179:25: unreachable func: typeParamsById.Swap cmd/compile/internal/walk/complit.go:51:22: unreachable func: initContext.String cmd/dist/imports.go:210:6: unreachable func: readComments cmd/dist/util.go:366:6: unreachable func: xsamefile cmd/go/internal/gover/toolchain.go:58:6: unreachable func: ToolchainMax cmd/go/internal/lockedfile/internal/filelock/filelock.go:81:6: unreachable func: IsNotSupported cmd/go/internal/modfetch/coderepo.go:1012:20: unreachable func: codeRepo.modPrefix cmd/go/internal/modfetch/codehost/git.go:394:19: unreachable func: gitRepo.findRef cmd/go/internal/modindex/build.go:122:22: unreachable func: Context.splitPathList cmd/go/internal/modindex/build.go:130:22: unreachable func: Context.isAbsPath cmd/go/internal/modindex/build.go:145:22: unreachable func: Context.hasSubdir cmd/go/internal/modindex/build.go:171:6: unreachable func: hasSubdir cmd/go/internal/modindex/build.go:181:22: unreachable func: Context.gopath cmd/go/internal/modindex/build.go:220:21: unreachable func: NoGoError.Error cmd/go/internal/modindex/build.go:271:6: unreachable func: findImportComment cmd/go/internal/modindex/build.go:322:6: unreachable func: skipSpaceOrComment cmd/go/internal/modindex/build.go:355:6: unreachable func: parseWord cmd/go/internal/modindex/read.go:1043:18: unreachable func: reader.bool cmd/go/internal/modload/buildlist.go:168:25: unreachable func: Requirements.String cmd/go/internal/modload/buildlist.go:662:6: unreachable func: OverrideRoots cmd/go/internal/modload/edit.go:715:19: unreachable func: dqState.String cmd/go/internal/modload/init.go:310:27: unreachable func: MainModuleSet.Toolchain cmd/go/internal/modload/stat_unix.go:21:6: unreachable func: hasWritePerm cmd/go/internal/work/gc.go:444:6: unreachable func: toolVerify cmd/internal/archive/archive.go:501:6: unreachable func: ReadHeader cmd/internal/gcprog/gcprog.go:60:18: unreachable func: Writer.BitIndex cmd/internal/gcprog/gcprog.go:104:18: unreachable func: Writer.ShouldRepeat cmd/internal/gcprog/gcprog.go:169:18: unreachable func: Writer.Append cmd/internal/goobj/objfile.go:638:18: unreachable func: Reader.int64At cmd/internal/goobj/objfile.go:647:18: unreachable func: Reader.int32At cmd/internal/goobj/objfile.go:651:18: unreachable func: Reader.uint16At cmd/internal/goobj/objfile.go:656:18: unreachable func: Reader.uint8At cmd/internal/obj/arm64/asm7.go:1059:6: unreachable func: pcAlignPadLength cmd/internal/obj/arm64/asm7.go:1212:23: unreachable func: codeBuffer.pc cmd/internal/obj/loong64/asm.go:729:6: unreachable func: isuint32 cmd/internal/obj/loong64/obj.go:860:17: unreachable func: ctxt0.addnop cmd/internal/obj/ppc64/asm9.go:2140:6: unreachable func: OPCC cmd/internal/obj/riscv/obj.go:1155:6: unreachable func: regAddr cmd/internal/obj/riscv/obj.go:1163:6: unreachable func: regIAddr cmd/internal/obj/riscv/obj.go:1168:6: unreachable func: regFAddr cmd/internal/obj/s390x/asmz.go:2661:17: unreachable func: ctxtz.addrilrelocoffset cmd/internal/obj/s390x/asmz.go:4705:6: unreachable func: zMII cmd/internal/obj/s390x/asmz.go:4767:6: unreachable func: zRIS cmd/internal/obj/s390x/asmz.go:4805:6: unreachable func: zRRS cmd/internal/obj/s390x/asmz.go:4823:6: unreachable func: zRSI cmd/internal/obj/s390x/asmz.go:4831:6: unreachable func: zRSL cmd/internal/obj/s390x/asmz.go:4869:6: unreachable func: zRXF cmd/internal/obj/s390x/asmz.go:4927:6: unreachable func: zSMI cmd/internal/obj/s390x/asmz.go:4966:6: unreachable func: zSSE cmd/internal/obj/s390x/asmz.go:4976:6: unreachable func: zSSF cmd/internal/obj/x86/asm6.go:2045:6: unreachable func: requireAlignment cmd/internal/obj/x86/obj6.go:984:6: unreachable func: indir_cx cmd/internal/robustio/robustio.go:51:6: unreachable func: IsEphemeralError cmd/internal/script/engine.go:76:6: unreachable func: NewEngine cmd/internal/script/errors.go:53:22: unreachable func: UsageError.Error cmd/link/internal/amd64/asm.go:43:6: unreachable func: PADDR cmd/link/internal/ld/decodesym.go:248:6: unreachable func: decodetypeGcprog cmd/link/internal/ld/link.go:69:22: unreachable func: shlibRelocs.Len cmd/link/internal/ld/link.go:70:22: unreachable func: shlibRelocs.Swap cmd/link/internal/ld/link.go:71:22: unreachable func: shlibRelocs.Less cmd/trace/viewer.go:44:6: unreachable func: viewerTime
Comment From: prattmic
cmd/compile/internal/ir/stmt.go:33:14: unreachable func: Decl.isStmt
These are marker methods to make the type implement Stmt
. Out of curiosity, would adding a static type assertion (var _ Stmt = (*Decl)(nil)
) make deadcode ignore these?
Comment From: adonovan
cmd/compile/internal/ir/stmt.go:33:14: unreachable func: Decl.isStmt
These are marker methods to make the type implement
Stmt
. Out of curiosity, would adding a static type assertion (var _ Stmt = (*Decl)(nil)
) make deadcode ignore these?
Sadly no. There are many ways we could make deadcode smarter, and identifying marker methods is one of them.
Comment From: gabyhelp
Related Code Changes
- cmd/compile: use shorter ANDL/TESTL if upper 32 bits are known to be zero
- cmd/compile: remove more dead code and data structures
- cmd/compile: establish limits of bool to uint8 conversions
- cmd/compile/internal/gc: remove dead code
- cmd/compile: don't CSE flag values in different blocks
- cmd/compile,link: use "go.." for compiler genereated types
- cmd/link: retain only used interface methods
- cmd/compile, cmd/link: use weak reference in itab
- [dev.regabi] cmd/compile: move helpers into package ir [generated]
- cmd/link: prune unused methods
(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)