diff --git a/mypyc/irbuild/for_helpers.py b/mypyc/irbuild/for_helpers.py index 5edee6cb4df4..db986f3fd9a7 100644 --- a/mypyc/irbuild/for_helpers.py +++ b/mypyc/irbuild/for_helpers.py @@ -183,7 +183,12 @@ def for_loop_helper_with_index( builder.push_loop_stack(step_block, exit_block) - builder.goto_and_activate(condition_block) + if isinstance(length, Integer) and length.value > 0: + builder.goto(body_block) + builder.activate_block(condition_block) + else: + builder.goto_and_activate(condition_block) + for_gen.gen_condition() builder.activate_block(body_block) diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 2f5b3b39319e..d864bfd19df2 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -645,6 +645,7 @@ L0: r0 = 'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -690,6 +691,7 @@ L0: r0 = 'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -798,6 +800,7 @@ L0: r0 = b'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L8 :: bool @@ -952,6 +955,7 @@ L0: r18 = CPyList_Extend(r10, r17) r19 = PyList_New(13) r20 = 0 + goto L2 L1: r21 = var_object_size r10 r22 = r20 < r21 :: signed diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 081cc1b174c9..7507b6255740 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -417,6 +417,7 @@ L0: r0 = 'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -462,6 +463,7 @@ L0: r0 = 'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -570,6 +572,7 @@ L0: r0 = b'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L8 :: bool @@ -879,6 +882,7 @@ L0: r18 = CPyList_Extend(r10, r17) r19 = PyTuple_New(13) r20 = 0 + goto L2 L1: r21 = var_object_size r10 r22 = r20 < r21 :: signed