| author | |
| committer | |
| log | ce14c543d165efbd926ea6bd654d999c625b366f |
| tree | 8d4f08b3ff22dee7a98fd09b157f008ba114c035 |
| parent | a4ce10df8087e7051340e14e4acd018092f935f0 |
3 files changed, 19 insertions(+), 0 deletions(-)
src/analyze.cpp+4| ... | ... | @@ -2671,6 +2671,10 @@ static Error resolve_struct_alignment(CodeGen *g, ZigType *struct_type) { |
| 2671 | 2671 | } |
| 2672 | 2672 | } |
| 2673 | 2673 | |
| 2674 | if (!type_has_bits(struct_type)) { | |
| 2675 | assert(struct_type->abi_align == 0); | |
| 2676 | } | |
| 2677 | ||
| 2674 | 2678 | struct_type->data.structure.resolve_loop_flag_other = false; |
| 2675 | 2679 | |
| 2676 | 2680 | if (struct_type->data.structure.resolve_status == ResolveStatusInvalid) { |
src/ir.cpp+6| ... | ... | @@ -14839,6 +14839,12 @@ static IrInstruction *ir_analyze_alloca(IrAnalyze *ira, IrInstruction *source_in |
| 14839 | 14839 | if (align != 0) { |
| 14840 | 14840 | if ((err = type_resolve(ira->codegen, var_type, ResolveStatusAlignmentKnown))) |
| 14841 | 14841 | return ira->codegen->invalid_instruction; |
| 14842 | if (!type_has_bits(var_type)) { | |
| 14843 | ir_add_error(ira, source_inst, | |
| 14844 | buf_sprintf("variable '%s' of zero-bit type '%s' has no in-memory representation, it cannot be aligned", | |
| 14845 | name_hint, buf_ptr(&var_type->name))); | |
| 14846 | return ira->codegen->invalid_instruction; | |
| 14847 | } | |
| 14842 | 14848 | } |
| 14843 | 14849 | assert(result->base.value.data.x_ptr.special != ConstPtrSpecialInvalid); |
| 14844 | 14850 |
test/compile_errors.zig+9| ... | ... | @@ -6462,4 +6462,13 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 6462 | 6462 | "tmp.zig:5:30: error: expression value is ignored", |
| 6463 | 6463 | "tmp.zig:9:30: error: expression value is ignored", |
| 6464 | 6464 | ); |
| 6465 | ||
| 6466 | cases.add( | |
| 6467 | "aligned variable of zero-bit type", | |
| 6468 | \\export fn f() void { | |
| 6469 | \\ var s: struct {} align(4) = undefined; | |
| 6470 | \\} | |
| 6471 | , | |
| 6472 | "tmp.zig:2:5: error: variable 's' of zero-bit type 'struct:2:12' has no in-memory representation, it cannot be aligned", | |
| 6473 | ); | |
| 6465 | 6474 | } |