Commit 643ab90ace
Changed files (3)
src
test
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"));
test/cases/align.zig
@@ -188,6 +188,6 @@ test "alignstack" {
}
fn fnWithAlignedStack() -> i32 {
- @setAlignStack(1024);
+ @setAlignStack(256);
return 1234;
}
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;
\\