package fixtures

func rangeValAddress() {
	m := map[string]*string{}

	mySlice := []string{"A", "B", "C"}
	for _, value := range mySlice {
		m["address"] = &value // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress2() {
	m := map[string]*string{}

	mySlice := []string{"A", "B", "C"}
	for i := range mySlice {
		m["address"] = &mySlice[i]
	}
}

func rangeValAddress3() {
	m := map[string]*string{}

	mySlice := []string{"A", "B", "C"}
	for _, value := range mySlice {
		a := &value // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
		m["address"] = a
	}
}

func rangeValAddress4() {
	m := []*string{}

	mySlice := []string{"A", "B", "C"}
	for _, value := range mySlice {
		m = append(m, &value) // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress5() {
	m := map[*string]string{}

	mySlice := []string{"A", "B", "C"}
	for _, value := range mySlice {
		m[&value] = value // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress6() {
	type v struct {
		id string
	}
	m := []*string{}

	mySlice := []v{{id: "A"}, {id: "B"}, {id: "C"}}
	for _, value := range mySlice {
		m = append(m, &value.id) // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress7() {
	type v struct {
		id string
	}
	m := []*string{}

	for _, value := range []v{{id: "A"}, {id: "B"}, {id: "C"}} {
		m = append(m, &value.id) // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress8() {
	type v struct {
		id string
	}
	m := []*string{}

	mySlice := []*v{{id: "A"}, {id: "B"}, {id: "C"}}
	for _, value := range mySlice {
		m = append(m, &value.id)
	}
}

func rangeValAddress9() {
	type v struct {
		id string
	}
	m := []*string{}

	mySlice := map[string]*v{"a": {id: "A"}, "b": {id: "B"}, "c": {id: "C"}}
	for _, value := range mySlice {
		m = append(m, &value.id)
	}
}

func rangeValAddress10() {
	type v struct {
		id string
	}
	m := []*string{}

	for _, value := range map[string]*v{"a": {id: "A"}, "b": {id: "B"}, "c": {id: "C"}} {
		m = append(m, &value.id)
	}
}

func rangeValAddress11() {
	type v struct {
		id string
	}
	m := map[string]*string{}

	for key, value := range map[string]*v{"a": {id: "A"}, "b": {id: "B"}, "c": {id: "C"}} {
		m[key] = &value.id
	}
}

func rangeValAddress12() {
	type v struct {
		id string
	}
	m := map[string]*string{}

	for key, value := range map[string]v{"a": {id: "A"}, "b": {id: "B"}, "c": {id: "C"}} {
		m[key] = &value.id // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}

func rangeValAddress13() {
	type v struct {
		id string
	}
	m := []*string{}

	otherSlice := map[string]*v{"a": {id: "A"}, "b": {id: "B"}, "c": {id: "C"}}
	mySlice := otherSlice
	for _, value := range mySlice {
		m = append(m, &value.id)
	}
}

func rangeValAddress14() {
	type v struct {
		id *string
	}

	m := []v{}
	for _, value := range []string{"A", "B", "C"} {
		a := v{id: &value} // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
		m = append(m, a)
	}
}

func rangeValAddress15() {
	type v struct {
		id *string
	}

	m := []v{}
	for _, value := range []string{"A", "B", "C"} {
		m = append(m, v{id: &value}) // MATCH /suspicious assignment of 'value'. range-loop variables always have the same address/
	}
}
