74ed7dfd09b30a03e9e0063e6efbe5c8d408b707 — Michael Forney 5 months ago a3a4390 master
amd64: Use member class for aggregate parameter temporary

Otherwise, we may end up using an integer and floating class for the
same register, triggering an assertion failure:

	qbe: rega.c:215: pmrec: Assertion `KBASE(pm[i].cls) == KBASE(*k)' failed.

Test case:

	type :T = { s }
	export
	function $d(:T %.1, s %.2) {
	@start
		call $c(s %.2)
		ret
	}
1 files changed, 2 insertions(+), 2 deletions(-)

M amd64/sysv.c
M amd64/sysv.c => amd64/sysv.c +2 -2
@@ 467,10 467,10 @@ selpar(Fn *fn, Ins *i0, Ins *i1)
 		}
 		r = rarg(a->cls[0], &ni, &ns);
 		if (i->op == Oparc) {
-			emit(Ocopy, Kl, a->ref[0], r, R);
+			emit(Ocopy, a->cls[0], a->ref[0], r, R);
 			if (a->size > 8) {
 				r = rarg(a->cls[1], &ni, &ns);
-				emit(Ocopy, Kl, a->ref[1], r, R);
+				emit(Ocopy, a->cls[1], a->ref[1], r, R);
 			}
 		} else
 			emit(Ocopy, i->cls, i->to, r, R);