Skip to content

cmd/vet: warn on 3-clause loops where an iterator variable contains a lock type when GoVersion>=1.22 #66387

Closed
@timothy-king

Description

@timothy-king

Proposal Details

Extend the copylock analyzer to emit a warning on the copy of the loop variable between iterations that occurs immediately before the loop's Post statement in Go >= 1.22. The requirements for the warning are when:

  • a 3-clause for loop declares a loop scoped variable containing a lock type,
  • the file's GoVersion is >= 1.22,
  • the name of the variable is not _, and
  • the Init statement of the for loop is not otherwise reported.

Example:

for _, mu := 0, (sync.Mutex{}); x < 10; x++ { // want "for loop iteration copies lock value to mu: sync.Mutex"
	_ = mu.TryLock()
}

Relevant part of the spec https://go.dev/ref/spec#For_clause :

The variable used by each subsequent iteration is declared implicitly before executing the post statement and initialized to the value of the previous iteration's variable at that moment.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    Accepted

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions