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

-- template/template.go --
package template

// Test

import "sync"

func before(s sync.RWMutex) { s.Lock() }
func after(s sync.RWMutex)  { s.RLock() }

-- in/f1/f1.go --
package F1

import "sync"

func example(n int) {
	var x struct {
		mutex sync.RWMutex
	}

	var y struct {
		sync.RWMutex
	}

	type l struct {
		sync.RWMutex
	}

	var z struct {
		l
	}

	var a struct {
		*l
	}

	var b struct{ Lock func() }

	// Match
	x.mutex.Lock()

	// Match
	y.Lock()

	// Match indirect
	z.Lock()

	// Should be no match however currently matches due to:
	// https://golang.org/issue/8584
	// Will start failing when this is fixed then just change golden to
	// No match pointer indirect
	// a.Lock()
	a.Lock()

	// No match
	b.Lock()
}

-- out/f1/f1.go --
package F1

import "sync"

func example(n int) {
	var x struct {
		mutex sync.RWMutex
	}

	var y struct {
		sync.RWMutex
	}

	type l struct {
		sync.RWMutex
	}

	var z struct {
		l
	}

	var a struct {
		*l
	}

	var b struct{ Lock func() }

	// Match
	x.mutex.RLock()

	// Match
	y.RLock()

	// Match indirect
	z.RLock()

	// Should be no match however currently matches due to:
	// https://golang.org/issue/8584
	// Will start failing when this is fixed then just change golden to
	// No match pointer indirect
	// a.Lock()
	a.RLock()

	// No match
	b.Lock()
}
