Signed-off-by: Bor Grošelj Simić <bgs@turminal.net>
---
src/gen.c | 2 +-
tests/08-slices.ha | 6 ++++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/gen.c b/src/gen.c
index 0ed2489..03ea6f7 100644
--- a/src/gen.c
+++ b/src/gen.c
@@ -783,7 +783,7 @@ gen_expr_assign_slice(struct gen_context *ctx, const struct expression *expr)
struct qbe_value vptr = mkqtmp(ctx, ctx->arch.ptr, ".%d");
pushi(ctx->current, &optr, Q_LOADL, &qobj, NULL);
pushi(ctx->current, &vptr, Q_LOADL, &qval, NULL);
- tmp = constl(expr->assign.object->result->array.members->size);
+ tmp = constl(vtype->array.members->size);
pushi(ctx->current, &olen, Q_MUL, &olen, &tmp, NULL);
pushi(ctx->current, NULL, Q_CALL, &ctx->rt.memmove, &optr, &vptr, &olen, NULL);
diff --git a/tests/08-slices.ha b/tests/08-slices.ha
index b24ebf4..63ac661 100644
--- a/tests/08-slices.ha
+++ b/tests/08-slices.ha
@@ -85,6 +85,8 @@ fn zero3(s: []int) void = {
s[..] = [0, 0, 0];
};
+type sl_alias = []int;
+
fn assignment() void = {
let source = [1, 2, 3];
let x: []int = source;
@@ -108,6 +110,10 @@ fn assignment() void = {
assert(z[0] == 1 && z[1] == 42 && z[2] == 69 && z[3] == 1337 && z[4] == 5);
z[2..5] = y;
assert(z[0] == 1 && z[1] == 42 && z[2] == 0 && z[3] == 0 && z[4] == 0);
+ let z: sl_alias = z;
+ z[2..5] = y;
+ let z: *sl_alias = &z;
+ z[2..5] = y;
let x: []int = [];
let opaqueslice: []opaque = x;
--
2.38.4