mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 12:33:19 +00:00
parent
0ca12ded2f
commit
9e5cd43e6d
@ -12399,7 +12399,8 @@ static ZigType *ir_analyze_array_cat(IrAnalyze *ira, IrInstructionBinOp *instruc
|
||||
assert(ptr_val->data.x_ptr.special == ConstPtrSpecialBaseArray);
|
||||
op1_array_val = ptr_val->data.x_ptr.data.base_array.array_val;
|
||||
op1_array_index = ptr_val->data.x_ptr.data.base_array.elem_index;
|
||||
op1_array_end = op1_array_val->type->data.array.len;
|
||||
ConstExprValue *len_val = &op1_val->data.x_struct.fields[slice_len_index];
|
||||
op1_array_end = bigint_as_unsigned(&len_val->data.x_bigint);
|
||||
} else {
|
||||
ir_add_error(ira, op1,
|
||||
buf_sprintf("expected array or C string literal, found '%s'", buf_ptr(&op1->value.type->name)));
|
||||
@ -12446,6 +12447,8 @@ static ZigType *ir_analyze_array_cat(IrAnalyze *ira, IrInstructionBinOp *instruc
|
||||
op2_array_val = ptr_val->data.x_ptr.data.base_array.array_val;
|
||||
op2_array_index = ptr_val->data.x_ptr.data.base_array.elem_index;
|
||||
op2_array_end = op2_array_val->type->data.array.len;
|
||||
ConstExprValue *len_val = &op2_val->data.x_struct.fields[slice_len_index];
|
||||
op2_array_end = bigint_as_unsigned(&len_val->data.x_bigint);
|
||||
} else {
|
||||
ir_add_error(ira, op2,
|
||||
buf_sprintf("expected array or C string literal, found '%s'", buf_ptr(&op2->value.type->name)));
|
||||
|
||||
@ -723,3 +723,17 @@ test "comptime pointer cast array and then slice" {
|
||||
assert(sliceA[1] == 2);
|
||||
assert(sliceB[1] == 2);
|
||||
}
|
||||
|
||||
test "slice bounds in comptime concatenation" {
|
||||
const bs = comptime blk: {
|
||||
const b = c"11";
|
||||
break :blk b[0..1];
|
||||
};
|
||||
const str = "" ++ bs;
|
||||
assert(str.len == 1);
|
||||
assert(std.mem.eql(u8, str, "1"));
|
||||
|
||||
const str2 = bs ++ "";
|
||||
assert(str2.len == 1);
|
||||
assert(std.mem.eql(u8, str2, "1"));
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user