zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 643ab90ace52d6d752a12ece9d6a8655ca2ca596 (tree)
parent c1642355f0b05f182c0b6d81d294d12be79ad0a8
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Mon, 23 Oct 2017 22:33:00 -0400

add maximum value for @setAlignStack

Diffstat:
Msrc/ir.cpp | 5+++++
Mtest/cases/align.zig | 2+-
Mtest/compile_errors.zig | 7+++++++
3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -15312,6 +15312,11 @@ static TypeTableEntry *ir_analyze_instruction_set_align_stack(IrAnalyze *ira, Ir if (!ir_resolve_align(ira, align_bytes_inst, &align_bytes)) return ira->codegen->builtin_types.entry_invalid; + if (align_bytes > 256) { + ir_add_error(ira, &instruction->base, buf_sprintf("attempt to @setAlignStack(%" PRIu32 "); maximum is 256", align_bytes)); + return ira->codegen->builtin_types.entry_invalid; + } + FnTableEntry *fn_entry = exec_fn_entry(ira->new_irb.exec); if (fn_entry == nullptr) { ir_add_error(ira, &instruction->base, buf_sprintf("@setAlignStack outside function")); diff --git a/test/cases/align.zig b/test/cases/align.zig @@ -188,6 +188,6 @@ test "alignstack" { } fn fnWithAlignedStack() -> i32 { - @setAlignStack(1024); + @setAlignStack(256); return 1234; } diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -2187,6 +2187,13 @@ pub fn addCases(cases: &tests.CompileErrorContext) { ".tmp_source.zig:3:5: error: alignstack set twice", ".tmp_source.zig:2:5: note: first set here"); + cases.add("@setAlignStack too big", + \\export fn entry() { + \\ @setAlignStack(511 + 1); + \\} + , + ".tmp_source.zig:2:5: error: attempt to @setAlignStack(512); maximum is 256"); + cases.add("storing runtime value in compile time variable then using it", \\const Mode = @import("builtin").Mode; \\