compile error for using slice as array init expr type

when there are more than 0 elements.

closes #2764
This commit is contained in:
Andrew Kelley 2019-06-27 12:24:13 -04:00
parent 6cd3995754
commit 1ccf6a2c9e
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
2 changed files with 16 additions and 3 deletions

View File

@ -17280,7 +17280,11 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct
ZigType *actual_array_type = ir_resolve_type(ira, elem_ptr_instruction->init_array_type->child);
if (type_is_invalid(actual_array_type))
return ira->codegen->invalid_instruction;
assert(actual_array_type->id == ZigTypeIdArray);
if (actual_array_type->id != ZigTypeIdArray) {
ir_add_error(ira, elem_ptr_instruction->init_array_type,
buf_sprintf("expected array type or [_], found slice"));
return ira->codegen->invalid_instruction;
}
ConstExprValue *array_init_val = create_const_vals(1);
array_init_val->special = ConstValSpecialStatic;
@ -19575,7 +19579,7 @@ static IrInstruction *ir_analyze_instruction_container_init_list(IrAnalyze *ira,
size_t elem_count = instruction->item_count;
if (is_slice(container_type)) {
ir_add_error(ira, &instruction->base,
ir_add_error(ira, instruction->container_type,
buf_sprintf("expected array type or [_], found slice"));
return ira->codegen->invalid_instruction;
}

View File

@ -2,13 +2,22 @@ const tests = @import("tests.zig");
const builtin = @import("builtin");
pub fn addCases(cases: *tests.CompileErrorContext) void {
cases.add(
"slice passed as array init type with elems",
\\export fn entry() void {
\\ const x = []u8{1, 2};
\\}
,
"tmp.zig:2:15: error: expected array type or [_], found slice",
);
cases.add(
"slice passed as array init type",
\\export fn entry() void {
\\ const x = []u8{};
\\}
,
"tmp.zig:2:19: error: expected array type or [_], found slice",
"tmp.zig:2:15: error: expected array type or [_], found slice",
);
cases.add(