authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-19 17:50:58+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-20 00:50:13+03:00
log3e80aa9079cfad8c95f506b1eb644daeed6cbb7b
tree02ef7d3e94b3f02dc1fc8899a390c6c412f6b8ce
parent540130650f843f0c6aa79c2a2f29e79b33846994

Sema: validate `@alignOf` type


2 files changed, 12 insertions(+), 0 deletions(-)

src/Sema.zig+3
...@@ -16492,6 +16492,9 @@ fn zirAlignOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air...@@ -16492,6 +16492,9 @@ fn zirAlignOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
16492 const inst_data = sema.code.instructions.items(.data)[inst].un_node;16492 const inst_data = sema.code.instructions.items(.data)[inst].un_node;
16493 const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node };16493 const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node };
16494 const ty = try sema.resolveType(block, operand_src, inst_data.operand);16494 const ty = try sema.resolveType(block, operand_src, inst_data.operand);
16495 if (ty.isNoReturn()) {
16496 return sema.fail(block, operand_src, "no align available for type '{}'", .{ty.fmt(sema.mod)});
16497 }
16495 const target = sema.mod.getTarget();16498 const target = sema.mod.getTarget();
16496 const val = try ty.lazyAbiAlignment(target, sema.arena);16499 const val = try ty.lazyAbiAlignment(target, sema.arena);
16497 if (val.tag() == .lazy_align) {16500 if (val.tag() == .lazy_align) {
test/cases/compile_errors/alignOf_bad_type.zig created+9
...@@ -0,0 +1,9 @@
1export fn entry() usize {
2 return @alignOf(noreturn);
3}
4
5// error
6// backend=stage2
7// target=native
8//
9// :2:21: error: no align available for type 'noreturn'