[K2/Diff] Rebase onto a fresher master
diff --git a/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/FirDifferences.kt b/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/FirDifferences.kt
index 0179568..46ff11d 100644
--- a/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/FirDifferences.kt
+++ b/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/FirDifferences.kt
@@ -109,6 +109,8 @@
         "OPT_IN_USAGE_ERROR",
         "EXPRESSION_EXPECTED_PACKAGE_FOUND",
         "ADAPTED_CALLABLE_REFERENCE_AGAINST_REFLECTION_TYPE",
+        "NO_RECEIVER_ALLOWED",
+        "DEPRECATED_ACCESS_TO_ENTRY_PROPERTY_FROM_ENUM",
 //    ),
 //    listOf(
         "CLASS_LITERAL_LHS_NOT_A_CLASS",
@@ -157,6 +159,7 @@
         "ASSIGNMENT_IN_EXPRESSION_CONTEXT",
         "EXPRESSION_EXPECTED",
         "EXPRESSION_REQUIRED",
+        "DECLARATION_IN_ILLEGAL_CONTEXT",
 //    ),
 //    listOf(
         "TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_IN_AUGMENTED_ASSIGNMENT_ERROR",
diff --git a/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/KnownIssues.kt b/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/KnownIssues.kt
index 099b1b2..2ad77da 100644
--- a/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/KnownIssues.kt
+++ b/compiler/k2-differences/tests/org/jetbrains/kotlin/test/frontend/fir/differences/KnownIssues.kt
@@ -499,6 +499,12 @@
     "NESTED_JS_EXPORT" to IssueInfo("25-4874957", 62736),
     "JSCODE_NO_JAVASCRIPT_PRODUCED" to IssueInfo("25-4912778", 63204),
     "JSCODE_ERROR" to IssueInfo("25-4912779", 63205),
+    "OUTER_CLASS_ARGUMENTS_REQUIRED" to IssueInfo("25-5053078", 64661),
+    "BUILDER_INFERENCE_STUB_RECEIVER" to IssueInfo("25-5053079", 64662),
+    "TYPE_PARAMETER_AS_REIFIED" to IssueInfo("25-5053080", 64663),
+    "CALLABLE_REFERENCE_LHS_NOT_A_CLASS" to IssueInfo("25-5053081", 64664),
+    "DELEGATE_SPECIAL_FUNCTION_AMBIGUITY" to IssueInfo("25-5053082", 64665),
+    "JS_MODULE_PROHIBITED_ON_NON_NATIVE" to IssueInfo("25-5053083", 64666),
     //<::>knownDisappearedDiagnostics
 )
 
@@ -625,6 +631,18 @@
     "JSCODE_ARGUMENT_NON_CONST_EXPRESSION" to IssueInfo("25-4912722", 63199),
     "JSCODE_CAN_NOT_VERIFY_JAVASCRIPT" to IssueInfo("25-4912723", 63200),
     "JSCODE_WARNING" to IssueInfo("25-4912724", 63201),
+    "ANONYMOUS_SUSPEND_FUNCTION" to IssueInfo("25-5053085", 64667),
+    "TYPE_PARAMETER_IS_NOT_AN_EXPRESSION" to IssueInfo("25-5053086", 64668),
+    "NEW_INFERENCE_ERROR" to IssueInfo("25-5053087", 64669),
+    "MANY_IMPL_MEMBER_NOT_IMPLEMENTED" to IssueInfo("25-5053088", 64670),
+    "MISSING_DEPENDENCY_CLASS" to IssueInfo("25-5053089", 64671),
+    "EXPECT_ACTUAL_INCOMPATIBILITY" to IssueInfo("25-5053090", 64672),
+    "ACTUAL_MISSING" to IssueInfo("25-5053091", 64673),
+    "EXPECT_ACTUAL_MISMATCH" to IssueInfo("25-5053092", 64674),
+    "DYNAMIC_RECEIVER_EXPECTED_BUT_WAS_NON_DYNAMIC" to IssueInfo("25-5053093", 64675),
+    "OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION" to IssueInfo("25-5053094", 64676),
+    "INCOMPATIBLE_OBJC_NAME_OVERRIDE" to IssueInfo("25-5053095", 64677),
+    "JS_MODULE_PROHIBITED_ON_NON_EXTERNAL" to IssueInfo("25-5053096", 64678),
     //<::>knownIntroducedDiagnostics
 )
 
diff --git a/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyNestedScope.kt b/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyNestedScope.kt
new file mode 100644
index 0000000..2ccd315
--- /dev/null
+++ b/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyNestedScope.kt
@@ -0,0 +1,595 @@
+// ORIGINAL: /compiler/testData/diagnostics/tests/enum/EnumWOParenthesesConsistencyNestedScope.fir.kt
+// WITH_STDLIB
+class Context {
+
+    enum class EnumerationAAA() {
+        ENTRY
+    }
+
+    enum class EnumerationAAB() {
+        ENTRY;
+    }
+
+    enum class EnumerationAAC() {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationAAD() {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationAAE() {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationABA(arg: UserKlass = UserKlass()) {
+        ENTRY
+    }
+
+    enum class EnumerationABB(arg: UserKlass = UserKlass()) {
+        ENTRY;
+    }
+
+    enum class EnumerationABC(arg: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationABD(arg: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationABE(arg: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationACA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY
+    }
+
+    enum class EnumerationACB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+    }
+
+    enum class EnumerationACC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationACD(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationACE(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationADA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationADB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationADC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationADD(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationAEA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationAEB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationAEC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationAED(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationBAA constructor() {
+        ENTRY
+    }
+
+    enum class EnumerationBAB constructor() {
+        ENTRY;
+    }
+
+    enum class EnumerationBAC constructor() {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationBAD constructor() {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationBAE constructor() {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationBBA constructor(arg: UserKlass = UserKlass()) {
+        ENTRY
+    }
+
+    enum class EnumerationBBB constructor(arg: UserKlass = UserKlass()) {
+        ENTRY;
+    }
+
+    enum class EnumerationBBC constructor(arg: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationBBD constructor(arg: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationBBE constructor(arg: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationBCA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY
+    }
+
+    enum class EnumerationBCB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+    }
+
+    enum class EnumerationBCC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationBCD constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationBCE constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationBDA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationBDB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationBDC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    }
+
+    enum class EnumerationBDD constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationBEA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationBEB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationBEC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+    }
+
+    enum class EnumerationBED constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+        constructor() : this(UserKlass(), UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationCAA {
+        ENTRY;
+
+        constructor()
+    }
+
+    enum class EnumerationCAB {
+        ENTRY1,
+        ENTRY2;
+
+        constructor()
+    }
+
+    enum class EnumerationCAC {
+        ENTRY1,
+        ENTRY2();
+
+        constructor()
+    }
+
+    enum class EnumerationCAD {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor()
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationCBA {
+        ENTRY;
+
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCBB {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCBC {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCBD {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg: UserKlass = UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationCCA {
+        ENTRY;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCCB {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCCC {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCCD {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationCDA {
+        ENTRY;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCDB {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCDC {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+    }
+
+    enum class EnumerationCDD {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationCEA {
+        ENTRY;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+        constructor()
+    }
+
+    enum class EnumerationCEB {
+        ENTRY1,
+        ENTRY2;
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+        constructor()
+    }
+
+    enum class EnumerationCEC {
+        ENTRY1,
+        ENTRY2();
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+        constructor()
+    }
+
+    enum class EnumerationCED {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+        constructor(arg: UserKlass = UserKlass())
+        constructor()
+
+        abstract fun abstractFunc()
+    }
+
+    enum class EnumerationDA {
+        ENTRY
+    }
+
+    enum class EnumerationDB {
+        ENTRY;
+    }
+
+    enum class EnumerationDC {
+        ENTRY1,
+        ENTRY2;
+    }
+
+    enum class EnumerationDD {
+        ENTRY1,
+        ENTRY2();
+    }
+
+    enum class EnumerationDE {
+        ENTRY1 {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        },
+        ENTRY2() {
+            override fun abstractFunc() {
+                TODO("Not yet implemented")
+            }
+        };
+
+        abstract fun abstractFunc()
+    }
+
+}
+
+
+class UserKlass
+
+
+fun box() = "OK"
diff --git a/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyTopLevel.kt b/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyTopLevel.kt
new file mode 100644
index 0000000..f3bdb573
--- /dev/null
+++ b/compiler/testData/codegen/box/k2DifferencesChecks/EnumWOParenthesesConsistencyTopLevel.kt
@@ -0,0 +1,411 @@
+// ORIGINAL: /compiler/testData/diagnostics/tests/enum/EnumWOParenthesesConsistencyTopLevel.fir.kt
+// WITH_STDLIB
+enum class EnumerationAAA() {
+    ENTRY
+}
+
+enum class EnumerationAAB() {
+    ENTRY;
+}
+
+enum class EnumerationAAC() {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationAAD() {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationAAE() {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationABA(arg: UserKlass = UserKlass()) {
+    ENTRY
+}
+
+enum class EnumerationABB(arg: UserKlass = UserKlass()) {
+    ENTRY;
+}
+
+enum class EnumerationABC(arg: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationABD(arg: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationABE(arg: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationACA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY
+}
+
+enum class EnumerationACB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+}
+
+enum class EnumerationACC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationACD(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationACE(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationADA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationADB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationADC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationADD(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationAEA(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationAEB(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationAEC(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationAED(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationBAA constructor() {
+    ENTRY
+}
+
+enum class EnumerationBAB constructor() {
+    ENTRY;
+}
+
+enum class EnumerationBAC constructor() {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationBAD constructor() {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationBAE constructor() {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationBBA constructor(arg: UserKlass = UserKlass()) {
+    ENTRY
+}
+
+enum class EnumerationBBB constructor(arg: UserKlass = UserKlass()) {
+    ENTRY;
+}
+
+enum class EnumerationBBC constructor(arg: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationBBD constructor(arg: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationBBE constructor(arg: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationBCA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY
+}
+
+enum class EnumerationBCB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+}
+
+enum class EnumerationBCC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationBCD constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationBCE constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationBDA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationBDB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationBDC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+}
+
+enum class EnumerationBDD constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationBEA constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationBEB constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationBEC constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+}
+
+enum class EnumerationBED constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass()) {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg: UserKlass = UserKlass()) : this(arg, UserKlass())
+    constructor() : this(UserKlass(), UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationCAA {
+    ENTRY;
+    constructor()
+}
+
+enum class EnumerationCAB {
+    ENTRY1,
+    ENTRY2;
+    constructor()
+}
+
+enum class EnumerationCAC {
+    ENTRY1,
+    ENTRY2();
+    constructor()
+}
+
+enum class EnumerationCAD {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor()
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationCBA {
+    ENTRY;
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCBB {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCBC {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCBD {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg: UserKlass = UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationCCA {
+    ENTRY;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+}
+
+enum class EnumerationCCB {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+}
+
+enum class EnumerationCCC {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+}
+
+enum class EnumerationCCD {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationCDA {
+    ENTRY;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCDB {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCDC {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+}
+
+enum class EnumerationCDD {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationCEA {
+    ENTRY;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+    constructor()
+}
+
+enum class EnumerationCEB {
+    ENTRY1,
+    ENTRY2;
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+    constructor()
+}
+
+enum class EnumerationCEC {
+    ENTRY1,
+    ENTRY2();
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+    constructor()
+}
+
+enum class EnumerationCED {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    constructor(arg1: UserKlass = UserKlass(), arg2: UserKlass = UserKlass())
+    constructor(arg: UserKlass = UserKlass())
+    constructor()
+    abstract fun abstractFunc()
+}
+
+enum class EnumerationDA {
+    ENTRY
+}
+
+enum class EnumerationDB {
+    ENTRY;
+}
+
+enum class EnumerationDC {
+    ENTRY1,
+    ENTRY2;
+}
+
+enum class EnumerationDD {
+    ENTRY1,
+    ENTRY2();
+}
+
+enum class EnumerationDE {
+    ENTRY1 { override fun abstractFunc() { TODO("Not yet implemented") } },
+    ENTRY2() { override fun abstractFunc() { TODO("Not yet implemented") } };
+    abstract fun abstractFunc()
+}
+
+
+class UserKlass
+
+
+fun box() = "OK"