diff --git a/src/vm.c b/src/vm.c
index 5f781e8bbadfc42daf2693656504f9674e226890..68725798b08b60161b02d70974e911fbd575c65f 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -919,8 +919,7 @@ prepare_tagged_break(mrb_state *mrb, uint32_t tag, const struct RProc *proc, mrb
 
 #define CHECKPOINT_RESTORE(tag) \
   do { \
-    DEBUG_ONLY_EXPR(int current_checkpoint_tag); \
-    DEBUG_ONLY_EXPR(current_checkpoint_tag = (tag)); \
+    DEBUG_ONLY_EXPR(int current_checkpoint_tag = (tag)); \
     if (FALSE) { \
       CHECKPOINT_LABEL_MAKE(tag): \
       DEBUG_ONLY_EXPR(current_checkpoint_tag = (tag)); \
@@ -929,12 +928,12 @@ prepare_tagged_break(mrb_state *mrb, uint32_t tag, const struct RProc *proc, mrb
 #define CHECKPOINT_MAIN(tag) \
       } while (0); \
     } \
-    mrb_assert((tag) == current_checkpoint_tag); \
+    DEBUG_ONLY_EXPR(mrb_assert((tag) == current_checkpoint_tag)); \
     do {
 
 #define CHECKPOINT_END(tag) \
     } while (0); \
-    mrb_assert((tag) == current_checkpoint_tag); \
+    DEBUG_ONLY_EXPR(mrb_assert((tag) == current_checkpoint_tag)); \
   } while (0)
 
 #ifdef MRB_DEBUG