diff --git a/exportloopref_test.go b/exportloopref_test.go index 444a80c..6633ffb 100644 --- a/exportloopref_test.go +++ b/exportloopref_test.go @@ -46,3 +46,8 @@ func TestDepPointer(t *testing.T) { testdata := analysistest.TestData() analysistest.Run(t, testdata, exportloopref.Analyzer, "deeppointer") } + +func TestReRef(t *testing.T) { + testdata := analysistest.TestData() + analysistest.Run(t, testdata, exportloopref.Analyzer, "reref") +} diff --git a/testdata/src/reref/another_file.go b/testdata/src/reref/another_file.go new file mode 100644 index 0000000..adac634 --- /dev/null +++ b/testdata/src/reref/another_file.go @@ -0,0 +1,4 @@ +package main + +// Moving this map to main.go fixes nil pointer deference +var globalMapInDifferentFile = map[int]*MyStruct{} diff --git a/testdata/src/reref/issue13.go b/testdata/src/reref/issue13.go new file mode 100644 index 0000000..ce9654b --- /dev/null +++ b/testdata/src/reref/issue13.go @@ -0,0 +1,13 @@ +package main + +type MyStruct struct { + MyStructPtrField *int +} + +func main() { + localVal := 0 + arr := []MyStruct{{&localVal}} + for _, p := range arr { + t := *p.MyStructPtrField + globalMapInDifferentFile[t] = &p // want "exporting a pointer for the loop variable p" + }