PSI2IR: KT-49485 chunk ktConditions to avoid stackoverflow
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
index b3f81fb..bcc7d4e 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
@@ -45466,6 +45466,12 @@
         }
 
         @Test
+        @TestMetadata("longCondition.kt")
+        public void testLongCondition() throws Exception {
+            runTest("compiler/testData/codegen/box/when/longCondition.kt");
+        }
+
+        @Test
         @TestMetadata("longInRange.kt")
         public void testLongInRange() throws Exception {
             runTest("compiler/testData/codegen/box/when/longInRange.kt");
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt
index ab11928..c21910a 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BranchingExpressionGenerator.kt
@@ -112,18 +112,21 @@
                 break
             }
 
-            var irBranchCondition: IrExpression? = null
-            for (ktCondition in ktEntry.conditions) {
-                val irCondition =
-                    if (irSubject != null)
-                        generateWhenConditionWithSubject(ktCondition, irSubject, expression.subjectExpression)
-                    else
-                        generateWhenConditionNoSubject(ktCondition)
-                irBranchCondition = irBranchCondition?.let { context.whenComma(it, irCondition) } ?: irCondition
-            }
+            // chunk conditions to avoid stackoverflow later when IrWhen is visited
+            for (ktConditions in ktEntry.conditions.toList().chunked(64)) {
+                var irBranchCondition: IrExpression? = null
+                for (ktCondition in ktConditions) {
+                    val irCondition =
+                        if (irSubject != null)
+                            generateWhenConditionWithSubject(ktCondition, irSubject, expression.subjectExpression)
+                        else
+                            generateWhenConditionNoSubject(ktCondition)
+                    irBranchCondition = irBranchCondition?.let { context.whenComma(it, irCondition) } ?: irCondition
+                }
 
-            val irBranchResult = ktEntry.expression!!.genExpr()
-            irWhen.branches.add(IrBranchImpl(irBranchCondition!!, irBranchResult))
+                val irBranchResult = ktEntry.expression!!.genExpr()
+                irWhen.branches.add(IrBranchImpl(irBranchCondition!!, irBranchResult))
+            }
         }
         if (!hasExplicitElseBranch) {
             addElseBranchForExhaustiveWhenIfNeeded(irWhen, expression)
diff --git a/compiler/testData/codegen/box/when/longCondition.kt b/compiler/testData/codegen/box/when/longCondition.kt
new file mode 100644
index 0000000..38866fe
--- /dev/null
+++ b/compiler/testData/codegen/box/when/longCondition.kt
@@ -0,0 +1,24 @@
+// TARGET_BACKEND: JVM_IR
+
+fun box(): String {
+    return when ("foo") {
+        "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
+        "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40",
+        "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60",
+        "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80",
+        "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100",
+        "101", "102", "103", "104", "105", "106", "107", "108", "109", "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", "120",
+        "121", "122", "123", "124", "125", "126", "127", "128", "129", "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "140",
+        "141", "142", "143", "144", "145", "146", "147", "148", "149", "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", "160",
+        "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180",
+        "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200",
+        "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220",
+        "221", "222", "223", "224", "225", "226", "227", "228", "229", "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", "240",
+        "241", "242", "243", "244", "245", "246", "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", "260",
+        "261", "262", "263", "264", "265", "266", "267", "268", "269", "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", "280",
+        "281", "282", "283", "284", "285", "286", "287", "288", "289", "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", "300",
+        "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "314", "315", "316", "317", "318", "319", "320"
+        -> "Unreachable"
+        else -> "OK"
+    }
+}
\ No newline at end of file
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
index bb6977f..f0b6e1d 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
@@ -45466,6 +45466,12 @@
         }
 
         @Test
+        @TestMetadata("longCondition.kt")
+        public void testLongCondition() throws Exception {
+            runTest("compiler/testData/codegen/box/when/longCondition.kt");
+        }
+
+        @Test
         @TestMetadata("longInRange.kt")
         public void testLongInRange() throws Exception {
             runTest("compiler/testData/codegen/box/when/longInRange.kt");