@@ -1152,6 +1152,7 @@ def testfunc(n):
11521152 self .assertIn (("_CHECK_STACK_SPACE_OPERAND" ,
11531153 _testinternalcapi .get_co_framesize (dummy18 .__code__ )), uops_and_operands )
11541154
1155+ @unittest .skip ("reopen when we combine multiple stack space checks into one" )
11551156 def test_combine_stack_space_complex (self ):
11561157 def dummy0 (x ):
11571158 return x
@@ -1189,8 +1190,19 @@ def testfunc(n):
11891190 self .assertEqual (uop_names .count ("_RETURN_VALUE" ), 15 )
11901191
11911192 self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE" ), 0 )
1192- self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE_OPERAND" ), 15 )
1193+ self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE_OPERAND" ), 1 )
1194+ largest_stack = (
1195+ _testinternalcapi .get_co_framesize (dummy6 .__code__ ) +
1196+ _testinternalcapi .get_co_framesize (dummy5 .__code__ ) +
1197+ _testinternalcapi .get_co_framesize (dummy2 .__code__ ) +
1198+ _testinternalcapi .get_co_framesize (dummy1 .__code__ ) +
1199+ _testinternalcapi .get_co_framesize (dummy0 .__code__ )
1200+ )
1201+ self .assertIn (
1202+ ("_CHECK_STACK_SPACE_OPERAND" , largest_stack ), uops_and_operands
1203+ )
11931204
1205+ @unittest .skip ("reopen when we combine multiple stack space checks into one" )
11941206 def test_combine_stack_space_checks_large_framesize (self ):
11951207 # Create a function with a large framesize. This ensures _CHECK_STACK_SPACE is
11961208 # actually doing its job. Note that the resulting trace hits
@@ -1235,12 +1247,22 @@ def testfunc(n):
12351247
12361248 uops_and_operands = [(opcode , operand ) for opcode , _ , _ , operand in ex ]
12371249 uop_names = [uop [0 ] for uop in uops_and_operands ]
1238- self .assertGreaterEqual (uop_names .count ("_PUSH_FRAME" ), 1 )
1239- self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE" ), 0 )
1240- self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE_OPERAND" ),
1241- uop_names .count ("_PUSH_FRAME" ))
1242- self .assertIn (("_CHECK_STACK_SPACE_OPERAND" ,
1243- _testinternalcapi .get_co_framesize (dummy15 .__code__ )), uops_and_operands )
1250+ self .assertEqual (uop_names .count ("_PUSH_FRAME" ), 2 )
1251+ self .assertEqual (uop_names .count ("_CHECK_STACK_SPACE_OPERAND" ), 1 )
1252+
1253+ # this hits a different case during trace projection in refcount test runs only,
1254+ # so we need to account for both possibilities
1255+ self .assertIn (uop_names .count ("_CHECK_STACK_SPACE" ), [0 , 1 ])
1256+ if uop_names .count ("_CHECK_STACK_SPACE" ) == 0 :
1257+ largest_stack = (
1258+ _testinternalcapi .get_co_framesize (dummy15 .__code__ ) +
1259+ _testinternalcapi .get_co_framesize (dummy_large .__code__ )
1260+ )
1261+ else :
1262+ largest_stack = _testinternalcapi .get_co_framesize (dummy15 .__code__ )
1263+ self .assertIn (
1264+ ("_CHECK_STACK_SPACE_OPERAND" , largest_stack ), uops_and_operands
1265+ )
12441266
12451267 def test_combine_stack_space_checks_recursion (self ):
12461268 def dummy15 (x ):
0 commit comments