@[params]
struct Data {
	array []int
}

fn (d Data) len() int {
	return d.array.len
}

fn make_result() []Data {
	return []
}

// make_result2 is here to ensure that
// the branches contain different code,
// so the tests passes even with -cstrict -cc gcc
fn make_result2() []Data {
	return []
}

fn f_doesnotcompile(d Data) []Data {
	return match d.len() {
		1 { make_result() }
		else { make_result2() }
	}
}

fn f_compiles1(d Data) []Data {
	return match d.array.len {
		1 { make_result() }
		else { make_result2() }
	}
}

fn f_compiles2(d Data) []Data {
	length := d.array.len
	return match length {
		1 { make_result() }
		else { make_result2() }
	}
}

fn test_match_in_fn_call() {
	println(f_doesnotcompile())
	assert f_doesnotcompile() == []Data{}
	println(f_compiles1())
	assert f_compiles1() == []Data{}
	println(f_compiles2())
	assert f_compiles2() == []Data{}
}
