Commit 643ab90ace

Andrew Kelley <superjoe30@gmail.com>
2017-10-24 04:33:00
add maximum value for @setAlignStack
1 parent c164235
Changed files (3)
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;
         \\