Skip to content

dupl linter panics #5504

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
6 of 7 tasks
SuperSandro2000 opened this issue Mar 3, 2025 · 11 comments · Fixed by #5512
Closed
6 of 7 tasks

dupl linter panics #5504

SuperSandro2000 opened this issue Mar 3, 2025 · 11 comments · Fixed by #5512
Labels
bug Something isn't working feedback required Requires additional feedback

Comments

@SuperSandro2000
Copy link
Contributor

SuperSandro2000 commented Mar 3, 2025

Welcome

  • Yes, I'm using a binary release within 2 latest releases. Only such installations are supported.
  • Yes, I've searched similar issues on GitHub and didn't find any.
  • Yes, I've read the typecheck section of the FAQ.
  • Yes, I've tried with the standalone linter if available (e.g., gocritic, go vet, etc.).
  • I agree to follow this project's Code of Conduct

How did you install golangci-lint?

Nix

Description of the problem

Unfortunately the project I ran golangci-lint is not open source but I can share so much:
Inside the project exists a pkg/nxos/10_4_3 a directory with auto generated code with lots of reflections. There are roughly 50 auto files between ~7k and ~12k lines, sometimes 28k each. The type names in there are pretty long and it is often that they exceed 100 characters.

When running golangci-lint on that repo with the dupl linter enabled we hit the following panic:

I know that this is not much to work with but I could run debugging code on the repo to shade some more details on this. From my first naive look it looks like that we are trying to read from closed channels 😅

log.txt

When removing dupl from our config the issue no longer appears.

Version of golangci-lint

 ➜ golangci-lint --version
golangci-lint has version 1.64.5 built with go1.24.0 from v1.64.5 on 19700101-00:00:00

Configuration

################################################################################
# This file is AUTOGENERATED with <https://github.com/sapcc/go-makefile-maker> #
# Edit Makefile.maker.yaml instead.                                            #
################################################################################

# Copyright 2024 SAP SE
# SPDX-License-Identifier: Apache-2.0

run:
  timeout: 5m # 1m by default
  modules-download-mode: readonly

output:
  # Do not print lines of code with issue.
  print-issued-lines: false

issues:
  exclude:
    # It is idiomatic Go to reuse the name 'err' with ':=' for subsequent errors.
    # Ref: https://go.dev/doc/effective_go#redeclaration
    - 'declaration of "err" shadows declaration at'
  exclude-dirs:
    - pkg/nxos/*
  exclude-rules:
    - path: _test\.go
      linters:
        - bodyclose
        - dupl
  # '0' disables the following options.
  max-issues-per-linter: 0
  max-same-issues: 0

linters-settings:
  dupl:
    # Tokens count to trigger issue, 150 by default.
    threshold: 100
  errcheck:
    # Report about assignment of errors to blank identifier.
    check-blank: true
    # Do not report about not checking of errors in type assertions.
    # This is not as dangerous as skipping error values because an unchecked type assertion just immediately panics.
    # We disable this because it makes a ton of useless noise esp. in test code.
    check-type-assertions: false
  forbidigo:
    analyze-types: true # required for pkg:
    forbid:
      # ioutil package has been deprecated: https://github.com/golang/go/issues/42026
      - ^ioutil\..*$
      # Using http.DefaultServeMux is discouraged because it's a global variable that some packages silently and magically add handlers to (esp. net/http/pprof).
      # Applications wishing to use http.ServeMux should obtain local instances through http.NewServeMux() instead of using the global default instance.
      - ^http\.DefaultServeMux$
      - ^http\.Handle(?:Func)?$
      # Forbid usage of old and archived square/go-jose
      - pkg: ^gopkg\.in/square/go-jose\.v2$
        msg: "gopk.in/square/go-jose is archived and has CVEs. Replace it with gopkg.in/go-jose/go-jose.v2"
      - pkg: ^github.com/coreos/go-oidc$
        msg: "github.com/coreos/go-oidc depends on gopkg.in/square/go-jose which has CVEs. Replace it with github.com/coreos/go-oidc/v3"

      - pkg: ^github.com/howeyc/gopass$
        msg: "github.com/howeyc/gopass is archived, use golang.org/x/term instead"
  goconst:
    ignore-tests: true
    min-occurrences: 5
  gocritic:
    enabled-checks:
      - boolExprSimplify
      - builtinShadow
      - emptyStringTest
      - evalOrder
      - httpNoBody
      - importShadow
      - initClause
      - methodExprCall
      - paramTypeCombine
      - preferFilepathJoin
      - ptrToRefParam
      - redundantSprint
      - returnAfterHttpError
      - stringConcatSimplify
      - timeExprSimplify
      - truncateCmp
      - typeAssertChain
      - typeUnparen
      - unnamedResult
      - unnecessaryBlock
      - unnecessaryDefer
      - weakCond
      - yodaStyleExpr
  goimports:
    # Put local imports after 3rd-party packages.
    local-prefixes: github.wdf.sap.corp/cc/nxos-gnmi-go
  gomoddirectives:
    replace-allow-list:
      # for go-pmtud
      - github.com/mdlayher/arp
    toolchain-forbidden: true
  gosec:
    excludes:
      # gosec wants us to set a short ReadHeaderTimeout to avoid Slowloris attacks, but doing so would expose us to Keep-Alive race conditions (see https://iximiuz.com/en/posts/reverse-proxy-http-keep-alive-and-502s/)
      - G112
      # created file permissions are restricted by umask if necessary
      - G306
  govet:
    enable-all: true
    disable:
      - fieldalignment
  nolintlint:
    require-specific: true
  stylecheck:
    dot-import-whitelist:
      - github.com/onsi/ginkgo/v2
      - github.com/onsi/gomega
  usestdlibvars:
    constant-kind: true
    crypto-hash: true
    default-rpc-path: true
    http-method: true
    http-status-code: true
    sql-isolation-level: true
    time-layout: true
    time-month: true
    time-weekday: true
    tls-signature-scheme: true
  usetesting:
    os-setenv: true
    os-temp-dir: true
  whitespace:
    # Enforce newlines (or comments) after multi-line function signatures.
    multi-func: true

linters:
  # We use 'disable-all' and enable linters explicitly so that a newer version
  # does not introduce new linters unexpectedly.
  disable-all: true
  enable:
    - bodyclose
    - containedctx
    - copyloopvar
    - dupword
    - durationcheck
    - dupl
    - errcheck
    - errname
    - errorlint
    - exptostd
    - forbidigo
    - ginkgolinter
    - gocheckcompilerdirectives
    - goconst
    - gocritic
    - gofmt
    - goimports
    - gomoddirectives
    - gosec
    - gosimple
    - govet
    - ineffassign
    - intrange
    - misspell
    - nilerr
    - noctx
    - nolintlint
    - nosprintfhostport
    - perfsprint
    - predeclared
    - rowserrcheck
    - sqlclosecheck
    - staticcheck
    - stylecheck
    - typecheck
    - unconvert
    - unparam
    - unused
    - usestdlibvars
    - usetesting
    - whitespace

Go environment

$ go version && go env
go version go1.24.0 linux/amd64
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/sandro/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/sandro/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1803264662=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/home/sandro/src/nxos-gnmi-go/go.mod'
GOMODCACHE='/home/sandro/.cache/go/pkg/mod'
GONOPROXY='git.sr.ht'
GONOSUMDB='git.sr.ht'
GOOS='linux'
GOPATH='/home/sandro/.cache/go'
GOPRIVATE='git.sr.ht'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/nix/store/wk1vg9ksvmqwxhgj7cmvdv1g62v9kff0-go-1.24.0/share/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/sandro/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='local'
GOTOOLDIR='/nix/store/wk1vg9ksvmqwxhgj7cmvdv1g62v9kff0-go-1.24.0/share/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.0'
GOWORK=''
PKG_CONFIG='pkg-config'

Verbose output of running

$ golangci-lint cache clean
$ golangci-lint run -v
INFO golangci-lint has version 1.64.5 built with go1.24.0 from v1.64.5 on 19700101-00:00:00
INFO [config_reader] Config search paths: [./ /home/sandro/src/nxos-gnmi-go /home/sandro/src /home/sandro /home /]
INFO [config_reader] Used config file .golangci.yaml
INFO [goenv] Read go env for 4.392345ms: map[string]string{"GOCACHE":"/home/sandro/.cache/go-build", "GOROOT":"/nix/store/wk1vg9ksvmqwxhgj7cmvdv1g62v9kff0-go-1.24.0/share/go"}
INFO [lintersdb] Active 40 linters: [bodyclose containedctx copyloopvar dupl dupword durationcheck errcheck errname errorlint exptostd forbidigo ginkgolinter gocheckcompilerdirectives goconst gocritic gofmt goimports gomoddirectives gosec gosimple govet ineffassign intrange misspell nilerr noctx nolintlint nosprintfhostport perfsprint predeclared rowserrcheck sqlclosecheck staticcheck stylecheck unconvert unparam unused usestdlibvars usetesting whitespace]
INFO [loader] Go packages loading at mode 8767 (compiled_files|files|name|deps|exports_file|imports|types_sizes) took 402.225914ms
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 1.730194971s
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0xc2f00ea428 stack=[0xc2f00ea000, 0xc3100ea000]
fatal error: stack overflow

and then the log I already attached above

A minimal reproducible example or link to a public repository

Sorry 😓

// add your code here

Validation

  • Yes, I've included all information above (version, config, etc.).

Supporter

@SuperSandro2000 SuperSandro2000 added the bug Something isn't working label Mar 3, 2025
@ldez
Copy link
Member

ldez commented Mar 3, 2025

From my first naive look it looks like that we are trying to read from closed channels 😅

IMO this is more related to something which creates an infinite recursion.

The logs about chan are related to other go routines.

@ldez
Copy link
Member

ldez commented Mar 3, 2025

Do you have symbolic links? or recursive structures?

@ldez ldez added the feedback required Requires additional feedback label Mar 3, 2025
@ldez
Copy link
Member

ldez commented Mar 3, 2025

It's an infinite loop, the stack is clear, it's related to dupl/suffixtree.walkTrans but I don't know how to reproduce the problem, so it's complex to diagnose.

I need more information.

@SuperSandro2000
Copy link
Contributor Author

Do you have symbolic links? or recursive structures?

There shouldn't be any symbolic links. I could imagine that the structures are recursive but it would be hard to figure because the auto generated code is so big.

I try to figure if I can somehow isolate the generated code or share it with you to make things easier to debug.

@SuperSandro2000
Copy link
Contributor Author

SuperSandro2000 commented Mar 7, 2025

I did a quick repro in https://github.com/SuperSandro2000/golangci-lint-dupl-repro

Just running golangci-lint run triggers the stackoverflow for me.

 ➜ golangci-lint run
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0xc09ff80428 stack=[0xc09ff80000, 0xc0bff80000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x1d23e3a?, 0xaec3fc?})
        runtime/panic.go:1101 +0x48 fp=0x7f91b6dbcd18 sp=0x7f91b6dbcce8 pc=0xb35a68
runtime.newstack()
        runtime/stack.go:1107 +0x5bb fp=0x7f91b6dbce50 sp=0x7f91b6dbcd18 pc=0xb1961b
runtime.morestack()
        runtime/asm_amd64.s:621 +0x7a fp=0x7f91b6dbce58 sp=0x7f91b6dbce50 pc=0xb3c33a

goroutine 130 gp=0xc0001fa700 m=5 mp=0xc000089808 [running]:
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992edb0, 0x18f9be, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:69 +0x4e8 fp=0xc09ff80438 sp=0xc09ff80430 pc=0x124f0c8
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ede0, 0x18f9bd, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80580 sp=0xc09ff80438 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ee10, 0x18f9bc, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff806c8 sp=0xc09ff80580 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ee40, 0x18f9bb, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80810 sp=0xc09ff806c8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ee70, 0x18f9ba, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80958 sp=0xc09ff80810 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992eea0, 0x18f9b9, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80aa0 sp=0xc09ff80958 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992eed0, 0x18f9b8, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80be8 sp=0xc09ff80aa0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ef00, 0x18f9b7, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80d30 sp=0xc09ff80be8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ef30, 0x18f9b6, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80e78 sp=0xc09ff80d30 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ef60, 0x18f9b5, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff80fc0 sp=0xc09ff80e78 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992ef90, 0x18f9b4, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81108 sp=0xc09ff80fc0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992efc0, 0x18f9b3, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81250 sp=0xc09ff81108 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992eff0, 0x18f9b2, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81398 sp=0xc09ff81250 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f020, 0x18f9b1, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff814e0 sp=0xc09ff81398 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f050, 0x18f9b0, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81628 sp=0xc09ff814e0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f080, 0x18f9af, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81770 sp=0xc09ff81628 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f0b0, 0x18f9ae, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff818b8 sp=0xc09ff81770 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f0e0, 0x18f9ad, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81a00 sp=0xc09ff818b8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f110, 0x18f9ac, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81b48 sp=0xc09ff81a00 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f140, 0x18f9ab, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81c90 sp=0xc09ff81b48 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f170, 0x18f9aa, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81dd8 sp=0xc09ff81c90 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f1a0, 0x18f9a9, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff81f20 sp=0xc09ff81dd8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f1d0, 0x18f9a8, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82068 sp=0xc09ff81f20 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f200, 0x18f9a7, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff821b0 sp=0xc09ff82068 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f230, 0x18f9a6, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff822f8 sp=0xc09ff821b0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f260, 0x18f9a5, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82440 sp=0xc09ff822f8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f290, 0x18f9a4, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82588 sp=0xc09ff82440 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f2c0, 0x18f9a3, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff826d0 sp=0xc09ff82588 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f2f0, 0x18f9a2, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82818 sp=0xc09ff826d0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f320, 0x18f9a1, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82960 sp=0xc09ff82818 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f350, 0x18f9a0, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82aa8 sp=0xc09ff82960 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f380, 0x18f99f, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82bf0 sp=0xc09ff82aa8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f3b0, 0x18f99e, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82d38 sp=0xc09ff82bf0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f3e0, 0x18f99d, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82e80 sp=0xc09ff82d38 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f410, 0x18f99c, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff82fc8 sp=0xc09ff82e80 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f440, 0x18f99b, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83110 sp=0xc09ff82fc8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f470, 0x18f99a, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83258 sp=0xc09ff83110 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f4a0, 0x18f999, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff833a0 sp=0xc09ff83258 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f4d0, 0x18f998, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff834e8 sp=0xc09ff833a0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f500, 0x18f997, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83630 sp=0xc09ff834e8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f530, 0x18f996, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83778 sp=0xc09ff83630 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f560, 0x18f995, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff838c0 sp=0xc09ff83778 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f590, 0x18f994, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83a08 sp=0xc09ff838c0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f5c0, 0x18f993, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83b50 sp=0xc09ff83a08 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f5f0, 0x18f992, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83c98 sp=0xc09ff83b50 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f620, 0x18f991, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83de0 sp=0xc09ff83c98 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f650, 0x18f990, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff83f28 sp=0xc09ff83de0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f680, 0x18f98f, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff84070 sp=0xc09ff83f28 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f6b0, 0x18f98e, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff841b8 sp=0xc09ff84070 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc04992f6e0, 0x18f98d, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc09ff84300 sp=0xc09ff841b8 pc=0x124ee37
...1636701 frames elided...
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc330, 0x2f, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c370 sp=0xc0bff7c228 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc360, 0x2e, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c4b8 sp=0xc0bff7c370 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc390, 0x2d, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c600 sp=0xc0bff7c4b8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc3c0, 0x2c, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c748 sp=0xc0bff7c600 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc3f0, 0x2b, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c890 sp=0xc0bff7c748 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc420, 0x2a, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7c9d8 sp=0xc0bff7c890 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc450, 0x29, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7cb20 sp=0xc0bff7c9d8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc480, 0x28, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7cc68 sp=0xc0bff7cb20 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc4b0, 0x27, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7cdb0 sp=0xc0bff7cc68 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc4e0, 0x26, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7cef8 sp=0xc0bff7cdb0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc510, 0x25, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d040 sp=0xc0bff7cef8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc540, 0x24, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d188 sp=0xc0bff7d040 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc570, 0x23, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d2d0 sp=0xc0bff7d188 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc5a0, 0x22, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d418 sp=0xc0bff7d2d0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc5d0, 0x21, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d560 sp=0xc0bff7d418 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc600, 0x20, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d6a8 sp=0xc0bff7d560 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc630, 0x1f, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d7f0 sp=0xc0bff7d6a8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc660, 0x1e, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7d938 sp=0xc0bff7d7f0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc690, 0x1d, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7da80 sp=0xc0bff7d938 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc6c0, 0x1c, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7dbc8 sp=0xc0bff7da80 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc6f0, 0x1b, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7dd10 sp=0xc0bff7dbc8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc720, 0x1a, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7de58 sp=0xc0bff7dd10 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc750, 0x19, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7dfa0 sp=0xc0bff7de58 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc780, 0x18, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e0e8 sp=0xc0bff7dfa0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc7b0, 0x17, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e230 sp=0xc0bff7e0e8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc7e0, 0x16, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e378 sp=0xc0bff7e230 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc810, 0x15, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e4c0 sp=0xc0bff7e378 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc840, 0x14, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e608 sp=0xc0bff7e4c0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc870, 0x13, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e750 sp=0xc0bff7e608 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc8a0, 0x12, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e898 sp=0xc0bff7e750 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc8d0, 0x11, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7e9e0 sp=0xc0bff7e898 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc900, 0x10, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7eb28 sp=0xc0bff7e9e0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc930, 0xf, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7ec70 sp=0xc0bff7eb28 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc960, 0xe, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7edb8 sp=0xc0bff7ec70 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc990, 0xd, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7ef00 sp=0xc0bff7edb8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc9c0, 0xc, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f048 sp=0xc0bff7ef00 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dc9f0, 0xb, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f190 sp=0xc0bff7f048 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dca20, 0xa, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f2d8 sp=0xc0bff7f190 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dca50, 0x9, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f420 sp=0xc0bff7f2d8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dca80, 0x8, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f568 sp=0xc0bff7f420 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dcab0, 0x7, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f6b0 sp=0xc0bff7f568 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dcae0, 0x6, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f7f8 sp=0xc0bff7f6b0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dcb10, 0x5, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7f940 sp=0xc0bff7f7f8 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dcb40, 0x4, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7fa88 sp=0xc0bff7f940 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc03b4dcb70, 0x3, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7fbd0 sp=0xc0bff7fa88 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc00d820f40, 0x2, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7fd18 sp=0xc0bff7fbd0 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc00ce287b0, 0x1, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7fe60 sp=0xc0bff7fd18 pc=0x124ee37
github.com/golangci/dupl/suffixtree.walkTrans(0xc071d37b50, 0x0, 0x96, 0xc0711e7a40)
        github.com/golangci/[email protected]/suffixtree/dupl.go:88 +0x257 fp=0xc0bff7ffa8 sp=0xc0bff7fe60 pc=0x124ee37
github.com/golangci/dupl/suffixtree.(*STree).FindDuplOver.func1()
        github.com/golangci/[email protected]/suffixtree/dupl.go:63 +0x26 fp=0xc0bff7ffe0 sp=0xc0bff7ffa8 pc=0x124ebc6
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0bff7ffe8 sp=0xc0bff7ffe0 pc=0xb3e1e1
created by github.com/golangci/dupl/suffixtree.(*STree).FindDuplOver in goroutine 29
        github.com/golangci/[email protected]/suffixtree/dupl.go:62 +0xc5

goroutine 1 gp=0xc000002380 m=nil [sync.WaitGroup.Wait]:
runtime.gopark(0xc00176ad60?, 0xad4134?, 0xc0?, 0x98?, 0x1c019360bd0?)
        runtime/proc.go:435 +0xce fp=0xc00176ad00 sp=0xc00176ace0 pc=0xb3646e
runtime.goparkunlock(...)
        runtime/proc.go:441
runtime.semacquire1(0xc019356d08, 0x0, 0x1, 0x0, 0x18)
        runtime/sema.go:188 +0x21d fp=0xc00176ad68 sp=0xc00176ad00 pc=0xb13e9d
sync.runtime_SemacquireWaitGroup(0xc00176adb8?)
        runtime/sema.go:110 +0x25 fp=0xc00176ada0 sp=0xc00176ad68 pc=0xb37b65
sync.(*WaitGroup).Wait(0xffffffffffffffff?)
        sync/waitgroup.go:118 +0x48 fp=0xc00176adc8 sp=0xc00176ada0 pc=0xb5a1a8
github.com/golangci/golangci-lint/pkg/goanalysis.(*runner).analyze(0xc01936c370, {0xc019241eb8?, 0x1?, 0x1?}, {0xc01934d390?, 0xc01934d390?, 0xc0001243a0?})
        github.com/golangci/golangci-lint/pkg/goanalysis/runner.go:273 +0x5da fp=0xc00176b128 sp=0xc00176adc8 pc=0x11a6a5a
github.com/golangci/golangci-lint/pkg/goanalysis.(*runner).run(0xc01936c370, {0xc01934d390, 0x2, 0x2}, {0xc019241eb8, 0x1, 0x1})
        github.com/golangci/golangci-lint/pkg/goanalysis/runner.go:84 +0x10e fp=0xc00176b178 sp=0xc00176b128 pc=0x11a53ae
github.com/golangci/golangci-lint/pkg/goanalysis.runAnalyzers({0x1fc5650, 0xc019346b80}, 0xc000cb0b40)
        github.com/golangci/golangci-lint/pkg/goanalysis/runners.go:49 +0x513 fp=0xc00176b4b0 sp=0xc00176b178 pc=0x11af573
github.com/golangci/golangci-lint/pkg/goanalysis.MetaLinter.Run({{0xc000432030, 0x2, 0x2}, 0xc000cde930}, {0x0?, 0x89008?}, 0xc000cb0b40)
        github.com/golangci/golangci-lint/pkg/goanalysis/metalinter.go:31 +0x145 fp=0xc00176b538 sp=0xc00176b4b0 pc=0x11a4925
github.com/golangci/golangci-lint/pkg/goanalysis.(*MetaLinter).Run(0x160?, {0x1fbef10?, 0xc000d8d880?}, 0x0?)
        <autogenerated>:1 +0x4f fp=0xc00176b580 sp=0xc00176b538 pc=0x11b286f
github.com/golangci/golangci-lint/pkg/lint.(*Runner).runLinterSafe(0xc00176b690?, {0x1fbef10?, 0xc000d8d880?}, 0xc000cb0b40, 0xc000f22880)
        github.com/golangci/golangci-lint/pkg/lint/runner.go:176 +0xa6 fp=0xc00176b630 sp=0xc00176b580 pc=0x18e0106
github.com/golangci/golangci-lint/pkg/lint.(*Runner).Run.func1()
        github.com/golangci/golangci-lint/pkg/lint/runner.go:144 +0x27 fp=0xc00176b668 sp=0xc00176b630 pc=0x18dffe7
github.com/golangci/golangci-lint/pkg/timeutils.TrackStage[...].func1()
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:134 +0x2b fp=0xc00176b688 sp=0xc00176b668 pc=0x18d516b
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0xc01936c2d0, {0x1d4e6b9, 0x15}, 0xc00176b728)
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x44 fp=0xc00176b6e0 sp=0xc00176b688 pc=0x1059584
github.com/golangci/golangci-lint/pkg/timeutils.TrackStage[...](0x0?, {0x1d4e6b9?, 0x1fc7800?}, 0x1fc7800?)
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:133 +0x6c fp=0xc00176b760 sp=0xc00176b6e0 pc=0x18d50cc
github.com/golangci/golangci-lint/pkg/lint.(*Runner).Run(0xc019360930, {0x1fbef10, 0xc000d8d880}, {0xc000124b68, 0x1, 0x2c3eec0?})
        github.com/golangci/golangci-lint/pkg/lint/runner.go:143 +0x295 fp=0xc00176b928 sp=0xc00176b760 pc=0x18dfa35
github.com/golangci/golangci-lint/pkg/commands.(*runCommand).runAnalysis(0xc0009c7b00, {0x1fbef10, 0xc000d8d880}, {0x2c3eec0, 0x0, 0x0})
        github.com/golangci/golangci-lint/pkg/commands/run.go:398 +0x1e5 fp=0xc00176b9c0 sp=0xc00176b928 pc=0x18f7165
github.com/golangci/golangci-lint/pkg/commands.(*runCommand).runAndPrint(0xc0009c7b00, {0x1fbef10, 0xc000d8d880}, {0x2c3eec0, 0x0, 0x0})
        github.com/golangci/golangci-lint/pkg/commands/run.go:355 +0x25a fp=0xc00176bab8 sp=0xc00176b9c0 pc=0x18f6b7a
github.com/golangci/golangci-lint/pkg/commands.(*runCommand).execute(0xc0009c7b00, 0xc000e25aa0?, {0x2c3eec0, 0x0, 0x0})
        github.com/golangci/golangci-lint/pkg/commands/run.go:261 +0x216 fp=0xc00176bb70 sp=0xc00176bab8 pc=0x18f6216
github.com/golangci/golangci-lint/pkg/commands.(*runCommand).execute-fm(0xc000245100?, {0x2c3eec0?, 0x4?, 0x1caac92?})
        <autogenerated>:1 +0x34 fp=0xc00176bba8 sp=0xc00176bb70 pc=0x18fbe74
github.com/spf13/cobra.(*Command).execute(0xc0009c4f08, {0x2c3eec0, 0x0, 0x0})
        github.com/spf13/[email protected]/command.go:1019 +0xa7b fp=0xc00176bd28 sp=0xc00176bba8 pc=0xcf689b
github.com/spf13/cobra.(*Command).ExecuteC(0xc0009c4908)
        github.com/spf13/[email protected]/command.go:1148 +0x40c fp=0xc00176be00 sp=0xc00176bd28 pc=0xcf720c
github.com/spf13/cobra.(*Command).Execute(...)
        github.com/spf13/[email protected]/command.go:1071
github.com/golangci/golangci-lint/pkg/commands.(*rootCommand).Execute(0xc000d94120)
        github.com/golangci/golangci-lint/pkg/commands/root.go:83 +0x3d fp=0xc00176be20 sp=0xc00176be00 pc=0x18f419d
github.com/golangci/golangci-lint/pkg/commands.Execute({{0x1fa39e8, 0x8}, {0x1fa11c4, 0x6}, {0x1fa1900, 0x7}, {0x1fac590, 0x11}})
        github.com/golangci/golangci-lint/pkg/commands/root.go:17 +0x5a fp=0xc00176be70 sp=0xc00176be20 pc=0x18f3a5a
main.main()
        github.com/golangci/golangci-lint/cmd/golangci-lint/main.go:25 +0xc5 fp=0xc00176bf50 sp=0xc00176be70 pc=0x18fd605
runtime.main()
        runtime/proc.go:283 +0x28b fp=0xc00176bfe0 sp=0xc00176bf50 pc=0xb000eb
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc00176bfe8 sp=0xc00176bfe0 pc=0xb3e1e1

goroutine 2 gp=0xc000002e00 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000084fa8 sp=0xc000084f88 pc=0xb3646e
runtime.goparkunlock(...)
        runtime/proc.go:441
runtime.forcegchelper()
        runtime/proc.go:348 +0xb3 fp=0xc000084fe0 sp=0xc000084fa8 pc=0xb00433
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc000084fe8 sp=0xc000084fe0 pc=0xb3e1e1
created by runtime.init.7 in goroutine 1
        runtime/proc.go:336 +0x1a

goroutine 3 gp=0xc000003340 m=nil [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000085780 sp=0xc000085760 pc=0xb3646e
runtime.goparkunlock(...)
        runtime/proc.go:441
runtime.bgsweep(0xc0000ac000)
        runtime/mgcsweep.go:316 +0xdf fp=0xc0000857c8 sp=0xc000085780 pc=0xae7f5f
runtime.gcenable.gowrap1()
        runtime/mgc.go:204 +0x25 fp=0xc0000857e0 sp=0xc0000857c8 pc=0xadc1e5
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0000857e8 sp=0xc0000857e0 pc=0xb3e1e1
created by runtime.gcenable in goroutine 1
        runtime/mgc.go:204 +0x66

goroutine 4 gp=0xc000003880 m=nil [GC scavenge wait]:
runtime.gopark(0x10000?, 0x1f3cb10?, 0x0?, 0x0?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000085f78 sp=0xc000085f58 pc=0xb3646e
runtime.goparkunlock(...)
        runtime/proc.go:441
runtime.(*scavengerState).park(0x2c10ae0)
        runtime/mgcscavenge.go:425 +0x49 fp=0xc000085fa8 sp=0xc000085f78 pc=0xae5809
runtime.bgscavenge(0xc0000ac000)
        runtime/mgcscavenge.go:658 +0x59 fp=0xc000085fc8 sp=0xc000085fa8 pc=0xae5db9
runtime.gcenable.gowrap2()
        runtime/mgc.go:205 +0x25 fp=0xc000085fe0 sp=0xc000085fc8 pc=0xadc185
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc000085fe8 sp=0xc000085fe0 pc=0xb3e1e1
created by runtime.gcenable in goroutine 1
        runtime/mgc.go:205 +0xa5

goroutine 5 gp=0xc000003dc0 m=nil [finalizer wait]:
runtime.gopark(0x0?, 0x1dfad98?, 0x60?, 0x80?, 0x2000000020?)
        runtime/proc.go:435 +0xce fp=0xc000084630 sp=0xc000084610 pc=0xb3646e
runtime.runfinq()
        runtime/mfinal.go:196 +0x107 fp=0xc0000847e0 sp=0xc000084630 pc=0xadb1a7
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0000847e8 sp=0xc0000847e0 pc=0xb3e1e1
created by runtime.createfing in goroutine 1
        runtime/mfinal.go:166 +0x3d

goroutine 6 gp=0xc0001fa1c0 m=nil [GC worker (idle)]:
runtime.gopark(0x4f307d366b498?, 0x3?, 0x6e?, 0x7c?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000086738 sp=0xc000086718 pc=0xb3646e
runtime.gcBgMarkWorker(0xc00004e2a0)
        runtime/mgc.go:1423 +0xe9 fp=0xc0000867c8 sp=0xc000086738 pc=0xade649
runtime.gcBgMarkStartWorkers.gowrap1()
        runtime/mgc.go:1339 +0x25 fp=0xc0000867e0 sp=0xc0000867c8 pc=0xade525
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0000867e8 sp=0xc0000867e0 pc=0xb3e1e1
created by runtime.gcBgMarkStartWorkers in goroutine 1
        runtime/mgc.go:1339 +0x105

goroutine 18 gp=0xc0004d4000 m=nil [GC worker (idle)]:
runtime.gopark(0x2c408c0?, 0x1?, 0xc4?, 0xaa?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000080738 sp=0xc000080718 pc=0xb3646e
runtime.gcBgMarkWorker(0xc00004e2a0)
        runtime/mgc.go:1423 +0xe9 fp=0xc0000807c8 sp=0xc000080738 pc=0xade649
runtime.gcBgMarkStartWorkers.gowrap1()
        runtime/mgc.go:1339 +0x25 fp=0xc0000807e0 sp=0xc0000807c8 pc=0xade525
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0000807e8 sp=0xc0000807e0 pc=0xb3e1e1
created by runtime.gcBgMarkStartWorkers in goroutine 1
        runtime/mgc.go:1339 +0x105

goroutine 19 gp=0xc0004d41c0 m=nil [GC worker (idle)]:
runtime.gopark(0x4f306bfa35c88?, 0x3?, 0xc?, 0xa0?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000080f38 sp=0xc000080f18 pc=0xb3646e
runtime.gcBgMarkWorker(0xc00004e2a0)
        runtime/mgc.go:1423 +0xe9 fp=0xc000080fc8 sp=0xc000080f38 pc=0xade649
runtime.gcBgMarkStartWorkers.gowrap1()
        runtime/mgc.go:1339 +0x25 fp=0xc000080fe0 sp=0xc000080fc8 pc=0xade525
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc000080fe8 sp=0xc000080fe0 pc=0xb3e1e1
created by runtime.gcBgMarkStartWorkers in goroutine 1
        runtime/mgc.go:1339 +0x105

goroutine 34 gp=0xc000102380 m=nil [GC worker (idle)]:
runtime.gopark(0x4f307bde83c30?, 0x3?, 0x35?, 0x85?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000118738 sp=0xc000118718 pc=0xb3646e
runtime.gcBgMarkWorker(0xc00004e2a0)
        runtime/mgc.go:1423 +0xe9 fp=0xc0001187c8 sp=0xc000118738 pc=0xade649
runtime.gcBgMarkStartWorkers.gowrap1()
        runtime/mgc.go:1339 +0x25 fp=0xc0001187e0 sp=0xc0001187c8 pc=0xade525
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc0001187e8 sp=0xc0001187e0 pc=0xb3e1e1
created by runtime.gcBgMarkStartWorkers in goroutine 1
        runtime/mgc.go:1339 +0x105

goroutine 131 gp=0xc0001fa8c0 m=nil [chan receive]:
runtime.gopark(0xc000b8c180?, 0xc000b8c1e0?, 0x4?, 0x0?, 0x0?)
        runtime/proc.go:435 +0xce fp=0xc000095e60 sp=0xc000095e40 pc=0xb3646e
runtime.chanrecv(0xc0711e7a40, 0xc000095f88, 0x1)
        runtime/chan.go:664 +0x445 fp=0xc000095ed8 sp=0xc000095e60 pc=0xacc7e5
runtime.chanrecv2(0xc05e5ae000?, 0x46f933?)
        runtime/chan.go:511 +0x12 fp=0xc000095f00 sp=0xc000095ed8 pc=0xacc392
github.com/golangci/dupl.Run.func2()
        github.com/golangci/[email protected]/main.go:55 +0x75 fp=0xc000095fe0 sp=0xc000095f00 pc=0x12598d5
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc000095fe8 sp=0xc000095fe0 pc=0xb3e1e1
created by github.com/golangci/dupl.Run in goroutine 29
        github.com/golangci/[email protected]/main.go:54 +0x19c

goroutine 80 gp=0xc0001faa80 m=nil [chan receive]:
runtime.gopark(0xc000bdb180?, 0xc068a7c618?, 0x60?, 0xa7?, 0xc23cc8?)
        runtime/proc.go:435 +0xce fp=0xc00011a718 sp=0xc00011a6f8 pc=0xb3646e
runtime.chanrecv(0xc000d12a10, 0x0, 0x1)
        runtime/chan.go:664 +0x445 fp=0xc00011a790 sp=0xc00011a718 pc=0xacc7e5
runtime.chanrecv1(0x1574167?, 0xc000d129a0?)
        runtime/chan.go:506 +0x12 fp=0xc00011a7b8 sp=0xc00011a790 pc=0xacc372
runtime.unique_runtime_registerUniqueMapCleanup.func2(...)
        runtime/mgc.go:1796
runtime.unique_runtime_registerUniqueMapCleanup.gowrap1()
        runtime/mgc.go:1799 +0x2f fp=0xc00011a7e0 sp=0xc00011a7b8 pc=0xadf32f
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc00011a7e8 sp=0xc00011a7e0 pc=0xb3e1e1
created by unique.runtime_registerUniqueMapCleanup in goroutine 1
        runtime/mgc.go:1794 +0x79

goroutine 29 gp=0xc0001fb880 m=nil [chan receive]:
runtime.gopark(0x30?, 0x1a28d20?, 0x40?, 0x4d?, 0xc001769330?)
        runtime/proc.go:435 +0xce fp=0xc0017692d8 sp=0xc0017692b8 pc=0xb3646e
runtime.chanrecv(0xc0711e7ab0, 0xc001769598, 0x1)
        runtime/chan.go:664 +0x445 fp=0xc001769350 sp=0xc0017692d8 pc=0xacc7e5
runtime.chanrecv2(0x0?, 0xc001769708?)
        runtime/chan.go:511 +0x12 fp=0xc001769378 sp=0xc001769350 pc=0xacc392
github.com/golangci/dupl.makeIssues(0xc0711e7ab0)
        github.com/golangci/[email protected]/main.go:69 +0xd7 fp=0xc0017697d8 sp=0xc001769378 pc=0x1259b37
github.com/golangci/dupl.Run({0xc01034ad88, 0x36, 0x47}, 0x96)
        github.com/golangci/[email protected]/main.go:64 +0x1a6 fp=0xc001769840 sp=0xc0017697d8 pc=0x1259826
github.com/golangci/golangci-lint/pkg/golinters/dupl.runDupl(0xc000000540, 0xc000264dc0)
        github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go:57 +0x45 fp=0xc001769b60 sp=0xc001769840 pc=0x125a6e5
github.com/golangci/golangci-lint/pkg/golinters/dupl.New.func1(0x1b204e0?)
        github.com/golangci/golangci-lint/pkg/golinters/dupl/dupl.go:29 +0x2d fp=0xc001769bd0 sp=0xc001769b60 pc=0x125a50d
github.com/golangci/golangci-lint/pkg/goanalysis.(*action).analyze.func3(...)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_checker.go:182
github.com/golangci/golangci-lint/pkg/goanalysis.(*action).analyze(0xc000ca2f00)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_checker.go:208 +0xb62 fp=0xc001769ea0 sp=0xc001769bd0 pc=0x11a9482
github.com/golangci/golangci-lint/pkg/goanalysis.(*action).analyze-fm()
        <autogenerated>:1 +0x25 fp=0xc001769eb8 sp=0xc001769ea0 pc=0x11b3685
github.com/golangci/golangci-lint/pkg/timeutils.(*Stopwatch).TrackStage(0xc01936c320, {0x1caafca, 0x4}, 0xc000087748)
        github.com/golangci/golangci-lint/pkg/timeutils/stopwatch.go:111 +0x44 fp=0xc001769f10 sp=0xc001769eb8 pc=0x1059584
github.com/golangci/golangci-lint/pkg/goanalysis.(*action).analyzeSafe(0x0?)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_action.go:54 +0x71 fp=0xc001769f70 sp=0xc001769f10 pc=0x11a7911
github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyze.func2(0xc000ca2f00)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:83 +0xa5 fp=0xc001769fc8 sp=0xc001769f70 pc=0x11ac285
github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyze.gowrap2()
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:84 +0x24 fp=0xc001769fe0 sp=0xc001769fc8 pc=0x11ac1a4
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc001769fe8 sp=0xc001769fe0 pc=0xb3e1e1
created by github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyze in goroutine 123
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:78 +0x1e9

goroutine 123 gp=0xc0004d4a80 m=nil [sync.WaitGroup.Wait]:
runtime.gopark(0xc000069cf0?, 0xad4134?, 0x0?, 0x9e?, 0xc000117518?)
        runtime/proc.go:435 +0xce fp=0xc000099c90 sp=0xc000099c70 pc=0xb3646e
runtime.goparkunlock(...)
        runtime/proc.go:441
runtime.semacquire1(0xc010327708, 0x0, 0x1, 0x0, 0x18)
        runtime/sema.go:188 +0x21d fp=0xc000099cf8 sp=0xc000099c90 pc=0xb13e9d
sync.runtime_SemacquireWaitGroup(0xc010341ea8?)
        runtime/sema.go:110 +0x25 fp=0xc000099d30 sp=0xc000099cf8 pc=0xb37b65
sync.(*WaitGroup).Wait(0xc0001175d0?)
        sync/waitgroup.go:118 +0x48 fp=0xc000099d58 sp=0xc000099d30 pc=0xb5a1a8
github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyze(0xc019299680, 0x1, 0xc01922fa40)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:86 +0x2b2 fp=0xc000099e48 sp=0xc000099d58 pc=0x11ac072
github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyzeRecursive.func1()
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:51 +0x1aa fp=0xc000099f00 sp=0xc000099e48 pc=0x11abcea
sync.(*Once).doSlow(0xd4a28c?, 0x0?)
        sync/once.go:78 +0xab fp=0xc000099f58 sp=0xc000099f00 pc=0xb58d2b
sync.(*Once).Do(...)
        sync/once.go:69
github.com/golangci/golangci-lint/pkg/goanalysis.(*loadingPackage).analyzeRecursive(0x0?, 0x0?, 0x0?)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner_loadingpackage.go:40 +0x45 fp=0xc000099f98 sp=0xc000099f58 pc=0x11abb05
github.com/golangci/golangci-lint/pkg/goanalysis.(*runner).analyze.func2(0xc0001177b0?)
        github.com/golangci/golangci-lint/pkg/goanalysis/runner.go:268 +0x28 fp=0xc000099fc8 sp=0xc000099f98 pc=0x11a6b68
github.com/golangci/golangci-lint/pkg/goanalysis.(*runner).analyze.gowrap1()
        github.com/golangci/golangci-lint/pkg/goanalysis/runner.go:270 +0x24 fp=0xc000099fe0 sp=0xc000099fc8 pc=0x11a6b04
runtime.goexit({})
        runtime/asm_amd64.s:1700 +0x1 fp=0xc000099fe8 sp=0xc000099fe0 pc=0xb3e1e1
created by github.com/golangci/golangci-lint/pkg/goanalysis.(*runner).analyze in goroutine 1
        github.com/golangci/golangci-lint/pkg/goanalysis/runner.go:267 +0x5c8

The code is generated with github.com/openconfig/ygot/generator. See generate.sh for details.

@ldez
Copy link
Member

ldez commented Mar 7, 2025

I think it's the first time I saw that: the problem doesn't seem related to recursion but to gigantic slice (200_609 LOC).

@ldez
Copy link
Member

ldez commented Mar 7, 2025

I have a dirty fix: the problem comes because the slice has 3_209_212 literal elements, so I limited the number of elements to analyze (10_000).
I think it's possible to do better but the dupl code is not trivial, so the dirty fix will do the job for now.

FYI, if I limit to 100_000 literals, the analysis of the file (only one file) takes more than 20s on my computer (I use only the dupl code, this is not inside golangci-lint).

  • 10_000 => 0.89s
  • 20_000 => 1.53s
  • 30_000 => 2.57s
  • 40_000 => 3.89s
  • 50_000 => 5.58s
  • 60_000 => 7.95s
  • 70_000 => 10.15s
  • 80_000 => 13.11s
  • 90_000 => 16.62s
  • 100_000 => 21.42s

@ldez
Copy link
Member

ldez commented Mar 7, 2025

I don't know if this is important or not for your use-case, but you can skip the generation of the gigantic slice by using the option -include_schema=false of github.com/openconfig/ygot/generator.

@SuperSandro2000
Copy link
Contributor Author

Nope, the code then fails because we unmarshal some things somewhere undefined: nxos.Unmarshal. (I am not super familiar with the code base)

Can we somehow exclude the directory with the generated code from being presented to dupl at all? I only found settings to excluded found issues.

@ldez
Copy link
Member

ldez commented Mar 8, 2025

Can we somehow exclude the directory with the generated code from being presented to dupl at all?

It's not possible, but my fix works #5504 (comment)

@ldez
Copy link
Member

ldez commented Mar 8, 2025

Note: github.com/openconfig/ygot/generator has several problems from my POV:

None of those points will change the problem with dupl but it can be a good change. Maybe I will open PRs to fix ygot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working feedback required Requires additional feedback
Projects
None yet
2 participants