Browse Source

Fix #622 on both backends

gingerBill 5 years ago
parent
commit
2630e9ced1
2 changed files with 8 additions and 4 deletions
  1. 3 4
      src/ir.cpp
  2. 5 0
      src/llvm_backend.cpp

+ 3 - 4
src/ir.cpp

@@ -3307,10 +3307,9 @@ void ir_emit_defer_stmts(irProcedure *proc, irDeferExitKind kind, irBlock *block
 	while (i --> 0) {
 	while (i --> 0) {
 		irDefer d = proc->defer_stmts[i];
 		irDefer d = proc->defer_stmts[i];
 
 
-		// TODO(bill, 2020-03-05): Why was this added?
-		// if (proc->context_stack.count >= d.context_stack_count) {
-		// 	proc->context_stack.count = d.context_stack_count;
-		// }
+		isize prev_context_stack_count = proc->context_stack.count;
+		defer (proc->context_stack.count = prev_context_stack_count);
+		proc->context_stack.count = d.context_stack_count;
 
 
 		if (kind == irDeferExit_Default) {
 		if (kind == irDeferExit_Default) {
 			if (proc->scope_index == d.scope_index &&
 			if (proc->scope_index == d.scope_index &&

+ 5 - 0
src/llvm_backend.cpp

@@ -6432,6 +6432,11 @@ void lb_build_defer_stmt(lbProcedure *p, lbDefer d) {
 		return;
 		return;
 	}
 	}
 
 
+	isize prev_context_stack_count = p->context_stack.count;
+	defer (p->context_stack.count = prev_context_stack_count);
+	p->context_stack.count = d.context_stack_count;
+
+
 	lbBlock *b = lb_create_block(p, "defer");
 	lbBlock *b = lb_create_block(p, "defer");
 	if (last_instr == nullptr || !LLVMIsATerminatorInst(last_instr)) {
 	if (last_instr == nullptr || !LLVMIsATerminatorInst(last_instr)) {
 		lb_emit_jump(p, b);
 		lb_emit_jump(p, b);