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:
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;
\\