stage1: improve packed struct array padding error message

This commit is contained in:
Kirk Scheibelhut 2021-11-20 14:31:18 -08:00 committed by Andrew Kelley
parent ed70f9981c
commit 065f40a3c5
2 changed files with 6 additions and 5 deletions

View File

@ -1777,11 +1777,12 @@ static Error emit_error_unless_type_allowed_in_packed_container(CodeGen *g, ZigT
if ((err = emit_error_unless_type_allowed_in_packed_container(g, elem_type, source_node, container_name)))
return err;
// TODO revisit this when doing https://github.com/ziglang/zig/issues/1512
if (type_size(g, type_entry) * 8 == type_size_bits(g, type_entry))
return ErrorNone;
size_t abi_size_in_bits = type_size(g, type_entry) * 8;
size_t size_in_bits = type_size_bits(g, type_entry);
if (abi_size_in_bits == size_in_bits) return ErrorNone;
add_node_error(g, source_node,
buf_sprintf("array of '%s' not allowed in packed %s due to padding bits",
buf_ptr(&elem_type->name), container_name));
buf_sprintf("array of '%s' not allowed in packed %s due to padding bits (must be padded from %zu to %zu bits)",
buf_ptr(&elem_type->name), container_name, size_in_bits, abi_size_in_bits));
return ErrorSemanticAnalyzeFail;
}
case ZigTypeIdStruct:

View File

@ -2995,7 +2995,7 @@ pub fn addCases(ctx: *TestContext) !void {
\\};
, &[_][]const u8{
"tmp.zig:2:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
"tmp.zig:5:5: error: array of 'u24' not allowed in packed struct due to padding bits",
"tmp.zig:5:5: error: array of 'u24' not allowed in packed struct due to padding bits (must be padded from 48 to 64 bits)",
"tmp.zig:8:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
"tmp.zig:11:5: error: non-packed, non-extern struct 'S' not allowed in packed struct; no guaranteed in-memory representation",
"tmp.zig:14:5: error: non-packed, non-extern struct 'U' not allowed in packed struct; no guaranteed in-memory representation",