debase-ruby_core_source 3.2.1 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/addr2line.h +3 -1
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/darray.h +246 -0
  5. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/debug_counter.h +7 -10
  6. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/eval_intern.h +3 -1
  7. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id.h +44 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns_info.inc +128 -154
  9. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/array.h +9 -20
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/bits.h +568 -0
  11. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/class.h +11 -2
  12. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cmdlineopt.h +5 -1
  13. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compile.h +0 -1
  14. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/error.h +24 -2
  15. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/gc.h +29 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/hash.h +19 -44
  17. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/imemo.h +0 -1
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/io.h +137 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/parse.h +108 -0
  20. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/process.h +0 -14
  21. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/range.h +2 -2
  22. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/re.h +1 -1
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/internal/ruby_parser.h +69 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/signal.h +4 -0
  25. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/string.h +15 -0
  26. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/struct.h +9 -34
  27. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/thread.h +14 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/variable.h +17 -35
  29. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/vm.h +9 -2
  30. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/iseq.h +4 -4
  31. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/method.h +8 -7
  32. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/node.h +128 -0
  33. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/node_name.inc +4 -2
  34. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/parse.h +19 -6
  35. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1/internal/bits.h → ruby-3.3.0-preview3/parser_bits.h} +4 -4
  36. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_node.h +32 -0
  37. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_st.h +162 -0
  38. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/parser_value.h +106 -0
  39. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/prism_compile.h +18 -0
  40. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ractor_core.h +10 -4
  41. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regint.h +8 -0
  42. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regparse.h +2 -1
  43. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/revision.h +5 -0
  44. data/lib/debase/ruby_core_source/ruby-3.3.0-preview3/rubyparser.h +1403 -0
  45. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/shape.h +32 -22
  46. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/symbol.h +2 -3
  47. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_none.h +1 -0
  48. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_pthread.h +66 -28
  49. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/thread_win32.h +1 -6
  50. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/variable.h +9 -2
  51. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/version.h +7 -3
  52. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm.inc +383 -497
  53. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_callinfo.h +54 -16
  54. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_core.h +92 -57
  55. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_exec.h +11 -10
  56. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_insnhelper.h +20 -23
  57. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_opts.h +0 -5
  58. data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/yjit.h +12 -12
  59. data/lib/debase/ruby_core_source/version.rb +1 -1
  60. metadata +120 -115
  61. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/darray.h +0 -179
  62. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/io.h +0 -38
  63. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/internal/parse.h +0 -25
  64. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/node.h +0 -514
  65. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/opt_sc.inc +0 -109
  66. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/revision.h +0 -5
  67. data/lib/debase/ruby_core_source/ruby-3.3.0-preview1/transient_heap.h +0 -65
  68. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/builtin.h +0 -0
  69. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/build_assert/build_assert.h +0 -0
  70. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/check_type/check_type.h +0 -0
  71. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/container_of/container_of.h +0 -0
  72. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/list/list.h +0 -0
  73. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ccan/str/str.h +0 -0
  74. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/constant.h +0 -0
  75. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/dln.h +0 -0
  76. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/encindex.h +0 -0
  77. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/hrtime.h +0 -0
  78. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/id_table.h +0 -0
  79. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/insns.inc +0 -0
  80. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/basic_operators.h +0 -0
  81. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/bignum.h +0 -0
  82. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compar.h +0 -0
  83. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/compilers.h +0 -0
  84. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/complex.h +0 -0
  85. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/cont.h +0 -0
  86. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/dir.h +0 -0
  87. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enc.h +0 -0
  88. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/encoding.h +0 -0
  89. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enum.h +0 -0
  90. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/enumerator.h +0 -0
  91. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/eval.h +0 -0
  92. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/file.h +0 -0
  93. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/fixnum.h +0 -0
  94. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/inits.h +0 -0
  95. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/load.h +0 -0
  96. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/loadpath.h +0 -0
  97. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/math.h +0 -0
  98. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/missing.h +0 -0
  99. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/numeric.h +0 -0
  100. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/object.h +0 -0
  101. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/proc.h +0 -0
  102. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/ractor.h +0 -0
  103. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/random.h +0 -0
  104. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/rational.h +0 -0
  105. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/sanitizers.h +0 -0
  106. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/serial.h +0 -0
  107. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/static_assert.h +0 -0
  108. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/symbol.h +0 -0
  109. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/time.h +0 -0
  110. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/transcode.h +0 -0
  111. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/util.h +0 -0
  112. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal/warnings.h +0 -0
  113. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/internal.h +0 -0
  114. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/known_errors.inc +0 -0
  115. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optinsn.inc +0 -0
  116. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/optunifs.inc +0 -0
  117. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/probes_helper.h +0 -0
  118. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/regenc.h +0 -0
  119. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit.h +0 -0
  120. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/rjit_c.h +0 -0
  121. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_assert.h +0 -0
  122. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/ruby_atomic.h +0 -0
  123. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/siphash.h +0 -0
  124. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/timev.h +0 -0
  125. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/transcode_data.h +0 -0
  126. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_call_iseq_optimized.inc +0 -0
  127. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_debug.h +0 -0
  128. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vm_sync.h +0 -0
  129. /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview1 → ruby-3.3.0-preview3}/vmtc.inc +0 -0
@@ -47,16 +47,15 @@ INSN_ENTRY(nop)
47
47
 
48
48
  /* ### Declare and assign variables. ### */
49
49
  # define INSN_ATTR(x) attr_ ## x ## _nop()
50
- const bool leaf = INSN_ATTR(leaf);
50
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
51
51
 
52
52
  /* ### Instruction preambles. ### */
53
- if (! leaf) ADD_PC(INSN_ATTR(width));
53
+ ADD_PC(INSN_ATTR(width));
54
54
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
55
55
 
56
56
  /* ### Instruction trailers. ### */
57
57
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
58
58
  INC_SP(INSN_ATTR(sp_inc));
59
- if (leaf) ADD_PC(INSN_ATTR(width));
60
59
  # undef INSN_ATTR
61
60
 
62
61
  /* ### Leave the instruction. ### */
@@ -74,11 +73,11 @@ INSN_ENTRY(getlocal)
74
73
  lindex_t idx = (lindex_t)GET_OPERAND(1);
75
74
  rb_num_t level = (rb_num_t)GET_OPERAND(2);
76
75
  # define INSN_ATTR(x) attr_ ## x ## _getlocal(idx, level)
77
- const bool leaf = INSN_ATTR(leaf);
76
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
78
77
  VALUE val;
79
78
 
80
79
  /* ### Instruction preambles. ### */
81
- if (! leaf) ADD_PC(INSN_ATTR(width));
80
+ ADD_PC(INSN_ATTR(width));
82
81
  SETUP_CANARY(leaf);
83
82
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
84
83
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -92,7 +91,7 @@ INSN_ENTRY(getlocal)
92
91
  RB_DEBUG_COUNTER_INC(lvar_get);
93
92
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
94
93
  }
95
- # line 96 "vm.inc"
94
+ # line 95 "vm.inc"
96
95
  # undef NAME_OF_CURRENT_INSN
97
96
 
98
97
  /* ### Instruction trailers. ### */
@@ -102,7 +101,6 @@ INSN_ENTRY(getlocal)
102
101
  TOPN(0) = val;
103
102
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
104
103
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
105
- if (leaf) ADD_PC(INSN_ATTR(width));
106
104
  # undef INSN_ATTR
107
105
 
108
106
  /* ### Leave the instruction. ### */
@@ -120,11 +118,11 @@ INSN_ENTRY(setlocal)
120
118
  lindex_t idx = (lindex_t)GET_OPERAND(1);
121
119
  rb_num_t level = (rb_num_t)GET_OPERAND(2);
122
120
  # define INSN_ATTR(x) attr_ ## x ## _setlocal(idx, level)
123
- const bool leaf = INSN_ATTR(leaf);
121
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
124
122
  VALUE val = TOPN(0);
125
123
 
126
124
  /* ### Instruction preambles. ### */
127
- if (! leaf) ADD_PC(INSN_ATTR(width));
125
+ ADD_PC(INSN_ATTR(width));
128
126
  SETUP_CANARY(leaf);
129
127
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
130
128
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -138,14 +136,13 @@ INSN_ENTRY(setlocal)
138
136
  RB_DEBUG_COUNTER_INC(lvar_set);
139
137
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
140
138
  }
141
- # line 142 "vm.inc"
139
+ # line 140 "vm.inc"
142
140
  # undef NAME_OF_CURRENT_INSN
143
141
 
144
142
  /* ### Instruction trailers. ### */
145
143
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
146
144
  CHECK_CANARY(leaf, INSN_ATTR(bin));
147
145
  INC_SP(INSN_ATTR(sp_inc));
148
- if (leaf) ADD_PC(INSN_ATTR(width));
149
146
  # undef INSN_ATTR
150
147
 
151
148
  /* ### Leave the instruction. ### */
@@ -163,11 +160,11 @@ INSN_ENTRY(getblockparam)
163
160
  lindex_t idx = (lindex_t)GET_OPERAND(1);
164
161
  rb_num_t level = (rb_num_t)GET_OPERAND(2);
165
162
  # define INSN_ATTR(x) attr_ ## x ## _getblockparam(idx, level)
166
- const bool leaf = INSN_ATTR(leaf);
163
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
167
164
  VALUE val;
168
165
 
169
166
  /* ### Instruction preambles. ### */
170
- if (! leaf) ADD_PC(INSN_ATTR(width));
167
+ ADD_PC(INSN_ATTR(width));
171
168
  SETUP_CANARY(leaf);
172
169
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
173
170
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -191,7 +188,7 @@ INSN_ENTRY(getblockparam)
191
188
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
192
189
  }
193
190
  }
194
- # line 195 "vm.inc"
191
+ # line 192 "vm.inc"
195
192
  # undef NAME_OF_CURRENT_INSN
196
193
 
197
194
  /* ### Instruction trailers. ### */
@@ -201,7 +198,6 @@ INSN_ENTRY(getblockparam)
201
198
  TOPN(0) = val;
202
199
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
203
200
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
204
- if (leaf) ADD_PC(INSN_ATTR(width));
205
201
  # undef INSN_ATTR
206
202
 
207
203
  /* ### Leave the instruction. ### */
@@ -219,11 +215,11 @@ INSN_ENTRY(setblockparam)
219
215
  lindex_t idx = (lindex_t)GET_OPERAND(1);
220
216
  rb_num_t level = (rb_num_t)GET_OPERAND(2);
221
217
  # define INSN_ATTR(x) attr_ ## x ## _setblockparam(idx, level)
222
- const bool leaf = INSN_ATTR(leaf);
218
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
223
219
  VALUE val = TOPN(0);
224
220
 
225
221
  /* ### Instruction preambles. ### */
226
- if (! leaf) ADD_PC(INSN_ATTR(width));
222
+ ADD_PC(INSN_ATTR(width));
227
223
  SETUP_CANARY(leaf);
228
224
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
229
225
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -242,14 +238,13 @@ INSN_ENTRY(setblockparam)
242
238
 
243
239
  VM_ENV_FLAGS_SET(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM);
244
240
  }
245
- # line 246 "vm.inc"
241
+ # line 242 "vm.inc"
246
242
  # undef NAME_OF_CURRENT_INSN
247
243
 
248
244
  /* ### Instruction trailers. ### */
249
245
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
250
246
  CHECK_CANARY(leaf, INSN_ATTR(bin));
251
247
  INC_SP(INSN_ATTR(sp_inc));
252
- if (leaf) ADD_PC(INSN_ATTR(width));
253
248
  # undef INSN_ATTR
254
249
 
255
250
  /* ### Leave the instruction. ### */
@@ -267,11 +262,11 @@ INSN_ENTRY(getblockparamproxy)
267
262
  lindex_t idx = (lindex_t)GET_OPERAND(1);
268
263
  rb_num_t level = (rb_num_t)GET_OPERAND(2);
269
264
  # define INSN_ATTR(x) attr_ ## x ## _getblockparamproxy(idx, level)
270
- const bool leaf = INSN_ATTR(leaf);
265
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
271
266
  VALUE val;
272
267
 
273
268
  /* ### Instruction preambles. ### */
274
- if (! leaf) ADD_PC(INSN_ATTR(width));
269
+ ADD_PC(INSN_ATTR(width));
275
270
  SETUP_CANARY(leaf);
276
271
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
277
272
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -316,7 +311,7 @@ INSN_ENTRY(getblockparamproxy)
316
311
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
317
312
  }
318
313
  }
319
- # line 320 "vm.inc"
314
+ # line 315 "vm.inc"
320
315
  # undef NAME_OF_CURRENT_INSN
321
316
 
322
317
  /* ### Instruction trailers. ### */
@@ -326,7 +321,6 @@ INSN_ENTRY(getblockparamproxy)
326
321
  TOPN(0) = val;
327
322
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
328
323
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
329
- if (leaf) ADD_PC(INSN_ATTR(width));
330
324
  # undef INSN_ATTR
331
325
 
332
326
  /* ### Leave the instruction. ### */
@@ -344,11 +338,11 @@ INSN_ENTRY(getspecial)
344
338
  rb_num_t key = (rb_num_t)GET_OPERAND(1);
345
339
  rb_num_t type = (rb_num_t)GET_OPERAND(2);
346
340
  # define INSN_ATTR(x) attr_ ## x ## _getspecial(key, type)
347
- const bool leaf = INSN_ATTR(leaf);
341
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
348
342
  VALUE val;
349
343
 
350
344
  /* ### Instruction preambles. ### */
351
- if (! leaf) ADD_PC(INSN_ATTR(width));
345
+ ADD_PC(INSN_ATTR(width));
352
346
  SETUP_CANARY(leaf);
353
347
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
354
348
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
@@ -360,7 +354,7 @@ INSN_ENTRY(getspecial)
360
354
  {
361
355
  val = vm_getspecial(ec, GET_LEP(), key, type);
362
356
  }
363
- # line 364 "vm.inc"
357
+ # line 358 "vm.inc"
364
358
  # undef NAME_OF_CURRENT_INSN
365
359
 
366
360
  /* ### Instruction trailers. ### */
@@ -370,7 +364,6 @@ INSN_ENTRY(getspecial)
370
364
  TOPN(0) = val;
371
365
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
372
366
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
373
- if (leaf) ADD_PC(INSN_ATTR(width));
374
367
  # undef INSN_ATTR
375
368
 
376
369
  /* ### Leave the instruction. ### */
@@ -387,11 +380,11 @@ INSN_ENTRY(setspecial)
387
380
  /* ### Declare and assign variables. ### */
388
381
  rb_num_t key = (rb_num_t)GET_OPERAND(1);
389
382
  # define INSN_ATTR(x) attr_ ## x ## _setspecial(key)
390
- const bool leaf = INSN_ATTR(leaf);
383
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
391
384
  VALUE obj = TOPN(0);
392
385
 
393
386
  /* ### Instruction preambles. ### */
394
- if (! leaf) ADD_PC(INSN_ATTR(width));
387
+ ADD_PC(INSN_ATTR(width));
395
388
  SETUP_CANARY(leaf);
396
389
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
397
390
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
@@ -402,14 +395,13 @@ INSN_ENTRY(setspecial)
402
395
  {
403
396
  lep_svar_set(ec, GET_LEP(), key, obj);
404
397
  }
405
- # line 406 "vm.inc"
398
+ # line 399 "vm.inc"
406
399
  # undef NAME_OF_CURRENT_INSN
407
400
 
408
401
  /* ### Instruction trailers. ### */
409
402
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
410
403
  CHECK_CANARY(leaf, INSN_ATTR(bin));
411
404
  INC_SP(INSN_ATTR(sp_inc));
412
- if (leaf) ADD_PC(INSN_ATTR(width));
413
405
  # undef INSN_ATTR
414
406
 
415
407
  /* ### Leave the instruction. ### */
@@ -427,11 +419,11 @@ INSN_ENTRY(getinstancevariable)
427
419
  ID id = (ID)GET_OPERAND(1);
428
420
  IVC ic = (IVC)GET_OPERAND(2);
429
421
  # define INSN_ATTR(x) attr_ ## x ## _getinstancevariable(id, ic)
430
- const bool leaf = INSN_ATTR(leaf);
422
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
431
423
  VALUE val;
432
424
 
433
425
  /* ### Instruction preambles. ### */
434
- if (! leaf) ADD_PC(INSN_ATTR(width));
426
+ ADD_PC(INSN_ATTR(width));
435
427
  SETUP_CANARY(leaf);
436
428
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
437
429
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
@@ -443,7 +435,7 @@ INSN_ENTRY(getinstancevariable)
443
435
  {
444
436
  val = vm_getinstancevariable(GET_ISEQ(), GET_SELF(), id, ic);
445
437
  }
446
- # line 447 "vm.inc"
438
+ # line 439 "vm.inc"
447
439
  # undef NAME_OF_CURRENT_INSN
448
440
 
449
441
  /* ### Instruction trailers. ### */
@@ -453,7 +445,6 @@ INSN_ENTRY(getinstancevariable)
453
445
  TOPN(0) = val;
454
446
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
455
447
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
456
- if (leaf) ADD_PC(INSN_ATTR(width));
457
448
  # undef INSN_ATTR
458
449
 
459
450
  /* ### Leave the instruction. ### */
@@ -471,11 +462,11 @@ INSN_ENTRY(setinstancevariable)
471
462
  ID id = (ID)GET_OPERAND(1);
472
463
  IVC ic = (IVC)GET_OPERAND(2);
473
464
  # define INSN_ATTR(x) attr_ ## x ## _setinstancevariable(id, ic)
474
- const bool leaf = INSN_ATTR(leaf);
465
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
475
466
  VALUE val = TOPN(0);
476
467
 
477
468
  /* ### Instruction preambles. ### */
478
- if (! leaf) ADD_PC(INSN_ATTR(width));
469
+ ADD_PC(INSN_ATTR(width));
479
470
  SETUP_CANARY(leaf);
480
471
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
481
472
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
@@ -487,14 +478,13 @@ INSN_ENTRY(setinstancevariable)
487
478
  {
488
479
  vm_setinstancevariable(GET_ISEQ(), GET_SELF(), id, val, ic);
489
480
  }
490
- # line 491 "vm.inc"
481
+ # line 482 "vm.inc"
491
482
  # undef NAME_OF_CURRENT_INSN
492
483
 
493
484
  /* ### Instruction trailers. ### */
494
485
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
495
486
  CHECK_CANARY(leaf, INSN_ATTR(bin));
496
487
  INC_SP(INSN_ATTR(sp_inc));
497
- if (leaf) ADD_PC(INSN_ATTR(width));
498
488
  # undef INSN_ATTR
499
489
 
500
490
  /* ### Leave the instruction. ### */
@@ -512,11 +502,11 @@ INSN_ENTRY(getclassvariable)
512
502
  ID id = (ID)GET_OPERAND(1);
513
503
  ICVARC ic = (ICVARC)GET_OPERAND(2);
514
504
  # define INSN_ATTR(x) attr_ ## x ## _getclassvariable(id, ic)
515
- const bool leaf = INSN_ATTR(leaf);
505
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
516
506
  VALUE val;
517
507
 
518
508
  /* ### Instruction preambles. ### */
519
- if (! leaf) ADD_PC(INSN_ATTR(width));
509
+ ADD_PC(INSN_ATTR(width));
520
510
  SETUP_CANARY(leaf);
521
511
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
522
512
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
@@ -529,7 +519,7 @@ INSN_ENTRY(getclassvariable)
529
519
  rb_control_frame_t *cfp = GET_CFP();
530
520
  val = vm_getclassvariable(GET_ISEQ(), cfp, id, ic);
531
521
  }
532
- # line 533 "vm.inc"
522
+ # line 523 "vm.inc"
533
523
  # undef NAME_OF_CURRENT_INSN
534
524
 
535
525
  /* ### Instruction trailers. ### */
@@ -539,7 +529,6 @@ INSN_ENTRY(getclassvariable)
539
529
  TOPN(0) = val;
540
530
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
541
531
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
542
- if (leaf) ADD_PC(INSN_ATTR(width));
543
532
  # undef INSN_ATTR
544
533
 
545
534
  /* ### Leave the instruction. ### */
@@ -557,11 +546,11 @@ INSN_ENTRY(setclassvariable)
557
546
  ID id = (ID)GET_OPERAND(1);
558
547
  ICVARC ic = (ICVARC)GET_OPERAND(2);
559
548
  # define INSN_ATTR(x) attr_ ## x ## _setclassvariable(id, ic)
560
- const bool leaf = INSN_ATTR(leaf);
549
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
561
550
  VALUE val = TOPN(0);
562
551
 
563
552
  /* ### Instruction preambles. ### */
564
- if (! leaf) ADD_PC(INSN_ATTR(width));
553
+ ADD_PC(INSN_ATTR(width));
565
554
  SETUP_CANARY(leaf);
566
555
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
567
556
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
@@ -574,14 +563,13 @@ INSN_ENTRY(setclassvariable)
574
563
  vm_ensure_not_refinement_module(GET_SELF());
575
564
  vm_setclassvariable(GET_ISEQ(), GET_CFP(), id, val, ic);
576
565
  }
577
- # line 578 "vm.inc"
566
+ # line 567 "vm.inc"
578
567
  # undef NAME_OF_CURRENT_INSN
579
568
 
580
569
  /* ### Instruction trailers. ### */
581
570
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
582
571
  CHECK_CANARY(leaf, INSN_ATTR(bin));
583
572
  INC_SP(INSN_ATTR(sp_inc));
584
- if (leaf) ADD_PC(INSN_ATTR(width));
585
573
  # undef INSN_ATTR
586
574
 
587
575
  /* ### Leave the instruction. ### */
@@ -598,11 +586,11 @@ INSN_ENTRY(opt_getconstant_path)
598
586
  /* ### Declare and assign variables. ### */
599
587
  IC ic = (IC)GET_OPERAND(1);
600
588
  # define INSN_ATTR(x) attr_ ## x ## _opt_getconstant_path(ic)
601
- const bool leaf = INSN_ATTR(leaf);
589
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
602
590
  VALUE val;
603
591
 
604
592
  /* ### Instruction preambles. ### */
605
- if (! leaf) ADD_PC(INSN_ATTR(width));
593
+ ADD_PC(INSN_ATTR(width));
606
594
  SETUP_CANARY(leaf);
607
595
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
608
596
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ic);
@@ -611,22 +599,9 @@ INSN_ENTRY(opt_getconstant_path)
611
599
  # define NAME_OF_CURRENT_INSN opt_getconstant_path
612
600
  # line 262 "insns.def"
613
601
  {
614
- const ID *segments = ic->segments;
615
- struct iseq_inline_constant_cache_entry *ice = ic->entry;
616
- if (ice && vm_ic_hit_p(ice, GET_EP())) {
617
- val = ice->value;
618
-
619
- VM_ASSERT(val == vm_get_ev_const_chain(ec, segments));
620
- } else {
621
- ruby_vm_constant_cache_misses++;
622
- val = vm_get_ev_const_chain(ec, segments);
623
- vm_ic_track_const_chain(GET_CFP(), ic, segments);
624
- // Because leaf=false, we need to undo the PC increment to get the address to this instruction
625
- // INSN_ATTR(width) == 2
626
- vm_ic_update(GET_ISEQ(), ic, val, GET_EP(), GET_PC() - 2);
627
- }
602
+ val = rb_vm_opt_getconstant_path(ec, GET_CFP(), ic);
628
603
  }
629
- # line 630 "vm.inc"
604
+ # line 605 "vm.inc"
630
605
  # undef NAME_OF_CURRENT_INSN
631
606
 
632
607
  /* ### Instruction trailers. ### */
@@ -636,7 +611,6 @@ INSN_ENTRY(opt_getconstant_path)
636
611
  TOPN(0) = val;
637
612
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
638
613
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
639
- if (leaf) ADD_PC(INSN_ATTR(width));
640
614
  # undef INSN_ATTR
641
615
 
642
616
  /* ### Leave the instruction. ### */
@@ -653,24 +627,24 @@ INSN_ENTRY(getconstant)
653
627
  /* ### Declare and assign variables. ### */
654
628
  ID id = (ID)GET_OPERAND(1);
655
629
  # define INSN_ATTR(x) attr_ ## x ## _getconstant(id)
656
- const bool leaf = INSN_ATTR(leaf);
630
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
657
631
  VALUE klass = TOPN(1);
658
632
  VALUE allow_nil = TOPN(0);
659
633
  VALUE val;
660
634
 
661
635
  /* ### Instruction preambles. ### */
662
- if (! leaf) ADD_PC(INSN_ATTR(width));
636
+ ADD_PC(INSN_ATTR(width));
663
637
  SETUP_CANARY(leaf);
664
638
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
665
639
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
666
640
 
667
641
  /* ### Here we do the instruction body. ### */
668
642
  # define NAME_OF_CURRENT_INSN getconstant
669
- # line 290 "insns.def"
643
+ # line 277 "insns.def"
670
644
  {
671
645
  val = vm_get_ev_const(ec, klass, id, allow_nil == Qtrue, 0);
672
646
  }
673
- # line 674 "vm.inc"
647
+ # line 648 "vm.inc"
674
648
  # undef NAME_OF_CURRENT_INSN
675
649
 
676
650
  /* ### Instruction trailers. ### */
@@ -680,7 +654,6 @@ INSN_ENTRY(getconstant)
680
654
  TOPN(0) = val;
681
655
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
682
656
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
683
- if (leaf) ADD_PC(INSN_ATTR(width));
684
657
  # undef INSN_ATTR
685
658
 
686
659
  /* ### Leave the instruction. ### */
@@ -697,32 +670,31 @@ INSN_ENTRY(setconstant)
697
670
  /* ### Declare and assign variables. ### */
698
671
  ID id = (ID)GET_OPERAND(1);
699
672
  # define INSN_ATTR(x) attr_ ## x ## _setconstant(id)
700
- const bool leaf = INSN_ATTR(leaf);
673
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
701
674
  VALUE val = TOPN(1);
702
675
  VALUE cbase = TOPN(0);
703
676
 
704
677
  /* ### Instruction preambles. ### */
705
- if (! leaf) ADD_PC(INSN_ATTR(width));
678
+ ADD_PC(INSN_ATTR(width));
706
679
  SETUP_CANARY(leaf);
707
680
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
708
681
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
709
682
 
710
683
  /* ### Here we do the instruction body. ### */
711
684
  # define NAME_OF_CURRENT_INSN setconstant
712
- # line 306 "insns.def"
685
+ # line 293 "insns.def"
713
686
  {
714
687
  vm_check_if_namespace(cbase);
715
688
  vm_ensure_not_refinement_module(GET_SELF());
716
689
  rb_const_set(cbase, id, val);
717
690
  }
718
- # line 719 "vm.inc"
691
+ # line 692 "vm.inc"
719
692
  # undef NAME_OF_CURRENT_INSN
720
693
 
721
694
  /* ### Instruction trailers. ### */
722
695
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
723
696
  CHECK_CANARY(leaf, INSN_ATTR(bin));
724
697
  INC_SP(INSN_ATTR(sp_inc));
725
- if (leaf) ADD_PC(INSN_ATTR(width));
726
698
  # undef INSN_ATTR
727
699
 
728
700
  /* ### Leave the instruction. ### */
@@ -739,22 +711,22 @@ INSN_ENTRY(getglobal)
739
711
  /* ### Declare and assign variables. ### */
740
712
  ID gid = (ID)GET_OPERAND(1);
741
713
  # define INSN_ATTR(x) attr_ ## x ## _getglobal(gid)
742
- const bool leaf = INSN_ATTR(leaf);
714
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
743
715
  VALUE val;
744
716
 
745
717
  /* ### Instruction preambles. ### */
746
- if (! leaf) ADD_PC(INSN_ATTR(width));
718
+ ADD_PC(INSN_ATTR(width));
747
719
  SETUP_CANARY(leaf);
748
720
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
749
721
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, gid);
750
722
 
751
723
  /* ### Here we do the instruction body. ### */
752
724
  # define NAME_OF_CURRENT_INSN getglobal
753
- # line 319 "insns.def"
725
+ # line 306 "insns.def"
754
726
  {
755
727
  val = rb_gvar_get(gid);
756
728
  }
757
- # line 758 "vm.inc"
729
+ # line 730 "vm.inc"
758
730
  # undef NAME_OF_CURRENT_INSN
759
731
 
760
732
  /* ### Instruction trailers. ### */
@@ -764,7 +736,6 @@ INSN_ENTRY(getglobal)
764
736
  TOPN(0) = val;
765
737
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
766
738
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
767
- if (leaf) ADD_PC(INSN_ATTR(width));
768
739
  # undef INSN_ATTR
769
740
 
770
741
  /* ### Leave the instruction. ### */
@@ -781,29 +752,28 @@ INSN_ENTRY(setglobal)
781
752
  /* ### Declare and assign variables. ### */
782
753
  ID gid = (ID)GET_OPERAND(1);
783
754
  # define INSN_ATTR(x) attr_ ## x ## _setglobal(gid)
784
- const bool leaf = INSN_ATTR(leaf);
755
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
785
756
  VALUE val = TOPN(0);
786
757
 
787
758
  /* ### Instruction preambles. ### */
788
- if (! leaf) ADD_PC(INSN_ATTR(width));
759
+ ADD_PC(INSN_ATTR(width));
789
760
  SETUP_CANARY(leaf);
790
761
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
791
762
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, gid);
792
763
 
793
764
  /* ### Here we do the instruction body. ### */
794
765
  # define NAME_OF_CURRENT_INSN setglobal
795
- # line 330 "insns.def"
766
+ # line 317 "insns.def"
796
767
  {
797
768
  rb_gvar_set(gid, val);
798
769
  }
799
- # line 800 "vm.inc"
770
+ # line 771 "vm.inc"
800
771
  # undef NAME_OF_CURRENT_INSN
801
772
 
802
773
  /* ### Instruction trailers. ### */
803
774
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
804
775
  CHECK_CANARY(leaf, INSN_ATTR(bin));
805
776
  INC_SP(INSN_ATTR(sp_inc));
806
- if (leaf) ADD_PC(INSN_ATTR(width));
807
777
  # undef INSN_ATTR
808
778
 
809
779
  /* ### Leave the instruction. ### */
@@ -819,21 +789,21 @@ INSN_ENTRY(putnil)
819
789
 
820
790
  /* ### Declare and assign variables. ### */
821
791
  # define INSN_ATTR(x) attr_ ## x ## _putnil()
822
- const bool leaf = INSN_ATTR(leaf);
792
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
823
793
  VALUE val;
824
794
 
825
795
  /* ### Instruction preambles. ### */
826
- if (! leaf) ADD_PC(INSN_ATTR(width));
796
+ ADD_PC(INSN_ATTR(width));
827
797
  SETUP_CANARY(leaf);
828
798
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
829
799
 
830
800
  /* ### Here we do the instruction body. ### */
831
801
  # define NAME_OF_CURRENT_INSN putnil
832
- # line 344 "insns.def"
802
+ # line 331 "insns.def"
833
803
  {
834
804
  val = Qnil;
835
805
  }
836
- # line 837 "vm.inc"
806
+ # line 807 "vm.inc"
837
807
  # undef NAME_OF_CURRENT_INSN
838
808
 
839
809
  /* ### Instruction trailers. ### */
@@ -843,7 +813,6 @@ INSN_ENTRY(putnil)
843
813
  TOPN(0) = val;
844
814
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
845
815
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
846
- if (leaf) ADD_PC(INSN_ATTR(width));
847
816
  # undef INSN_ATTR
848
817
 
849
818
  /* ### Leave the instruction. ### */
@@ -859,21 +828,21 @@ INSN_ENTRY(putself)
859
828
 
860
829
  /* ### Declare and assign variables. ### */
861
830
  # define INSN_ATTR(x) attr_ ## x ## _putself()
862
- const bool leaf = INSN_ATTR(leaf);
831
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
863
832
  VALUE val;
864
833
 
865
834
  /* ### Instruction preambles. ### */
866
- if (! leaf) ADD_PC(INSN_ATTR(width));
835
+ ADD_PC(INSN_ATTR(width));
867
836
  SETUP_CANARY(leaf);
868
837
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
869
838
 
870
839
  /* ### Here we do the instruction body. ### */
871
840
  # define NAME_OF_CURRENT_INSN putself
872
- # line 354 "insns.def"
841
+ # line 341 "insns.def"
873
842
  {
874
843
  val = GET_SELF();
875
844
  }
876
- # line 877 "vm.inc"
845
+ # line 846 "vm.inc"
877
846
  # undef NAME_OF_CURRENT_INSN
878
847
 
879
848
  /* ### Instruction trailers. ### */
@@ -883,7 +852,6 @@ INSN_ENTRY(putself)
883
852
  TOPN(0) = val;
884
853
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
885
854
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
886
- if (leaf) ADD_PC(INSN_ATTR(width));
887
855
  # undef INSN_ATTR
888
856
 
889
857
  /* ### Leave the instruction. ### */
@@ -900,10 +868,10 @@ INSN_ENTRY(putobject)
900
868
  /* ### Declare and assign variables. ### */
901
869
  VALUE val = (VALUE)GET_OPERAND(1);
902
870
  # define INSN_ATTR(x) attr_ ## x ## _putobject(val)
903
- const bool leaf = INSN_ATTR(leaf);
871
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
904
872
 
905
873
  /* ### Instruction preambles. ### */
906
- if (! leaf) ADD_PC(INSN_ATTR(width));
874
+ ADD_PC(INSN_ATTR(width));
907
875
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
908
876
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, val);
909
877
 
@@ -913,7 +881,6 @@ INSN_ENTRY(putobject)
913
881
  TOPN(0) = val;
914
882
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
915
883
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
916
- if (leaf) ADD_PC(INSN_ATTR(width));
917
884
  # undef INSN_ATTR
918
885
 
919
886
  /* ### Leave the instruction. ### */
@@ -930,25 +897,25 @@ INSN_ENTRY(putspecialobject)
930
897
  /* ### Declare and assign variables. ### */
931
898
  rb_num_t value_type = (rb_num_t)GET_OPERAND(1);
932
899
  # define INSN_ATTR(x) attr_ ## x ## _putspecialobject(value_type)
933
- const bool leaf = INSN_ATTR(leaf);
900
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
934
901
  VALUE val;
935
902
 
936
903
  /* ### Instruction preambles. ### */
937
- if (! leaf) ADD_PC(INSN_ATTR(width));
904
+ ADD_PC(INSN_ATTR(width));
938
905
  SETUP_CANARY(leaf);
939
906
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
940
907
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, value_type);
941
908
 
942
909
  /* ### Here we do the instruction body. ### */
943
910
  # define NAME_OF_CURRENT_INSN putspecialobject
944
- # line 377 "insns.def"
911
+ # line 364 "insns.def"
945
912
  {
946
913
  enum vm_special_object_type type;
947
914
 
948
915
  type = (enum vm_special_object_type)value_type;
949
916
  val = vm_get_special_object(GET_EP(), type);
950
917
  }
951
- # line 952 "vm.inc"
918
+ # line 919 "vm.inc"
952
919
  # undef NAME_OF_CURRENT_INSN
953
920
 
954
921
  /* ### Instruction trailers. ### */
@@ -958,7 +925,6 @@ INSN_ENTRY(putspecialobject)
958
925
  TOPN(0) = val;
959
926
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
960
927
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
961
- if (leaf) ADD_PC(INSN_ATTR(width));
962
928
  # undef INSN_ATTR
963
929
 
964
930
  /* ### Leave the instruction. ### */
@@ -975,22 +941,22 @@ INSN_ENTRY(putstring)
975
941
  /* ### Declare and assign variables. ### */
976
942
  VALUE str = (VALUE)GET_OPERAND(1);
977
943
  # define INSN_ATTR(x) attr_ ## x ## _putstring(str)
978
- const bool leaf = INSN_ATTR(leaf);
944
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
979
945
  VALUE val;
980
946
 
981
947
  /* ### Instruction preambles. ### */
982
- if (! leaf) ADD_PC(INSN_ATTR(width));
948
+ ADD_PC(INSN_ATTR(width));
983
949
  SETUP_CANARY(leaf);
984
950
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
985
951
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
986
952
 
987
953
  /* ### Here we do the instruction body. ### */
988
954
  # define NAME_OF_CURRENT_INSN putstring
989
- # line 390 "insns.def"
955
+ # line 377 "insns.def"
990
956
  {
991
957
  val = rb_ec_str_resurrect(ec, str);
992
958
  }
993
- # line 994 "vm.inc"
959
+ # line 960 "vm.inc"
994
960
  # undef NAME_OF_CURRENT_INSN
995
961
 
996
962
  /* ### Instruction trailers. ### */
@@ -1000,7 +966,6 @@ INSN_ENTRY(putstring)
1000
966
  TOPN(0) = val;
1001
967
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1002
968
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1003
- if (leaf) ADD_PC(INSN_ATTR(width));
1004
969
  # undef INSN_ATTR
1005
970
 
1006
971
  /* ### Leave the instruction. ### */
@@ -1017,22 +982,22 @@ INSN_ENTRY(concatstrings)
1017
982
  /* ### Declare and assign variables. ### */
1018
983
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
1019
984
  # define INSN_ATTR(x) attr_ ## x ## _concatstrings(num)
1020
- const bool leaf = INSN_ATTR(leaf);
985
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1021
986
  VALUE val;
1022
987
 
1023
988
  /* ### Instruction preambles. ### */
1024
- if (! leaf) ADD_PC(INSN_ATTR(width));
989
+ ADD_PC(INSN_ATTR(width));
1025
990
  SETUP_CANARY(leaf);
1026
991
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1027
992
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1028
993
 
1029
994
  /* ### Here we do the instruction body. ### */
1030
995
  # define NAME_OF_CURRENT_INSN concatstrings
1031
- # line 404 "insns.def"
996
+ # line 391 "insns.def"
1032
997
  {
1033
998
  val = rb_str_concat_literals(num, STACK_ADDR_FROM_TOP(num));
1034
999
  }
1035
- # line 1036 "vm.inc"
1000
+ # line 1001 "vm.inc"
1036
1001
  # undef NAME_OF_CURRENT_INSN
1037
1002
 
1038
1003
  /* ### Instruction trailers. ### */
@@ -1042,7 +1007,6 @@ INSN_ENTRY(concatstrings)
1042
1007
  TOPN(0) = val;
1043
1008
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1044
1009
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1045
- if (leaf) ADD_PC(INSN_ATTR(width));
1046
1010
  # undef INSN_ATTR
1047
1011
 
1048
1012
  /* ### Leave the instruction. ### */
@@ -1058,22 +1022,22 @@ INSN_ENTRY(anytostring)
1058
1022
 
1059
1023
  /* ### Declare and assign variables. ### */
1060
1024
  # define INSN_ATTR(x) attr_ ## x ## _anytostring()
1061
- const bool leaf = INSN_ATTR(leaf);
1025
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1062
1026
  VALUE val = TOPN(1);
1063
1027
  VALUE str = TOPN(0);
1064
1028
 
1065
1029
  /* ### Instruction preambles. ### */
1066
- if (! leaf) ADD_PC(INSN_ATTR(width));
1030
+ ADD_PC(INSN_ATTR(width));
1067
1031
  SETUP_CANARY(leaf);
1068
1032
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1069
1033
 
1070
1034
  /* ### Here we do the instruction body. ### */
1071
1035
  # define NAME_OF_CURRENT_INSN anytostring
1072
- # line 415 "insns.def"
1036
+ # line 402 "insns.def"
1073
1037
  {
1074
1038
  val = rb_obj_as_string_result(str, val);
1075
1039
  }
1076
- # line 1077 "vm.inc"
1040
+ # line 1041 "vm.inc"
1077
1041
  # undef NAME_OF_CURRENT_INSN
1078
1042
 
1079
1043
  /* ### Instruction trailers. ### */
@@ -1083,7 +1047,6 @@ INSN_ENTRY(anytostring)
1083
1047
  TOPN(0) = val;
1084
1048
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1085
1049
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1086
- if (leaf) ADD_PC(INSN_ATTR(width));
1087
1050
  # undef INSN_ATTR
1088
1051
 
1089
1052
  /* ### Leave the instruction. ### */
@@ -1101,11 +1064,11 @@ INSN_ENTRY(toregexp)
1101
1064
  rb_num_t opt = (rb_num_t)GET_OPERAND(1);
1102
1065
  rb_num_t cnt = (rb_num_t)GET_OPERAND(2);
1103
1066
  # define INSN_ATTR(x) attr_ ## x ## _toregexp(opt, cnt)
1104
- const bool leaf = INSN_ATTR(leaf);
1067
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1105
1068
  VALUE val;
1106
1069
 
1107
1070
  /* ### Instruction preambles. ### */
1108
- if (! leaf) ADD_PC(INSN_ATTR(width));
1071
+ ADD_PC(INSN_ATTR(width));
1109
1072
  SETUP_CANARY(leaf);
1110
1073
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1111
1074
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, opt);
@@ -1113,13 +1076,13 @@ INSN_ENTRY(toregexp)
1113
1076
 
1114
1077
  /* ### Here we do the instruction body. ### */
1115
1078
  # define NAME_OF_CURRENT_INSN toregexp
1116
- # line 431 "insns.def"
1079
+ # line 418 "insns.def"
1117
1080
  {
1118
1081
  const VALUE ary = rb_ary_tmp_new_from_values(0, cnt, STACK_ADDR_FROM_TOP(cnt));
1119
1082
  val = rb_reg_new_ary(ary, (int)opt);
1120
1083
  rb_ary_clear(ary);
1121
1084
  }
1122
- # line 1123 "vm.inc"
1085
+ # line 1086 "vm.inc"
1123
1086
  # undef NAME_OF_CURRENT_INSN
1124
1087
 
1125
1088
  /* ### Instruction trailers. ### */
@@ -1129,7 +1092,6 @@ INSN_ENTRY(toregexp)
1129
1092
  TOPN(0) = val;
1130
1093
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1131
1094
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1132
- if (leaf) ADD_PC(INSN_ATTR(width));
1133
1095
  # undef INSN_ATTR
1134
1096
 
1135
1097
  /* ### Leave the instruction. ### */
@@ -1145,22 +1107,22 @@ INSN_ENTRY(intern)
1145
1107
 
1146
1108
  /* ### Declare and assign variables. ### */
1147
1109
  # define INSN_ATTR(x) attr_ ## x ## _intern()
1148
- const bool leaf = INSN_ATTR(leaf);
1110
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1149
1111
  VALUE str = TOPN(0);
1150
1112
  VALUE sym;
1151
1113
 
1152
1114
  /* ### Instruction preambles. ### */
1153
- if (! leaf) ADD_PC(INSN_ATTR(width));
1115
+ ADD_PC(INSN_ATTR(width));
1154
1116
  SETUP_CANARY(leaf);
1155
1117
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1156
1118
 
1157
1119
  /* ### Here we do the instruction body. ### */
1158
1120
  # define NAME_OF_CURRENT_INSN intern
1159
- # line 443 "insns.def"
1121
+ # line 430 "insns.def"
1160
1122
  {
1161
1123
  sym = rb_str_intern(str);
1162
1124
  }
1163
- # line 1164 "vm.inc"
1125
+ # line 1126 "vm.inc"
1164
1126
  # undef NAME_OF_CURRENT_INSN
1165
1127
 
1166
1128
  /* ### Instruction trailers. ### */
@@ -1170,7 +1132,6 @@ INSN_ENTRY(intern)
1170
1132
  TOPN(0) = sym;
1171
1133
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1172
1134
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1173
- if (leaf) ADD_PC(INSN_ATTR(width));
1174
1135
  # undef INSN_ATTR
1175
1136
 
1176
1137
  /* ### Leave the instruction. ### */
@@ -1187,22 +1148,22 @@ INSN_ENTRY(newarray)
1187
1148
  /* ### Declare and assign variables. ### */
1188
1149
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
1189
1150
  # define INSN_ATTR(x) attr_ ## x ## _newarray(num)
1190
- const bool leaf = INSN_ATTR(leaf);
1151
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1191
1152
  VALUE val;
1192
1153
 
1193
1154
  /* ### Instruction preambles. ### */
1194
- if (! leaf) ADD_PC(INSN_ATTR(width));
1155
+ ADD_PC(INSN_ATTR(width));
1195
1156
  SETUP_CANARY(leaf);
1196
1157
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1197
1158
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1198
1159
 
1199
1160
  /* ### Here we do the instruction body. ### */
1200
1161
  # define NAME_OF_CURRENT_INSN newarray
1201
- # line 454 "insns.def"
1162
+ # line 441 "insns.def"
1202
1163
  {
1203
1164
  val = rb_ec_ary_new_from_values(ec, num, STACK_ADDR_FROM_TOP(num));
1204
1165
  }
1205
- # line 1206 "vm.inc"
1166
+ # line 1167 "vm.inc"
1206
1167
  # undef NAME_OF_CURRENT_INSN
1207
1168
 
1208
1169
  /* ### Instruction trailers. ### */
@@ -1212,7 +1173,6 @@ INSN_ENTRY(newarray)
1212
1173
  TOPN(0) = val;
1213
1174
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1214
1175
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1215
- if (leaf) ADD_PC(INSN_ATTR(width));
1216
1176
  # undef INSN_ATTR
1217
1177
 
1218
1178
  /* ### Leave the instruction. ### */
@@ -1229,18 +1189,18 @@ INSN_ENTRY(newarraykwsplat)
1229
1189
  /* ### Declare and assign variables. ### */
1230
1190
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
1231
1191
  # define INSN_ATTR(x) attr_ ## x ## _newarraykwsplat(num)
1232
- const bool leaf = INSN_ATTR(leaf);
1192
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1233
1193
  VALUE val;
1234
1194
 
1235
1195
  /* ### Instruction preambles. ### */
1236
- if (! leaf) ADD_PC(INSN_ATTR(width));
1196
+ ADD_PC(INSN_ATTR(width));
1237
1197
  SETUP_CANARY(leaf);
1238
1198
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1239
1199
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1240
1200
 
1241
1201
  /* ### Here we do the instruction body. ### */
1242
1202
  # define NAME_OF_CURRENT_INSN newarraykwsplat
1243
- # line 469 "insns.def"
1203
+ # line 456 "insns.def"
1244
1204
  {
1245
1205
  if (RHASH_EMPTY_P(*STACK_ADDR_FROM_TOP(1))) {
1246
1206
  val = rb_ary_new4(num-1, STACK_ADDR_FROM_TOP(num));
@@ -1249,7 +1209,7 @@ INSN_ENTRY(newarraykwsplat)
1249
1209
  val = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
1250
1210
  }
1251
1211
  }
1252
- # line 1253 "vm.inc"
1212
+ # line 1213 "vm.inc"
1253
1213
  # undef NAME_OF_CURRENT_INSN
1254
1214
 
1255
1215
  /* ### Instruction trailers. ### */
@@ -1259,7 +1219,6 @@ INSN_ENTRY(newarraykwsplat)
1259
1219
  TOPN(0) = val;
1260
1220
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1261
1221
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1262
- if (leaf) ADD_PC(INSN_ATTR(width));
1263
1222
  # undef INSN_ATTR
1264
1223
 
1265
1224
  /* ### Leave the instruction. ### */
@@ -1276,23 +1235,23 @@ INSN_ENTRY(duparray)
1276
1235
  /* ### Declare and assign variables. ### */
1277
1236
  VALUE ary = (VALUE)GET_OPERAND(1);
1278
1237
  # define INSN_ATTR(x) attr_ ## x ## _duparray(ary)
1279
- const bool leaf = INSN_ATTR(leaf);
1238
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1280
1239
  VALUE val;
1281
1240
 
1282
1241
  /* ### Instruction preambles. ### */
1283
- if (! leaf) ADD_PC(INSN_ATTR(width));
1242
+ ADD_PC(INSN_ATTR(width));
1284
1243
  SETUP_CANARY(leaf);
1285
1244
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1286
1245
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, ary);
1287
1246
 
1288
1247
  /* ### Here we do the instruction body. ### */
1289
1248
  # define NAME_OF_CURRENT_INSN duparray
1290
- # line 484 "insns.def"
1249
+ # line 471 "insns.def"
1291
1250
  {
1292
1251
  RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary));
1293
1252
  val = rb_ary_resurrect(ary);
1294
1253
  }
1295
- # line 1296 "vm.inc"
1254
+ # line 1255 "vm.inc"
1296
1255
  # undef NAME_OF_CURRENT_INSN
1297
1256
 
1298
1257
  /* ### Instruction trailers. ### */
@@ -1302,7 +1261,6 @@ INSN_ENTRY(duparray)
1302
1261
  TOPN(0) = val;
1303
1262
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1304
1263
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1305
- if (leaf) ADD_PC(INSN_ATTR(width));
1306
1264
  # undef INSN_ATTR
1307
1265
 
1308
1266
  /* ### Leave the instruction. ### */
@@ -1319,23 +1277,23 @@ INSN_ENTRY(duphash)
1319
1277
  /* ### Declare and assign variables. ### */
1320
1278
  VALUE hash = (VALUE)GET_OPERAND(1);
1321
1279
  # define INSN_ATTR(x) attr_ ## x ## _duphash(hash)
1322
- const bool leaf = INSN_ATTR(leaf);
1280
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1323
1281
  VALUE val;
1324
1282
 
1325
1283
  /* ### Instruction preambles. ### */
1326
- if (! leaf) ADD_PC(INSN_ATTR(width));
1284
+ ADD_PC(INSN_ATTR(width));
1327
1285
  SETUP_CANARY(leaf);
1328
1286
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1329
1287
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
1330
1288
 
1331
1289
  /* ### Here we do the instruction body. ### */
1332
1290
  # define NAME_OF_CURRENT_INSN duphash
1333
- # line 495 "insns.def"
1291
+ # line 482 "insns.def"
1334
1292
  {
1335
1293
  RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1);
1336
1294
  val = rb_hash_resurrect(hash);
1337
1295
  }
1338
- # line 1339 "vm.inc"
1296
+ # line 1297 "vm.inc"
1339
1297
  # undef NAME_OF_CURRENT_INSN
1340
1298
 
1341
1299
  /* ### Instruction trailers. ### */
@@ -1345,7 +1303,6 @@ INSN_ENTRY(duphash)
1345
1303
  TOPN(0) = val;
1346
1304
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1347
1305
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1348
- if (leaf) ADD_PC(INSN_ATTR(width));
1349
1306
  # undef INSN_ATTR
1350
1307
 
1351
1308
  /* ### Leave the instruction. ### */
@@ -1363,28 +1320,27 @@ INSN_ENTRY(expandarray)
1363
1320
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
1364
1321
  rb_num_t flag = (rb_num_t)GET_OPERAND(2);
1365
1322
  # define INSN_ATTR(x) attr_ ## x ## _expandarray(num, flag)
1366
- const bool leaf = INSN_ATTR(leaf);
1323
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1367
1324
  VALUE ary = TOPN(0);
1368
1325
 
1369
1326
  /* ### Instruction preambles. ### */
1370
- if (! leaf) ADD_PC(INSN_ATTR(width));
1327
+ ADD_PC(INSN_ATTR(width));
1371
1328
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1372
1329
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1373
1330
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 1, flag);
1374
1331
 
1375
1332
  /* ### Here we do the instruction body. ### */
1376
1333
  # define NAME_OF_CURRENT_INSN expandarray
1377
- # line 516 "insns.def"
1334
+ # line 503 "insns.def"
1378
1335
  {
1379
1336
  vm_expandarray(GET_SP(), ary, num, (int)flag);
1380
1337
  }
1381
- # line 1382 "vm.inc"
1338
+ # line 1339 "vm.inc"
1382
1339
  # undef NAME_OF_CURRENT_INSN
1383
1340
 
1384
1341
  /* ### Instruction trailers. ### */
1385
1342
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1386
1343
  INC_SP(INSN_ATTR(sp_inc));
1387
- if (leaf) ADD_PC(INSN_ATTR(width));
1388
1344
  # undef INSN_ATTR
1389
1345
 
1390
1346
  /* ### Leave the instruction. ### */
@@ -1400,23 +1356,23 @@ INSN_ENTRY(concatarray)
1400
1356
 
1401
1357
  /* ### Declare and assign variables. ### */
1402
1358
  # define INSN_ATTR(x) attr_ ## x ## _concatarray()
1403
- const bool leaf = INSN_ATTR(leaf);
1359
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1404
1360
  VALUE ary1 = TOPN(1);
1405
1361
  VALUE ary2 = TOPN(0);
1406
1362
  VALUE ary;
1407
1363
 
1408
1364
  /* ### Instruction preambles. ### */
1409
- if (! leaf) ADD_PC(INSN_ATTR(width));
1365
+ ADD_PC(INSN_ATTR(width));
1410
1366
  SETUP_CANARY(leaf);
1411
1367
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1412
1368
 
1413
1369
  /* ### Here we do the instruction body. ### */
1414
1370
  # define NAME_OF_CURRENT_INSN concatarray
1415
- # line 527 "insns.def"
1371
+ # line 514 "insns.def"
1416
1372
  {
1417
1373
  ary = vm_concat_array(ary1, ary2);
1418
1374
  }
1419
- # line 1420 "vm.inc"
1375
+ # line 1376 "vm.inc"
1420
1376
  # undef NAME_OF_CURRENT_INSN
1421
1377
 
1422
1378
  /* ### Instruction trailers. ### */
@@ -1426,7 +1382,6 @@ INSN_ENTRY(concatarray)
1426
1382
  TOPN(0) = ary;
1427
1383
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1428
1384
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1429
- if (leaf) ADD_PC(INSN_ATTR(width));
1430
1385
  # undef INSN_ATTR
1431
1386
 
1432
1387
  /* ### Leave the instruction. ### */
@@ -1443,23 +1398,23 @@ INSN_ENTRY(splatarray)
1443
1398
  /* ### Declare and assign variables. ### */
1444
1399
  VALUE flag = (VALUE)GET_OPERAND(1);
1445
1400
  # define INSN_ATTR(x) attr_ ## x ## _splatarray(flag)
1446
- const bool leaf = INSN_ATTR(leaf);
1401
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1447
1402
  VALUE ary = TOPN(0);
1448
1403
  VALUE obj;
1449
1404
 
1450
1405
  /* ### Instruction preambles. ### */
1451
- if (! leaf) ADD_PC(INSN_ATTR(width));
1406
+ ADD_PC(INSN_ATTR(width));
1452
1407
  SETUP_CANARY(leaf);
1453
1408
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1454
1409
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1455
1410
 
1456
1411
  /* ### Here we do the instruction body. ### */
1457
1412
  # define NAME_OF_CURRENT_INSN splatarray
1458
- # line 538 "insns.def"
1413
+ # line 525 "insns.def"
1459
1414
  {
1460
1415
  obj = vm_splat_array(flag, ary);
1461
1416
  }
1462
- # line 1463 "vm.inc"
1417
+ # line 1418 "vm.inc"
1463
1418
  # undef NAME_OF_CURRENT_INSN
1464
1419
 
1465
1420
  /* ### Instruction trailers. ### */
@@ -1469,7 +1424,6 @@ INSN_ENTRY(splatarray)
1469
1424
  TOPN(0) = obj;
1470
1425
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1471
1426
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1472
- if (leaf) ADD_PC(INSN_ATTR(width));
1473
1427
  # undef INSN_ATTR
1474
1428
 
1475
1429
  /* ### Leave the instruction. ### */
@@ -1486,18 +1440,18 @@ INSN_ENTRY(newhash)
1486
1440
  /* ### Declare and assign variables. ### */
1487
1441
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
1488
1442
  # define INSN_ATTR(x) attr_ ## x ## _newhash(num)
1489
- const bool leaf = INSN_ATTR(leaf);
1443
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1490
1444
  VALUE val;
1491
1445
 
1492
1446
  /* ### Instruction preambles. ### */
1493
- if (! leaf) ADD_PC(INSN_ATTR(width));
1447
+ ADD_PC(INSN_ATTR(width));
1494
1448
  SETUP_CANARY(leaf);
1495
1449
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1496
1450
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
1497
1451
 
1498
1452
  /* ### Here we do the instruction body. ### */
1499
1453
  # define NAME_OF_CURRENT_INSN newhash
1500
- # line 550 "insns.def"
1454
+ # line 537 "insns.def"
1501
1455
  {
1502
1456
  RUBY_DTRACE_CREATE_HOOK(HASH, num);
1503
1457
 
@@ -1509,7 +1463,7 @@ INSN_ENTRY(newhash)
1509
1463
  val = rb_hash_new();
1510
1464
  }
1511
1465
  }
1512
- # line 1513 "vm.inc"
1466
+ # line 1467 "vm.inc"
1513
1467
  # undef NAME_OF_CURRENT_INSN
1514
1468
 
1515
1469
  /* ### Instruction trailers. ### */
@@ -1519,7 +1473,6 @@ INSN_ENTRY(newhash)
1519
1473
  TOPN(0) = val;
1520
1474
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1521
1475
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1522
- if (leaf) ADD_PC(INSN_ATTR(width));
1523
1476
  # undef INSN_ATTR
1524
1477
 
1525
1478
  /* ### Leave the instruction. ### */
@@ -1536,24 +1489,24 @@ INSN_ENTRY(newrange)
1536
1489
  /* ### Declare and assign variables. ### */
1537
1490
  rb_num_t flag = (rb_num_t)GET_OPERAND(1);
1538
1491
  # define INSN_ATTR(x) attr_ ## x ## _newrange(flag)
1539
- const bool leaf = INSN_ATTR(leaf);
1492
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1540
1493
  VALUE low = TOPN(1);
1541
1494
  VALUE high = TOPN(0);
1542
1495
  VALUE val;
1543
1496
 
1544
1497
  /* ### Instruction preambles. ### */
1545
- if (! leaf) ADD_PC(INSN_ATTR(width));
1498
+ ADD_PC(INSN_ATTR(width));
1546
1499
  SETUP_CANARY(leaf);
1547
1500
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1548
1501
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
1549
1502
 
1550
1503
  /* ### Here we do the instruction body. ### */
1551
1504
  # define NAME_OF_CURRENT_INSN newrange
1552
- # line 570 "insns.def"
1505
+ # line 557 "insns.def"
1553
1506
  {
1554
1507
  val = rb_range_new(low, high, (int)flag);
1555
1508
  }
1556
- # line 1557 "vm.inc"
1509
+ # line 1510 "vm.inc"
1557
1510
  # undef NAME_OF_CURRENT_INSN
1558
1511
 
1559
1512
  /* ### Instruction trailers. ### */
@@ -1563,7 +1516,6 @@ INSN_ENTRY(newrange)
1563
1516
  TOPN(0) = val;
1564
1517
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1565
1518
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1566
- if (leaf) ADD_PC(INSN_ATTR(width));
1567
1519
  # undef INSN_ATTR
1568
1520
 
1569
1521
  /* ### Leave the instruction. ### */
@@ -1579,29 +1531,28 @@ INSN_ENTRY(pop)
1579
1531
 
1580
1532
  /* ### Declare and assign variables. ### */
1581
1533
  # define INSN_ATTR(x) attr_ ## x ## _pop()
1582
- const bool leaf = INSN_ATTR(leaf);
1534
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1583
1535
  VALUE val = TOPN(0);
1584
1536
 
1585
1537
  /* ### Instruction preambles. ### */
1586
- if (! leaf) ADD_PC(INSN_ATTR(width));
1538
+ ADD_PC(INSN_ATTR(width));
1587
1539
  SETUP_CANARY(leaf);
1588
1540
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1589
1541
 
1590
1542
  /* ### Here we do the instruction body. ### */
1591
1543
  # define NAME_OF_CURRENT_INSN pop
1592
- # line 584 "insns.def"
1544
+ # line 571 "insns.def"
1593
1545
  {
1594
1546
  (void)val;
1595
1547
  /* none */
1596
1548
  }
1597
- # line 1598 "vm.inc"
1549
+ # line 1550 "vm.inc"
1598
1550
  # undef NAME_OF_CURRENT_INSN
1599
1551
 
1600
1552
  /* ### Instruction trailers. ### */
1601
1553
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1602
1554
  CHECK_CANARY(leaf, INSN_ATTR(bin));
1603
1555
  INC_SP(INSN_ATTR(sp_inc));
1604
- if (leaf) ADD_PC(INSN_ATTR(width));
1605
1556
  # undef INSN_ATTR
1606
1557
 
1607
1558
  /* ### Leave the instruction. ### */
@@ -1617,23 +1568,23 @@ INSN_ENTRY(dup)
1617
1568
 
1618
1569
  /* ### Declare and assign variables. ### */
1619
1570
  # define INSN_ATTR(x) attr_ ## x ## _dup()
1620
- const bool leaf = INSN_ATTR(leaf);
1571
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1621
1572
  VALUE val = TOPN(0);
1622
1573
  VALUE val1;
1623
1574
  VALUE val2;
1624
1575
 
1625
1576
  /* ### Instruction preambles. ### */
1626
- if (! leaf) ADD_PC(INSN_ATTR(width));
1577
+ ADD_PC(INSN_ATTR(width));
1627
1578
  SETUP_CANARY(leaf);
1628
1579
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1629
1580
 
1630
1581
  /* ### Here we do the instruction body. ### */
1631
1582
  # define NAME_OF_CURRENT_INSN dup
1632
- # line 595 "insns.def"
1583
+ # line 582 "insns.def"
1633
1584
  {
1634
1585
  val1 = val2 = val;
1635
1586
  }
1636
- # line 1637 "vm.inc"
1587
+ # line 1588 "vm.inc"
1637
1588
  # undef NAME_OF_CURRENT_INSN
1638
1589
 
1639
1590
  /* ### Instruction trailers. ### */
@@ -1646,7 +1597,6 @@ INSN_ENTRY(dup)
1646
1597
  TOPN(1) = val1;
1647
1598
  VM_ASSERT(!RB_TYPE_P(TOPN(1), T_NONE));
1648
1599
  VM_ASSERT(!RB_TYPE_P(TOPN(1), T_MOVED));
1649
- if (leaf) ADD_PC(INSN_ATTR(width));
1650
1600
  # undef INSN_ATTR
1651
1601
 
1652
1602
  /* ### Leave the instruction. ### */
@@ -1663,29 +1613,28 @@ INSN_ENTRY(dupn)
1663
1613
  /* ### Declare and assign variables. ### */
1664
1614
  rb_num_t n = (rb_num_t)GET_OPERAND(1);
1665
1615
  # define INSN_ATTR(x) attr_ ## x ## _dupn(n)
1666
- const bool leaf = INSN_ATTR(leaf);
1616
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1667
1617
 
1668
1618
  /* ### Instruction preambles. ### */
1669
- if (! leaf) ADD_PC(INSN_ATTR(width));
1619
+ ADD_PC(INSN_ATTR(width));
1670
1620
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1671
1621
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1672
1622
 
1673
1623
  /* ### Here we do the instruction body. ### */
1674
1624
  # define NAME_OF_CURRENT_INSN dupn
1675
- # line 606 "insns.def"
1625
+ # line 593 "insns.def"
1676
1626
  {
1677
1627
  void *dst = GET_SP();
1678
1628
  void *src = STACK_ADDR_FROM_TOP(n);
1679
1629
 
1680
1630
  MEMCPY(dst, src, VALUE, n);
1681
1631
  }
1682
- # line 1683 "vm.inc"
1632
+ # line 1633 "vm.inc"
1683
1633
  # undef NAME_OF_CURRENT_INSN
1684
1634
 
1685
1635
  /* ### Instruction trailers. ### */
1686
1636
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1687
1637
  INC_SP(INSN_ATTR(sp_inc));
1688
- if (leaf) ADD_PC(INSN_ATTR(width));
1689
1638
  # undef INSN_ATTR
1690
1639
 
1691
1640
  /* ### Leave the instruction. ### */
@@ -1701,12 +1650,12 @@ INSN_ENTRY(swap)
1701
1650
 
1702
1651
  /* ### Declare and assign variables. ### */
1703
1652
  # define INSN_ATTR(x) attr_ ## x ## _swap()
1704
- const bool leaf = INSN_ATTR(leaf);
1653
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1705
1654
  VALUE val = TOPN(1);
1706
1655
  VALUE obj = TOPN(0);
1707
1656
 
1708
1657
  /* ### Instruction preambles. ### */
1709
- if (! leaf) ADD_PC(INSN_ATTR(width));
1658
+ ADD_PC(INSN_ATTR(width));
1710
1659
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1711
1660
 
1712
1661
  /* ### Instruction trailers. ### */
@@ -1718,7 +1667,6 @@ INSN_ENTRY(swap)
1718
1667
  TOPN(1) = obj;
1719
1668
  VM_ASSERT(!RB_TYPE_P(TOPN(1), T_NONE));
1720
1669
  VM_ASSERT(!RB_TYPE_P(TOPN(1), T_MOVED));
1721
- if (leaf) ADD_PC(INSN_ATTR(width));
1722
1670
  # undef INSN_ATTR
1723
1671
 
1724
1672
  /* ### Leave the instruction. ### */
@@ -1735,16 +1683,16 @@ INSN_ENTRY(opt_reverse)
1735
1683
  /* ### Declare and assign variables. ### */
1736
1684
  rb_num_t n = (rb_num_t)GET_OPERAND(1);
1737
1685
  # define INSN_ATTR(x) attr_ ## x ## _opt_reverse(n)
1738
- const bool leaf = INSN_ATTR(leaf);
1686
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1739
1687
 
1740
1688
  /* ### Instruction preambles. ### */
1741
- if (! leaf) ADD_PC(INSN_ATTR(width));
1689
+ ADD_PC(INSN_ATTR(width));
1742
1690
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1743
1691
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1744
1692
 
1745
1693
  /* ### Here we do the instruction body. ### */
1746
1694
  # define NAME_OF_CURRENT_INSN opt_reverse
1747
- # line 630 "insns.def"
1695
+ # line 617 "insns.def"
1748
1696
  {
1749
1697
  rb_num_t i;
1750
1698
  VALUE *sp = STACK_ADDR_FROM_TOP(n);
@@ -1756,13 +1704,12 @@ INSN_ENTRY(opt_reverse)
1756
1704
  TOPN(i) = v0;
1757
1705
  }
1758
1706
  }
1759
- # line 1760 "vm.inc"
1707
+ # line 1708 "vm.inc"
1760
1708
  # undef NAME_OF_CURRENT_INSN
1761
1709
 
1762
1710
  /* ### Instruction trailers. ### */
1763
1711
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1764
1712
  INC_SP(INSN_ATTR(sp_inc));
1765
- if (leaf) ADD_PC(INSN_ATTR(width));
1766
1713
  # undef INSN_ATTR
1767
1714
 
1768
1715
  /* ### Leave the instruction. ### */
@@ -1779,22 +1726,22 @@ INSN_ENTRY(topn)
1779
1726
  /* ### Declare and assign variables. ### */
1780
1727
  rb_num_t n = (rb_num_t)GET_OPERAND(1);
1781
1728
  # define INSN_ATTR(x) attr_ ## x ## _topn(n)
1782
- const bool leaf = INSN_ATTR(leaf);
1729
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1783
1730
  VALUE val;
1784
1731
 
1785
1732
  /* ### Instruction preambles. ### */
1786
- if (! leaf) ADD_PC(INSN_ATTR(width));
1733
+ ADD_PC(INSN_ATTR(width));
1787
1734
  SETUP_CANARY(leaf);
1788
1735
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1789
1736
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1790
1737
 
1791
1738
  /* ### Here we do the instruction body. ### */
1792
1739
  # define NAME_OF_CURRENT_INSN topn
1793
- # line 660 "insns.def"
1740
+ # line 647 "insns.def"
1794
1741
  {
1795
1742
  val = TOPN(n);
1796
1743
  }
1797
- # line 1798 "vm.inc"
1744
+ # line 1745 "vm.inc"
1798
1745
  # undef NAME_OF_CURRENT_INSN
1799
1746
 
1800
1747
  /* ### Instruction trailers. ### */
@@ -1804,7 +1751,6 @@ INSN_ENTRY(topn)
1804
1751
  TOPN(0) = val;
1805
1752
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1806
1753
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1807
- if (leaf) ADD_PC(INSN_ATTR(width));
1808
1754
  # undef INSN_ATTR
1809
1755
 
1810
1756
  /* ### Leave the instruction. ### */
@@ -1821,22 +1767,22 @@ INSN_ENTRY(setn)
1821
1767
  /* ### Declare and assign variables. ### */
1822
1768
  rb_num_t n = (rb_num_t)GET_OPERAND(1);
1823
1769
  # define INSN_ATTR(x) attr_ ## x ## _setn(n)
1824
- const bool leaf = INSN_ATTR(leaf);
1770
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1825
1771
  VALUE val = TOPN(0);
1826
1772
 
1827
1773
  /* ### Instruction preambles. ### */
1828
- if (! leaf) ADD_PC(INSN_ATTR(width));
1774
+ ADD_PC(INSN_ATTR(width));
1829
1775
  SETUP_CANARY(leaf);
1830
1776
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1831
1777
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1832
1778
 
1833
1779
  /* ### Here we do the instruction body. ### */
1834
1780
  # define NAME_OF_CURRENT_INSN setn
1835
- # line 671 "insns.def"
1781
+ # line 658 "insns.def"
1836
1782
  {
1837
1783
  TOPN(n) = val;
1838
1784
  }
1839
- # line 1840 "vm.inc"
1785
+ # line 1786 "vm.inc"
1840
1786
  # undef NAME_OF_CURRENT_INSN
1841
1787
 
1842
1788
  /* ### Instruction trailers. ### */
@@ -1846,7 +1792,6 @@ INSN_ENTRY(setn)
1846
1792
  TOPN(0) = val;
1847
1793
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1848
1794
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1849
- if (leaf) ADD_PC(INSN_ATTR(width));
1850
1795
  # undef INSN_ATTR
1851
1796
 
1852
1797
  /* ### Leave the instruction. ### */
@@ -1863,17 +1808,16 @@ INSN_ENTRY(adjuststack)
1863
1808
  /* ### Declare and assign variables. ### */
1864
1809
  rb_num_t n = (rb_num_t)GET_OPERAND(1);
1865
1810
  # define INSN_ATTR(x) attr_ ## x ## _adjuststack(n)
1866
- const bool leaf = INSN_ATTR(leaf);
1811
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1867
1812
 
1868
1813
  /* ### Instruction preambles. ### */
1869
- if (! leaf) ADD_PC(INSN_ATTR(width));
1814
+ ADD_PC(INSN_ATTR(width));
1870
1815
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1871
1816
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, n);
1872
1817
 
1873
1818
  /* ### Instruction trailers. ### */
1874
1819
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
1875
1820
  INC_SP(INSN_ATTR(sp_inc));
1876
- if (leaf) ADD_PC(INSN_ATTR(width));
1877
1821
  # undef INSN_ATTR
1878
1822
 
1879
1823
  /* ### Leave the instruction. ### */
@@ -1892,12 +1836,12 @@ INSN_ENTRY(defined)
1892
1836
  VALUE obj = (VALUE)GET_OPERAND(2);
1893
1837
  VALUE pushval = (VALUE)GET_OPERAND(3);
1894
1838
  # define INSN_ATTR(x) attr_ ## x ## _defined(op_type, obj, pushval)
1895
- const bool leaf = INSN_ATTR(leaf);
1839
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1896
1840
  VALUE v = TOPN(0);
1897
1841
  VALUE val;
1898
1842
 
1899
1843
  /* ### Instruction preambles. ### */
1900
- if (! leaf) ADD_PC(INSN_ATTR(width));
1844
+ ADD_PC(INSN_ATTR(width));
1901
1845
  SETUP_CANARY(leaf);
1902
1846
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1903
1847
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, op_type);
@@ -1906,14 +1850,14 @@ INSN_ENTRY(defined)
1906
1850
 
1907
1851
  /* ### Here we do the instruction body. ### */
1908
1852
  # define NAME_OF_CURRENT_INSN defined
1909
- # line 697 "insns.def"
1853
+ # line 684 "insns.def"
1910
1854
  {
1911
1855
  val = Qnil;
1912
1856
  if (vm_defined(ec, GET_CFP(), op_type, obj, v)) {
1913
1857
  val = pushval;
1914
1858
  }
1915
1859
  }
1916
- # line 1917 "vm.inc"
1860
+ # line 1861 "vm.inc"
1917
1861
  # undef NAME_OF_CURRENT_INSN
1918
1862
 
1919
1863
  /* ### Instruction trailers. ### */
@@ -1923,7 +1867,6 @@ INSN_ENTRY(defined)
1923
1867
  TOPN(0) = val;
1924
1868
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1925
1869
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1926
- if (leaf) ADD_PC(INSN_ATTR(width));
1927
1870
  # undef INSN_ATTR
1928
1871
 
1929
1872
  /* ### Leave the instruction. ### */
@@ -1942,11 +1885,11 @@ INSN_ENTRY(definedivar)
1942
1885
  IVC ic = (IVC)GET_OPERAND(2);
1943
1886
  VALUE pushval = (VALUE)GET_OPERAND(3);
1944
1887
  # define INSN_ATTR(x) attr_ ## x ## _definedivar(id, ic, pushval)
1945
- const bool leaf = INSN_ATTR(leaf);
1888
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1946
1889
  VALUE val;
1947
1890
 
1948
1891
  /* ### Instruction preambles. ### */
1949
- if (! leaf) ADD_PC(INSN_ATTR(width));
1892
+ ADD_PC(INSN_ATTR(width));
1950
1893
  SETUP_CANARY(leaf);
1951
1894
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
1952
1895
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, id);
@@ -1955,14 +1898,14 @@ INSN_ENTRY(definedivar)
1955
1898
 
1956
1899
  /* ### Here we do the instruction body. ### */
1957
1900
  # define NAME_OF_CURRENT_INSN definedivar
1958
- # line 711 "insns.def"
1901
+ # line 698 "insns.def"
1959
1902
  {
1960
1903
  val = Qnil;
1961
1904
  if (vm_getivar(GET_SELF(), id, GET_ISEQ(), ic, NULL, FALSE, Qundef) != Qundef) {
1962
1905
  val = pushval;
1963
1906
  }
1964
1907
  }
1965
- # line 1966 "vm.inc"
1908
+ # line 1909 "vm.inc"
1966
1909
  # undef NAME_OF_CURRENT_INSN
1967
1910
 
1968
1911
  /* ### Instruction trailers. ### */
@@ -1972,7 +1915,6 @@ INSN_ENTRY(definedivar)
1972
1915
  TOPN(0) = val;
1973
1916
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
1974
1917
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
1975
- if (leaf) ADD_PC(INSN_ATTR(width));
1976
1918
  # undef INSN_ATTR
1977
1919
 
1978
1920
  /* ### Leave the instruction. ### */
@@ -1989,24 +1931,24 @@ INSN_ENTRY(checkmatch)
1989
1931
  /* ### Declare and assign variables. ### */
1990
1932
  rb_num_t flag = (rb_num_t)GET_OPERAND(1);
1991
1933
  # define INSN_ATTR(x) attr_ ## x ## _checkmatch(flag)
1992
- const bool leaf = INSN_ATTR(leaf);
1934
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
1993
1935
  VALUE target = TOPN(1);
1994
1936
  VALUE pattern = TOPN(0);
1995
1937
  VALUE result;
1996
1938
 
1997
1939
  /* ### Instruction preambles. ### */
1998
- if (! leaf) ADD_PC(INSN_ATTR(width));
1940
+ ADD_PC(INSN_ATTR(width));
1999
1941
  SETUP_CANARY(leaf);
2000
1942
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2001
1943
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, flag);
2002
1944
 
2003
1945
  /* ### Here we do the instruction body. ### */
2004
1946
  # define NAME_OF_CURRENT_INSN checkmatch
2005
- # line 731 "insns.def"
1947
+ # line 718 "insns.def"
2006
1948
  {
2007
1949
  result = vm_check_match(ec, target, pattern, flag);
2008
1950
  }
2009
- # line 2010 "vm.inc"
1951
+ # line 1952 "vm.inc"
2010
1952
  # undef NAME_OF_CURRENT_INSN
2011
1953
 
2012
1954
  /* ### Instruction trailers. ### */
@@ -2016,7 +1958,6 @@ INSN_ENTRY(checkmatch)
2016
1958
  TOPN(0) = result;
2017
1959
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2018
1960
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2019
- if (leaf) ADD_PC(INSN_ATTR(width));
2020
1961
  # undef INSN_ATTR
2021
1962
 
2022
1963
  /* ### Leave the instruction. ### */
@@ -2034,11 +1975,11 @@ INSN_ENTRY(checkkeyword)
2034
1975
  lindex_t kw_bits_index = (lindex_t)GET_OPERAND(1);
2035
1976
  lindex_t keyword_index = (lindex_t)GET_OPERAND(2);
2036
1977
  # define INSN_ATTR(x) attr_ ## x ## _checkkeyword(kw_bits_index, keyword_index)
2037
- const bool leaf = INSN_ATTR(leaf);
1978
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2038
1979
  VALUE ret;
2039
1980
 
2040
1981
  /* ### Instruction preambles. ### */
2041
- if (! leaf) ADD_PC(INSN_ATTR(width));
1982
+ ADD_PC(INSN_ATTR(width));
2042
1983
  SETUP_CANARY(leaf);
2043
1984
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2044
1985
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, kw_bits_index);
@@ -2046,11 +1987,11 @@ INSN_ENTRY(checkkeyword)
2046
1987
 
2047
1988
  /* ### Here we do the instruction body. ### */
2048
1989
  # define NAME_OF_CURRENT_INSN checkkeyword
2049
- # line 741 "insns.def"
1990
+ # line 728 "insns.def"
2050
1991
  {
2051
1992
  ret = vm_check_keyword(kw_bits_index, keyword_index, GET_EP());
2052
1993
  }
2053
- # line 2054 "vm.inc"
1994
+ # line 1995 "vm.inc"
2054
1995
  # undef NAME_OF_CURRENT_INSN
2055
1996
 
2056
1997
  /* ### Instruction trailers. ### */
@@ -2060,7 +2001,6 @@ INSN_ENTRY(checkkeyword)
2060
2001
  TOPN(0) = ret;
2061
2002
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2062
2003
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2063
- if (leaf) ADD_PC(INSN_ATTR(width));
2064
2004
  # undef INSN_ATTR
2065
2005
 
2066
2006
  /* ### Leave the instruction. ### */
@@ -2077,23 +2017,23 @@ INSN_ENTRY(checktype)
2077
2017
  /* ### Declare and assign variables. ### */
2078
2018
  rb_num_t type = (rb_num_t)GET_OPERAND(1);
2079
2019
  # define INSN_ATTR(x) attr_ ## x ## _checktype(type)
2080
- const bool leaf = INSN_ATTR(leaf);
2020
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2081
2021
  VALUE val = TOPN(0);
2082
2022
  VALUE ret;
2083
2023
 
2084
2024
  /* ### Instruction preambles. ### */
2085
- if (! leaf) ADD_PC(INSN_ATTR(width));
2025
+ ADD_PC(INSN_ATTR(width));
2086
2026
  SETUP_CANARY(leaf);
2087
2027
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2088
2028
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, type);
2089
2029
 
2090
2030
  /* ### Here we do the instruction body. ### */
2091
2031
  # define NAME_OF_CURRENT_INSN checktype
2092
- # line 751 "insns.def"
2032
+ # line 738 "insns.def"
2093
2033
  {
2094
2034
  ret = RBOOL(TYPE(val) == (int)type);
2095
2035
  }
2096
- # line 2097 "vm.inc"
2036
+ # line 2037 "vm.inc"
2097
2037
  # undef NAME_OF_CURRENT_INSN
2098
2038
 
2099
2039
  /* ### Instruction trailers. ### */
@@ -2103,7 +2043,6 @@ INSN_ENTRY(checktype)
2103
2043
  TOPN(0) = ret;
2104
2044
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2105
2045
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2106
- if (leaf) ADD_PC(INSN_ATTR(width));
2107
2046
  # undef INSN_ATTR
2108
2047
 
2109
2048
  /* ### Leave the instruction. ### */
@@ -2122,13 +2061,13 @@ INSN_ENTRY(defineclass)
2122
2061
  ISEQ class_iseq = (ISEQ)GET_OPERAND(2);
2123
2062
  rb_num_t flags = (rb_num_t)GET_OPERAND(3);
2124
2063
  # define INSN_ATTR(x) attr_ ## x ## _defineclass(id, class_iseq, flags)
2125
- const bool leaf = INSN_ATTR(leaf);
2064
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2126
2065
  VALUE cbase = TOPN(1);
2127
2066
  VALUE super = TOPN(0);
2128
2067
  VALUE val;
2129
2068
 
2130
2069
  /* ### Instruction preambles. ### */
2131
- if (! leaf) ADD_PC(INSN_ATTR(width));
2070
+ ADD_PC(INSN_ATTR(width));
2132
2071
  POPN(INSN_ATTR(popn));
2133
2072
  SETUP_CANARY(leaf);
2134
2073
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2138,7 +2077,7 @@ INSN_ENTRY(defineclass)
2138
2077
 
2139
2078
  /* ### Here we do the instruction body. ### */
2140
2079
  # define NAME_OF_CURRENT_INSN defineclass
2141
- # line 767 "insns.def"
2080
+ # line 754 "insns.def"
2142
2081
  {
2143
2082
  VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super);
2144
2083
 
@@ -2154,14 +2093,13 @@ INSN_ENTRY(defineclass)
2154
2093
  RESTORE_REGS();
2155
2094
  NEXT_INSN();
2156
2095
  }
2157
- # line 2158 "vm.inc"
2096
+ # line 2097 "vm.inc"
2158
2097
  # undef NAME_OF_CURRENT_INSN
2159
2098
 
2160
2099
  /* ### Instruction trailers. ### */
2161
2100
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2162
2101
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2163
2102
  PUSH(val);
2164
- if (leaf) ADD_PC(INSN_ATTR(width));
2165
2103
  # undef INSN_ATTR
2166
2104
 
2167
2105
  /* ### Leave the instruction. ### */
@@ -2179,10 +2117,10 @@ INSN_ENTRY(definemethod)
2179
2117
  ID id = (ID)GET_OPERAND(1);
2180
2118
  ISEQ iseq = (ISEQ)GET_OPERAND(2);
2181
2119
  # define INSN_ATTR(x) attr_ ## x ## _definemethod(id, iseq)
2182
- const bool leaf = INSN_ATTR(leaf);
2120
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2183
2121
 
2184
2122
  /* ### Instruction preambles. ### */
2185
- if (! leaf) ADD_PC(INSN_ATTR(width));
2123
+ ADD_PC(INSN_ATTR(width));
2186
2124
  POPN(INSN_ATTR(popn));
2187
2125
  SETUP_CANARY(leaf);
2188
2126
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2191,17 +2129,16 @@ INSN_ENTRY(definemethod)
2191
2129
 
2192
2130
  /* ### Here we do the instruction body. ### */
2193
2131
  # define NAME_OF_CURRENT_INSN definemethod
2194
- # line 788 "insns.def"
2132
+ # line 775 "insns.def"
2195
2133
  {
2196
2134
  vm_define_method(ec, Qnil, id, (VALUE)iseq, FALSE);
2197
2135
  }
2198
- # line 2199 "vm.inc"
2136
+ # line 2137 "vm.inc"
2199
2137
  # undef NAME_OF_CURRENT_INSN
2200
2138
 
2201
2139
  /* ### Instruction trailers. ### */
2202
2140
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2203
2141
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2204
- if (leaf) ADD_PC(INSN_ATTR(width));
2205
2142
  # undef INSN_ATTR
2206
2143
 
2207
2144
  /* ### Leave the instruction. ### */
@@ -2219,11 +2156,11 @@ INSN_ENTRY(definesmethod)
2219
2156
  ID id = (ID)GET_OPERAND(1);
2220
2157
  ISEQ iseq = (ISEQ)GET_OPERAND(2);
2221
2158
  # define INSN_ATTR(x) attr_ ## x ## _definesmethod(id, iseq)
2222
- const bool leaf = INSN_ATTR(leaf);
2159
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2223
2160
  VALUE obj = TOPN(0);
2224
2161
 
2225
2162
  /* ### Instruction preambles. ### */
2226
- if (! leaf) ADD_PC(INSN_ATTR(width));
2163
+ ADD_PC(INSN_ATTR(width));
2227
2164
  POPN(INSN_ATTR(popn));
2228
2165
  SETUP_CANARY(leaf);
2229
2166
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2232,17 +2169,16 @@ INSN_ENTRY(definesmethod)
2232
2169
 
2233
2170
  /* ### Here we do the instruction body. ### */
2234
2171
  # define NAME_OF_CURRENT_INSN definesmethod
2235
- # line 797 "insns.def"
2172
+ # line 784 "insns.def"
2236
2173
  {
2237
2174
  vm_define_method(ec, obj, id, (VALUE)iseq, TRUE);
2238
2175
  }
2239
- # line 2240 "vm.inc"
2176
+ # line 2177 "vm.inc"
2240
2177
  # undef NAME_OF_CURRENT_INSN
2241
2178
 
2242
2179
  /* ### Instruction trailers. ### */
2243
2180
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2244
2181
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2245
- if (leaf) ADD_PC(INSN_ATTR(width));
2246
2182
  # undef INSN_ATTR
2247
2183
 
2248
2184
  /* ### Leave the instruction. ### */
@@ -2260,11 +2196,11 @@ INSN_ENTRY(send)
2260
2196
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2261
2197
  ISEQ blockiseq = (ISEQ)GET_OPERAND(2);
2262
2198
  # define INSN_ATTR(x) attr_ ## x ## _send(cd, blockiseq)
2263
- const bool leaf = INSN_ATTR(leaf);
2199
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2264
2200
  VALUE val;
2265
2201
 
2266
2202
  /* ### Instruction preambles. ### */
2267
- if (! leaf) ADD_PC(INSN_ATTR(width));
2203
+ ADD_PC(INSN_ATTR(width));
2268
2204
  POPN(INSN_ATTR(popn));
2269
2205
  SETUP_CANARY(leaf);
2270
2206
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2273,7 +2209,7 @@ INSN_ENTRY(send)
2273
2209
 
2274
2210
  /* ### Here we do the instruction body. ### */
2275
2211
  # define NAME_OF_CURRENT_INSN send
2276
- # line 813 "insns.def"
2212
+ # line 800 "insns.def"
2277
2213
  {
2278
2214
  VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);
2279
2215
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
@@ -2284,14 +2220,13 @@ INSN_ENTRY(send)
2284
2220
  NEXT_INSN();
2285
2221
  }
2286
2222
  }
2287
- # line 2288 "vm.inc"
2223
+ # line 2224 "vm.inc"
2288
2224
  # undef NAME_OF_CURRENT_INSN
2289
2225
 
2290
2226
  /* ### Instruction trailers. ### */
2291
2227
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2292
2228
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2293
2229
  PUSH(val);
2294
- if (leaf) ADD_PC(INSN_ATTR(width));
2295
2230
  # undef INSN_ATTR
2296
2231
 
2297
2232
  /* ### Leave the instruction. ### */
@@ -2308,11 +2243,11 @@ INSN_ENTRY(opt_send_without_block)
2308
2243
  /* ### Declare and assign variables. ### */
2309
2244
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2310
2245
  # define INSN_ATTR(x) attr_ ## x ## _opt_send_without_block(cd)
2311
- const bool leaf = INSN_ATTR(leaf);
2246
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2312
2247
  VALUE val;
2313
2248
 
2314
2249
  /* ### Instruction preambles. ### */
2315
- if (! leaf) ADD_PC(INSN_ATTR(width));
2250
+ ADD_PC(INSN_ATTR(width));
2316
2251
  POPN(INSN_ATTR(popn));
2317
2252
  SETUP_CANARY(leaf);
2318
2253
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2320,7 +2255,7 @@ INSN_ENTRY(opt_send_without_block)
2320
2255
 
2321
2256
  /* ### Here we do the instruction body. ### */
2322
2257
  # define NAME_OF_CURRENT_INSN opt_send_without_block
2323
- # line 833 "insns.def"
2258
+ # line 820 "insns.def"
2324
2259
  {
2325
2260
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2326
2261
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
@@ -2331,14 +2266,13 @@ INSN_ENTRY(opt_send_without_block)
2331
2266
  NEXT_INSN();
2332
2267
  }
2333
2268
  }
2334
- # line 2335 "vm.inc"
2269
+ # line 2270 "vm.inc"
2335
2270
  # undef NAME_OF_CURRENT_INSN
2336
2271
 
2337
2272
  /* ### Instruction trailers. ### */
2338
2273
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2339
2274
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2340
2275
  PUSH(val);
2341
- if (leaf) ADD_PC(INSN_ATTR(width));
2342
2276
  # undef INSN_ATTR
2343
2277
 
2344
2278
  /* ### Leave the instruction. ### */
@@ -2355,19 +2289,19 @@ INSN_ENTRY(objtostring)
2355
2289
  /* ### Declare and assign variables. ### */
2356
2290
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2357
2291
  # define INSN_ATTR(x) attr_ ## x ## _objtostring(cd)
2358
- const bool leaf = INSN_ATTR(leaf);
2292
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2359
2293
  VALUE recv = TOPN(0);
2360
2294
  VALUE val;
2361
2295
 
2362
2296
  /* ### Instruction preambles. ### */
2363
- if (! leaf) ADD_PC(INSN_ATTR(width));
2297
+ ADD_PC(INSN_ATTR(width));
2364
2298
  SETUP_CANARY(leaf);
2365
2299
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2366
2300
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2367
2301
 
2368
2302
  /* ### Here we do the instruction body. ### */
2369
2303
  # define NAME_OF_CURRENT_INSN objtostring
2370
- # line 851 "insns.def"
2304
+ # line 838 "insns.def"
2371
2305
  {
2372
2306
  val = vm_objtostring(GET_ISEQ(), recv, cd);
2373
2307
 
@@ -2375,7 +2309,7 @@ INSN_ENTRY(objtostring)
2375
2309
  CALL_SIMPLE_METHOD();
2376
2310
  }
2377
2311
  }
2378
- # line 2379 "vm.inc"
2312
+ # line 2313 "vm.inc"
2379
2313
  # undef NAME_OF_CURRENT_INSN
2380
2314
 
2381
2315
  /* ### Instruction trailers. ### */
@@ -2385,7 +2319,6 @@ INSN_ENTRY(objtostring)
2385
2319
  TOPN(0) = val;
2386
2320
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2387
2321
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2388
- if (leaf) ADD_PC(INSN_ATTR(width));
2389
2322
  # undef INSN_ATTR
2390
2323
 
2391
2324
  /* ### Leave the instruction. ### */
@@ -2403,11 +2336,11 @@ INSN_ENTRY(opt_str_freeze)
2403
2336
  VALUE str = (VALUE)GET_OPERAND(1);
2404
2337
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
2405
2338
  # define INSN_ATTR(x) attr_ ## x ## _opt_str_freeze(str, cd)
2406
- const bool leaf = INSN_ATTR(leaf);
2339
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2407
2340
  VALUE val;
2408
2341
 
2409
2342
  /* ### Instruction preambles. ### */
2410
- if (! leaf) ADD_PC(INSN_ATTR(width));
2343
+ ADD_PC(INSN_ATTR(width));
2411
2344
  SETUP_CANARY(leaf);
2412
2345
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2413
2346
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
@@ -2415,7 +2348,7 @@ INSN_ENTRY(opt_str_freeze)
2415
2348
 
2416
2349
  /* ### Here we do the instruction body. ### */
2417
2350
  # define NAME_OF_CURRENT_INSN opt_str_freeze
2418
- # line 864 "insns.def"
2351
+ # line 851 "insns.def"
2419
2352
  {
2420
2353
  val = vm_opt_str_freeze(str, BOP_FREEZE, idFreeze);
2421
2354
 
@@ -2424,7 +2357,7 @@ INSN_ENTRY(opt_str_freeze)
2424
2357
  CALL_SIMPLE_METHOD();
2425
2358
  }
2426
2359
  }
2427
- # line 2428 "vm.inc"
2360
+ # line 2361 "vm.inc"
2428
2361
  # undef NAME_OF_CURRENT_INSN
2429
2362
 
2430
2363
  /* ### Instruction trailers. ### */
@@ -2434,7 +2367,6 @@ INSN_ENTRY(opt_str_freeze)
2434
2367
  TOPN(0) = val;
2435
2368
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2436
2369
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2437
- if (leaf) ADD_PC(INSN_ATTR(width));
2438
2370
  # undef INSN_ATTR
2439
2371
 
2440
2372
  /* ### Leave the instruction. ### */
@@ -2451,19 +2383,19 @@ INSN_ENTRY(opt_nil_p)
2451
2383
  /* ### Declare and assign variables. ### */
2452
2384
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2453
2385
  # define INSN_ATTR(x) attr_ ## x ## _opt_nil_p(cd)
2454
- const bool leaf = INSN_ATTR(leaf);
2386
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2455
2387
  VALUE recv = TOPN(0);
2456
2388
  VALUE val;
2457
2389
 
2458
2390
  /* ### Instruction preambles. ### */
2459
- if (! leaf) ADD_PC(INSN_ATTR(width));
2391
+ ADD_PC(INSN_ATTR(width));
2460
2392
  SETUP_CANARY(leaf);
2461
2393
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2462
2394
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
2463
2395
 
2464
2396
  /* ### Here we do the instruction body. ### */
2465
2397
  # define NAME_OF_CURRENT_INSN opt_nil_p
2466
- # line 879 "insns.def"
2398
+ # line 866 "insns.def"
2467
2399
  {
2468
2400
  val = vm_opt_nil_p(GET_ISEQ(), cd, recv);
2469
2401
 
@@ -2471,7 +2403,7 @@ INSN_ENTRY(opt_nil_p)
2471
2403
  CALL_SIMPLE_METHOD();
2472
2404
  }
2473
2405
  }
2474
- # line 2475 "vm.inc"
2406
+ # line 2407 "vm.inc"
2475
2407
  # undef NAME_OF_CURRENT_INSN
2476
2408
 
2477
2409
  /* ### Instruction trailers. ### */
@@ -2481,7 +2413,6 @@ INSN_ENTRY(opt_nil_p)
2481
2413
  TOPN(0) = val;
2482
2414
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2483
2415
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2484
- if (leaf) ADD_PC(INSN_ATTR(width));
2485
2416
  # undef INSN_ATTR
2486
2417
 
2487
2418
  /* ### Leave the instruction. ### */
@@ -2499,11 +2430,11 @@ INSN_ENTRY(opt_str_uminus)
2499
2430
  VALUE str = (VALUE)GET_OPERAND(1);
2500
2431
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
2501
2432
  # define INSN_ATTR(x) attr_ ## x ## _opt_str_uminus(str, cd)
2502
- const bool leaf = INSN_ATTR(leaf);
2433
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2503
2434
  VALUE val;
2504
2435
 
2505
2436
  /* ### Instruction preambles. ### */
2506
- if (! leaf) ADD_PC(INSN_ATTR(width));
2437
+ ADD_PC(INSN_ATTR(width));
2507
2438
  SETUP_CANARY(leaf);
2508
2439
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2509
2440
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, str);
@@ -2511,7 +2442,7 @@ INSN_ENTRY(opt_str_uminus)
2511
2442
 
2512
2443
  /* ### Here we do the instruction body. ### */
2513
2444
  # define NAME_OF_CURRENT_INSN opt_str_uminus
2514
- # line 892 "insns.def"
2445
+ # line 879 "insns.def"
2515
2446
  {
2516
2447
  val = vm_opt_str_freeze(str, BOP_UMINUS, idUMinus);
2517
2448
 
@@ -2520,7 +2451,7 @@ INSN_ENTRY(opt_str_uminus)
2520
2451
  CALL_SIMPLE_METHOD();
2521
2452
  }
2522
2453
  }
2523
- # line 2524 "vm.inc"
2454
+ # line 2455 "vm.inc"
2524
2455
  # undef NAME_OF_CURRENT_INSN
2525
2456
 
2526
2457
  /* ### Instruction trailers. ### */
@@ -2530,7 +2461,6 @@ INSN_ENTRY(opt_str_uminus)
2530
2461
  TOPN(0) = val;
2531
2462
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2532
2463
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2533
- if (leaf) ADD_PC(INSN_ATTR(width));
2534
2464
  # undef INSN_ATTR
2535
2465
 
2536
2466
  /* ### Leave the instruction. ### */
@@ -2548,11 +2478,11 @@ INSN_ENTRY(opt_newarray_send)
2548
2478
  rb_num_t num = (rb_num_t)GET_OPERAND(1);
2549
2479
  ID method = (ID)GET_OPERAND(2);
2550
2480
  # define INSN_ATTR(x) attr_ ## x ## _opt_newarray_send(num, method)
2551
- const bool leaf = INSN_ATTR(leaf);
2481
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2552
2482
  VALUE val;
2553
2483
 
2554
2484
  /* ### Instruction preambles. ### */
2555
- if (! leaf) ADD_PC(INSN_ATTR(width));
2485
+ ADD_PC(INSN_ATTR(width));
2556
2486
  SETUP_CANARY(leaf);
2557
2487
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2558
2488
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, num);
@@ -2560,7 +2490,7 @@ INSN_ENTRY(opt_newarray_send)
2560
2490
 
2561
2491
  /* ### Here we do the instruction body. ### */
2562
2492
  # define NAME_OF_CURRENT_INSN opt_newarray_send
2563
- # line 913 "insns.def"
2493
+ # line 900 "insns.def"
2564
2494
  {
2565
2495
  switch(method) {
2566
2496
  case idHash:
@@ -2576,7 +2506,7 @@ INSN_ENTRY(opt_newarray_send)
2576
2506
  rb_bug("unreachable");
2577
2507
  }
2578
2508
  }
2579
- # line 2580 "vm.inc"
2509
+ # line 2510 "vm.inc"
2580
2510
  # undef NAME_OF_CURRENT_INSN
2581
2511
 
2582
2512
  /* ### Instruction trailers. ### */
@@ -2586,7 +2516,6 @@ INSN_ENTRY(opt_newarray_send)
2586
2516
  TOPN(0) = val;
2587
2517
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2588
2518
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2589
- if (leaf) ADD_PC(INSN_ATTR(width));
2590
2519
  # undef INSN_ATTR
2591
2520
 
2592
2521
  /* ### Leave the instruction. ### */
@@ -2604,11 +2533,11 @@ INSN_ENTRY(invokesuper)
2604
2533
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2605
2534
  ISEQ blockiseq = (ISEQ)GET_OPERAND(2);
2606
2535
  # define INSN_ATTR(x) attr_ ## x ## _invokesuper(cd, blockiseq)
2607
- const bool leaf = INSN_ATTR(leaf);
2536
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2608
2537
  VALUE val;
2609
2538
 
2610
2539
  /* ### Instruction preambles. ### */
2611
- if (! leaf) ADD_PC(INSN_ATTR(width));
2540
+ ADD_PC(INSN_ATTR(width));
2612
2541
  POPN(INSN_ATTR(popn));
2613
2542
  SETUP_CANARY(leaf);
2614
2543
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2617,7 +2546,7 @@ INSN_ENTRY(invokesuper)
2617
2546
 
2618
2547
  /* ### Here we do the instruction body. ### */
2619
2548
  # define NAME_OF_CURRENT_INSN invokesuper
2620
- # line 937 "insns.def"
2549
+ # line 924 "insns.def"
2621
2550
  {
2622
2551
  VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);
2623
2552
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);
@@ -2628,14 +2557,13 @@ INSN_ENTRY(invokesuper)
2628
2557
  NEXT_INSN();
2629
2558
  }
2630
2559
  }
2631
- # line 2632 "vm.inc"
2560
+ # line 2561 "vm.inc"
2632
2561
  # undef NAME_OF_CURRENT_INSN
2633
2562
 
2634
2563
  /* ### Instruction trailers. ### */
2635
2564
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2636
2565
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2637
2566
  PUSH(val);
2638
- if (leaf) ADD_PC(INSN_ATTR(width));
2639
2567
  # undef INSN_ATTR
2640
2568
 
2641
2569
  /* ### Leave the instruction. ### */
@@ -2652,11 +2580,11 @@ INSN_ENTRY(invokeblock)
2652
2580
  /* ### Declare and assign variables. ### */
2653
2581
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
2654
2582
  # define INSN_ATTR(x) attr_ ## x ## _invokeblock(cd)
2655
- const bool leaf = INSN_ATTR(leaf);
2583
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2656
2584
  VALUE val;
2657
2585
 
2658
2586
  /* ### Instruction preambles. ### */
2659
- if (! leaf) ADD_PC(INSN_ATTR(width));
2587
+ ADD_PC(INSN_ATTR(width));
2660
2588
  POPN(INSN_ATTR(popn));
2661
2589
  SETUP_CANARY(leaf);
2662
2590
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2664,7 +2592,7 @@ INSN_ENTRY(invokeblock)
2664
2592
 
2665
2593
  /* ### Here we do the instruction body. ### */
2666
2594
  # define NAME_OF_CURRENT_INSN invokeblock
2667
- # line 957 "insns.def"
2595
+ # line 944 "insns.def"
2668
2596
  {
2669
2597
  VALUE bh = VM_BLOCK_HANDLER_NONE;
2670
2598
  val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);
@@ -2675,14 +2603,13 @@ INSN_ENTRY(invokeblock)
2675
2603
  NEXT_INSN();
2676
2604
  }
2677
2605
  }
2678
- # line 2679 "vm.inc"
2606
+ # line 2607 "vm.inc"
2679
2607
  # undef NAME_OF_CURRENT_INSN
2680
2608
 
2681
2609
  /* ### Instruction trailers. ### */
2682
2610
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2683
2611
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2684
2612
  PUSH(val);
2685
- if (leaf) ADD_PC(INSN_ATTR(width));
2686
2613
  # undef INSN_ATTR
2687
2614
 
2688
2615
  /* ### Leave the instruction. ### */
@@ -2698,18 +2625,18 @@ INSN_ENTRY(leave)
2698
2625
 
2699
2626
  /* ### Declare and assign variables. ### */
2700
2627
  # define INSN_ATTR(x) attr_ ## x ## _leave()
2701
- const bool leaf = INSN_ATTR(leaf);
2628
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2702
2629
  VALUE val = TOPN(0);
2703
2630
 
2704
2631
  /* ### Instruction preambles. ### */
2705
- if (! leaf) ADD_PC(INSN_ATTR(width));
2632
+ ADD_PC(INSN_ATTR(width));
2706
2633
  POPN(INSN_ATTR(popn));
2707
2634
  SETUP_CANARY(leaf);
2708
2635
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2709
2636
 
2710
2637
  /* ### Here we do the instruction body. ### */
2711
2638
  # define NAME_OF_CURRENT_INSN leave
2712
- # line 979 "insns.def"
2639
+ # line 966 "insns.def"
2713
2640
  {
2714
2641
  if (OPT_CHECKED_RUN) {
2715
2642
  const VALUE *const bp = vm_base_ptr(GET_CFP());
@@ -2730,14 +2657,13 @@ INSN_ENTRY(leave)
2730
2657
  RESTORE_REGS();
2731
2658
  }
2732
2659
  }
2733
- # line 2734 "vm.inc"
2660
+ # line 2661 "vm.inc"
2734
2661
  # undef NAME_OF_CURRENT_INSN
2735
2662
 
2736
2663
  /* ### Instruction trailers. ### */
2737
2664
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2738
2665
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2739
2666
  PUSH(val);
2740
- if (leaf) ADD_PC(INSN_ATTR(width));
2741
2667
  # undef INSN_ATTR
2742
2668
 
2743
2669
  /* ### Leave the instruction. ### */
@@ -2754,25 +2680,25 @@ INSN_ENTRY(throw)
2754
2680
  /* ### Declare and assign variables. ### */
2755
2681
  rb_num_t throw_state = (rb_num_t)GET_OPERAND(1);
2756
2682
  # define INSN_ATTR(x) attr_ ## x ## _throw(throw_state)
2757
- const bool leaf = INSN_ATTR(leaf);
2683
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2758
2684
  VALUE throwobj = TOPN(0);
2759
2685
  VALUE val;
2760
2686
 
2761
2687
  /* ### Instruction preambles. ### */
2762
- if (! leaf) ADD_PC(INSN_ATTR(width));
2688
+ ADD_PC(INSN_ATTR(width));
2763
2689
  SETUP_CANARY(leaf);
2764
2690
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2765
2691
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, throw_state);
2766
2692
 
2767
2693
  /* ### Here we do the instruction body. ### */
2768
2694
  # define NAME_OF_CURRENT_INSN throw
2769
- # line 1012 "insns.def"
2695
+ # line 999 "insns.def"
2770
2696
  {
2771
2697
  val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
2772
2698
  THROW_EXCEPTION(val);
2773
2699
  /* unreachable */
2774
2700
  }
2775
- # line 2776 "vm.inc"
2701
+ # line 2702 "vm.inc"
2776
2702
  # undef NAME_OF_CURRENT_INSN
2777
2703
 
2778
2704
  /* ### Instruction trailers. ### */
@@ -2782,7 +2708,6 @@ INSN_ENTRY(throw)
2782
2708
  TOPN(0) = val;
2783
2709
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
2784
2710
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
2785
- if (leaf) ADD_PC(INSN_ATTR(width));
2786
2711
  # undef INSN_ATTR
2787
2712
 
2788
2713
  /* ### Leave the instruction. ### */
@@ -2799,29 +2724,28 @@ INSN_ENTRY(jump)
2799
2724
  /* ### Declare and assign variables. ### */
2800
2725
  OFFSET dst = (OFFSET)GET_OPERAND(1);
2801
2726
  # define INSN_ATTR(x) attr_ ## x ## _jump(dst)
2802
- const bool leaf = INSN_ATTR(leaf);
2727
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2803
2728
 
2804
2729
  /* ### Instruction preambles. ### */
2805
- if (! leaf) ADD_PC(INSN_ATTR(width));
2730
+ ADD_PC(INSN_ATTR(width));
2806
2731
  SETUP_CANARY(leaf);
2807
2732
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2808
2733
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2809
2734
 
2810
2735
  /* ### Here we do the instruction body. ### */
2811
2736
  # define NAME_OF_CURRENT_INSN jump
2812
- # line 1030 "insns.def"
2737
+ # line 1017 "insns.def"
2813
2738
  {
2814
2739
  RUBY_VM_CHECK_INTS(ec);
2815
2740
  JUMP(dst);
2816
2741
  }
2817
- # line 2818 "vm.inc"
2742
+ # line 2743 "vm.inc"
2818
2743
  # undef NAME_OF_CURRENT_INSN
2819
2744
 
2820
2745
  /* ### Instruction trailers. ### */
2821
2746
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2822
2747
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2823
2748
  INC_SP(INSN_ATTR(sp_inc));
2824
- if (leaf) ADD_PC(INSN_ATTR(width));
2825
2749
  # undef INSN_ATTR
2826
2750
 
2827
2751
  /* ### Leave the instruction. ### */
@@ -2838,32 +2762,31 @@ INSN_ENTRY(branchif)
2838
2762
  /* ### Declare and assign variables. ### */
2839
2763
  OFFSET dst = (OFFSET)GET_OPERAND(1);
2840
2764
  # define INSN_ATTR(x) attr_ ## x ## _branchif(dst)
2841
- const bool leaf = INSN_ATTR(leaf);
2765
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2842
2766
  VALUE val = TOPN(0);
2843
2767
 
2844
2768
  /* ### Instruction preambles. ### */
2845
- if (! leaf) ADD_PC(INSN_ATTR(width));
2769
+ ADD_PC(INSN_ATTR(width));
2846
2770
  SETUP_CANARY(leaf);
2847
2771
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2848
2772
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2849
2773
 
2850
2774
  /* ### Here we do the instruction body. ### */
2851
2775
  # define NAME_OF_CURRENT_INSN branchif
2852
- # line 1043 "insns.def"
2776
+ # line 1030 "insns.def"
2853
2777
  {
2854
2778
  if (RTEST(val)) {
2855
2779
  RUBY_VM_CHECK_INTS(ec);
2856
2780
  JUMP(dst);
2857
2781
  }
2858
2782
  }
2859
- # line 2860 "vm.inc"
2783
+ # line 2784 "vm.inc"
2860
2784
  # undef NAME_OF_CURRENT_INSN
2861
2785
 
2862
2786
  /* ### Instruction trailers. ### */
2863
2787
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2864
2788
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2865
2789
  INC_SP(INSN_ATTR(sp_inc));
2866
- if (leaf) ADD_PC(INSN_ATTR(width));
2867
2790
  # undef INSN_ATTR
2868
2791
 
2869
2792
  /* ### Leave the instruction. ### */
@@ -2880,32 +2803,31 @@ INSN_ENTRY(branchunless)
2880
2803
  /* ### Declare and assign variables. ### */
2881
2804
  OFFSET dst = (OFFSET)GET_OPERAND(1);
2882
2805
  # define INSN_ATTR(x) attr_ ## x ## _branchunless(dst)
2883
- const bool leaf = INSN_ATTR(leaf);
2806
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2884
2807
  VALUE val = TOPN(0);
2885
2808
 
2886
2809
  /* ### Instruction preambles. ### */
2887
- if (! leaf) ADD_PC(INSN_ATTR(width));
2810
+ ADD_PC(INSN_ATTR(width));
2888
2811
  SETUP_CANARY(leaf);
2889
2812
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2890
2813
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2891
2814
 
2892
2815
  /* ### Here we do the instruction body. ### */
2893
2816
  # define NAME_OF_CURRENT_INSN branchunless
2894
- # line 1058 "insns.def"
2817
+ # line 1045 "insns.def"
2895
2818
  {
2896
2819
  if (!RTEST(val)) {
2897
2820
  RUBY_VM_CHECK_INTS(ec);
2898
2821
  JUMP(dst);
2899
2822
  }
2900
2823
  }
2901
- # line 2902 "vm.inc"
2824
+ # line 2825 "vm.inc"
2902
2825
  # undef NAME_OF_CURRENT_INSN
2903
2826
 
2904
2827
  /* ### Instruction trailers. ### */
2905
2828
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2906
2829
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2907
2830
  INC_SP(INSN_ATTR(sp_inc));
2908
- if (leaf) ADD_PC(INSN_ATTR(width));
2909
2831
  # undef INSN_ATTR
2910
2832
 
2911
2833
  /* ### Leave the instruction. ### */
@@ -2922,32 +2844,31 @@ INSN_ENTRY(branchnil)
2922
2844
  /* ### Declare and assign variables. ### */
2923
2845
  OFFSET dst = (OFFSET)GET_OPERAND(1);
2924
2846
  # define INSN_ATTR(x) attr_ ## x ## _branchnil(dst)
2925
- const bool leaf = INSN_ATTR(leaf);
2847
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2926
2848
  VALUE val = TOPN(0);
2927
2849
 
2928
2850
  /* ### Instruction preambles. ### */
2929
- if (! leaf) ADD_PC(INSN_ATTR(width));
2851
+ ADD_PC(INSN_ATTR(width));
2930
2852
  SETUP_CANARY(leaf);
2931
2853
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
2932
2854
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, dst);
2933
2855
 
2934
2856
  /* ### Here we do the instruction body. ### */
2935
2857
  # define NAME_OF_CURRENT_INSN branchnil
2936
- # line 1073 "insns.def"
2858
+ # line 1060 "insns.def"
2937
2859
  {
2938
2860
  if (NIL_P(val)) {
2939
2861
  RUBY_VM_CHECK_INTS(ec);
2940
2862
  JUMP(dst);
2941
2863
  }
2942
2864
  }
2943
- # line 2944 "vm.inc"
2865
+ # line 2866 "vm.inc"
2944
2866
  # undef NAME_OF_CURRENT_INSN
2945
2867
 
2946
2868
  /* ### Instruction trailers. ### */
2947
2869
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2948
2870
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2949
2871
  INC_SP(INSN_ATTR(sp_inc));
2950
- if (leaf) ADD_PC(INSN_ATTR(width));
2951
2872
  # undef INSN_ATTR
2952
2873
 
2953
2874
  /* ### Leave the instruction. ### */
@@ -2965,11 +2886,11 @@ INSN_ENTRY(once)
2965
2886
  ISEQ iseq = (ISEQ)GET_OPERAND(1);
2966
2887
  ISE ise = (ISE)GET_OPERAND(2);
2967
2888
  # define INSN_ATTR(x) attr_ ## x ## _once(iseq, ise)
2968
- const bool leaf = INSN_ATTR(leaf);
2889
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
2969
2890
  VALUE val;
2970
2891
 
2971
2892
  /* ### Instruction preambles. ### */
2972
- if (! leaf) ADD_PC(INSN_ATTR(width));
2893
+ ADD_PC(INSN_ATTR(width));
2973
2894
  POPN(INSN_ATTR(popn));
2974
2895
  SETUP_CANARY(leaf);
2975
2896
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
@@ -2978,18 +2899,17 @@ INSN_ENTRY(once)
2978
2899
 
2979
2900
  /* ### Here we do the instruction body. ### */
2980
2901
  # define NAME_OF_CURRENT_INSN once
2981
- # line 1090 "insns.def"
2902
+ # line 1077 "insns.def"
2982
2903
  {
2983
2904
  val = vm_once_dispatch(ec, iseq, ise);
2984
2905
  }
2985
- # line 2986 "vm.inc"
2906
+ # line 2907 "vm.inc"
2986
2907
  # undef NAME_OF_CURRENT_INSN
2987
2908
 
2988
2909
  /* ### Instruction trailers. ### */
2989
2910
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
2990
2911
  CHECK_CANARY(leaf, INSN_ATTR(bin));
2991
2912
  PUSH(val);
2992
- if (leaf) ADD_PC(INSN_ATTR(width));
2993
2913
  # undef INSN_ATTR
2994
2914
 
2995
2915
  /* ### Leave the instruction. ### */
@@ -3007,11 +2927,11 @@ INSN_ENTRY(opt_case_dispatch)
3007
2927
  CDHASH hash = (CDHASH)GET_OPERAND(1);
3008
2928
  OFFSET else_offset = (OFFSET)GET_OPERAND(2);
3009
2929
  # define INSN_ATTR(x) attr_ ## x ## _opt_case_dispatch(hash, else_offset)
3010
- const bool leaf = INSN_ATTR(leaf);
2930
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3011
2931
  VALUE key = TOPN(0);
3012
2932
 
3013
2933
  /* ### Instruction preambles. ### */
3014
- if (! leaf) ADD_PC(INSN_ATTR(width));
2934
+ ADD_PC(INSN_ATTR(width));
3015
2935
  SETUP_CANARY(leaf);
3016
2936
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3017
2937
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, hash);
@@ -3019,7 +2939,7 @@ INSN_ENTRY(opt_case_dispatch)
3019
2939
 
3020
2940
  /* ### Here we do the instruction body. ### */
3021
2941
  # define NAME_OF_CURRENT_INSN opt_case_dispatch
3022
- # line 1101 "insns.def"
2942
+ # line 1088 "insns.def"
3023
2943
  {
3024
2944
  OFFSET dst = vm_case_dispatch(hash, else_offset, key);
3025
2945
 
@@ -3027,14 +2947,13 @@ INSN_ENTRY(opt_case_dispatch)
3027
2947
  JUMP(dst);
3028
2948
  }
3029
2949
  }
3030
- # line 3031 "vm.inc"
2950
+ # line 2951 "vm.inc"
3031
2951
  # undef NAME_OF_CURRENT_INSN
3032
2952
 
3033
2953
  /* ### Instruction trailers. ### */
3034
2954
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
3035
2955
  CHECK_CANARY(leaf, INSN_ATTR(bin));
3036
2956
  INC_SP(INSN_ATTR(sp_inc));
3037
- if (leaf) ADD_PC(INSN_ATTR(width));
3038
2957
  # undef INSN_ATTR
3039
2958
 
3040
2959
  /* ### Leave the instruction. ### */
@@ -3051,20 +2970,20 @@ INSN_ENTRY(opt_plus)
3051
2970
  /* ### Declare and assign variables. ### */
3052
2971
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3053
2972
  # define INSN_ATTR(x) attr_ ## x ## _opt_plus(cd)
3054
- const bool leaf = INSN_ATTR(leaf);
2973
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3055
2974
  VALUE recv = TOPN(1);
3056
2975
  VALUE obj = TOPN(0);
3057
2976
  VALUE val;
3058
2977
 
3059
2978
  /* ### Instruction preambles. ### */
3060
- if (! leaf) ADD_PC(INSN_ATTR(width));
2979
+ ADD_PC(INSN_ATTR(width));
3061
2980
  SETUP_CANARY(leaf);
3062
2981
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3063
2982
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3064
2983
 
3065
2984
  /* ### Here we do the instruction body. ### */
3066
2985
  # define NAME_OF_CURRENT_INSN opt_plus
3067
- # line 1117 "insns.def"
2986
+ # line 1104 "insns.def"
3068
2987
  {
3069
2988
  val = vm_opt_plus(recv, obj);
3070
2989
 
@@ -3072,7 +2991,7 @@ INSN_ENTRY(opt_plus)
3072
2991
  CALL_SIMPLE_METHOD();
3073
2992
  }
3074
2993
  }
3075
- # line 3076 "vm.inc"
2994
+ # line 2995 "vm.inc"
3076
2995
  # undef NAME_OF_CURRENT_INSN
3077
2996
 
3078
2997
  /* ### Instruction trailers. ### */
@@ -3082,7 +3001,6 @@ INSN_ENTRY(opt_plus)
3082
3001
  TOPN(0) = val;
3083
3002
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3084
3003
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3085
- if (leaf) ADD_PC(INSN_ATTR(width));
3086
3004
  # undef INSN_ATTR
3087
3005
 
3088
3006
  /* ### Leave the instruction. ### */
@@ -3099,20 +3017,20 @@ INSN_ENTRY(opt_minus)
3099
3017
  /* ### Declare and assign variables. ### */
3100
3018
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3101
3019
  # define INSN_ATTR(x) attr_ ## x ## _opt_minus(cd)
3102
- const bool leaf = INSN_ATTR(leaf);
3020
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3103
3021
  VALUE recv = TOPN(1);
3104
3022
  VALUE obj = TOPN(0);
3105
3023
  VALUE val;
3106
3024
 
3107
3025
  /* ### Instruction preambles. ### */
3108
- if (! leaf) ADD_PC(INSN_ATTR(width));
3026
+ ADD_PC(INSN_ATTR(width));
3109
3027
  SETUP_CANARY(leaf);
3110
3028
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3111
3029
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3112
3030
 
3113
3031
  /* ### Here we do the instruction body. ### */
3114
3032
  # define NAME_OF_CURRENT_INSN opt_minus
3115
- # line 1131 "insns.def"
3033
+ # line 1118 "insns.def"
3116
3034
  {
3117
3035
  val = vm_opt_minus(recv, obj);
3118
3036
 
@@ -3120,7 +3038,7 @@ INSN_ENTRY(opt_minus)
3120
3038
  CALL_SIMPLE_METHOD();
3121
3039
  }
3122
3040
  }
3123
- # line 3124 "vm.inc"
3041
+ # line 3042 "vm.inc"
3124
3042
  # undef NAME_OF_CURRENT_INSN
3125
3043
 
3126
3044
  /* ### Instruction trailers. ### */
@@ -3130,7 +3048,6 @@ INSN_ENTRY(opt_minus)
3130
3048
  TOPN(0) = val;
3131
3049
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3132
3050
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3133
- if (leaf) ADD_PC(INSN_ATTR(width));
3134
3051
  # undef INSN_ATTR
3135
3052
 
3136
3053
  /* ### Leave the instruction. ### */
@@ -3147,20 +3064,20 @@ INSN_ENTRY(opt_mult)
3147
3064
  /* ### Declare and assign variables. ### */
3148
3065
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3149
3066
  # define INSN_ATTR(x) attr_ ## x ## _opt_mult(cd)
3150
- const bool leaf = INSN_ATTR(leaf);
3067
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3151
3068
  VALUE recv = TOPN(1);
3152
3069
  VALUE obj = TOPN(0);
3153
3070
  VALUE val;
3154
3071
 
3155
3072
  /* ### Instruction preambles. ### */
3156
- if (! leaf) ADD_PC(INSN_ATTR(width));
3073
+ ADD_PC(INSN_ATTR(width));
3157
3074
  SETUP_CANARY(leaf);
3158
3075
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3159
3076
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3160
3077
 
3161
3078
  /* ### Here we do the instruction body. ### */
3162
3079
  # define NAME_OF_CURRENT_INSN opt_mult
3163
- # line 1145 "insns.def"
3080
+ # line 1132 "insns.def"
3164
3081
  {
3165
3082
  val = vm_opt_mult(recv, obj);
3166
3083
 
@@ -3168,7 +3085,7 @@ INSN_ENTRY(opt_mult)
3168
3085
  CALL_SIMPLE_METHOD();
3169
3086
  }
3170
3087
  }
3171
- # line 3172 "vm.inc"
3088
+ # line 3089 "vm.inc"
3172
3089
  # undef NAME_OF_CURRENT_INSN
3173
3090
 
3174
3091
  /* ### Instruction trailers. ### */
@@ -3178,7 +3095,6 @@ INSN_ENTRY(opt_mult)
3178
3095
  TOPN(0) = val;
3179
3096
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3180
3097
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3181
- if (leaf) ADD_PC(INSN_ATTR(width));
3182
3098
  # undef INSN_ATTR
3183
3099
 
3184
3100
  /* ### Leave the instruction. ### */
@@ -3195,20 +3111,20 @@ INSN_ENTRY(opt_div)
3195
3111
  /* ### Declare and assign variables. ### */
3196
3112
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3197
3113
  # define INSN_ATTR(x) attr_ ## x ## _opt_div(cd)
3198
- const bool leaf = INSN_ATTR(leaf);
3114
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3199
3115
  VALUE recv = TOPN(1);
3200
3116
  VALUE obj = TOPN(0);
3201
3117
  VALUE val;
3202
3118
 
3203
3119
  /* ### Instruction preambles. ### */
3204
- if (! leaf) ADD_PC(INSN_ATTR(width));
3120
+ ADD_PC(INSN_ATTR(width));
3205
3121
  SETUP_CANARY(leaf);
3206
3122
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3207
3123
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3208
3124
 
3209
3125
  /* ### Here we do the instruction body. ### */
3210
3126
  # define NAME_OF_CURRENT_INSN opt_div
3211
- # line 1162 "insns.def"
3127
+ # line 1149 "insns.def"
3212
3128
  {
3213
3129
  val = vm_opt_div(recv, obj);
3214
3130
 
@@ -3216,7 +3132,7 @@ INSN_ENTRY(opt_div)
3216
3132
  CALL_SIMPLE_METHOD();
3217
3133
  }
3218
3134
  }
3219
- # line 3220 "vm.inc"
3135
+ # line 3136 "vm.inc"
3220
3136
  # undef NAME_OF_CURRENT_INSN
3221
3137
 
3222
3138
  /* ### Instruction trailers. ### */
@@ -3226,7 +3142,6 @@ INSN_ENTRY(opt_div)
3226
3142
  TOPN(0) = val;
3227
3143
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3228
3144
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3229
- if (leaf) ADD_PC(INSN_ATTR(width));
3230
3145
  # undef INSN_ATTR
3231
3146
 
3232
3147
  /* ### Leave the instruction. ### */
@@ -3243,20 +3158,20 @@ INSN_ENTRY(opt_mod)
3243
3158
  /* ### Declare and assign variables. ### */
3244
3159
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3245
3160
  # define INSN_ATTR(x) attr_ ## x ## _opt_mod(cd)
3246
- const bool leaf = INSN_ATTR(leaf);
3161
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3247
3162
  VALUE recv = TOPN(1);
3248
3163
  VALUE obj = TOPN(0);
3249
3164
  VALUE val;
3250
3165
 
3251
3166
  /* ### Instruction preambles. ### */
3252
- if (! leaf) ADD_PC(INSN_ATTR(width));
3167
+ ADD_PC(INSN_ATTR(width));
3253
3168
  SETUP_CANARY(leaf);
3254
3169
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3255
3170
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3256
3171
 
3257
3172
  /* ### Here we do the instruction body. ### */
3258
3173
  # define NAME_OF_CURRENT_INSN opt_mod
3259
- # line 1178 "insns.def"
3174
+ # line 1165 "insns.def"
3260
3175
  {
3261
3176
  val = vm_opt_mod(recv, obj);
3262
3177
 
@@ -3264,7 +3179,7 @@ INSN_ENTRY(opt_mod)
3264
3179
  CALL_SIMPLE_METHOD();
3265
3180
  }
3266
3181
  }
3267
- # line 3268 "vm.inc"
3182
+ # line 3183 "vm.inc"
3268
3183
  # undef NAME_OF_CURRENT_INSN
3269
3184
 
3270
3185
  /* ### Instruction trailers. ### */
@@ -3274,7 +3189,6 @@ INSN_ENTRY(opt_mod)
3274
3189
  TOPN(0) = val;
3275
3190
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3276
3191
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3277
- if (leaf) ADD_PC(INSN_ATTR(width));
3278
3192
  # undef INSN_ATTR
3279
3193
 
3280
3194
  /* ### Leave the instruction. ### */
@@ -3291,20 +3205,20 @@ INSN_ENTRY(opt_eq)
3291
3205
  /* ### Declare and assign variables. ### */
3292
3206
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3293
3207
  # define INSN_ATTR(x) attr_ ## x ## _opt_eq(cd)
3294
- const bool leaf = INSN_ATTR(leaf);
3208
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3295
3209
  VALUE recv = TOPN(1);
3296
3210
  VALUE obj = TOPN(0);
3297
3211
  VALUE val;
3298
3212
 
3299
3213
  /* ### Instruction preambles. ### */
3300
- if (! leaf) ADD_PC(INSN_ATTR(width));
3214
+ ADD_PC(INSN_ATTR(width));
3301
3215
  SETUP_CANARY(leaf);
3302
3216
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3303
3217
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3304
3218
 
3305
3219
  /* ### Here we do the instruction body. ### */
3306
3220
  # define NAME_OF_CURRENT_INSN opt_eq
3307
- # line 1192 "insns.def"
3221
+ # line 1179 "insns.def"
3308
3222
  {
3309
3223
  val = opt_equality(GET_ISEQ(), recv, obj, cd);
3310
3224
 
@@ -3312,7 +3226,7 @@ INSN_ENTRY(opt_eq)
3312
3226
  CALL_SIMPLE_METHOD();
3313
3227
  }
3314
3228
  }
3315
- # line 3316 "vm.inc"
3229
+ # line 3230 "vm.inc"
3316
3230
  # undef NAME_OF_CURRENT_INSN
3317
3231
 
3318
3232
  /* ### Instruction trailers. ### */
@@ -3322,7 +3236,6 @@ INSN_ENTRY(opt_eq)
3322
3236
  TOPN(0) = val;
3323
3237
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3324
3238
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3325
- if (leaf) ADD_PC(INSN_ATTR(width));
3326
3239
  # undef INSN_ATTR
3327
3240
 
3328
3241
  /* ### Leave the instruction. ### */
@@ -3340,13 +3253,13 @@ INSN_ENTRY(opt_neq)
3340
3253
  CALL_DATA cd_eq = (CALL_DATA)GET_OPERAND(1);
3341
3254
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
3342
3255
  # define INSN_ATTR(x) attr_ ## x ## _opt_neq(cd_eq, cd)
3343
- const bool leaf = INSN_ATTR(leaf);
3256
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3344
3257
  VALUE recv = TOPN(1);
3345
3258
  VALUE obj = TOPN(0);
3346
3259
  VALUE val;
3347
3260
 
3348
3261
  /* ### Instruction preambles. ### */
3349
- if (! leaf) ADD_PC(INSN_ATTR(width));
3262
+ ADD_PC(INSN_ATTR(width));
3350
3263
  SETUP_CANARY(leaf);
3351
3264
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3352
3265
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd_eq);
@@ -3354,7 +3267,7 @@ INSN_ENTRY(opt_neq)
3354
3267
 
3355
3268
  /* ### Here we do the instruction body. ### */
3356
3269
  # define NAME_OF_CURRENT_INSN opt_neq
3357
- # line 1206 "insns.def"
3270
+ # line 1193 "insns.def"
3358
3271
  {
3359
3272
  val = vm_opt_neq(GET_ISEQ(), cd, cd_eq, recv, obj);
3360
3273
 
@@ -3362,7 +3275,7 @@ INSN_ENTRY(opt_neq)
3362
3275
  CALL_SIMPLE_METHOD();
3363
3276
  }
3364
3277
  }
3365
- # line 3366 "vm.inc"
3278
+ # line 3279 "vm.inc"
3366
3279
  # undef NAME_OF_CURRENT_INSN
3367
3280
 
3368
3281
  /* ### Instruction trailers. ### */
@@ -3372,7 +3285,6 @@ INSN_ENTRY(opt_neq)
3372
3285
  TOPN(0) = val;
3373
3286
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3374
3287
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3375
- if (leaf) ADD_PC(INSN_ATTR(width));
3376
3288
  # undef INSN_ATTR
3377
3289
 
3378
3290
  /* ### Leave the instruction. ### */
@@ -3389,20 +3301,20 @@ INSN_ENTRY(opt_lt)
3389
3301
  /* ### Declare and assign variables. ### */
3390
3302
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3391
3303
  # define INSN_ATTR(x) attr_ ## x ## _opt_lt(cd)
3392
- const bool leaf = INSN_ATTR(leaf);
3304
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3393
3305
  VALUE recv = TOPN(1);
3394
3306
  VALUE obj = TOPN(0);
3395
3307
  VALUE val;
3396
3308
 
3397
3309
  /* ### Instruction preambles. ### */
3398
- if (! leaf) ADD_PC(INSN_ATTR(width));
3310
+ ADD_PC(INSN_ATTR(width));
3399
3311
  SETUP_CANARY(leaf);
3400
3312
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3401
3313
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3402
3314
 
3403
3315
  /* ### Here we do the instruction body. ### */
3404
3316
  # define NAME_OF_CURRENT_INSN opt_lt
3405
- # line 1220 "insns.def"
3317
+ # line 1207 "insns.def"
3406
3318
  {
3407
3319
  val = vm_opt_lt(recv, obj);
3408
3320
 
@@ -3410,7 +3322,7 @@ INSN_ENTRY(opt_lt)
3410
3322
  CALL_SIMPLE_METHOD();
3411
3323
  }
3412
3324
  }
3413
- # line 3414 "vm.inc"
3325
+ # line 3326 "vm.inc"
3414
3326
  # undef NAME_OF_CURRENT_INSN
3415
3327
 
3416
3328
  /* ### Instruction trailers. ### */
@@ -3420,7 +3332,6 @@ INSN_ENTRY(opt_lt)
3420
3332
  TOPN(0) = val;
3421
3333
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3422
3334
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3423
- if (leaf) ADD_PC(INSN_ATTR(width));
3424
3335
  # undef INSN_ATTR
3425
3336
 
3426
3337
  /* ### Leave the instruction. ### */
@@ -3437,20 +3348,20 @@ INSN_ENTRY(opt_le)
3437
3348
  /* ### Declare and assign variables. ### */
3438
3349
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3439
3350
  # define INSN_ATTR(x) attr_ ## x ## _opt_le(cd)
3440
- const bool leaf = INSN_ATTR(leaf);
3351
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3441
3352
  VALUE recv = TOPN(1);
3442
3353
  VALUE obj = TOPN(0);
3443
3354
  VALUE val;
3444
3355
 
3445
3356
  /* ### Instruction preambles. ### */
3446
- if (! leaf) ADD_PC(INSN_ATTR(width));
3357
+ ADD_PC(INSN_ATTR(width));
3447
3358
  SETUP_CANARY(leaf);
3448
3359
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3449
3360
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3450
3361
 
3451
3362
  /* ### Here we do the instruction body. ### */
3452
3363
  # define NAME_OF_CURRENT_INSN opt_le
3453
- # line 1234 "insns.def"
3364
+ # line 1221 "insns.def"
3454
3365
  {
3455
3366
  val = vm_opt_le(recv, obj);
3456
3367
 
@@ -3458,7 +3369,7 @@ INSN_ENTRY(opt_le)
3458
3369
  CALL_SIMPLE_METHOD();
3459
3370
  }
3460
3371
  }
3461
- # line 3462 "vm.inc"
3372
+ # line 3373 "vm.inc"
3462
3373
  # undef NAME_OF_CURRENT_INSN
3463
3374
 
3464
3375
  /* ### Instruction trailers. ### */
@@ -3468,7 +3379,6 @@ INSN_ENTRY(opt_le)
3468
3379
  TOPN(0) = val;
3469
3380
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3470
3381
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3471
- if (leaf) ADD_PC(INSN_ATTR(width));
3472
3382
  # undef INSN_ATTR
3473
3383
 
3474
3384
  /* ### Leave the instruction. ### */
@@ -3485,20 +3395,20 @@ INSN_ENTRY(opt_gt)
3485
3395
  /* ### Declare and assign variables. ### */
3486
3396
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3487
3397
  # define INSN_ATTR(x) attr_ ## x ## _opt_gt(cd)
3488
- const bool leaf = INSN_ATTR(leaf);
3398
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3489
3399
  VALUE recv = TOPN(1);
3490
3400
  VALUE obj = TOPN(0);
3491
3401
  VALUE val;
3492
3402
 
3493
3403
  /* ### Instruction preambles. ### */
3494
- if (! leaf) ADD_PC(INSN_ATTR(width));
3404
+ ADD_PC(INSN_ATTR(width));
3495
3405
  SETUP_CANARY(leaf);
3496
3406
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3497
3407
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3498
3408
 
3499
3409
  /* ### Here we do the instruction body. ### */
3500
3410
  # define NAME_OF_CURRENT_INSN opt_gt
3501
- # line 1248 "insns.def"
3411
+ # line 1235 "insns.def"
3502
3412
  {
3503
3413
  val = vm_opt_gt(recv, obj);
3504
3414
 
@@ -3506,7 +3416,7 @@ INSN_ENTRY(opt_gt)
3506
3416
  CALL_SIMPLE_METHOD();
3507
3417
  }
3508
3418
  }
3509
- # line 3510 "vm.inc"
3419
+ # line 3420 "vm.inc"
3510
3420
  # undef NAME_OF_CURRENT_INSN
3511
3421
 
3512
3422
  /* ### Instruction trailers. ### */
@@ -3516,7 +3426,6 @@ INSN_ENTRY(opt_gt)
3516
3426
  TOPN(0) = val;
3517
3427
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3518
3428
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3519
- if (leaf) ADD_PC(INSN_ATTR(width));
3520
3429
  # undef INSN_ATTR
3521
3430
 
3522
3431
  /* ### Leave the instruction. ### */
@@ -3533,20 +3442,20 @@ INSN_ENTRY(opt_ge)
3533
3442
  /* ### Declare and assign variables. ### */
3534
3443
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3535
3444
  # define INSN_ATTR(x) attr_ ## x ## _opt_ge(cd)
3536
- const bool leaf = INSN_ATTR(leaf);
3445
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3537
3446
  VALUE recv = TOPN(1);
3538
3447
  VALUE obj = TOPN(0);
3539
3448
  VALUE val;
3540
3449
 
3541
3450
  /* ### Instruction preambles. ### */
3542
- if (! leaf) ADD_PC(INSN_ATTR(width));
3451
+ ADD_PC(INSN_ATTR(width));
3543
3452
  SETUP_CANARY(leaf);
3544
3453
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3545
3454
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3546
3455
 
3547
3456
  /* ### Here we do the instruction body. ### */
3548
3457
  # define NAME_OF_CURRENT_INSN opt_ge
3549
- # line 1262 "insns.def"
3458
+ # line 1249 "insns.def"
3550
3459
  {
3551
3460
  val = vm_opt_ge(recv, obj);
3552
3461
 
@@ -3554,7 +3463,7 @@ INSN_ENTRY(opt_ge)
3554
3463
  CALL_SIMPLE_METHOD();
3555
3464
  }
3556
3465
  }
3557
- # line 3558 "vm.inc"
3466
+ # line 3467 "vm.inc"
3558
3467
  # undef NAME_OF_CURRENT_INSN
3559
3468
 
3560
3469
  /* ### Instruction trailers. ### */
@@ -3564,7 +3473,6 @@ INSN_ENTRY(opt_ge)
3564
3473
  TOPN(0) = val;
3565
3474
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3566
3475
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3567
- if (leaf) ADD_PC(INSN_ATTR(width));
3568
3476
  # undef INSN_ATTR
3569
3477
 
3570
3478
  /* ### Leave the instruction. ### */
@@ -3581,20 +3489,20 @@ INSN_ENTRY(opt_ltlt)
3581
3489
  /* ### Declare and assign variables. ### */
3582
3490
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3583
3491
  # define INSN_ATTR(x) attr_ ## x ## _opt_ltlt(cd)
3584
- const bool leaf = INSN_ATTR(leaf);
3492
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3585
3493
  VALUE recv = TOPN(1);
3586
3494
  VALUE obj = TOPN(0);
3587
3495
  VALUE val;
3588
3496
 
3589
3497
  /* ### Instruction preambles. ### */
3590
- if (! leaf) ADD_PC(INSN_ATTR(width));
3498
+ ADD_PC(INSN_ATTR(width));
3591
3499
  SETUP_CANARY(leaf);
3592
3500
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3593
3501
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3594
3502
 
3595
3503
  /* ### Here we do the instruction body. ### */
3596
3504
  # define NAME_OF_CURRENT_INSN opt_ltlt
3597
- # line 1280 "insns.def"
3505
+ # line 1267 "insns.def"
3598
3506
  {
3599
3507
  val = vm_opt_ltlt(recv, obj);
3600
3508
 
@@ -3602,7 +3510,7 @@ INSN_ENTRY(opt_ltlt)
3602
3510
  CALL_SIMPLE_METHOD();
3603
3511
  }
3604
3512
  }
3605
- # line 3606 "vm.inc"
3513
+ # line 3514 "vm.inc"
3606
3514
  # undef NAME_OF_CURRENT_INSN
3607
3515
 
3608
3516
  /* ### Instruction trailers. ### */
@@ -3612,7 +3520,6 @@ INSN_ENTRY(opt_ltlt)
3612
3520
  TOPN(0) = val;
3613
3521
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3614
3522
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3615
- if (leaf) ADD_PC(INSN_ATTR(width));
3616
3523
  # undef INSN_ATTR
3617
3524
 
3618
3525
  /* ### Leave the instruction. ### */
@@ -3629,20 +3536,20 @@ INSN_ENTRY(opt_and)
3629
3536
  /* ### Declare and assign variables. ### */
3630
3537
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3631
3538
  # define INSN_ATTR(x) attr_ ## x ## _opt_and(cd)
3632
- const bool leaf = INSN_ATTR(leaf);
3539
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3633
3540
  VALUE recv = TOPN(1);
3634
3541
  VALUE obj = TOPN(0);
3635
3542
  VALUE val;
3636
3543
 
3637
3544
  /* ### Instruction preambles. ### */
3638
- if (! leaf) ADD_PC(INSN_ATTR(width));
3545
+ ADD_PC(INSN_ATTR(width));
3639
3546
  SETUP_CANARY(leaf);
3640
3547
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3641
3548
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3642
3549
 
3643
3550
  /* ### Here we do the instruction body. ### */
3644
3551
  # define NAME_OF_CURRENT_INSN opt_and
3645
- # line 1294 "insns.def"
3552
+ # line 1281 "insns.def"
3646
3553
  {
3647
3554
  val = vm_opt_and(recv, obj);
3648
3555
 
@@ -3650,7 +3557,7 @@ INSN_ENTRY(opt_and)
3650
3557
  CALL_SIMPLE_METHOD();
3651
3558
  }
3652
3559
  }
3653
- # line 3654 "vm.inc"
3560
+ # line 3561 "vm.inc"
3654
3561
  # undef NAME_OF_CURRENT_INSN
3655
3562
 
3656
3563
  /* ### Instruction trailers. ### */
@@ -3660,7 +3567,6 @@ INSN_ENTRY(opt_and)
3660
3567
  TOPN(0) = val;
3661
3568
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3662
3569
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3663
- if (leaf) ADD_PC(INSN_ATTR(width));
3664
3570
  # undef INSN_ATTR
3665
3571
 
3666
3572
  /* ### Leave the instruction. ### */
@@ -3677,20 +3583,20 @@ INSN_ENTRY(opt_or)
3677
3583
  /* ### Declare and assign variables. ### */
3678
3584
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3679
3585
  # define INSN_ATTR(x) attr_ ## x ## _opt_or(cd)
3680
- const bool leaf = INSN_ATTR(leaf);
3586
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3681
3587
  VALUE recv = TOPN(1);
3682
3588
  VALUE obj = TOPN(0);
3683
3589
  VALUE val;
3684
3590
 
3685
3591
  /* ### Instruction preambles. ### */
3686
- if (! leaf) ADD_PC(INSN_ATTR(width));
3592
+ ADD_PC(INSN_ATTR(width));
3687
3593
  SETUP_CANARY(leaf);
3688
3594
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3689
3595
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3690
3596
 
3691
3597
  /* ### Here we do the instruction body. ### */
3692
3598
  # define NAME_OF_CURRENT_INSN opt_or
3693
- # line 1308 "insns.def"
3599
+ # line 1295 "insns.def"
3694
3600
  {
3695
3601
  val = vm_opt_or(recv, obj);
3696
3602
 
@@ -3698,7 +3604,7 @@ INSN_ENTRY(opt_or)
3698
3604
  CALL_SIMPLE_METHOD();
3699
3605
  }
3700
3606
  }
3701
- # line 3702 "vm.inc"
3607
+ # line 3608 "vm.inc"
3702
3608
  # undef NAME_OF_CURRENT_INSN
3703
3609
 
3704
3610
  /* ### Instruction trailers. ### */
@@ -3708,7 +3614,6 @@ INSN_ENTRY(opt_or)
3708
3614
  TOPN(0) = val;
3709
3615
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3710
3616
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3711
- if (leaf) ADD_PC(INSN_ATTR(width));
3712
3617
  # undef INSN_ATTR
3713
3618
 
3714
3619
  /* ### Leave the instruction. ### */
@@ -3725,20 +3630,20 @@ INSN_ENTRY(opt_aref)
3725
3630
  /* ### Declare and assign variables. ### */
3726
3631
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3727
3632
  # define INSN_ATTR(x) attr_ ## x ## _opt_aref(cd)
3728
- const bool leaf = INSN_ATTR(leaf);
3633
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3729
3634
  VALUE recv = TOPN(1);
3730
3635
  VALUE obj = TOPN(0);
3731
3636
  VALUE val;
3732
3637
 
3733
3638
  /* ### Instruction preambles. ### */
3734
- if (! leaf) ADD_PC(INSN_ATTR(width));
3639
+ ADD_PC(INSN_ATTR(width));
3735
3640
  SETUP_CANARY(leaf);
3736
3641
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3737
3642
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3738
3643
 
3739
3644
  /* ### Here we do the instruction body. ### */
3740
3645
  # define NAME_OF_CURRENT_INSN opt_aref
3741
- # line 1327 "insns.def"
3646
+ # line 1314 "insns.def"
3742
3647
  {
3743
3648
  val = vm_opt_aref(recv, obj);
3744
3649
 
@@ -3746,7 +3651,7 @@ INSN_ENTRY(opt_aref)
3746
3651
  CALL_SIMPLE_METHOD();
3747
3652
  }
3748
3653
  }
3749
- # line 3750 "vm.inc"
3654
+ # line 3655 "vm.inc"
3750
3655
  # undef NAME_OF_CURRENT_INSN
3751
3656
 
3752
3657
  /* ### Instruction trailers. ### */
@@ -3756,7 +3661,6 @@ INSN_ENTRY(opt_aref)
3756
3661
  TOPN(0) = val;
3757
3662
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3758
3663
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3759
- if (leaf) ADD_PC(INSN_ATTR(width));
3760
3664
  # undef INSN_ATTR
3761
3665
 
3762
3666
  /* ### Leave the instruction. ### */
@@ -3773,21 +3677,21 @@ INSN_ENTRY(opt_aset)
3773
3677
  /* ### Declare and assign variables. ### */
3774
3678
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3775
3679
  # define INSN_ATTR(x) attr_ ## x ## _opt_aset(cd)
3776
- const bool leaf = INSN_ATTR(leaf);
3680
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3777
3681
  VALUE recv = TOPN(2);
3778
3682
  VALUE obj = TOPN(1);
3779
3683
  VALUE set = TOPN(0);
3780
3684
  VALUE val;
3781
3685
 
3782
3686
  /* ### Instruction preambles. ### */
3783
- if (! leaf) ADD_PC(INSN_ATTR(width));
3687
+ ADD_PC(INSN_ATTR(width));
3784
3688
  SETUP_CANARY(leaf);
3785
3689
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3786
3690
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3787
3691
 
3788
3692
  /* ### Here we do the instruction body. ### */
3789
3693
  # define NAME_OF_CURRENT_INSN opt_aset
3790
- # line 1344 "insns.def"
3694
+ # line 1331 "insns.def"
3791
3695
  {
3792
3696
  val = vm_opt_aset(recv, obj, set);
3793
3697
 
@@ -3795,7 +3699,7 @@ INSN_ENTRY(opt_aset)
3795
3699
  CALL_SIMPLE_METHOD();
3796
3700
  }
3797
3701
  }
3798
- # line 3799 "vm.inc"
3702
+ # line 3703 "vm.inc"
3799
3703
  # undef NAME_OF_CURRENT_INSN
3800
3704
 
3801
3705
  /* ### Instruction trailers. ### */
@@ -3805,7 +3709,6 @@ INSN_ENTRY(opt_aset)
3805
3709
  TOPN(0) = val;
3806
3710
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3807
3711
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3808
- if (leaf) ADD_PC(INSN_ATTR(width));
3809
3712
  # undef INSN_ATTR
3810
3713
 
3811
3714
  /* ### Leave the instruction. ### */
@@ -3823,12 +3726,12 @@ INSN_ENTRY(opt_aset_with)
3823
3726
  VALUE key = (VALUE)GET_OPERAND(1);
3824
3727
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
3825
3728
  # define INSN_ATTR(x) attr_ ## x ## _opt_aset_with(key, cd)
3826
- const bool leaf = INSN_ATTR(leaf);
3729
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3827
3730
  VALUE recv = TOPN(1);
3828
3731
  VALUE val = TOPN(0);
3829
3732
 
3830
3733
  /* ### Instruction preambles. ### */
3831
- if (! leaf) ADD_PC(INSN_ATTR(width));
3734
+ ADD_PC(INSN_ATTR(width));
3832
3735
  SETUP_CANARY(leaf);
3833
3736
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3834
3737
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
@@ -3836,7 +3739,7 @@ INSN_ENTRY(opt_aset_with)
3836
3739
 
3837
3740
  /* ### Here we do the instruction body. ### */
3838
3741
  # define NAME_OF_CURRENT_INSN opt_aset_with
3839
- # line 1360 "insns.def"
3742
+ # line 1347 "insns.def"
3840
3743
  {
3841
3744
  VALUE tmp = vm_opt_aset_with(recv, key, val);
3842
3745
 
@@ -3849,7 +3752,7 @@ INSN_ENTRY(opt_aset_with)
3849
3752
  CALL_SIMPLE_METHOD();
3850
3753
  }
3851
3754
  }
3852
- # line 3853 "vm.inc"
3755
+ # line 3756 "vm.inc"
3853
3756
  # undef NAME_OF_CURRENT_INSN
3854
3757
 
3855
3758
  /* ### Instruction trailers. ### */
@@ -3859,7 +3762,6 @@ INSN_ENTRY(opt_aset_with)
3859
3762
  TOPN(0) = val;
3860
3763
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3861
3764
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3862
- if (leaf) ADD_PC(INSN_ATTR(width));
3863
3765
  # undef INSN_ATTR
3864
3766
 
3865
3767
  /* ### Leave the instruction. ### */
@@ -3877,12 +3779,12 @@ INSN_ENTRY(opt_aref_with)
3877
3779
  VALUE key = (VALUE)GET_OPERAND(1);
3878
3780
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(2);
3879
3781
  # define INSN_ATTR(x) attr_ ## x ## _opt_aref_with(key, cd)
3880
- const bool leaf = INSN_ATTR(leaf);
3782
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3881
3783
  VALUE recv = TOPN(0);
3882
3784
  VALUE val;
3883
3785
 
3884
3786
  /* ### Instruction preambles. ### */
3885
- if (! leaf) ADD_PC(INSN_ATTR(width));
3787
+ ADD_PC(INSN_ATTR(width));
3886
3788
  SETUP_CANARY(leaf);
3887
3789
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3888
3790
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, key);
@@ -3890,7 +3792,7 @@ INSN_ENTRY(opt_aref_with)
3890
3792
 
3891
3793
  /* ### Here we do the instruction body. ### */
3892
3794
  # define NAME_OF_CURRENT_INSN opt_aref_with
3893
- # line 1381 "insns.def"
3795
+ # line 1368 "insns.def"
3894
3796
  {
3895
3797
  val = vm_opt_aref_with(recv, key);
3896
3798
 
@@ -3899,7 +3801,7 @@ INSN_ENTRY(opt_aref_with)
3899
3801
  CALL_SIMPLE_METHOD();
3900
3802
  }
3901
3803
  }
3902
- # line 3903 "vm.inc"
3804
+ # line 3805 "vm.inc"
3903
3805
  # undef NAME_OF_CURRENT_INSN
3904
3806
 
3905
3807
  /* ### Instruction trailers. ### */
@@ -3909,7 +3811,6 @@ INSN_ENTRY(opt_aref_with)
3909
3811
  TOPN(0) = val;
3910
3812
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3911
3813
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3912
- if (leaf) ADD_PC(INSN_ATTR(width));
3913
3814
  # undef INSN_ATTR
3914
3815
 
3915
3816
  /* ### Leave the instruction. ### */
@@ -3926,19 +3827,19 @@ INSN_ENTRY(opt_length)
3926
3827
  /* ### Declare and assign variables. ### */
3927
3828
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3928
3829
  # define INSN_ATTR(x) attr_ ## x ## _opt_length(cd)
3929
- const bool leaf = INSN_ATTR(leaf);
3830
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3930
3831
  VALUE recv = TOPN(0);
3931
3832
  VALUE val;
3932
3833
 
3933
3834
  /* ### Instruction preambles. ### */
3934
- if (! leaf) ADD_PC(INSN_ATTR(width));
3835
+ ADD_PC(INSN_ATTR(width));
3935
3836
  SETUP_CANARY(leaf);
3936
3837
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3937
3838
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3938
3839
 
3939
3840
  /* ### Here we do the instruction body. ### */
3940
3841
  # define NAME_OF_CURRENT_INSN opt_length
3941
- # line 1396 "insns.def"
3842
+ # line 1383 "insns.def"
3942
3843
  {
3943
3844
  val = vm_opt_length(recv, BOP_LENGTH);
3944
3845
 
@@ -3946,7 +3847,7 @@ INSN_ENTRY(opt_length)
3946
3847
  CALL_SIMPLE_METHOD();
3947
3848
  }
3948
3849
  }
3949
- # line 3950 "vm.inc"
3850
+ # line 3851 "vm.inc"
3950
3851
  # undef NAME_OF_CURRENT_INSN
3951
3852
 
3952
3853
  /* ### Instruction trailers. ### */
@@ -3956,7 +3857,6 @@ INSN_ENTRY(opt_length)
3956
3857
  TOPN(0) = val;
3957
3858
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
3958
3859
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
3959
- if (leaf) ADD_PC(INSN_ATTR(width));
3960
3860
  # undef INSN_ATTR
3961
3861
 
3962
3862
  /* ### Leave the instruction. ### */
@@ -3973,19 +3873,19 @@ INSN_ENTRY(opt_size)
3973
3873
  /* ### Declare and assign variables. ### */
3974
3874
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
3975
3875
  # define INSN_ATTR(x) attr_ ## x ## _opt_size(cd)
3976
- const bool leaf = INSN_ATTR(leaf);
3876
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
3977
3877
  VALUE recv = TOPN(0);
3978
3878
  VALUE val;
3979
3879
 
3980
3880
  /* ### Instruction preambles. ### */
3981
- if (! leaf) ADD_PC(INSN_ATTR(width));
3881
+ ADD_PC(INSN_ATTR(width));
3982
3882
  SETUP_CANARY(leaf);
3983
3883
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
3984
3884
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
3985
3885
 
3986
3886
  /* ### Here we do the instruction body. ### */
3987
3887
  # define NAME_OF_CURRENT_INSN opt_size
3988
- # line 1410 "insns.def"
3888
+ # line 1397 "insns.def"
3989
3889
  {
3990
3890
  val = vm_opt_length(recv, BOP_SIZE);
3991
3891
 
@@ -3993,7 +3893,7 @@ INSN_ENTRY(opt_size)
3993
3893
  CALL_SIMPLE_METHOD();
3994
3894
  }
3995
3895
  }
3996
- # line 3997 "vm.inc"
3896
+ # line 3897 "vm.inc"
3997
3897
  # undef NAME_OF_CURRENT_INSN
3998
3898
 
3999
3899
  /* ### Instruction trailers. ### */
@@ -4003,7 +3903,6 @@ INSN_ENTRY(opt_size)
4003
3903
  TOPN(0) = val;
4004
3904
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4005
3905
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4006
- if (leaf) ADD_PC(INSN_ATTR(width));
4007
3906
  # undef INSN_ATTR
4008
3907
 
4009
3908
  /* ### Leave the instruction. ### */
@@ -4020,19 +3919,19 @@ INSN_ENTRY(opt_empty_p)
4020
3919
  /* ### Declare and assign variables. ### */
4021
3920
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
4022
3921
  # define INSN_ATTR(x) attr_ ## x ## _opt_empty_p(cd)
4023
- const bool leaf = INSN_ATTR(leaf);
3922
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4024
3923
  VALUE recv = TOPN(0);
4025
3924
  VALUE val;
4026
3925
 
4027
3926
  /* ### Instruction preambles. ### */
4028
- if (! leaf) ADD_PC(INSN_ATTR(width));
3927
+ ADD_PC(INSN_ATTR(width));
4029
3928
  SETUP_CANARY(leaf);
4030
3929
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4031
3930
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4032
3931
 
4033
3932
  /* ### Here we do the instruction body. ### */
4034
3933
  # define NAME_OF_CURRENT_INSN opt_empty_p
4035
- # line 1424 "insns.def"
3934
+ # line 1411 "insns.def"
4036
3935
  {
4037
3936
  val = vm_opt_empty_p(recv);
4038
3937
 
@@ -4040,7 +3939,7 @@ INSN_ENTRY(opt_empty_p)
4040
3939
  CALL_SIMPLE_METHOD();
4041
3940
  }
4042
3941
  }
4043
- # line 4044 "vm.inc"
3942
+ # line 3943 "vm.inc"
4044
3943
  # undef NAME_OF_CURRENT_INSN
4045
3944
 
4046
3945
  /* ### Instruction trailers. ### */
@@ -4050,7 +3949,6 @@ INSN_ENTRY(opt_empty_p)
4050
3949
  TOPN(0) = val;
4051
3950
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4052
3951
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4053
- if (leaf) ADD_PC(INSN_ATTR(width));
4054
3952
  # undef INSN_ATTR
4055
3953
 
4056
3954
  /* ### Leave the instruction. ### */
@@ -4067,19 +3965,19 @@ INSN_ENTRY(opt_succ)
4067
3965
  /* ### Declare and assign variables. ### */
4068
3966
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
4069
3967
  # define INSN_ATTR(x) attr_ ## x ## _opt_succ(cd)
4070
- const bool leaf = INSN_ATTR(leaf);
3968
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4071
3969
  VALUE recv = TOPN(0);
4072
3970
  VALUE val;
4073
3971
 
4074
3972
  /* ### Instruction preambles. ### */
4075
- if (! leaf) ADD_PC(INSN_ATTR(width));
3973
+ ADD_PC(INSN_ATTR(width));
4076
3974
  SETUP_CANARY(leaf);
4077
3975
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4078
3976
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4079
3977
 
4080
3978
  /* ### Here we do the instruction body. ### */
4081
3979
  # define NAME_OF_CURRENT_INSN opt_succ
4082
- # line 1438 "insns.def"
3980
+ # line 1425 "insns.def"
4083
3981
  {
4084
3982
  val = vm_opt_succ(recv);
4085
3983
 
@@ -4087,7 +3985,7 @@ INSN_ENTRY(opt_succ)
4087
3985
  CALL_SIMPLE_METHOD();
4088
3986
  }
4089
3987
  }
4090
- # line 4091 "vm.inc"
3988
+ # line 3989 "vm.inc"
4091
3989
  # undef NAME_OF_CURRENT_INSN
4092
3990
 
4093
3991
  /* ### Instruction trailers. ### */
@@ -4097,7 +3995,6 @@ INSN_ENTRY(opt_succ)
4097
3995
  TOPN(0) = val;
4098
3996
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4099
3997
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4100
- if (leaf) ADD_PC(INSN_ATTR(width));
4101
3998
  # undef INSN_ATTR
4102
3999
 
4103
4000
  /* ### Leave the instruction. ### */
@@ -4114,19 +4011,19 @@ INSN_ENTRY(opt_not)
4114
4011
  /* ### Declare and assign variables. ### */
4115
4012
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
4116
4013
  # define INSN_ATTR(x) attr_ ## x ## _opt_not(cd)
4117
- const bool leaf = INSN_ATTR(leaf);
4014
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4118
4015
  VALUE recv = TOPN(0);
4119
4016
  VALUE val;
4120
4017
 
4121
4018
  /* ### Instruction preambles. ### */
4122
- if (! leaf) ADD_PC(INSN_ATTR(width));
4019
+ ADD_PC(INSN_ATTR(width));
4123
4020
  SETUP_CANARY(leaf);
4124
4021
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4125
4022
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4126
4023
 
4127
4024
  /* ### Here we do the instruction body. ### */
4128
4025
  # define NAME_OF_CURRENT_INSN opt_not
4129
- # line 1452 "insns.def"
4026
+ # line 1439 "insns.def"
4130
4027
  {
4131
4028
  val = vm_opt_not(GET_ISEQ(), cd, recv);
4132
4029
 
@@ -4134,7 +4031,7 @@ INSN_ENTRY(opt_not)
4134
4031
  CALL_SIMPLE_METHOD();
4135
4032
  }
4136
4033
  }
4137
- # line 4138 "vm.inc"
4034
+ # line 4035 "vm.inc"
4138
4035
  # undef NAME_OF_CURRENT_INSN
4139
4036
 
4140
4037
  /* ### Instruction trailers. ### */
@@ -4144,7 +4041,6 @@ INSN_ENTRY(opt_not)
4144
4041
  TOPN(0) = val;
4145
4042
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4146
4043
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4147
- if (leaf) ADD_PC(INSN_ATTR(width));
4148
4044
  # undef INSN_ATTR
4149
4045
 
4150
4046
  /* ### Leave the instruction. ### */
@@ -4161,20 +4057,20 @@ INSN_ENTRY(opt_regexpmatch2)
4161
4057
  /* ### Declare and assign variables. ### */
4162
4058
  CALL_DATA cd = (CALL_DATA)GET_OPERAND(1);
4163
4059
  # define INSN_ATTR(x) attr_ ## x ## _opt_regexpmatch2(cd)
4164
- const bool leaf = INSN_ATTR(leaf);
4060
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4165
4061
  VALUE obj2 = TOPN(1);
4166
4062
  VALUE obj1 = TOPN(0);
4167
4063
  VALUE val;
4168
4064
 
4169
4065
  /* ### Instruction preambles. ### */
4170
- if (! leaf) ADD_PC(INSN_ATTR(width));
4066
+ ADD_PC(INSN_ATTR(width));
4171
4067
  SETUP_CANARY(leaf);
4172
4068
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4173
4069
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, cd);
4174
4070
 
4175
4071
  /* ### Here we do the instruction body. ### */
4176
4072
  # define NAME_OF_CURRENT_INSN opt_regexpmatch2
4177
- # line 1467 "insns.def"
4073
+ # line 1454 "insns.def"
4178
4074
  {
4179
4075
  val = vm_opt_regexpmatch2(obj2, obj1);
4180
4076
 
@@ -4182,7 +4078,7 @@ INSN_ENTRY(opt_regexpmatch2)
4182
4078
  CALL_SIMPLE_METHOD();
4183
4079
  }
4184
4080
  }
4185
- # line 4186 "vm.inc"
4081
+ # line 4082 "vm.inc"
4186
4082
  # undef NAME_OF_CURRENT_INSN
4187
4083
 
4188
4084
  /* ### Instruction trailers. ### */
@@ -4192,7 +4088,6 @@ INSN_ENTRY(opt_regexpmatch2)
4192
4088
  TOPN(0) = val;
4193
4089
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4194
4090
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4195
- if (leaf) ADD_PC(INSN_ATTR(width));
4196
4091
  # undef INSN_ATTR
4197
4092
 
4198
4093
  /* ### Leave the instruction. ### */
@@ -4209,22 +4104,22 @@ INSN_ENTRY(invokebuiltin)
4209
4104
  /* ### Declare and assign variables. ### */
4210
4105
  RB_BUILTIN bf = (RB_BUILTIN)GET_OPERAND(1);
4211
4106
  # define INSN_ATTR(x) attr_ ## x ## _invokebuiltin(bf)
4212
- const bool leaf = INSN_ATTR(leaf);
4107
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4213
4108
  VALUE val;
4214
4109
 
4215
4110
  /* ### Instruction preambles. ### */
4216
- if (! leaf) ADD_PC(INSN_ATTR(width));
4111
+ ADD_PC(INSN_ATTR(width));
4217
4112
  SETUP_CANARY(leaf);
4218
4113
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4219
4114
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
4220
4115
 
4221
4116
  /* ### Here we do the instruction body. ### */
4222
4117
  # define NAME_OF_CURRENT_INSN invokebuiltin
4223
- # line 1483 "insns.def"
4118
+ # line 1470 "insns.def"
4224
4119
  {
4225
4120
  val = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
4226
4121
  }
4227
- # line 4228 "vm.inc"
4122
+ # line 4123 "vm.inc"
4228
4123
  # undef NAME_OF_CURRENT_INSN
4229
4124
 
4230
4125
  /* ### Instruction trailers. ### */
@@ -4234,7 +4129,6 @@ INSN_ENTRY(invokebuiltin)
4234
4129
  TOPN(0) = val;
4235
4130
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4236
4131
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4237
- if (leaf) ADD_PC(INSN_ATTR(width));
4238
4132
  # undef INSN_ATTR
4239
4133
 
4240
4134
  /* ### Leave the instruction. ### */
@@ -4252,11 +4146,11 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
4252
4146
  RB_BUILTIN bf = (RB_BUILTIN)GET_OPERAND(1);
4253
4147
  rb_num_t index = (rb_num_t)GET_OPERAND(2);
4254
4148
  # define INSN_ATTR(x) attr_ ## x ## _opt_invokebuiltin_delegate(bf, index)
4255
- const bool leaf = INSN_ATTR(leaf);
4149
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4256
4150
  VALUE val;
4257
4151
 
4258
4152
  /* ### Instruction preambles. ### */
4259
- if (! leaf) ADD_PC(INSN_ATTR(width));
4153
+ ADD_PC(INSN_ATTR(width));
4260
4154
  SETUP_CANARY(leaf);
4261
4155
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4262
4156
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
@@ -4264,11 +4158,11 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
4264
4158
 
4265
4159
  /* ### Here we do the instruction body. ### */
4266
4160
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate
4267
- # line 1494 "insns.def"
4161
+ # line 1481 "insns.def"
4268
4162
  {
4269
4163
  val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4270
4164
  }
4271
- # line 4272 "vm.inc"
4165
+ # line 4166 "vm.inc"
4272
4166
  # undef NAME_OF_CURRENT_INSN
4273
4167
 
4274
4168
  /* ### Instruction trailers. ### */
@@ -4278,7 +4172,6 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
4278
4172
  TOPN(0) = val;
4279
4173
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4280
4174
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4281
- if (leaf) ADD_PC(INSN_ATTR(width));
4282
4175
  # undef INSN_ATTR
4283
4176
 
4284
4177
  /* ### Leave the instruction. ### */
@@ -4296,11 +4189,11 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4296
4189
  RB_BUILTIN bf = (RB_BUILTIN)GET_OPERAND(1);
4297
4190
  rb_num_t index = (rb_num_t)GET_OPERAND(2);
4298
4191
  # define INSN_ATTR(x) attr_ ## x ## _opt_invokebuiltin_delegate_leave(bf, index)
4299
- const bool leaf = INSN_ATTR(leaf);
4192
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4300
4193
  VALUE val;
4301
4194
 
4302
4195
  /* ### Instruction preambles. ### */
4303
- if (! leaf) ADD_PC(INSN_ATTR(width));
4196
+ ADD_PC(INSN_ATTR(width));
4304
4197
  SETUP_CANARY(leaf);
4305
4198
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4306
4199
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, bf);
@@ -4308,7 +4201,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4308
4201
 
4309
4202
  /* ### Here we do the instruction body. ### */
4310
4203
  # define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate_leave
4311
- # line 1505 "insns.def"
4204
+ # line 1492 "insns.def"
4312
4205
  {
4313
4206
  val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
4314
4207
 
@@ -4326,7 +4219,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4326
4219
  RESTORE_REGS();
4327
4220
  }
4328
4221
  }
4329
- # line 4330 "vm.inc"
4222
+ # line 4223 "vm.inc"
4330
4223
  # undef NAME_OF_CURRENT_INSN
4331
4224
 
4332
4225
  /* ### Instruction trailers. ### */
@@ -4336,7 +4229,6 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
4336
4229
  TOPN(0) = val;
4337
4230
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4338
4231
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4339
- if (leaf) ADD_PC(INSN_ATTR(width));
4340
4232
  # undef INSN_ATTR
4341
4233
 
4342
4234
  /* ### Leave the instruction. ### */
@@ -4353,14 +4245,14 @@ INSN_ENTRY(getlocal_WC_0)
4353
4245
  /* ### Declare and assign variables. ### */
4354
4246
  #line 10 "defs/opt_operand.def"
4355
4247
  const rb_num_t level = 0;
4356
- #line 4357 "vm.inc"
4248
+ #line 4249 "vm.inc"
4357
4249
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4358
4250
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_0(idx)
4359
- const bool leaf = INSN_ATTR(leaf);
4251
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4360
4252
  VALUE val;
4361
4253
 
4362
4254
  /* ### Instruction preambles. ### */
4363
- if (! leaf) ADD_PC(INSN_ATTR(width));
4255
+ ADD_PC(INSN_ATTR(width));
4364
4256
  SETUP_CANARY(leaf);
4365
4257
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4366
4258
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -4373,7 +4265,7 @@ INSN_ENTRY(getlocal_WC_0)
4373
4265
  RB_DEBUG_COUNTER_INC(lvar_get);
4374
4266
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4375
4267
  }
4376
- # line 4377 "vm.inc"
4268
+ # line 4269 "vm.inc"
4377
4269
  # undef NAME_OF_CURRENT_INSN
4378
4270
 
4379
4271
  /* ### Instruction trailers. ### */
@@ -4383,7 +4275,6 @@ INSN_ENTRY(getlocal_WC_0)
4383
4275
  TOPN(0) = val;
4384
4276
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4385
4277
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4386
- if (leaf) ADD_PC(INSN_ATTR(width));
4387
4278
  # undef INSN_ATTR
4388
4279
 
4389
4280
  /* ### Leave the instruction. ### */
@@ -4400,14 +4291,14 @@ INSN_ENTRY(getlocal_WC_1)
4400
4291
  /* ### Declare and assign variables. ### */
4401
4292
  #line 11 "defs/opt_operand.def"
4402
4293
  const rb_num_t level = 1;
4403
- #line 4404 "vm.inc"
4294
+ #line 4295 "vm.inc"
4404
4295
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4405
4296
  # define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_1(idx)
4406
- const bool leaf = INSN_ATTR(leaf);
4297
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4407
4298
  VALUE val;
4408
4299
 
4409
4300
  /* ### Instruction preambles. ### */
4410
- if (! leaf) ADD_PC(INSN_ATTR(width));
4301
+ ADD_PC(INSN_ATTR(width));
4411
4302
  SETUP_CANARY(leaf);
4412
4303
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4413
4304
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -4420,7 +4311,7 @@ INSN_ENTRY(getlocal_WC_1)
4420
4311
  RB_DEBUG_COUNTER_INC(lvar_get);
4421
4312
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
4422
4313
  }
4423
- # line 4424 "vm.inc"
4314
+ # line 4315 "vm.inc"
4424
4315
  # undef NAME_OF_CURRENT_INSN
4425
4316
 
4426
4317
  /* ### Instruction trailers. ### */
@@ -4430,7 +4321,6 @@ INSN_ENTRY(getlocal_WC_1)
4430
4321
  TOPN(0) = val;
4431
4322
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4432
4323
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4433
- if (leaf) ADD_PC(INSN_ATTR(width));
4434
4324
  # undef INSN_ATTR
4435
4325
 
4436
4326
  /* ### Leave the instruction. ### */
@@ -4447,14 +4337,14 @@ INSN_ENTRY(setlocal_WC_0)
4447
4337
  /* ### Declare and assign variables. ### */
4448
4338
  #line 12 "defs/opt_operand.def"
4449
4339
  const rb_num_t level = 0;
4450
- #line 4451 "vm.inc"
4340
+ #line 4341 "vm.inc"
4451
4341
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4452
4342
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_0(idx)
4453
- const bool leaf = INSN_ATTR(leaf);
4343
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4454
4344
  VALUE val = TOPN(0);
4455
4345
 
4456
4346
  /* ### Instruction preambles. ### */
4457
- if (! leaf) ADD_PC(INSN_ATTR(width));
4347
+ ADD_PC(INSN_ATTR(width));
4458
4348
  SETUP_CANARY(leaf);
4459
4349
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4460
4350
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -4467,14 +4357,13 @@ INSN_ENTRY(setlocal_WC_0)
4467
4357
  RB_DEBUG_COUNTER_INC(lvar_set);
4468
4358
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4469
4359
  }
4470
- # line 4471 "vm.inc"
4360
+ # line 4361 "vm.inc"
4471
4361
  # undef NAME_OF_CURRENT_INSN
4472
4362
 
4473
4363
  /* ### Instruction trailers. ### */
4474
4364
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4475
4365
  CHECK_CANARY(leaf, INSN_ATTR(bin));
4476
4366
  INC_SP(INSN_ATTR(sp_inc));
4477
- if (leaf) ADD_PC(INSN_ATTR(width));
4478
4367
  # undef INSN_ATTR
4479
4368
 
4480
4369
  /* ### Leave the instruction. ### */
@@ -4491,14 +4380,14 @@ INSN_ENTRY(setlocal_WC_1)
4491
4380
  /* ### Declare and assign variables. ### */
4492
4381
  #line 13 "defs/opt_operand.def"
4493
4382
  const rb_num_t level = 1;
4494
- #line 4495 "vm.inc"
4383
+ #line 4384 "vm.inc"
4495
4384
  lindex_t idx = (lindex_t)GET_OPERAND(1);
4496
4385
  # define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_1(idx)
4497
- const bool leaf = INSN_ATTR(leaf);
4386
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4498
4387
  VALUE val = TOPN(0);
4499
4388
 
4500
4389
  /* ### Instruction preambles. ### */
4501
- if (! leaf) ADD_PC(INSN_ATTR(width));
4390
+ ADD_PC(INSN_ATTR(width));
4502
4391
  SETUP_CANARY(leaf);
4503
4392
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4504
4393
  COLLECT_USAGE_OPERAND(INSN_ATTR(bin), 0, idx);
@@ -4511,14 +4400,13 @@ INSN_ENTRY(setlocal_WC_1)
4511
4400
  RB_DEBUG_COUNTER_INC(lvar_set);
4512
4401
  (void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
4513
4402
  }
4514
- # line 4515 "vm.inc"
4403
+ # line 4404 "vm.inc"
4515
4404
  # undef NAME_OF_CURRENT_INSN
4516
4405
 
4517
4406
  /* ### Instruction trailers. ### */
4518
4407
  CHECK_VM_STACK_OVERFLOW_FOR_INSN(VM_REG_CFP, INSN_ATTR(retn));
4519
4408
  CHECK_CANARY(leaf, INSN_ATTR(bin));
4520
4409
  INC_SP(INSN_ATTR(sp_inc));
4521
- if (leaf) ADD_PC(INSN_ATTR(width));
4522
4410
  # undef INSN_ATTR
4523
4411
 
4524
4412
  /* ### Leave the instruction. ### */
@@ -4535,12 +4423,12 @@ INSN_ENTRY(putobject_INT2FIX_0_)
4535
4423
  /* ### Declare and assign variables. ### */
4536
4424
  #line 15 "defs/opt_operand.def"
4537
4425
  const VALUE val = INT2FIX(0);
4538
- #line 4539 "vm.inc"
4426
+ #line 4427 "vm.inc"
4539
4427
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_0_()
4540
- const bool leaf = INSN_ATTR(leaf);
4428
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4541
4429
 
4542
4430
  /* ### Instruction preambles. ### */
4543
- if (! leaf) ADD_PC(INSN_ATTR(width));
4431
+ ADD_PC(INSN_ATTR(width));
4544
4432
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4545
4433
 
4546
4434
  /* ### Instruction trailers. ### */
@@ -4549,7 +4437,6 @@ INSN_ENTRY(putobject_INT2FIX_0_)
4549
4437
  TOPN(0) = val;
4550
4438
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4551
4439
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4552
- if (leaf) ADD_PC(INSN_ATTR(width));
4553
4440
  # undef INSN_ATTR
4554
4441
 
4555
4442
  /* ### Leave the instruction. ### */
@@ -4566,12 +4453,12 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4566
4453
  /* ### Declare and assign variables. ### */
4567
4454
  #line 16 "defs/opt_operand.def"
4568
4455
  const VALUE val = INT2FIX(1);
4569
- #line 4570 "vm.inc"
4456
+ #line 4457 "vm.inc"
4570
4457
  # define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_1_()
4571
- const bool leaf = INSN_ATTR(leaf);
4458
+ const bool MAYBE_UNUSED(leaf) = INSN_ATTR(leaf);
4572
4459
 
4573
4460
  /* ### Instruction preambles. ### */
4574
- if (! leaf) ADD_PC(INSN_ATTR(width));
4461
+ ADD_PC(INSN_ATTR(width));
4575
4462
  COLLECT_USAGE_INSN(INSN_ATTR(bin));
4576
4463
 
4577
4464
  /* ### Instruction trailers. ### */
@@ -4580,7 +4467,6 @@ INSN_ENTRY(putobject_INT2FIX_1_)
4580
4467
  TOPN(0) = val;
4581
4468
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_NONE));
4582
4469
  VM_ASSERT(!RB_TYPE_P(TOPN(0), T_MOVED));
4583
- if (leaf) ADD_PC(INSN_ATTR(width));
4584
4470
  # undef INSN_ATTR
4585
4471
 
4586
4472
  /* ### Leave the instruction. ### */