Regression test for 'references' bug golang/go#61618:
references to instantiated fields were missing.

-- go.mod --
module example.com
go 1.18

-- a.go --
package a

// This file is adapted from the example in the issue.

type builder[S ~[]F, F ~string] struct {
	name string
	elements S //@loc(def, "elements"), refs(def, def, assign, use)
	elemData map[F][]ElemData[F]
}

type ElemData[F ~string] struct {
  Name F
}

type BuilderImpl[S ~[]F, F ~string] struct{ builder[S, F] }

func NewBuilderImpl[S ~[]F, F ~string](name string)  *BuilderImpl[S, F] {
  impl := &BuilderImpl[S,F]{
	builder[S, F]{
	  name: name,
	  elements: S{}, //@loc(assign, "elements"), refs(assign, def, assign, use)
	  elemData: map[F][]ElemData[F]{},
	},
  }

  _ = impl.elements //@loc(use, "elements"), refs(use, def, assign, use)
  return impl
}
