Snap for 9281035 from de12a66120554ec8a6e30ca1d810b3239b7aafcd to studio-ee-release

Change-Id: I5457ef46251f26d0638ffae52768cb19d0edb2b8
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 7617b06..788a9c4 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -9,6 +9,6 @@
     <option name="additionalArguments" value="-version -Xallow-kotlin-package -Xskip-metadata-version-check" />
   </component>
   <component name="KotlinJpsPluginSettings">
-    <option name="version" value="1.7.20-dev-2726" />
+    <option name="version" value="1.7.21" />
   </component>
 </project>
\ No newline at end of file
diff --git a/ChangeLog.md b/ChangeLog.md
index 102f6d4..ac218c8 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,15 +1,162 @@
-## 1.7.20
+## 1.7.21
 
 ### Compiler
 
+- [`KT-54463`](https://youtrack.jetbrains.com/issue/KT-54463) Delegating to a field with a platform type causes java.lang.NoSuchFieldError: value$delegate
+- [`KT-54509`](https://youtrack.jetbrains.com/issue/KT-54509) Ir Interpreter: unable to evaluate string concatenation with "this" as argument
+- [`KT-54004`](https://youtrack.jetbrains.com/issue/KT-54004) Builder type inference does not work correctly with variable assignment and breaks run-time
+- [`KT-54393`](https://youtrack.jetbrains.com/issue/KT-54393) Change in behavior from 1.7.10 to 1.7.20 for java field override.
+- [`KT-54615`](https://youtrack.jetbrains.com/issue/KT-54615) JVM: Internal error in file lowering: java.lang.AssertionError: Error occurred while optimizing an expression
+- [`KT-54581`](https://youtrack.jetbrains.com/issue/KT-54581) JVM: "VerifyError: Bad type on operand stack" with generic inline function and `when` inside try-catch block
+- [`KT-53146`](https://youtrack.jetbrains.com/issue/KT-53146) JVM IR: unnecessary checkcast of null leads to NoClassDefFoundError if the type isn't available at runtime
+- [`KT-54600`](https://youtrack.jetbrains.com/issue/KT-54600) NPE on passing nullable Kotlin lambda as Java's generic SAM interface with `super` type bound
+- [`KT-54707`](https://youtrack.jetbrains.com/issue/KT-54707) "VerifyError: Bad type on operand stack" in inline call chain on a nullable array value
+- [`KT-54650`](https://youtrack.jetbrains.com/issue/KT-54650) Binary incompatible ABI change in Kotlin 1.7.20
+
+
+### Native. Runtime. Memory
+
+- [`KT-54498`](https://youtrack.jetbrains.com/issue/KT-54498) Deprecation message of 'FreezingIsDeprecated' is not really helpful
+
+### Tools. Gradle. Multiplatform
+
+- [`KT-54387`](https://youtrack.jetbrains.com/issue/KT-54387) Remove MPP alpha stability warning
+- [`KT-48436`](https://youtrack.jetbrains.com/issue/KT-48436) False positive "The Kotlin source set androidAndroidTestRelease was configured but not added to any Kotlin compilation"
+
+### Tools. JPS
+
+- [`KT-45474`](https://youtrack.jetbrains.com/issue/KT-45474) False positive NO_ELSE_IN_WHEN on sealed class with incremental compilation
+
+
+## 1.7.20
+
+### Analysis API
+
+- [`KT-52667`](https://youtrack.jetbrains.com/issue/KT-52667) FIR IDE: fun interfaces (SAM interfaces) are not properly resolved
+- [`KT-52136`](https://youtrack.jetbrains.com/issue/KT-52136) FIR: Implicit type declaration from the other module cannot be used for overloading
+
+### Analysis API. FE1.0
+
+- [`KT-51962`](https://youtrack.jetbrains.com/issue/KT-51962) Analysis API: Finish Analysis API for FE1.0
+
+### Analysis API. FIR
+
+- [`KT-52779`](https://youtrack.jetbrains.com/issue/KT-52779) FIR IDE: Import Optimizer cannot handle generic type qualifiers
+- [`KT-50236`](https://youtrack.jetbrains.com/issue/KT-50236) Fix OOB modification trackers for non-Kotlin code
+- [`KT-51240`](https://youtrack.jetbrains.com/issue/KT-51240) Analysis API: KtAnalysisSession for a specific module cannot create a symbol for PSI that cannot be seen from that module.
+- [`KT-50868`](https://youtrack.jetbrains.com/issue/KT-50868) Analysis API: decompiled type aliases are not resolved
+
+### Compiler
+
+- [`KT-53739`](https://youtrack.jetbrains.com/issue/KT-53739) Builder inference, extension hides members
+- [`KT-53733`](https://youtrack.jetbrains.com/issue/KT-53733) Kotlin/Native: update source documentation for the new default memory manager
+- [`KT-53667`](https://youtrack.jetbrains.com/issue/KT-53667) Compiler crashes on attempt to alloc a string on the stack in new MM
+- [`KT-53480`](https://youtrack.jetbrains.com/issue/KT-53480) Internal error in file lowering: java.lang.ClassNotFoundException: com.android.systemui.R$string
+- [`KT-52843`](https://youtrack.jetbrains.com/issue/KT-52843) Compose: NPE at Parameters.getParameterByDeclarationSlot if inline function with default arguments takes a lambda which captures value class represented by Long
+- [`KT-53475`](https://youtrack.jetbrains.com/issue/KT-53475) Kotlin/Native for iOS: "IllegalArgumentException: Sequence has more than one element"
+
 #### New Features
 
 - [`KT-52495`](https://youtrack.jetbrains.com/issue/KT-52495) Support until operator in back-ends
 - [`KT-52420`](https://youtrack.jetbrains.com/issue/KT-52420) Implement resolve of until operator
 - [`KT-52419`](https://youtrack.jetbrains.com/issue/KT-52419) Implement until operator in the parser
+- [`KT-33755`](https://youtrack.jetbrains.com/issue/KT-33755) Kotlin/Native: Provide a way to customize a bundle Identifier of a generated framework
+- [`KT-51665`](https://youtrack.jetbrains.com/issue/KT-51665) FIR: implement label resolve for "typed this" case
+- [`KT-52361`](https://youtrack.jetbrains.com/issue/KT-52361) Report warning on potentially empty intersection types
+
+#### Performance Improvements
+
+- [`KT-47816`](https://youtrack.jetbrains.com/issue/KT-47816) Disable script discovery for non-script environments
+- [`KT-48635`](https://youtrack.jetbrains.com/issue/KT-48635) JVM IR: Double/Float values are boxed when comparing for equality in equals method of data/value classes
+- [`KT-23397`](https://youtrack.jetbrains.com/issue/KT-23397) Optimize out field for property delegate when it's safe (JVM)
 
 #### Fixes
-
+- [`KT-53272`](https://youtrack.jetbrains.com/issue/KT-53272) Backend Internal error: Exception during IR lowering / No such value argument slot: 2
+- [`KT-53124`](https://youtrack.jetbrains.com/issue/KT-53124) Receiver type mismatch when combining extension properties, type projections, Java sources, and F-bounded type-variables
+- [`KT-51868`](https://youtrack.jetbrains.com/issue/KT-51868) JVM / IR: Inconsistent behaviour between lambda expression and SAM interface conversion for the same interface
+- [`KT-36770`](https://youtrack.jetbrains.com/issue/KT-36770) Prohibit unsafe calls with expected `@NotNull` T and given Kotlin generic parameter with nullable bound
+- [`KT-52974`](https://youtrack.jetbrains.com/issue/KT-52974) "IllegalStateException: Symbol with IrSimpleFunctionSymbolImpl is unbound" compiling native targets of MPP project
+- [`KT-53007`](https://youtrack.jetbrains.com/issue/KT-53007) JVM: "Bad invokespecial instruction: current class isn't assignable to reference class" when call superclass of outer class method from inner class
+- [`KT-53019`](https://youtrack.jetbrains.com/issue/KT-53019) K2: cannot cast callable reference to Function1 in runtime
+- [`KT-53031`](https://youtrack.jetbrains.com/issue/KT-53031) K2 compiler crashes with IllegalStateException: No type in ProtoBuf.ValueParameter
+- [`KT-29168`](https://youtrack.jetbrains.com/issue/KT-29168) Prohibit upper bounds violation with generic typealias using not all type parameters as arguments for underlying type in supertypes
+- [`KT-52432`](https://youtrack.jetbrains.com/issue/KT-52432) Using the IDE compiled with K2 (useFir) throws VerifyError exception
+- [`KT-52327`](https://youtrack.jetbrains.com/issue/KT-52327) False negative: TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM isn't reported
+- [`KT-49682`](https://youtrack.jetbrains.com/issue/KT-49682) Support JVM IR in KAPT stub generation
+- [`KT-24643`](https://youtrack.jetbrains.com/issue/KT-24643) Prohibit using a type parameter declared for an extension property inside delegate
+- [`KT-51972`](https://youtrack.jetbrains.com/issue/KT-51972) FIR, Gradle: "Symbol is invisible" compilation error with enabled Kotlin Lombok compiler plugin
+- [`KT-52011`](https://youtrack.jetbrains.com/issue/KT-52011) [FIR] All-open compiler plugin isn't supported
+- [`KT-51950`](https://youtrack.jetbrains.com/issue/KT-51950) JVM IR: "IndexOutOfBoundsException: Cannot pop operand off an empty stack" with crossinline lambdas and interface delegation
+- [`KT-52540`](https://youtrack.jetbrains.com/issue/KT-52540) Native: kotlin.NotImplementedError with Arrow library
+- [`KT-48031`](https://youtrack.jetbrains.com/issue/KT-48031) "IllegalStateException: Type variable TypeVariable(T) should not be fixed!"
+- [`KT-47708`](https://youtrack.jetbrains.com/issue/KT-47708) RequiresOptIn check does not flag experimental method usage in SAM lambda expressions
+- [`KT-52913`](https://youtrack.jetbrains.com/issue/KT-52913) JVM / IR: "IllegalArgumentException: Inline class types should have the same representation" when trying to down cast cast a value class
+- [`KT-50771`](https://youtrack.jetbrains.com/issue/KT-50771) IR partial linkage: Removed abstract callable members are not supported
+- [`KT-52994`](https://youtrack.jetbrains.com/issue/KT-52994) Enable generic inline classes as experimental feature
+- [`KT-52742`](https://youtrack.jetbrains.com/issue/KT-52742) CYCLE_IN_ANNOTATION_PARAMETER_ERROR false positive on annotations with default values
+- [`KT-52743`](https://youtrack.jetbrains.com/issue/KT-52743) Non-null generic functions throws NPE when assigned to val
+- [`KT-52745`](https://youtrack.jetbrains.com/issue/KT-52745) Frontend  / K2: "IncompatibleClassChangeError: class A$B overrides final method A.length()I" caused by delegation in a sealed class
+- [`KT-52832`](https://youtrack.jetbrains.com/issue/KT-52832) Tree-generator's method FirExpression::isFirType returns true and false for different field names; it should always be true
+- [`KT-52403`](https://youtrack.jetbrains.com/issue/KT-52403) IncompatibleClassChangeError when inlining suspend funs
+- [`KT-50107`](https://youtrack.jetbrains.com/issue/KT-50107) Missed USAGE_IS_NOT_INLINABLE diagnostic: Leaking inline lambda parameter through extension receiver
+- [`KT-47965`](https://youtrack.jetbrains.com/issue/KT-47965) Missed USAGE_IS_NOT_INLINABLE diagnostic on inline lambda parameter usage as receiver of .let call
+- [`KT-25787`](https://youtrack.jetbrains.com/issue/KT-25787) No error on crossinline usage of receiver parameter of functional type in an inline function
+- [`KT-52762`](https://youtrack.jetbrains.com/issue/KT-52762) Frontend / K2: Named arguments for Java classes lead to "Cannot find a parameter with this name"
+- [`KT-52680`](https://youtrack.jetbrains.com/issue/KT-52680) K2: overload resolution ambiguity if `this` is casted in a different method
+- [`KT-52676`](https://youtrack.jetbrains.com/issue/KT-52676) K2: Unsupported compile-time value IrGetFieldImpl instead of IrConst in AnnotationCodegen for constant from Java
+- [`KT-50293`](https://youtrack.jetbrains.com/issue/KT-50293) False positive: USELESS_CAST on stub types
+- [`KT-52175`](https://youtrack.jetbrains.com/issue/KT-52175) WRONG_ANNOTATION_TARGET for annotation that used inside if
+- [`KT-52338`](https://youtrack.jetbrains.com/issue/KT-52338) "IncompatibleClassChangeError: Expected non-static field" with Kotlin class with same-named companion object property as base Java class field
+- [`KT-49507`](https://youtrack.jetbrains.com/issue/KT-49507) JVM: "IllegalAccessError: class X tried to access private field" with same-named Kotlin property and Java base class field
+- [`KT-44512`](https://youtrack.jetbrains.com/issue/KT-44512) FIR DFA: incorrect smartcast after null assignment inside a lambda
+- [`KT-49200`](https://youtrack.jetbrains.com/issue/KT-49200) FIR/FE 1.0: different behavior with multiple matching star imports
+- [`KT-52718`](https://youtrack.jetbrains.com/issue/KT-52718) declaringClass deprecation message mentions the wrong replacement in 1.7
+- [`KT-52190`](https://youtrack.jetbrains.com/issue/KT-52190) FIR2IR: Unexpected IrErrorTypeImpl type for put method inside buildMap
+- [`KT-52197`](https://youtrack.jetbrains.com/issue/KT-52197) Incorrect inference of var type inside lambda that passed to extension function with type parameters that defined inside this lambda
+- [`KT-52057`](https://youtrack.jetbrains.com/issue/KT-52057) Unsupported compile-time value STRING_CONCATENATION and GET_FIELD in annotation arguments
+- [`KT-47823`](https://youtrack.jetbrains.com/issue/KT-47823) JVM IR: "IllegalArgumentException: Inline class types should have the same representation" with `break` usage in the loop range
+- [`KT-51883`](https://youtrack.jetbrains.com/issue/KT-51883) Kotlin 1.6.20 generates "-" in type names around lambdas and inline extension function with reified type which breaks Apache Beam
+- [`KT-52684`](https://youtrack.jetbrains.com/issue/KT-52684) Syntax error regression on complicated combination of LT and GTEQ
+- [`KT-52417`](https://youtrack.jetbrains.com/issue/KT-52417) Reflection: Can't reflect on type parameters captured by SAM converted lambda
+- [`KT-46797`](https://youtrack.jetbrains.com/issue/KT-46797) JVM IR: suspendImpl has no generic signature, breaking reified types in anonymous object supertypes when using the type token pattern
+- [`KT-51464`](https://youtrack.jetbrains.com/issue/KT-51464) FIR: Unable to infer type in coroutines flow code
+- [`KT-52163`](https://youtrack.jetbrains.com/issue/KT-52163) JVM IR: Double.compareTo(Int) compiled to integer comparison
+- [`KT-41980`](https://youtrack.jetbrains.com/issue/KT-41980) FIR: erroneous scope during annotation resolve
+- [`KT-47159`](https://youtrack.jetbrains.com/issue/KT-47159) `KtPsiUtils.areParenthesesUseless()` is returning a false positive on expressions for interface delegation
+- [`KT-51418`](https://youtrack.jetbrains.com/issue/KT-51418) Substitute anonymous type's supertypes
+- [`KT-35544`](https://youtrack.jetbrains.com/issue/KT-35544) kotlin.TypeCastException has no message on Native
+- [`KT-52386`](https://youtrack.jetbrains.com/issue/KT-52386) StackOverflowError during Kotlin/Native gradle build
+- [`KT-52592`](https://youtrack.jetbrains.com/issue/KT-52592) NPE from KProperty.getExtensionDelegate on property delegated to another property
+- [`KT-52551`](https://youtrack.jetbrains.com/issue/KT-52551) Delegating to object property reference does not invoke object's initializer
+- [`KT-51704`](https://youtrack.jetbrains.com/issue/KT-51704) Contracts: "AssertionError: Arguments and parameters size mismatch" with companion object
+- [`KT-25527`](https://youtrack.jetbrains.com/issue/KT-25527) False positive UNUSED_VALUE for delegated property/variable
+- [`KT-51002`](https://youtrack.jetbrains.com/issue/KT-51002) [FIR] Hidden declaration hides visible one
+- [`KT-51008`](https://youtrack.jetbrains.com/issue/KT-51008) [FIR] Star import does not work for nested calssifiers of java class
+- [`KT-52407`](https://youtrack.jetbrains.com/issue/KT-52407) FIR: Star import has lower priority than built-in import
+- [`KT-52431`](https://youtrack.jetbrains.com/issue/KT-52431) Reported error instead of warning due to empty intersection type found
+- [`KT-49394`](https://youtrack.jetbrains.com/issue/KT-49394) Bad message and suggestion: The feature "unit conversion" is disabled
+- [`KT-51168`](https://youtrack.jetbrains.com/issue/KT-51168) FIR: Inference error with Java interop and captured types
+- [`KT-49961`](https://youtrack.jetbrains.com/issue/KT-49961) "AssertionError: Left expression was not processed: BINARY_EXPRESSION" when analyzing dangling [bracketed] expression inside elvis
+- [`KT-50108`](https://youtrack.jetbrains.com/issue/KT-50108) Difference in fun interface conversion behavior for uninitialized not-null function values
+- [`KT-51889`](https://youtrack.jetbrains.com/issue/KT-51889) Calls to super-classes constructors with context receivers fail on runtime
+- [`KT-51228`](https://youtrack.jetbrains.com/issue/KT-51228) [FIR] Unresolved reference on callable reference on implicit `this` with smartcast
+- [`KT-52364`](https://youtrack.jetbrains.com/issue/KT-52364) False positive for INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION
+- [`KT-52237`](https://youtrack.jetbrains.com/issue/KT-52237) JVM / IR: "IllegalArgumentException: No argument for parameter VALUE_PARAMETER CONTINUATION_CLASS" when implementing Map interface on class with suspending functions
+- [`KT-50832`](https://youtrack.jetbrains.com/issue/KT-50832) Method references to suspend inline functions are processed incorrectly
+- [`KT-52194`](https://youtrack.jetbrains.com/issue/KT-52194) False positive "Class 'my.packge.MyClass' is compiled by a pre-release version of Kotlin and cannot be loaded by this version of the compiler" but builds fine
+- [`KT-47203`](https://youtrack.jetbrains.com/issue/KT-47203) JVM Debugger: Parameter value doesn't change for tailrec function
+- [`KT-52131`](https://youtrack.jetbrains.com/issue/KT-52131) False positive variable unused warning when calling inline function in finally block
+- [`KT-51738`](https://youtrack.jetbrains.com/issue/KT-51738) Debugger: stepping over in inline function with multiple inline lambda invocations is incorrect
+- [`KT-52198`](https://youtrack.jetbrains.com/issue/KT-52198) Losing reference to the value of an outer variable (Ref$ObjectRef) when using suspend inline with suspendCancellableCoroutine
+- [`KT-50994`](https://youtrack.jetbrains.com/issue/KT-50994) FIR: AssertionError during inference of delegated properties with implicit types
+- [`KT-51757`](https://youtrack.jetbrains.com/issue/KT-51757) FIR does not see various JS/Native specific declarations in common modules
+- [`KT-51201`](https://youtrack.jetbrains.com/issue/KT-51201) FIR: ARGUMENT_TYPE_MISMATCH diagnostic contains generic parameter instead of the actual type
+- [`KT-48444`](https://youtrack.jetbrains.com/issue/KT-48444) FIR: type argument rejected for annotation
+- [`KT-51754`](https://youtrack.jetbrains.com/issue/KT-51754) JVM: Local variable table invalid for do-while with continue
+- [`KT-51936`](https://youtrack.jetbrains.com/issue/KT-51936) Breakpoint not hit on last line of suspend function on Android
+- [`KT-27333`](https://youtrack.jetbrains.com/issue/KT-27333) Forbid `@Synchronized` annotation on suspend functions
+- [`KT-51530`](https://youtrack.jetbrains.com/issue/KT-51530) "StackOverflowError: CoroutineTransformerMethodVisitor.spillVariables" with data class in Flow
+- [`KT-51460`](https://youtrack.jetbrains.com/issue/KT-51460) FIR: Protected property inaccessible from inner class
 - [`KT-53947`](https://youtrack.jetbrains.com/issue/KT-53947) IllegalStateException: No mapping for symbol: VALUE_PARAMETER INSTANCE_RECEIVER
 - [`KT-51234`](https://youtrack.jetbrains.com/issue/KT-51234) Context receivers can be duplicated in function declaration
 - [`KT-51576`](https://youtrack.jetbrains.com/issue/KT-51576) Context receivers: "AssertionError: Callers must check that current token is IDENTIFIER followed with '@'" with `at` character
@@ -41,6 +188,15 @@
 - [`KTIJ-22209`](https://youtrack.jetbrains.com/issue/KTIJ-22209) Configure Kotlin on 221 idea adds 1.6.10 Kotlin (despite the fact that IDE plugin is 1.7.10)
 - [`KTIJ-22171`](https://youtrack.jetbrains.com/issue/KTIJ-22171) Fix test BuiltInDecompilerConsistencyTest
 - [`KTIJ-22016`](https://youtrack.jetbrains.com/issue/KTIJ-22016) Empty .kt file and build.gradle.kts can trigger an error while searching for a facade light class
+- [`KT-52571`](https://youtrack.jetbrains.com/issue/KT-52571) MPP Tasks on import are not up-to-date after subsequent launches
+- [`KT-47777`](https://youtrack.jetbrains.com/issue/KT-47777) ISE thrown from KtLightClassForFacadeImpl.Companion.createForFacadeNoCache has wrong message.
+
+### IDE. FIR
+
+- [`KT-52360`](https://youtrack.jetbrains.com/issue/KT-52360) FIR IDE: Make the fix of `isInheritor` method better
+- [`KT-51786`](https://youtrack.jetbrains.com/issue/KT-51786) FIR IDE: IllegalStateException exception in Inspections' infrastructure
+- [`KT-52331`](https://youtrack.jetbrains.com/issue/KT-52331) Analysis API: ArrayIndexOutOfBoundsException exception in Diagnostics' infrastructure
+
 
 ### IDE. Code Style, Formatting
 
@@ -56,6 +212,7 @@
 
 ### IDE. Gradle Integration
 
+- [`KT-47627`](https://youtrack.jetbrains.com/issue/KT-47627) IDE import fails with com.intellij.util.lang.PathClassLoader error for `runCommonizer` Gradle task on 212, 213 IDEAs
 - [`KTIJ-21638`](https://youtrack.jetbrains.com/issue/KTIJ-21638) MPP: IntelliJ can not resolve MPP references in common-code
 - [`KT-52216`](https://youtrack.jetbrains.com/issue/KT-52216) HMPP / KTOR: False positive "TYPE_MISMATCH" with Throwable descendant
 
@@ -76,45 +233,187 @@
 - [`KTIJ-21672`](https://youtrack.jetbrains.com/issue/KTIJ-21672) FIR IDE: Method reference on generic class breaks resolve
 - [`KTIJ-21714`](https://youtrack.jetbrains.com/issue/KTIJ-21714) FIR IDE: Inherently imported type from another module is not properly resolved
 
+### IDE. Script
+
+- [`KT-52525`](https://youtrack.jetbrains.com/issue/KT-52525) Update scripts handling in source roots
+
+
 ### IDE. Misc
 
 - [`KTIJ-21699`](https://youtrack.jetbrains.com/issue/KTIJ-21699) Refactoring: move out parts of the plugin useful for both FE10 and K2
 
+### JavaScript
+
+#### New Features
+
+- [`KT-39423`](https://youtrack.jetbrains.com/issue/KT-39423) KJS: Optionally generate a method to handle optional parameters for function in typescript
+- [`KT-42282`](https://youtrack.jetbrains.com/issue/KT-42282) KJS IR: add an ability to run separate tests
+
+#### Performance Improvements
+
+- [`KT-50270`](https://youtrack.jetbrains.com/issue/KT-50270) KJS IR: Unnecessary getter and setter calls when accessing class members
+
+#### Fixes
+
+- [`KT-51133`](https://youtrack.jetbrains.com/issue/KT-51133) Kotlin/JS - IR: even simple lambdas generate a lot of useless boilerplate
+- [`KT-51123`](https://youtrack.jetbrains.com/issue/KT-51123) Provide a way to add comments to generated JS
+- [`KT-48493`](https://youtrack.jetbrains.com/issue/KT-48493) KJS / IR: Invalid d.ts for inner classes inside objects
+- [`KT-52553`](https://youtrack.jetbrains.com/issue/KT-52553) KJS / IR: diamond hierarchy with super.toString produces stack overflow in runtime
+- [`KT-23252`](https://youtrack.jetbrains.com/issue/KT-23252) JS: Unit materialization on declaration and assignment
+- [`KT-51128`](https://youtrack.jetbrains.com/issue/KT-51128) Kotlin/JS - IR generate huge count of useless blocks
+- [`KT-50778`](https://youtrack.jetbrains.com/issue/KT-50778) KJS/IR: Inline class has no field when building production distribution
+- [`KT-50157`](https://youtrack.jetbrains.com/issue/KT-50157) KSJ IR: Applying identity equality operator to Chars always returns false
+- [`KT-38262`](https://youtrack.jetbrains.com/issue/KT-38262) Javascript generation (and Typescript) fails on 'then', 'catch' and 'finally' (and others?) claiming they are reserved names
+- [`KT-51066`](https://youtrack.jetbrains.com/issue/KT-51066) KJS / IR: suspend lambda parameter of value class is undefined
+- [`KT-51102`](https://youtrack.jetbrains.com/issue/KT-51102) KJS/IR: Assertion failed at translateCallArguments(jsAstUtils.kt:343)
+- [`KT-51878`](https://youtrack.jetbrains.com/issue/KT-51878) KJS / Legacy: Unit is not materialized in an overridden method, but it should be
+
 ### Language Design
 
+- [`KT-47986`](https://youtrack.jetbrains.com/issue/KT-47986) Implicit inferring a type variable into an upper bound in the builder inference context
+- [`KT-49264`](https://youtrack.jetbrains.com/issue/KT-49264) Deprecate infix function calls of functions named "suspend" with dangling function literal
 - [`KT-25636`](https://youtrack.jetbrains.com/issue/KT-25636) Native: Object is frozen by default problem
 - [`KT-49303`](https://youtrack.jetbrains.com/issue/KT-49303) Implement support for basic compile-time evaluation
 
 ### Libraries
 
+- [`KT-52932`](https://youtrack.jetbrains.com/issue/KT-52932) Open-ended ranges in the standard library
 - [`KT-52910`](https://youtrack.jetbrains.com/issue/KT-52910) Provide visit extension functions for java.nio.file.Path
-- [`KT-52909`](https://youtrack.jetbrains.com/issue/KT-52909) Implement a walk extension function for java.nio.file.Path
+- [`KT-48232`](https://youtrack.jetbrains.com/issue/KT-48232) Multiplatform function for computing cubic root
+- [`KT-52778`](https://youtrack.jetbrains.com/issue/KT-52778) The documentation for the `Duration` does not indicate any differences from the ISO-8601
+- [`KT-52618`](https://youtrack.jetbrains.com/issue/KT-52618) ThreadLocalRandom is not a good source of randomness on Android before SDK 34, so don't use it for Kotlin Random
+
+### Native
+
+- [`KT-53346`](https://youtrack.jetbrains.com/issue/KT-53346) MPP project with kotlinx-serialization-json:1.4.0-RC is not built
+
+
+### Native. C Export
+
+- [`KT-45468`](https://youtrack.jetbrains.com/issue/KT-45468) Kotlin/Native: Bitcode verification error when trying to export a cached klib to a static or dynamic library
+
+### Native. C and ObjC Import
+
+- [`KT-53373`](https://youtrack.jetbrains.com/issue/KT-53373) Native: @ExportObjCClass doesn't work with the new memory manager
+- [`KT-49034`](https://youtrack.jetbrains.com/issue/KT-49034) Kotlin/Native: `cnames.structs.Foo` resolves into wrong declaration
+- [`KT-26478`](https://youtrack.jetbrains.com/issue/KT-26478) Objective-C object's class name is null in ClassCastException's message
+
+### Native. ObjC Export
+
+- [`KT-51593`](https://youtrack.jetbrains.com/issue/KT-51593) Include more information in Objective-C header documentation
+- [`KT-33117`](https://youtrack.jetbrains.com/issue/KT-33117) Improve customizing Info.plist in produced frameworks
+- [`KT-52681`](https://youtrack.jetbrains.com/issue/KT-52681) Native: `@end;` for Objective-C is generated with an unnecessary semicolon
+
+### Native. Platforms
+
+- [`KT-52226`](https://youtrack.jetbrains.com/issue/KT-52226) Kotlin/Native: Add support for cross-compilation of MIPS targets from macOS and Windows hosts
+
+### Native. Runtime
+
+- [`KT-52430`](https://youtrack.jetbrains.com/issue/KT-52430) KMM 1.6.21 framework built with Xcode13, new MM GC Can't support iOS 9.x
+- [`KT-53534`](https://youtrack.jetbrains.com/issue/KT-53534) Kotlin/Native: `-Xruntime-logs=gc=info` flag doesn't work with compiler caches in 1.7.20-beta
+
+### Native. Runtime. Memory
+
+- [`KT-52692`](https://youtrack.jetbrains.com/issue/KT-52692) Kotlin/Native: fix tests with aggressive GC
+- [`KT-52130`](https://youtrack.jetbrains.com/issue/KT-52130) Kotlin/Native: use Xallocator for Kotlin objects only
+- [`KT-51436`](https://youtrack.jetbrains.com/issue/KT-51436) Kotlin/Native: optimize mark queue
+
+### Reflection
+
+- [`KT-51804`](https://youtrack.jetbrains.com/issue/KT-51804) An error occurs when callBy a KFunction that contains a value class as an argument, has a default argument set, and has more than 32 arguments.
+
+### Tools. CLI
+
+- [`KT-52465`](https://youtrack.jetbrains.com/issue/KT-52465) CLI: IllegalStateException IrSimpleFunctionPublicSymbolImpl when source root is duplicated
+- [`KT-52380`](https://youtrack.jetbrains.com/issue/KT-52380) Invalid path to compiler plugins should be reported as a compiler error
+- [`KT-51025`](https://youtrack.jetbrains.com/issue/KT-51025) JVM CLI compiler takes class file from classpath instead of input java source file
+- [`KT-51846`](https://youtrack.jetbrains.com/issue/KT-51846) Setting random value to the compiler argument where number is expected should produce an error. "-Xbackend-threads=abcd"
+
+### Tools. Compiler Plugins
+
+- [`KT-52486`](https://youtrack.jetbrains.com/issue/KT-52486) [K2] Looking for function/constructor whose parameters are annotated or meta annotated
+- [`KT-52872`](https://youtrack.jetbrains.com/issue/KT-52872) Mark supportsK2 in ComponentRegistrar.kt as JvmDefault to avoid compatibility problems
+- [`KT-52804`](https://youtrack.jetbrains.com/issue/KT-52804) A function obtained by Fir IrBuiltins has an incorrect package
+- [`KT-52468`](https://youtrack.jetbrains.com/issue/KT-52468) Rename module and jar for lombok compiler plugin
 
 ### Tools. Gradle
 
+- [`KT-53670`](https://youtrack.jetbrains.com/issue/KT-53670) Gradle: Cyclic dependency between kotlin-gradle-plugin-idea-1.7.20-Beta and kotlin-gradle-plugin-idea-proto-1.7.20-Beta
+- [`KT-53615`](https://youtrack.jetbrains.com/issue/KT-53615) Gradle: Fix deprecation warnings in CleanableStoreImpl
+- [`KT-53118`](https://youtrack.jetbrains.com/issue/KT-53118) Fully up-to-date builds are slower with Kotlin 1.7.0
+- [`KT-51923`](https://youtrack.jetbrains.com/issue/KT-51923) Improve usability of errors and warnings by being able to click on them
+- [`KT-53244`](https://youtrack.jetbrains.com/issue/KT-53244) Report from gradle about compiler plugins
+- [`KT-52839`](https://youtrack.jetbrains.com/issue/KT-52839) Warn in Gradle log why incremental compilation failed
+- [`KT-46019`](https://youtrack.jetbrains.com/issue/KT-46019) Compatibility with Gradle 7.1 release
+- [`KT-47047`](https://youtrack.jetbrains.com/issue/KT-47047) Migrate Kotlin Gradle Plugin from using Gradle conventions
+- [`KT-52698`](https://youtrack.jetbrains.com/issue/KT-52698) Don't add InspectClassesForMultiModuleIC task when new incremental compilation is enabled
+- [`KT-52867`](https://youtrack.jetbrains.com/issue/KT-52867) Provide simplified JVM toolchain configuration method
+- [`KT-45747`](https://youtrack.jetbrains.com/issue/KT-45747) Add basic JUnit 5 Kotlin Gradle Plugin Android tests setup
 - [`KT-46034`](https://youtrack.jetbrains.com/issue/KT-46034) Shadow Kotlin Gradle plugin dependencies
 - [`KT-28664`](https://youtrack.jetbrains.com/issue/KT-28664) Support ExtensionContainer on kotlin targets and source sets.
 - [`KT-19472`](https://youtrack.jetbrains.com/issue/KT-19472) Useful extensions of Gradle Kotlin DSL provided by Gradle Kotlin plugin
 - [`KT-34393`](https://youtrack.jetbrains.com/issue/KT-34393) Kotlin Gradle DSL: Inconsistent srcDir configuration between Java and Kotlin
 - [`KT-51629`](https://youtrack.jetbrains.com/issue/KT-51629) There isn't enough info about incremental compilation state in logs while running build with --info key
 
+
+### Tools. Gradle. Cocoapods
+
+- [`KT-53174`](https://youtrack.jetbrains.com/issue/KT-53174) CocoaPods: Synthetic Podfile does not specify platform
+- [`KT-53127`](https://youtrack.jetbrains.com/issue/KT-53127) "MaterialComponents normal armv7" in Cocoapods plugin between Kotlin 1.6.21 and 1.7.0
+- [`KT-44155`](https://youtrack.jetbrains.com/issue/KT-44155) Cocoapods doesn't support pods without module map file inside
+- [`KT-49032`](https://youtrack.jetbrains.com/issue/KT-49032) Cocoapods cinterop: some header files are not found
+- [`KT-53337`](https://youtrack.jetbrains.com/issue/KT-53337) Add warning about future changing default linking type of framework provided via cocoapods plugin
+
 ### Tools. Gradle. JS
 
+- [`KT-52637`](https://youtrack.jetbrains.com/issue/KT-52637) KJS / Gradle: Add SCSS webpack config
+- [`KT-51527`](https://youtrack.jetbrains.com/issue/KT-51527) Kotlin/JS: BrowserXRun causes full-screen Webpack error "Compiled with problems: asset size limit/entrypoint size limit" for fresh Kotlin-React project from wizard
+- [`KT-51532`](https://youtrack.jetbrains.com/issue/KT-51532) Kotlin/JS: passing environment variable via Gradle script causes "Execution optimizations have been disabled" warnings
 - [`KT-52221`](https://youtrack.jetbrains.com/issue/KT-52221) Kotlin/JS: failed Node tests are not reported in a standard way
 
 ### Tools. Gradle. Multiplatform
 
+- [`KT-52243`](https://youtrack.jetbrains.com/issue/KT-52243) CInteropProcess  is not cacheable despite the annotation
+- [`KT-52741`](https://youtrack.jetbrains.com/issue/KT-52741) MPP: klib outputs are not reproducible
+- [`KT-52208`](https://youtrack.jetbrains.com/issue/KT-52208) MPP: Gradle plugin 1.7 doesn't support latest api versions (1.8, 1.9)
 - [`KT-54071`](https://youtrack.jetbrains.com/issue/KT-54071) MPP/AGP compatibility: Bump maxSupportedVersion to 7.3.0
 
+### Tools. Gradle. Native
+
+- [`KT-52632`](https://youtrack.jetbrains.com/issue/KT-52632) Gradle / Native: commonizeNativeDistributionTask can never be up-to-date
+- [`KT-52328`](https://youtrack.jetbrains.com/issue/KT-52328) "ld: framework not found SQLCipher" linkDebugTestIosSimulatorArm64 error
+
+### Tools. Incremental Compile
+
+- [`KT-53168`](https://youtrack.jetbrains.com/issue/KT-53168) Incremental compilation doesn't perform correctly after a few iterations
+- [`KT-52925`](https://youtrack.jetbrains.com/issue/KT-52925) [IR BE] Non incremental build  occurs after build failure for compileKotlinJs task
+- [`KT-52946`](https://youtrack.jetbrains.com/issue/KT-52946) CompileKotlinJs task is executed non-incrementally if there were changes made to the dependant module
+- [`KT-52329`](https://youtrack.jetbrains.com/issue/KT-52329) Reduce memory usage of classpath snapshot cache
+- [`KT-53266`](https://youtrack.jetbrains.com/issue/KT-53266) Increment Compilation: "IllegalStateException: The following LookupSymbols are not yet converted to ProgramSymbols" when changing companion object constant field
+- [`KT-53231`](https://youtrack.jetbrains.com/issue/KT-53231) New IC reports build failures for missing classpath snapshots
+
 ### Tools. JPS
 
+- [`KT-47824`](https://youtrack.jetbrains.com/issue/KT-47824) 'when expression must be exhaustive' isn't thrown during incremental compilation
+- [`KT-51873`](https://youtrack.jetbrains.com/issue/KT-51873) JPS build is incorrect after gdw build
 - [`KTIJ-17072`](https://youtrack.jetbrains.com/issue/KTIJ-17072) JPS does not rebuild Kotlin usages of declared in Java when enum entry is added
 - [`KT-51537`](https://youtrack.jetbrains.com/issue/KT-51537) Rebuild module on plugin classpaths change
 
 ### Tools. REPL
 
+- [`KT-45065`](https://youtrack.jetbrains.com/issue/KT-45065) REPL: Incorrect output for unsigned value
 - [`KT-53043`](https://youtrack.jetbrains.com/issue/KT-53043) Scripting: Changes in REPL protocol: mark end of errors
 
+### Tools. Scripts
+
+- [`KT-52598`](https://youtrack.jetbrains.com/issue/KT-52598) Scripts and REPL snippets are not checked against using 'kotlin' package
+- [`KT-47187`](https://youtrack.jetbrains.com/issue/KT-47187) Kotlin ScriptEngine Failes to Compile a Trivial Statement After Failing to Compile a Broken One
+- [`KT-47191`](https://youtrack.jetbrains.com/issue/KT-47191) [Kotlin Script Engine] Compiling Without Evaluating Leaves Engine in a Bad State
+
+### Tools. Kapt
+
+- [`KT-52761`](https://youtrack.jetbrains.com/issue/KT-52761) Kotlin 1.7.0 breaks kapt processing for protobuf generated java sources
 
 ## 1.7.20-RC
 
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
index ed26ee3..dc2605c 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
@@ -20358,6 +20358,12 @@
                 }
 
                 @Test
+                @TestMetadata("stringConcatenationWithObject.kt")
+                public void testStringConcatenationWithObject() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt");
+                }
+
+                @Test
                 @TestMetadata("types.kt")
                 public void testTypes() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/modifiers/const/types.kt");
@@ -35539,6 +35545,24 @@
             }
 
             @Test
+            @TestMetadata("unsafeAssignment.kt")
+            public void testUnsafeAssignment() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignmentExtra.kt")
+            public void testUnsafeAssignmentExtra() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignment_noReport.kt")
+            public void testUnsafeAssignment_noReport() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt");
+            }
+
+            @Test
             @TestMetadata("useInferenceInformationFromExtension.kt")
             public void testUseInferenceInformationFromExtension() throws Exception {
                 runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/useInferenceInformationFromExtension.kt");
diff --git a/build-common/src/org/jetbrains/kotlin/incremental/AbstractIncrementalCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/AbstractIncrementalCache.kt
index 67bde40..6bea207 100644
--- a/build-common/src/org/jetbrains/kotlin/incremental/AbstractIncrementalCache.kt
+++ b/build-common/src/org/jetbrains/kotlin/incremental/AbstractIncrementalCache.kt
@@ -26,6 +26,7 @@
 import org.jetbrains.kotlin.serialization.deserialization.getClassId
 import java.io.File
 import java.util.*
+import kotlin.collections.HashSet
 
 /**
  * Incremental cache common for JVM and JS, ClassName type aware
@@ -203,12 +204,34 @@
     override fun getComplementaryFilesRecursive(dirtyFiles: Collection<File>): Collection<File> {
         val complementaryFiles = HashSet<File>()
         val filesQueue = ArrayDeque(dirtyFiles)
+
+        val processedClasses = HashSet<FqName>()
+        val processedFiles = HashSet<File>()
+
         while (filesQueue.isNotEmpty()) {
             val file = filesQueue.pollFirst()
-            complementaryFilesMap[file].forEach {
-                if (complementaryFiles.add(it)) filesQueue.add(it)
+            if (processedFiles.contains(file)) {
+                continue
             }
+            processedFiles.add(file)
+            complementaryFilesMap[file].forEach {
+                if (complementaryFiles.add(it) && !processedFiles.contains(it)) filesQueue.add(it)
+            }
+            val classes2recompile = sourceToClassesMap.getFqNames(file)
+            classes2recompile.filter { !processedClasses.contains(it) }.forEach {class2recompile ->
+                processedClasses.add(class2recompile)
+                val sealedClasses = findSealedSupertypes(class2recompile, listOf(this))
+                val allSubtypes = sealedClasses.flatMap { withSubtypes(it, listOf(this)) }.also {
+                    // there could be only one sealed class in hierarchy
+                    processedClasses.addAll(it)
+                }
+                val files2add = allSubtypes.mapNotNull { classFqNameToSourceMap[it] }.filter { !processedFiles.contains(it) }
+                filesQueue.addAll(files2add)
+            }
+
+
         }
+        complementaryFiles.addAll(processedFiles)
         complementaryFiles.removeAll(dirtyFiles)
         return complementaryFiles
     }
@@ -223,11 +246,11 @@
             for (actual in actuals) {
                 actualToExpect.getOrPut(actual) { hashSetOf() }.add(expect)
             }
-            complementaryFilesMap[expect] = actuals
+            complementaryFilesMap[expect] = actuals.union(complementaryFilesMap[expect])
         }
 
         for ((actual, expects) in actualToExpect) {
-            complementaryFilesMap[actual] = expects
+            complementaryFilesMap[actual] = expects.union(complementaryFilesMap[actual])
         }
     }
 }
\ No newline at end of file
diff --git a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt
index 4ef5dcf..312e8e7 100644
--- a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt
+++ b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt
@@ -150,8 +150,7 @@
     val dirtyLookupSymbols = HashSet<LookupSymbol>()
     val dirtyClassesFqNames = HashSet<FqName>()
 
-    val sealedParents = HashMap<FqName, MutableSet<FqName>>()
-    val notSealedParents = HashSet<FqName>()
+    val sealedParents = HashSet<FqName>()
 
     for (change in changes()) {
         reporter.debug { "Process $change" }
@@ -178,34 +177,12 @@
 
             fqNames.mapTo(dirtyLookupSymbols) { LookupSymbol(SAM_LOOKUP_NAME.asString(), it.asString()) }
         } else if (change is ChangeInfo.ParentsChanged) {
-            fun FqName.isSealed(): Boolean {
-                if (notSealedParents.contains(this)) return false
-                if (sealedParents.containsKey(this)) return true
-                return isSealed(this, caches).also { sealed ->
-                    if (sealed) {
-                        sealedParents[this] = HashSet()
-                    } else {
-                        notSealedParents.add(this)
-                    }
-                }
-            }
             change.parentsChanged.forEach { parent ->
-                if (parent.isSealed()) {
-                    sealedParents.getOrPut(parent) { HashSet() }.add(change.fqName)
-                }
+                sealedParents.addAll(findSealedSupertypes(parent, caches))
             }
         }
     }
-
-    val forceRecompile = HashSet<FqName>().apply {
-        addAll(sealedParents.keys)
-        //we should recompile all inheritors with parent sealed class: add known subtypes
-        addAll(sealedParents.keys.flatMap { withSubtypes(it, caches) })
-        //we should recompile all inheritors with parent sealed class: add new subtypes
-        addAll(sealedParents.values.flatten())
-    }
-
-    return DirtyData(dirtyLookupSymbols, dirtyClassesFqNames, forceRecompile)
+    return DirtyData(dirtyLookupSymbols, dirtyClassesFqNames, sealedParents)
 }
 
 fun mapLookupSymbolsToFiles(
@@ -252,7 +229,22 @@
 fun isSealed(
     fqName: FqName,
     caches: Iterable<IncrementalCacheCommon>
-): Boolean = caches.any { it.isSealed(fqName) ?: false }
+): Boolean = caches.any { cache -> cache.isSealed(fqName) ?: false }
+
+/**
+ * Finds sealed supertypes of class in same module.
+ * This method should be used for processing freedomOsSealedClasses feature, because
+ * mutually declared list of sealed subclasses could be declared only in the same module.
+ */
+fun findSealedSupertypes(
+    fqName: FqName,
+    caches: Iterable<IncrementalCacheCommon>
+): Collection<FqName> {
+    if (isSealed(fqName, caches)) {
+        return listOf(fqName)
+    }
+    return caches.flatMap { cache -> cache.getSupertypesOf(fqName).filter { cache.isSealed(it) ?: false }}
+}
 
 fun withSubtypes(
     typeFqName: FqName,
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantCheckCastElimination.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantCheckCastElimination.kt
index 9dd001a..766ee31 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantCheckCastElimination.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/RedundantCheckCastElimination.kt
@@ -20,6 +20,7 @@
 import org.jetbrains.kotlin.codegen.optimization.common.FastMethodAnalyzer
 import org.jetbrains.kotlin.codegen.optimization.common.InstructionLivenessAnalyzer
 import org.jetbrains.kotlin.codegen.optimization.common.OptimizationBasicInterpreter
+import org.jetbrains.kotlin.codegen.optimization.common.StrictBasicValue
 import org.jetbrains.kotlin.codegen.optimization.fixStack.top
 import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer
 import org.jetbrains.org.objectweb.asm.Opcodes
@@ -52,13 +53,12 @@
 
         val frames = FastMethodAnalyzer(internalClassName, methodNode, interpreter, pruneExceptionEdges = true).analyze()
         for (i in insns.indices) {
-            val valueType = frames[i]?.top()?.type ?: continue
             val insn = insns[i]
-
             if (insn.opcode == Opcodes.CHECKCAST) {
+                val value = frames[i]?.top() ?: continue
                 val typeInsn = insn as TypeInsnNode
                 val insnType = Type.getObjectType(typeInsn.desc)
-                if (!isTrivialSubtype(insnType, valueType)) continue
+                if (value !== StrictBasicValue.NULL_VALUE && !isTrivialSubtype(insnType, value.type)) continue
 
                 //Keep casts to multiarray types cause dex doesn't recognize ANEWARRAY [Ljava/lang/Object; as Object [][], but Object [] type
                 //It's not clear is it bug in dex or not and maybe best to distinguish such types from MULTINEWARRRAY ones in method analyzer
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java
index 8c52059..dbfa154 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/common/OptimizationBasicInterpreter.java
@@ -19,6 +19,7 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.jetbrains.kotlin.codegen.AsmUtil;
+import org.jetbrains.kotlin.resolve.jvm.AsmTypes;
 import org.jetbrains.org.objectweb.asm.Handle;
 import org.jetbrains.org.objectweb.asm.Opcodes;
 import org.jetbrains.org.objectweb.asm.Type;
@@ -152,13 +153,6 @@
             @NotNull BasicValue value1,
             @NotNull BasicValue value2
     ) throws AnalyzerException {
-        if (insn.getOpcode() == Opcodes.AALOAD) {
-            Type arrayType = value1.getType();
-            if (arrayType != null && arrayType.getSort() == Type.ARRAY) {
-                return new StrictBasicValue(AsmUtil.correctElementType(arrayType));
-            }
-        }
-
         switch (insn.getOpcode()) {
             case IALOAD:
             case BALOAD:
@@ -204,7 +198,13 @@
             case DREM:
                 return StrictBasicValue.DOUBLE_VALUE;
             case AALOAD:
-                return StrictBasicValue.NULL_VALUE;
+                Type arrayType = value1.getType();
+                if (arrayType != null && arrayType.getSort() == Type.ARRAY) {
+                    return new StrictBasicValue(AsmUtil.correctElementType(arrayType));
+                }
+                else {
+                    return StrictBasicValue.NULL_VALUE;
+                }
             case LCMP:
             case FCMPL:
             case FCMPG:
@@ -359,13 +359,11 @@
             return StrictBasicValue.UNINITIALIZED_VALUE;
         }
 
-        // if merge of two references then `lub` is java/lang/Object
-        // arrays also are BasicValues with reference type's
         if (isReference(v) && isReference(w)) {
             if (v == NULL_VALUE) return newValue(w.getType());
             if (w == NULL_VALUE) return newValue(v.getType());
 
-            return StrictBasicValue.REFERENCE_VALUE;
+            return mergeReferenceTypes(w.getType(), v.getType());
         }
 
         // if merge of something can be stored in int var (int, char, boolean, byte, character)
@@ -380,4 +378,34 @@
     private static boolean isReference(@NotNull BasicValue v) {
         return v.getType().getSort() == Type.OBJECT || v.getType().getSort() == Type.ARRAY;
     }
+
+    // Merge reference types, keeping track of array dimensions.
+    // See also org.jetbrains.org.objectweb.asm.Frame.merge.
+    private BasicValue mergeReferenceTypes(@NotNull Type a, @NotNull Type b) {
+        // Find out the minimal array dimension of both types.
+        int arrayDimensions = 0;
+        while (a.getSort() == Type.ARRAY && b.getSort() == Type.ARRAY) {
+            a = AsmUtil.correctElementType(a);
+            b = AsmUtil.correctElementType(b);
+            arrayDimensions++;
+        }
+        // Either of the two types is not an array -> result is j/l/Object.
+        if (arrayDimensions == 0) return REFERENCE_VALUE;
+
+        // Both of the types are arrays, and element type of one or both of them is primitive ->
+        // result is array of j/l/Object with one fewer dimension. E.g.
+        //   merge([I, [Lj/l/Object;) = Lj/l/Object;
+        //   merge([I, [S) = Lj/l/Object;
+        //   merge([[I, [[Lj/l/Object;) = [Lj/l/Object;
+        if (AsmUtil.isPrimitive(a) || AsmUtil.isPrimitive(b)) {
+            arrayDimensions--;
+        }
+
+        // Result is array of j/l/Object with the computed dimension.
+        StringBuilder result = new StringBuilder();
+        while (arrayDimensions-- > 0) result.append("[");
+        result.append(AsmTypes.OBJECT_TYPE.getDescriptor());
+        return newValue(Type.getType(result.toString()));
+    }
+
 }
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt
index f6205c9..80d478e 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt
@@ -409,6 +409,12 @@
     )
     var normalizeAbsolutePath: Boolean by FreezableVar(false)
 
+    @Argument(
+        value = "-Xklib-enable-signature-clash-checks",
+        description = "Enable the checks on uniqueness of signatures"
+    )
+    var enableSignatureClashChecks: Boolean by FreezableVar(true)
+
     @Argument(value = "-Xenable-incremental-compilation", description = "Enable incremental compilation")
     var incrementalCompilation: Boolean? by FreezableVar(null)
 
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
index 3f62145..1bd3e4c 100644
--- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
+++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
@@ -152,6 +152,7 @@
         }
 
         configuration.put(CommonConfigurationKeys.KLIB_NORMALIZE_ABSOLUTE_PATH, arguments.normalizeAbsolutePath)
+        configuration.put(CommonConfigurationKeys.PRODUCE_KLIB_SIGNATURES_CLASH_CHECKS, arguments.enableSignatureClashChecks)
 
         val environmentForJS =
             KotlinCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES)
diff --git a/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt b/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt
index 962197aa..ee476ae 100644
--- a/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt
+++ b/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt
@@ -72,6 +72,10 @@
         CompilerConfigurationKey.create<Boolean>("Normalize absolute paths in klib (replace file separator with '/')")
 
     @JvmField
+    val PRODUCE_KLIB_SIGNATURES_CLASH_CHECKS =
+        CompilerConfigurationKey.create<Boolean>("Turn on the checks on uniqueness of signatures")
+
+    @JvmField
     val INCREMENTAL_COMPILATION =
         CompilerConfigurationKey.create<Boolean>("Enable incremental compilation")
 
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
index cb6d97d..6226776 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
@@ -20358,6 +20358,12 @@
                 }
 
                 @Test
+                @TestMetadata("stringConcatenationWithObject.kt")
+                public void testStringConcatenationWithObject() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt");
+                }
+
+                @Test
                 @TestMetadata("types.kt")
                 public void testTypes() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/modifiers/const/types.kt");
@@ -35539,6 +35545,24 @@
             }
 
             @Test
+            @TestMetadata("unsafeAssignment.kt")
+            public void testUnsafeAssignment() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignmentExtra.kt")
+            public void testUnsafeAssignmentExtra() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignment_noReport.kt")
+            public void testUnsafeAssignment_noReport() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt");
+            }
+
+            @Test
             @TestMetadata("useInferenceInformationFromExtension.kt")
             public void testUseInferenceInformationFromExtension() throws Exception {
                 runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/useInferenceInformationFromExtension.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
index 0fbb189..8b41511 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
@@ -20358,6 +20358,12 @@
                 }
 
                 @Test
+                @TestMetadata("stringConcatenationWithObject.kt")
+                public void testStringConcatenationWithObject() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt");
+                }
+
+                @Test
                 @TestMetadata("types.kt")
                 public void testTypes() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/modifiers/const/types.kt");
@@ -35539,6 +35545,24 @@
             }
 
             @Test
+            @TestMetadata("unsafeAssignment.kt")
+            public void testUnsafeAssignment() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignmentExtra.kt")
+            public void testUnsafeAssignmentExtra() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignment_noReport.kt")
+            public void testUnsafeAssignment_noReport() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt");
+            }
+
+            @Test
             @TestMetadata("useInferenceInformationFromExtension.kt")
             public void testUseInferenceInformationFromExtension() throws Exception {
                 runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/useInferenceInformationFromExtension.kt");
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt
index b22c0ba..d8502ac 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt
@@ -63,8 +63,12 @@
             return checkConstantArguments(expression.compareToCall, session)
         }
         expression is FirStringConcatenationCall || expression is FirEqualityOperatorCall -> {
-            for (exp in (expression as FirCall).arguments)
+            for (exp in (expression as FirCall).arguments) {
+                if (exp is FirResolvedQualifier) {
+                    return ConstantArgumentKind.NOT_CONST
+                }
                 checkConstantArguments(exp, session).let { return it }
+            }
         }
         expression is FirGetClassCall -> {
             var coneType = (expression as? FirCall)?.argument?.typeRef?.coneType
diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
index 92fc3a3..99ef5da 100644
--- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
+++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt
@@ -6,7 +6,6 @@
 package org.jetbrains.kotlin.fir.backend.generators
 
 import org.jetbrains.kotlin.KtFakeSourceElementKind
-import org.jetbrains.kotlin.descriptors.ClassKind
 import org.jetbrains.kotlin.fir.*
 import org.jetbrains.kotlin.fir.backend.*
 import org.jetbrains.kotlin.fir.declarations.*
@@ -41,7 +40,10 @@
 import org.jetbrains.kotlin.ir.symbols.*
 import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
 import org.jetbrains.kotlin.ir.types.*
-import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.ir.util.dump
+import org.jetbrains.kotlin.ir.util.isFunctionTypeOrSubtype
+import org.jetbrains.kotlin.ir.util.isInterface
+import org.jetbrains.kotlin.ir.util.isMethodOfAny
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects
 import org.jetbrains.kotlin.psi2ir.generators.isUnchanging
@@ -254,29 +256,6 @@
         return null
     }
 
-    // Note: I don't like using super qualifier symbols to determine field receivers in bytecode properly.
-    // Would be much better to use super qualifiers only in case when it's used explicitly.
-    // However, FE 1.0 does it, and currently we have no better way to provide these receivers.
-    // See KT-49507 and KT-48954 as good examples for cases we try to handle here
-    private fun FirExpression.superQualifierSymbolForField(fieldSymbol: IrFieldSymbol): IrClassSymbol? {
-        if (this !is FirQualifiedAccess) return null
-        if (calleeReference is FirSuperReference) return superQualifierSymbol()
-        if (fieldSymbol.owner.correspondingPropertySymbol != null) return null
-        val originalContainingClass = fieldSymbol.owner.parentClassOrNull ?: return null
-        val ownContainingClass = typeRef.toIrType().classifierOrNull?.owner as? IrClass ?: return null
-        // For static field, we shouldn't unwrap fake override in any case
-        if (fieldSymbol.owner.isStatic) return ownContainingClass.symbol
-        // Find first Java super class to avoid possible visibility exposure & separate compilation problems
-        var superQualifierClass = ownContainingClass
-        while (!superQualifierClass.isFromJava() && superQualifierClass !== originalContainingClass) {
-            superQualifierClass = superQualifierClass.superTypes.find {
-                val kind = it.getClass()?.kind
-                kind == ClassKind.CLASS || kind == ClassKind.ENUM_CLASS
-            }?.getClass() ?: break
-        }
-        return superQualifierClass.symbol
-    }
-
     private fun FirExpression.superQualifierSymbol(): IrClassSymbol? {
         if (this !is FirQualifiedAccess) {
             return null
@@ -490,7 +469,7 @@
                         IrGetFieldImpl(
                             startOffset, endOffset, symbol, type,
                             origin = IrStatementOrigin.GET_PROPERTY.takeIf { calleeReference !is FirDelegateFieldReference },
-                            superQualifierSymbol = dispatchReceiver.superQualifierSymbolForField(symbol)
+                            superQualifierSymbol = dispatchReceiver.superQualifierSymbol()
                         )
                     }
                     is IrValueSymbol -> {
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 a501d47..d2110ef 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
@@ -4602,6 +4602,24 @@
         }
 
         @Test
+        @TestMetadata("arrayDowncastingContravariant.kt")
+        public void testArrayDowncastingContravariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDowncatingInvariant.kt")
+        public void testArrayDowncatingInvariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDownctingCovariant.kt")
+        public void testArrayDownctingCovariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt");
+        }
+
+        @Test
         @TestMetadata("as.kt")
         public void testAs() throws Exception {
             runTest("compiler/testData/codegen/box/casts/as.kt");
@@ -4728,6 +4746,36 @@
         }
 
         @Test
+        @TestMetadata("kt53146.kt")
+        public void testKt53146() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53146.kt");
+        }
+
+        @Test
+        @TestMetadata("kt53677.kt")
+        public void testKt53677() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53677.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54581.kt")
+        public void testKt54581() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54581.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
+        @Test
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
@@ -14805,6 +14853,12 @@
             }
 
             @Test
+            @TestMetadata("kt54463_platformType.kt")
+            public void testKt54463_platformType() throws Exception {
+                runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt");
+            }
+
+            @Test
             @TestMetadata("memberExtensionPropertyAndImportFromObject.kt")
             public void testMemberExtensionPropertyAndImportFromObject() throws Exception {
                 runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.kt");
@@ -16738,6 +16792,18 @@
         }
 
         @Test
+        @TestMetadata("stringConcatenationWithObject.kt")
+        public void testStringConcatenationWithObject() throws Exception {
+            runTest("compiler/testData/codegen/box/evaluate/stringConcatenationWithObject.kt");
+        }
+
+        @Test
+        @TestMetadata("thisPlusString.kt")
+        public void testThisPlusString() throws Exception {
+            runTest("compiler/testData/codegen/box/evaluate/thisPlusString.kt");
+        }
+
+        @Test
         @TestMetadata("unaryMinus.kt")
         public void testUnaryMinus() throws Exception {
             runTest("compiler/testData/codegen/box/evaluate/unaryMinus.kt");
@@ -17482,6 +17548,12 @@
         }
 
         @Test
+        @TestMetadata("javaFieldAndKotlinPrivateProperty.kt")
+        public void testJavaFieldAndKotlinPrivateProperty() throws Exception {
+            runTest("compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinPrivateProperty.kt");
+        }
+
+        @Test
         @TestMetadata("javaFieldAndKotlinProperty.kt")
         public void testJavaFieldAndKotlinProperty() throws Exception {
             runTest("compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt");
@@ -45168,6 +45240,12 @@
         }
 
         @Test
+        @TestMetadata("kt54600.kt")
+        public void testKt54600() throws Exception {
+            runTest("compiler/testData/codegen/box/sam/kt54600.kt");
+        }
+
+        @Test
         @TestMetadata("nonInlinedSamWrapper.kt")
         public void testNonInlinedSamWrapper() throws Exception {
             runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
index 79da42d..1145b8c 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
@@ -1087,6 +1087,12 @@
         }
 
         @Test
+        @TestMetadata("kt53465.kt")
+        public void testKt53465() throws Exception {
+            runTest("compiler/testData/codegen/bytecodeText/checkcast/kt53465.kt");
+        }
+
+        @Test
         @TestMetadata("noCheckcastOnDelegatingDefaultImplsCall.kt")
         public void testNoCheckcastOnDelegatingDefaultImplsCall() throws Exception {
             runTest("compiler/testData/codegen/bytecodeText/checkcast/noCheckcastOnDelegatingDefaultImplsCall.kt");
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java
index b87a414..2b52d4f 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java
@@ -135,5 +135,11 @@
         public void testUnsignedConst() throws Exception {
             runTest("compiler/testData/ir/loweredIr/interpreter/unsignedConst.kt");
         }
+
+        @Test
+        @TestMetadata("useCorrectToString.kt")
+        public void testUseCorrectToString() throws Exception {
+            runTest("compiler/testData/ir/loweredIr/interpreter/useCorrectToString.kt");
+        }
     }
 }
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt
index c947604..9643bb0 100644
--- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt
+++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt
@@ -69,7 +69,8 @@
     UnitConversionCallChecker, FunInterfaceConstructorReferenceChecker, NullableExtensionOperatorWithSafeCallChecker,
     ReferencingToUnderscoreNamedParameterOfCatchBlockChecker, VarargWrongExecutionOrderChecker, SelfCallInNestedObjectConstructorChecker,
     NewSchemeOfIntegerOperatorResolutionChecker, EnumEntryVsCompanionPriorityCallChecker, CompanionInParenthesesLHSCallChecker,
-    ResolutionToPrivateConstructorOfSealedClassChecker, EqualityCallChecker, UnsupportedUntilOperatorChecker
+    ResolutionToPrivateConstructorOfSealedClassChecker, EqualityCallChecker, UnsupportedUntilOperatorChecker,
+    BuilderInferenceAssignmentChecker,
 )
 private val DEFAULT_TYPE_CHECKERS = emptyList<AdditionalTypeChecker>()
 private val DEFAULT_CLASSIFIER_USAGE_CHECKERS = listOf(
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/BuilderInferenceAssignmentChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/BuilderInferenceAssignmentChecker.kt
new file mode 100644
index 0000000..00fa1f3
--- /dev/null
+++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/BuilderInferenceAssignmentChecker.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.resolve.calls.checkers
+
+import com.intellij.psi.PsiElement
+import org.jetbrains.kotlin.config.LanguageFeature
+import org.jetbrains.kotlin.descriptors.PropertyDescriptor
+import org.jetbrains.kotlin.diagnostics.Errors
+import org.jetbrains.kotlin.lexer.KtTokens
+import org.jetbrains.kotlin.psi.KtBinaryExpression
+import org.jetbrains.kotlin.psi.KtNameReferenceExpression
+import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
+import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
+import org.jetbrains.kotlin.resolve.calls.util.getType
+import org.jetbrains.kotlin.types.StubTypeForBuilderInference
+import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
+import org.jetbrains.kotlin.types.expressions.BasicExpressionTypingVisitor
+import org.jetbrains.kotlin.types.isError
+
+object BuilderInferenceAssignmentChecker : CallChecker {
+    override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
+        val resultingDescriptor = resolvedCall.resultingDescriptor
+        if (resultingDescriptor !is PropertyDescriptor) return
+        if (context.languageVersionSettings.supportsFeature(LanguageFeature.NoBuilderInferenceWithoutAnnotationRestriction)) return
+        if (resolvedCall.candidateDescriptor.returnType !is StubTypeForBuilderInference) return
+        val callElement = resolvedCall.call.callElement
+        if (callElement !is KtNameReferenceExpression) return
+        val binaryExpression = callElement.getParentOfType<KtBinaryExpression>(strict = true) ?: return
+        if (binaryExpression.operationToken != KtTokens.EQ) return
+        if (!BasicExpressionTypingVisitor.isLValue(callElement, binaryExpression)) return
+
+        val leftType = resultingDescriptor.returnType?.takeIf { !it.isError } ?: return
+        val right = binaryExpression.right ?: return
+        val rightType = right.getType(context.trace.bindingContext) ?: return
+
+        if (!KotlinTypeChecker.DEFAULT.isSubtypeOf(rightType, leftType)) {
+            val dfi = context.dataFlowInfo
+            val dfvFactory = context.dataFlowValueFactory
+            val stableTypesFromDataFlow = dfi.getStableTypes(
+                dfvFactory.createDataFlowValue(right, rightType, context.trace.bindingContext, context.moduleDescriptor),
+                context.languageVersionSettings
+            )
+            if (stableTypesFromDataFlow.none {
+                    KotlinTypeChecker.DEFAULT.isSubtypeOf(it, leftType)
+                }
+            ) {
+                context.trace.report(Errors.TYPE_MISMATCH.on(right, leftType, rightType))
+            }
+        }
+    }
+}
diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt
index be8629d..2fa16e6 100644
--- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt
+++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt
@@ -142,5 +142,6 @@
         if (!alreadyCompiledSources.containsAll(forceToRecompileFiles)) {
             addAll(forceToRecompileFiles)
         }
+        removeAll { !it.exists() }
     }
 }
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java
index dcb3f9d..8859012 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java
@@ -64,7 +64,7 @@
         }
 
         public void testAllFilesPresentInPureKotlin() throws Exception {
-            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), null, TargetBackend.JVM_IR, false);
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), Pattern.compile("^.*Expect.*"), TargetBackend.JVM_IR, false);
         }
 
         @TestMetadata("annotations")
@@ -597,6 +597,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -612,9 +617,9 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java
index 1512d60..ea627c8 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java
@@ -64,7 +64,7 @@
         }
 
         public void testAllFilesPresentInPureKotlin() throws Exception {
-            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), null, TargetBackend.JVM_IR, false);
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), Pattern.compile("^.*Expect.*"), TargetBackend.JVM_IR, false);
         }
 
         @TestMetadata("annotations")
@@ -597,6 +597,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -612,9 +617,9 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java
index 31829bc..3367d29 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java
@@ -64,7 +64,7 @@
         }
 
         public void testAllFilesPresentInPureKotlin() throws Exception {
-            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), null, TargetBackend.JVM_IR, false);
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps/jps-plugin/testData/incremental/pureKotlin"), Pattern.compile("^([^\\.]+)$"), Pattern.compile("^.*Expect.*"), TargetBackend.JVM_IR, false);
         }
 
         @TestMetadata("annotations")
@@ -597,6 +597,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -612,9 +617,9 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java
index e296921..8496730 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java
@@ -596,6 +596,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -611,9 +616,14 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
+        }
+
+        @TestMetadata("sealedClassesWithExpectActual")
+        public void testSealedClassesWithExpectActual() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java
index e33cb84..415c6ff 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java
@@ -596,6 +596,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -611,9 +616,14 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
+        }
+
+        @TestMetadata("sealedClassesWithExpectActual")
+        public void testSealedClassesWithExpectActual() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java
index c639173..2264e4d 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java
@@ -597,6 +597,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -612,9 +617,14 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
+        }
+
+        @TestMetadata("sealedClassesWithExpectActual")
+        public void testSealedClassesWithExpectActual() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java
index aa71158..276e237 100644
--- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java
+++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java
@@ -597,6 +597,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -612,9 +617,14 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
+        }
+
+        @TestMetadata("sealedClassesWithExpectActual")
+        public void testSealedClassesWithExpectActual() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
index dce0a53..edd2d97 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt
@@ -8,13 +8,14 @@
 import org.jetbrains.kotlin.backend.common.BodyLoweringPass
 import org.jetbrains.kotlin.backend.common.CommonBackendContext
 import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString
-import org.jetbrains.kotlin.backend.common.ir.*
 import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter
 import org.jetbrains.kotlin.backend.common.runOnFilePostfix
 import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
 import org.jetbrains.kotlin.descriptors.DescriptorVisibility
 import org.jetbrains.kotlin.descriptors.Modality
-import org.jetbrains.kotlin.ir.*
+import org.jetbrains.kotlin.ir.IrElement
+import org.jetbrains.kotlin.ir.IrStatement
+import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
 import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
 import org.jetbrains.kotlin.ir.builders.declarations.buildFun
 import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
@@ -25,7 +26,9 @@
 import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
 import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
 import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
-import org.jetbrains.kotlin.ir.types.*
+import org.jetbrains.kotlin.ir.transformStatement
+import org.jetbrains.kotlin.ir.types.IrType
+import org.jetbrains.kotlin.ir.types.defaultType
 import org.jetbrains.kotlin.ir.util.*
 import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
 import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
@@ -71,6 +74,7 @@
     val localNameSanitizer: (String) -> String = { it },
     val visibilityPolicy: VisibilityPolicy = VisibilityPolicy.DEFAULT,
     val suggestUniqueNames: Boolean = true, // When `true` appends a `$#index` suffix to lifted declaration names
+    val compatibilityModeForInlinedLocalDelegatedPropertyAccessors: Boolean = false, // Keep old names because of KT-49030
     val forceFieldsForInlineCaptures: Boolean = false, // See `LocalClassContext`
     private val postLocalDeclarationLoweringCallback: ((IntermediateDatastructures) -> Unit)? = null
 ) :
@@ -589,8 +593,16 @@
             val declarationName = localNameSanitizer(declaration.name.asString())
             localFunctions[declaration]?.let {
                 val baseName = if (declaration.name.isSpecial) "lambda" else declarationName
-                if (it.index >= 0)
-                    return if (suggestUniqueNames) "$baseName\$${it.index}" else baseName
+                if (it.index >= 0) {
+                    if (!suggestUniqueNames) return baseName
+
+                    val separator = if (
+                        compatibilityModeForInlinedLocalDelegatedPropertyAccessors &&
+                        declaration.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR &&
+                        container is IrFunction && container.isInline
+                    ) "-" else "$"
+                    return "$baseName$separator${it.index}"
+                }
             }
 
             return declarationName
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
index 8356fed..79bffff 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
@@ -138,6 +138,7 @@
                 private fun scopedVisibility(inInlineFunctionScope: Boolean): DescriptorVisibility =
                     if (inInlineFunctionScope) DescriptorVisibilities.PUBLIC else JavaDescriptorVisibilities.PACKAGE_VISIBILITY
             },
+            compatibilityModeForInlinedLocalDelegatedPropertyAccessors = true,
             forceFieldsForInlineCaptures = true,
             postLocalDeclarationLoweringCallback = context.localDeclarationsLoweringData?.let {
                 { data ->
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SingletonOrConstantDelegationLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SingletonOrConstantDelegationLowering.kt
index 907f198..8265b9b 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SingletonOrConstantDelegationLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SingletonOrConstantDelegationLowering.kt
@@ -16,10 +16,7 @@
 import org.jetbrains.kotlin.ir.expressions.*
 import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
 import org.jetbrains.kotlin.ir.util.*
-import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
 import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
-import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.util.OperatorNameConventions
 
 internal val singletonOrConstantDelegationPhase = makeIrFilePhase(
     ::SingletonOrConstantDelegationLowering,
@@ -47,22 +44,14 @@
         if (!isDelegated || isFakeOverride || backingField == null) return null
         val delegate = backingField?.initializer?.expression?.takeIf { it.isInlineable() } ?: return null
         val originalThis = parentAsClass.thisReceiver
-        val receiverMapper = object : IrElementTransformer<Pair<Name, IrExpression>> {
-            override fun visitCall(expression: IrCall, data: Pair<Name, IrExpression>): IrExpression {
-                val (name, newReceiver) = data
-                if (expression.symbol.owner.name == name) {
-                    if ((expression.dispatchReceiver as? IrGetField)?.symbol == backingField?.symbol) {
-                        expression.dispatchReceiver = newReceiver
-                    } else if ((expression.extensionReceiver as? IrGetField)?.symbol == backingField?.symbol) {
-                        expression.extensionReceiver = newReceiver
-                    }
-                }
-                return expression
-            }
+
+        class DelegateFieldAccessTransformer(val newReceiver: IrExpression) : IrElementTransformerVoid() {
+            override fun visitGetField(expression: IrGetField): IrExpression =
+                if (expression.symbol == backingField?.symbol) newReceiver else super.visitGetField(expression)
         }
 
-        getter?.transform(receiverMapper,OperatorNameConventions.GET_VALUE to delegate.remapReceiver(originalThis, getter?.dispatchReceiverParameter))
-        setter?.transform(receiverMapper,OperatorNameConventions.SET_VALUE to delegate.remapReceiver(originalThis, setter?.dispatchReceiverParameter))
+        getter?.transform(DelegateFieldAccessTransformer(delegate.remapReceiver(originalThis, getter?.dispatchReceiverParameter)), null)
+        setter?.transform(DelegateFieldAccessTransformer(delegate.remapReceiver(originalThis, setter?.dispatchReceiverParameter)), null)
 
         backingField = null
 
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
index 8aeb64d..e743176 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt
@@ -19,6 +19,7 @@
 import org.jetbrains.kotlin.backend.jvm.ir.*
 import org.jetbrains.kotlin.backend.jvm.unboxInlineClass
 import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
+import org.jetbrains.kotlin.ir.IrBuiltIns
 import org.jetbrains.kotlin.ir.IrElement
 import org.jetbrains.kotlin.ir.IrStatement
 import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
@@ -36,6 +37,9 @@
 import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
 import org.jetbrains.kotlin.ir.visitors.acceptVoid
 import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.types.Variance
+import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.getArgument
+import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.isTypeVariableType
 import org.jetbrains.kotlin.utils.addToStdlib.safeAs
 import org.jetbrains.org.objectweb.asm.Handle
 import org.jetbrains.org.objectweb.asm.Opcodes
@@ -88,6 +92,8 @@
                 builder.irAs(argument, type)
             argument.type.isInlineClassType() && argument.type.isSubtypeOfClass(type.erasedUpperBound.symbol) ->
                 argument
+            isCompatibleArrayType(argument.type, type) ->
+                argument
             type.isNullable() || argument.isDefinitelyNotNull() ->
                 builder.irAs(argument, type)
             else -> {
@@ -121,6 +127,22 @@
             }
         }
 
+    private fun isCompatibleArrayType(actualType: IrType, expectedType: IrType): Boolean {
+        var actual = actualType
+        var expected = expectedType
+        while ((actual.isArray() || actual.isNullableArray()) && (expected.isArray() || expected.isNullableArray())) {
+            actual = actual.getArrayElementLowerType()
+            expected = expected.getArrayElementLowerType()
+        }
+        if (actual == actualType || expected == expectedType) return false
+        return actual.isSubtypeOfClass(expected.erasedUpperBound.symbol)
+    }
+
+    private fun IrType.getArrayElementLowerType(): IrType =
+        if (isBoxedArray && this is IrSimpleType && (arguments.singleOrNull() as? IrTypeProjection)?.variance == Variance.IN_VARIANCE)
+            backendContext.irBuiltIns.anyNType
+        else getArrayElementType(backendContext.irBuiltIns)
+
     // TODO extract null check elimination on IR somewhere?
     private fun IrExpression.isDefinitelyNotNull(): Boolean =
         when (this) {
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt
index 1e6a0ef..0015734 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/EvaluationMode.kt
@@ -103,7 +103,7 @@
     abstract fun canEvaluateEnumValue(enumEntry: IrGetEnumValue, context: IrCall? = null): Boolean
     abstract fun canEvaluateReference(reference: IrCallableReference<*>, context: IrCall? = null): Boolean
 
-    fun canEvaluateBody(function: IrFunction): Boolean {
+    fun mustCheckBodyOf(function: IrFunction): Boolean {
         if (function is IrSimpleFunction && function.correspondingPropertySymbol != null) return true
         return (mustCheckBody || function.isLocal) && !function.isContract() && !function.isMarkedAsEvaluateIntrinsic()
     }
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
index b04e989..8142796 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt
@@ -54,11 +54,14 @@
     private fun visitConstructor(expression: IrFunctionAccessExpression): Boolean {
         return when {
             !visitValueParameters(expression, null) || !mode.canEvaluateFunction(expression.symbol.owner, contextExpression) -> false
-            mode.canEvaluateBody(expression.symbol.owner) -> expression.symbol.owner.body?.accept(this, null) != false
-            else -> true
+            else -> expression.symbol.owner.visitBodyIfNeeded()
         }
     }
 
+    private fun IrFunction.visitBodyIfNeeded(): Boolean {
+        return this.asVisited { !mode.mustCheckBodyOf(this) || (this.body?.accept(this@IrCompileTimeChecker, null) ?: true) }
+    }
+
     override fun visitCall(expression: IrCall, data: Nothing?): Boolean {
         val owner = expression.symbol.owner
         if (!mode.canEvaluateFunction(owner, expression)) return false
@@ -67,7 +70,7 @@
             val dispatchReceiverComputable = expression.dispatchReceiver?.accept(this, null) ?: true
             val extensionReceiverComputable = expression.extensionReceiver?.accept(this, null) ?: true
             if (!visitValueParameters(expression, null)) return@saveContext false
-            val bodyComputable = owner.asVisited { if (mode.canEvaluateBody(owner)) owner.body?.accept(this, null) ?: true else true }
+            val bodyComputable = owner.visitBodyIfNeeded()
             return@saveContext dispatchReceiverComputable && extensionReceiverComputable && bodyComputable
         }
     }
@@ -126,7 +129,19 @@
     }
 
     override fun visitStringConcatenation(expression: IrStringConcatenation, data: Nothing?): Boolean {
-        return expression.arguments.all { it.accept(this, data) }
+        return expression.arguments.all { arg ->
+            when (arg) {
+                is IrGetObjectValue -> {
+                    val toString = arg.symbol.owner.declarations
+                        .filterIsInstance<IrSimpleFunction>()
+                        .single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
+
+                    mode.canEvaluateFunction(toString, null) && toString.visitBodyIfNeeded()
+                }
+
+                else -> arg.accept(this, data)
+            }
+        }
     }
 
     override fun visitGetObjectValue(expression: IrGetObjectValue, data: Nothing?): Boolean {
@@ -218,7 +233,7 @@
 
         if (!mode.canEvaluateFunction(owner, contextExpression)) return false
 
-        val bodyComputable = owner.asVisited { if (mode.canEvaluateBody(owner)) owner.body?.accept(this, null) ?: true else true }
+        val bodyComputable = owner.visitBodyIfNeeded()
         return dispatchReceiverComputable && extensionReceiverComputable && bodyComputable
     }
 
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrConstTransformer.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrConstTransformer.kt
index b771947..b529f9c 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrConstTransformer.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrConstTransformer.kt
@@ -55,8 +55,10 @@
         val result = try {
             interpreter.interpret(this, irFile)
         } catch (e: Throwable) {
-            if (!suppressExceptions) throw AssertionError("Error occurred while optimizing an expression:\n${this.dump()}", e)
-            return IrErrorExpressionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, this.type, e.message.toString()).warningIfError(this)
+            if (suppressExceptions) {
+                return this
+            }
+            throw AssertionError("Error occurred while optimizing an expression:\n${this.dump()}", e)
         }
 
         return if (failAsError) result.reportIfError(this) else result.warningIfError(this)
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/CommonProxy.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/CommonProxy.kt
index 83b3920..6298599 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/CommonProxy.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/proxy/CommonProxy.kt
@@ -77,7 +77,7 @@
                 else -> arrayOf(extendFrom, Proxy::class.java)
             }
 
-            return java.lang.reflect.Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), interfaces)
+            return java.lang.reflect.Proxy.newProxyInstance(this::class.java.classLoader, interfaces)
             { /*proxy*/_, method, args ->
                 when {
                     method.declaringClass == Proxy::class.java && method.name == "getState" -> commonProxy.state
diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt
index 9dafb97..f258d13 100644
--- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt
+++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/state/Common.kt
@@ -52,7 +52,7 @@
         return irClass.declarations
             .filterIsInstance<IrSimpleFunction>()
             .single {
-                it.name == Name.identifier("equals") && it.dispatchReceiverParameter != null
+                it.name == Name.identifier("equals") && it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null
                         && it.valueParameters.size == 1 && it.valueParameters[0].type.isNullableAny()
             }
             .let { it.resolveFakeOverride() as IrSimpleFunction }
@@ -60,13 +60,13 @@
 
     fun getHashCodeFunction(): IrSimpleFunction {
         return irClass.declarations.filterIsInstance<IrSimpleFunction>()
-            .single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() }
+            .single { it.name.asString() == "hashCode" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
             .let { it.resolveFakeOverride() as IrSimpleFunction }
     }
 
     fun getToStringFunction(): IrSimpleFunction {
         return irClass.declarations.filterIsInstance<IrSimpleFunction>()
-            .single { it.name.asString() == "toString" && it.valueParameters.isEmpty() }
+            .single { it.name.asString() == "toString" && it.valueParameters.isEmpty() && it.extensionReceiverParameter == null }
             .let { it.resolveFakeOverride() as IrSimpleFunction }
     }
 
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt
index 49c7598..bb2353d 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/CallGenerator.kt
@@ -19,7 +19,6 @@
 import org.jetbrains.kotlin.descriptors.*
 import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
 import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
-import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
 import org.jetbrains.kotlin.ir.declarations.IrVariable
 import org.jetbrains.kotlin.ir.expressions.*
 import org.jetbrains.kotlin.ir.expressions.impl.*
@@ -37,7 +36,6 @@
 import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
 import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
 import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
-import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
 import org.jetbrains.kotlin.types.KotlinType
 
 class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
@@ -195,21 +193,6 @@
         }
     }
 
-    private fun PropertyDescriptor.containingClassForField(): ClassDescriptor? {
-        val ownContainingClass = containingDeclaration as? ClassDescriptor ?: return null
-        // For static field, we shouldn't unwrap fake override in any case
-        if (dispatchReceiverParameter == null) return ownContainingClass
-        val originalContainingClass = resolveFakeOverride().containingDeclaration as? ClassDescriptor ?: return ownContainingClass
-        // Find first Java super class to avoid possible visibility exposure & separate compilation problems
-        var containingClassForField = ownContainingClass
-        while (context.extensions.computeExternalDeclarationOrigin(containingClassForField) != IR_EXTERNAL_JAVA_DECLARATION_STUB &&
-            containingClassForField !== originalContainingClass
-        ) {
-            containingClassForField = containingClassForField.getSuperClassNotAny() ?: break
-        }
-        return containingClassForField
-    }
-
     private fun generatePropertyGetterCall(
         descriptor: PropertyDescriptor,
         startOffset: Int,
@@ -220,11 +203,10 @@
         val irType = descriptor.type.toIrType()
 
         return if (getMethodDescriptor == null) {
-            val superQualifierSymbol =
-                (call.superQualifier ?: descriptor.containingClassForField())?.let {
-                    if (it is ScriptDescriptor) null // otherwise it creates a reference to script as class; TODO: check if correct
-                    else context.symbolTable.referenceClass(it)
-                }
+            val superQualifierSymbol = (call.superQualifier ?: descriptor.containingDeclaration as? ClassDescriptor)?.let {
+                if (it is ScriptDescriptor) null // otherwise it creates a reference to script as class; TODO: check if correct
+                else context.symbolTable.referenceClass(it)
+            }
             val fieldSymbol =
                 context.symbolTable.referenceField(context.extensions.remapDebuggerFieldPropertyDescriptor(descriptor.resolveFakeOverride().original))
             call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue, _ ->
diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/samConversions.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/samConversions.kt
index 3bb6910..657b534 100644
--- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/samConversions.kt
+++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/samConversions.kt
@@ -13,9 +13,7 @@
 import org.jetbrains.kotlin.descriptors.synthetic.FunctionInterfaceConstructorDescriptor
 import org.jetbrains.kotlin.resolve.sam.getFunctionTypeForAbstractMethod
 import org.jetbrains.kotlin.resolve.sam.getSingleAbstractMethodOrNull
-import org.jetbrains.kotlin.types.KotlinType
-import org.jetbrains.kotlin.types.TypeSubstitutor
-import org.jetbrains.kotlin.types.Variance
+import org.jetbrains.kotlin.types.*
 
 fun GeneratorExtensions.SamConversion.isSamType(kotlinType: KotlinType): Boolean {
     val descriptor = kotlinType.constructor.declarationDescriptor
@@ -35,12 +33,23 @@
             null
     }
 
-fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType {
+fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType =
+    when (val unwrapped = this.unwrap()) {
+        is SimpleType -> unwrapped.getSubstitutedFunctionTypeForSamType()
+        is FlexibleType -> KotlinTypeFactory.flexibleType(
+            unwrapped.lowerBound.getSubstitutedFunctionTypeForSamType(),
+            unwrapped.upperBound.getSubstitutedFunctionTypeForSamType(),
+        )
+    }
+
+private fun SimpleType.getSubstitutedFunctionTypeForSamType(): SimpleType {
     val descriptor = constructor.declarationDescriptor as? ClassDescriptor
         ?: throw AssertionError("SAM should be represented by a class: $this")
     val singleAbstractMethod = getSingleAbstractMethodOrNull(descriptor)
         ?: throw AssertionError("$descriptor should have a single abstract method")
-    val unsubstitutedFunctionType = getFunctionTypeForAbstractMethod(singleAbstractMethod, false)
-    return TypeSubstitutor.create(this).substitute(unsubstitutedFunctionType, Variance.INVARIANT)
+    val unsubstitutedFunctionType = getFunctionTypeForAbstractMethod(singleAbstractMethod, false).makeNullableAsSpecified(isMarkedNullable)
+    val result = TypeSubstitutor.create(this).substitute(unsubstitutedFunctionType, Variance.INVARIANT)
         ?: throw AssertionError("Failed to substitute function type $unsubstitutedFunctionType corresponding to $this")
+    return result as? SimpleType
+        ?: throw AssertionError("SAM type substitution result is not a simple type: $this -> $result")
 }
diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
index a0a671a..395ff75 100644
--- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
+++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt
@@ -741,6 +741,7 @@
     val compatibilityMode = CompatibilityMode(abiVersion)
     val sourceBaseDirs = configuration[CommonConfigurationKeys.KLIB_RELATIVE_PATH_BASES] ?: emptyList()
     val absolutePathNormalization = configuration[CommonConfigurationKeys.KLIB_NORMALIZE_ABSOLUTE_PATH] ?: false
+    val signatureClashChecks = configuration[CommonConfigurationKeys.PRODUCE_KLIB_SIGNATURES_CLASH_CHECKS] ?: false
 
     val serializedIr =
         JsIrModuleSerializer(
@@ -750,7 +751,8 @@
             compatibilityMode,
             skipExpects = !configuration.expectActualLinker,
             normalizeAbsolutePaths = absolutePathNormalization,
-            sourceBaseDirs = sourceBaseDirs
+            sourceBaseDirs = sourceBaseDirs,
+            signatureClashChecks
         ).serializedIrModule(moduleFragment)
 
     val moduleDescriptor = moduleFragment.descriptor
diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt
index de08c95..64b2088 100644
--- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt
+++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/ir/JsIrModuleSerializer.kt
@@ -7,6 +7,7 @@
 
 import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
 import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
+import org.jetbrains.kotlin.backend.common.serialization.IdSignatureClashTracker
 import org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
 import org.jetbrains.kotlin.ir.IrBuiltIns
@@ -21,10 +22,14 @@
     compatibilityMode: CompatibilityMode,
     val skipExpects: Boolean,
     normalizeAbsolutePaths: Boolean,
-    sourceBaseDirs: Collection<String>
+    sourceBaseDirs: Collection<String>,
+    shouldCheckSignaturesOnUniqueness: Boolean = true
 ) : IrModuleSerializer<JsIrFileSerializer>(messageLogger, compatibilityMode, normalizeAbsolutePaths, sourceBaseDirs) {
 
-    private val globalDeclarationTable = JsGlobalDeclarationTable(irBuiltIns)
+    private val globalDeclarationTable = JsGlobalDeclarationTable(
+        irBuiltIns,
+        if (shouldCheckSignaturesOnUniqueness) JsUniqIdClashTracker() else IdSignatureClashTracker.DEFAULT_TRACKER
+    )
 
     override fun createSerializerForFile(file: IrFile): JsIrFileSerializer =
         JsIrFileSerializer(
diff --git a/compiler/testData/cli/js/jsExtraHelp.out b/compiler/testData/cli/js/jsExtraHelp.out
index 7815c84..bc638bd 100644
--- a/compiler/testData/cli/js/jsExtraHelp.out
+++ b/compiler/testData/cli/js/jsExtraHelp.out
@@ -66,6 +66,8 @@
   -Xeffect-system            Enable experimental language feature: effect system
   -Xenable-builder-inference Use the builder inference by default, for all calls with lambdas which can't be resolved without it.
                              The corresponding calls' declarations may not be marked with @BuilderInference.
+  -Xklib-enable-signature-clash-checks
+                             Enable the checks on uniqueness of signatures
   -Xexpect-actual-linker     Enable experimental expect/actual linker
   -Xexplicit-api={strict|warning|disable}
                              Force compiler to report errors on all public API declarations without explicit visibility or return type.
diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out
index c1a78bb..2e0b8ae 100644
--- a/compiler/testData/cli/jvm/extraHelp.out
+++ b/compiler/testData/cli/jvm/extraHelp.out
@@ -173,6 +173,8 @@
   -Xeffect-system            Enable experimental language feature: effect system
   -Xenable-builder-inference Use the builder inference by default, for all calls with lambdas which can't be resolved without it.
                              The corresponding calls' declarations may not be marked with @BuilderInference.
+  -Xklib-enable-signature-clash-checks
+                             Enable the checks on uniqueness of signatures
   -Xexpect-actual-linker     Enable experimental expect/actual linker
   -Xexplicit-api={strict|warning|disable}
                              Force compiler to report errors on all public API declarations without explicit visibility or return type.
diff --git a/compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt b/compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt
new file mode 100644
index 0000000..162cec4
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt
@@ -0,0 +1,10 @@
+// TARGET_BACKEND: JVM
+
+inline fun <reified T : CharSequence> f(x: Array<in String>) = x as Array<T>
+
+fun box(): String = try {
+    f<String>(arrayOf<Any>(42))
+    "Fail"
+} catch (e: Exception) {
+    "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt b/compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt
new file mode 100644
index 0000000..2964c1a
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt
@@ -0,0 +1,10 @@
+// TARGET_BACKEND: JVM
+
+inline fun <reified T : CharSequence> f(x: Array<Any>) = x as Array<T>
+
+fun box(): String = try {
+    f<String>(arrayOf<Any>(42))
+    "Fail"
+} catch (e: Exception) {
+    "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt b/compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt
new file mode 100644
index 0000000..5acb0ad
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt
@@ -0,0 +1,10 @@
+// TARGET_BACKEND: JVM
+
+inline fun <reified T : CharSequence> f(x: Array<out Any>) = x as Array<T>
+
+fun box(): String = try {
+    f<String>(arrayOf<Int>(42))
+    "Fail"
+} catch (e: Exception) {
+    "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/casts/kt48927_privateMethodOnDerivedCastToBase.kt b/compiler/testData/codegen/box/casts/kt48927_privateMethodOnDerivedCastToBase.kt
index 7a9a73e..04fab3a 100644
--- a/compiler/testData/codegen/box/casts/kt48927_privateMethodOnDerivedCastToBase.kt
+++ b/compiler/testData/codegen/box/casts/kt48927_privateMethodOnDerivedCastToBase.kt
@@ -2,8 +2,13 @@
     private fun test(): String = "OK"
 
     fun test(d: Derived): String = (d as Base).test()
+
+    fun test(d: Array<out Derived>) = (d as Array<out Base>)[0].test()
 }
 
 class Derived : Base()
 
-fun box(): String = Derived().test(Derived())
+fun box(): String {
+    Derived().test(arrayOf(Derived()))
+    return Derived().test(Derived())
+}
diff --git a/compiler/testData/codegen/box/casts/kt53146.kt b/compiler/testData/codegen/box/casts/kt53146.kt
new file mode 100644
index 0000000..13d90fc
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/kt53146.kt
@@ -0,0 +1,18 @@
+// TARGET_BACKEND: JVM_IR
+// WITH_STDLIB
+// FULL_JDK
+// CHECK_BYTECODE_TEXT
+
+class A
+
+fun box(): String {
+    val a = try {
+        A()
+    } catch (e: NoClassDefFoundError) {
+        null
+    }
+
+    return "OK"
+}
+
+// 0 CHECKCAST
diff --git a/compiler/testData/codegen/box/casts/kt53677.kt b/compiler/testData/codegen/box/casts/kt53677.kt
new file mode 100644
index 0000000..9c82fdd
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/kt53677.kt
@@ -0,0 +1,29 @@
+// WITH_STDLIB
+// WITH_COROUTINES
+// DONT_TARGET_EXACT_BACKEND: JVM
+// DONT_TARGET_EXACT_BACKEND: JS
+
+import kotlin.coroutines.*
+
+public inline fun <reified T> myEmptyArray(): Array<T> = arrayOfNulls<T>(0) as Array<T>
+
+inline fun <reified T> Array<out T>?.myOrEmpty(): Array<out T> = this ?: myEmptyArray<T>()
+
+fun <T> runBlocking(c: suspend () -> T): T {
+    var res: T? = null
+    c.startCoroutine(Continuation(EmptyCoroutineContext) {
+        res = it.getOrThrow()
+    })
+    return res!!
+}
+
+suspend fun suspendHere(x: String) {}
+
+suspend fun main() {
+    arrayOf("1").myOrEmpty().forEach { suspendHere(it) }
+}
+
+fun box(): String {
+    runBlocking(::main)
+    return "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/casts/kt54581.kt b/compiler/testData/codegen/box/casts/kt54581.kt
new file mode 100644
index 0000000..dc1533e
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/kt54581.kt
@@ -0,0 +1,17 @@
+// TARGET_BACKEND: JVM
+
+fun box(): String {
+    val k = tryOrNull { "K" }
+    return "O$k"
+}
+
+private inline fun <T> tryOrNull(action: () -> T): T? =
+    try {
+        action()
+    } catch (e: Throwable) {
+        when {
+            else -> {
+                null
+            }
+        }
+    }
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/casts/kt54707.kt b/compiler/testData/codegen/box/casts/kt54707.kt
new file mode 100644
index 0000000..74a48eb
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/kt54707.kt
@@ -0,0 +1,11 @@
+fun box(): String =
+    g(arrayOf("O"))
+
+fun g(x: Array<String>?): String =
+    x.orEmpty0().f { it + "K" }
+
+inline fun <T> Array<out T>.f(lambda: (T) -> T): T =
+    lambda(this[0])
+
+inline fun <reified T> Array<out T>?.orEmpty0(): Array<out T> =
+    this ?: (arrayOfNulls<T>(0) as Array<T>)
diff --git a/compiler/testData/codegen/box/casts/kt54802.kt b/compiler/testData/codegen/box/casts/kt54802.kt
new file mode 100644
index 0000000..dc66bf4
--- /dev/null
+++ b/compiler/testData/codegen/box/casts/kt54802.kt
@@ -0,0 +1,14 @@
+class K {
+    val x: String = "OK"
+}
+
+inline fun <T> Array<out T>.ifEmpty(body: () -> Array<out T>): Array<out T> =
+    if (size == 0) body() else this
+
+inline fun <T> Array<out T>.f(p: (T) -> String): String =
+    p(this[0])
+
+fun box(): String =
+    emptyArray<K>()
+        .ifEmpty { arrayOf(K()) }
+        .f(K::x)
diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt
new file mode 100644
index 0000000..9c3af5b
--- /dev/null
+++ b/compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt
@@ -0,0 +1,22 @@
+// TARGET_BACKEND: JVM
+// FILE: A.java
+
+public class A {
+    public static A create() { return new A(); }
+}
+
+// FILE: box.kt
+
+import kotlin.reflect.KProperty
+
+class C {
+    private val valueState = A.create()
+    private val value by valueState
+
+    fun get(): String = value
+}
+
+operator fun A.getValue(thisRef: Any?, property: KProperty<*>): String = "OK"
+
+fun box(): String =
+    C().get()
diff --git a/compiler/testData/codegen/box/evaluate/stringConcatenationWithObject.kt b/compiler/testData/codegen/box/evaluate/stringConcatenationWithObject.kt
new file mode 100644
index 0000000..d8fac86
--- /dev/null
+++ b/compiler/testData/codegen/box/evaluate/stringConcatenationWithObject.kt
@@ -0,0 +1,15 @@
+// TARGET_BACKEND: JVM_IR
+
+object K : Code("K")
+
+open class Code(val x: String) {
+    override fun toString() = "$x"
+}
+
+class O {
+    companion object: Code("O")
+}
+
+fun box(): String {
+    return "$O" + "$K" // must not be evaluated during compile time
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/evaluate/thisPlusString.kt b/compiler/testData/codegen/box/evaluate/thisPlusString.kt
new file mode 100644
index 0000000..96254ec
--- /dev/null
+++ b/compiler/testData/codegen/box/evaluate/thisPlusString.kt
@@ -0,0 +1,17 @@
+// TARGET_BACKEND: JVM_IR
+// WITH_STDLIB
+
+object Test {
+    fun foo(): String = "foo " + this
+
+    fun bar(): String = "bar $this"
+
+    fun baz(): String = "baz " + this.toString()
+}
+
+fun box(): String {
+    if (!Test.foo().startsWith("foo ")) return "Fail ${Test.foo()}"
+    if (!Test.bar().startsWith("bar ")) return "Fail ${Test.bar()}"
+    if (!Test.baz().startsWith("baz ")) return "Fail ${Test.baz()}"
+    return "OK"
+}
diff --git a/compiler/testData/codegen/box/fieldRename/javaFieldAndCompanionProperty.kt b/compiler/testData/codegen/box/fieldRename/javaFieldAndCompanionProperty.kt
index 92e95b0..b126161 100644
--- a/compiler/testData/codegen/box/fieldRename/javaFieldAndCompanionProperty.kt
+++ b/compiler/testData/codegen/box/fieldRename/javaFieldAndCompanionProperty.kt
@@ -1,4 +1,7 @@
 // TARGET_BACKEND: JVM_IR
+// IGNORE_BACKEND: JVM_IR
+// IGNORE_BACKEND_FIR: JVM_IR
+// FIR_STATUS: accesses companion property backing field statically and fails (does not work in K1/JVM too)
 
 // FILE: Base.java
 public class Base {
diff --git a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinPrivateProperty.kt b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinPrivateProperty.kt
new file mode 100644
index 0000000..95c432f
--- /dev/null
+++ b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinPrivateProperty.kt
@@ -0,0 +1,18 @@
+// TARGET_BACKEND: JVM_IR
+// Note: works accidentally via backing field access
+// Field VS property: case 4.2
+// More or less duplicates the case in KT-34943/KT-54393
+
+// FILE: BaseJava.java
+public class BaseJava {
+    public String a = "FAIL";
+}
+
+// FILE: Derived.kt
+class Derived : BaseJava() {
+    private val a = "OK"
+
+    fun x() = a
+}
+
+fun box() = Derived().x()
diff --git a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.fir.ir.txt b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.fir.ir.txt
deleted file mode 100644
index 4676708..0000000
--- a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.fir.ir.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-FILE fqName:<root> fileName:/Derived.kt
-  CLASS CLASS name:Derived modality:FINAL visibility:public superTypes:[<root>.BaseJava]
-    $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Derived
-    CONSTRUCTOR visibility:public <> () returnType:<root>.Derived [primary]
-      BLOCK_BODY
-        DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.BaseJava'
-        INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Derived modality:FINAL visibility:public superTypes:[<root>.BaseJava]'
-    PROPERTY name:a visibility:public modality:FINAL [val]
-      FIELD PROPERTY_BACKING_FIELD name:a type:kotlin.String visibility:private [final]
-        EXPRESSION_BODY
-          CONST String type=kotlin.String value="FAIL"
-      FUN DEFAULT_PROPERTY_ACCESSOR name:<get-a> visibility:public modality:FINAL <> ($this:<root>.Derived) returnType:kotlin.String
-        correspondingProperty: PROPERTY name:a visibility:public modality:FINAL [val]
-        $this: VALUE_PARAMETER name:<this> type:<root>.Derived
-        BLOCK_BODY
-          RETURN type=kotlin.Nothing from='public final fun <get-a> (): kotlin.String declared in <root>.Derived'
-            GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:a type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
-              receiver: GET_VAR '<this>: <root>.Derived declared in <root>.Derived.<get-a>' type=<root>.Derived origin=null
-    FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
-      overridden:
-        public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-      VALUE_PARAMETER name:other index:0 type:kotlin.Any?
-    FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
-      overridden:
-        public open fun hashCode (): kotlin.Int [fake_override] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-    FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
-      overridden:
-        public open fun toString (): kotlin.String [fake_override] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-  FUN name:box visibility:public modality:FINAL <> () returnType:@[FlexibleNullability] kotlin.String?
-    BLOCK_BODY
-      RETURN type=kotlin.Nothing from='public final fun box (): @[FlexibleNullability] kotlin.String? declared in <root>'
-        GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:a type:@[FlexibleNullability] kotlin.String? visibility:public' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
-          receiver: CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.Derived' type=<root>.Derived origin=null
diff --git a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.ir.txt b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.ir.txt
deleted file mode 100644
index bee2c05..0000000
--- a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.ir.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-FILE fqName:<root> fileName:/Derived.kt
-  CLASS CLASS name:Derived modality:FINAL visibility:public superTypes:[<root>.BaseJava]
-    $this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Derived
-    CONSTRUCTOR visibility:public <> () returnType:<root>.Derived [primary]
-      BLOCK_BODY
-        DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.BaseJava'
-        INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Derived modality:FINAL visibility:public superTypes:[<root>.BaseJava]'
-    PROPERTY name:a visibility:public modality:FINAL [val]
-      FIELD PROPERTY_BACKING_FIELD name:a type:kotlin.String visibility:private [final]
-        EXPRESSION_BODY
-          CONST String type=kotlin.String value="FAIL"
-      FUN DEFAULT_PROPERTY_ACCESSOR name:<get-a> visibility:public modality:FINAL <> ($this:<root>.Derived) returnType:kotlin.String
-        correspondingProperty: PROPERTY name:a visibility:public modality:FINAL [val]
-        $this: VALUE_PARAMETER name:<this> type:<root>.Derived
-        BLOCK_BODY
-          RETURN type=kotlin.Nothing from='public final fun <get-a> (): kotlin.String declared in <root>.Derived'
-            GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:a type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
-              receiver: GET_VAR '<this>: <root>.Derived declared in <root>.Derived.<get-a>' type=<root>.Derived origin=null
-    PROPERTY FAKE_OVERRIDE name:a visibility:public modality:FINAL [fake_override,var]
-      overridden:
-        public final a: @[FlexibleNullability] kotlin.String? [var]
-    FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
-      overridden:
-        public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-      VALUE_PARAMETER name:other index:0 type:kotlin.Any?
-    FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
-      overridden:
-        public open fun hashCode (): kotlin.Int [fake_override] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-    FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
-      overridden:
-        public open fun toString (): kotlin.String [fake_override] declared in <root>.BaseJava
-      $this: VALUE_PARAMETER name:<this> type:kotlin.Any
-  FUN name:box visibility:public modality:FINAL <> () returnType:@[FlexibleNullability] kotlin.String?
-    BLOCK_BODY
-      RETURN type=kotlin.Nothing from='public final fun box (): @[FlexibleNullability] kotlin.String? declared in <root>'
-        GET_FIELD 'FIELD IR_EXTERNAL_JAVA_DECLARATION_STUB name:a type:@[FlexibleNullability] kotlin.String? visibility:public' type=@[FlexibleNullability] kotlin.String? origin=GET_PROPERTY
-          receiver: CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.Derived' type=<root>.Derived origin=null
diff --git a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt
index 6eac6bc..645cbbd 100644
--- a/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt
+++ b/compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt
@@ -1,5 +1,9 @@
 // TARGET_BACKEND: JVM_IR
-// DUMP_IR
+// IGNORE_BACKEND: JVM_IR
+// IGNORE_BACKEND_FIR: JVM_IR
+// FIR_STATUS: accesses property backing field accidentally and fails with exception (does not work in K1/JVM too)
+// Field VS property: case 4.1
+// See KT-54393 for details
 
 // FILE: BaseJava.java
 public class BaseJava {
diff --git a/compiler/testData/codegen/box/sam/kt54600.fir.ir.txt b/compiler/testData/codegen/box/sam/kt54600.fir.ir.txt
new file mode 100644
index 0000000..d01302d
--- /dev/null
+++ b/compiler/testData/codegen/box/sam/kt54600.fir.ir.txt
@@ -0,0 +1,15 @@
+FILE fqName:<root> fileName:/box.kt
+  FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
+    BLOCK_BODY
+      RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
+        CALL 'public final fun foo (filter: kotlin.Function1<kotlin.String, kotlin.Boolean>?): kotlin.String declared in <root>' type=kotlin.String origin=null
+          filter: CONST Null type=kotlin.Nothing? value=null
+  FUN name:foo visibility:public modality:FINAL <> (filter:kotlin.Function1<kotlin.String, kotlin.Boolean>?) returnType:kotlin.String
+    VALUE_PARAMETER name:filter index:0 type:kotlin.Function1<kotlin.String, kotlin.Boolean>?
+    BLOCK_BODY
+      TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
+        CONSTRUCTOR_CALL 'public constructor <init> (filter: @[FlexibleNullability] <root>.Condition<in @[FlexibleNullability] kotlin.String?>?) declared in <root>.J' type=<root>.J origin=null
+          filter: TYPE_OP type=@[FlexibleNullability] <root>.Condition<@[FlexibleNullability] kotlin.String?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] <root>.Condition<@[FlexibleNullability] kotlin.String?>?
+            GET_VAR 'filter: kotlin.Function1<kotlin.String, kotlin.Boolean>? declared in <root>.foo' type=kotlin.Function1<kotlin.String, kotlin.Boolean>? origin=null
+      RETURN type=kotlin.Nothing from='public final fun foo (filter: kotlin.Function1<kotlin.String, kotlin.Boolean>?): kotlin.String declared in <root>'
+        CONST String type=kotlin.String value="OK"
diff --git a/compiler/testData/codegen/box/sam/kt54600.ir.txt b/compiler/testData/codegen/box/sam/kt54600.ir.txt
new file mode 100644
index 0000000..97f44ae
--- /dev/null
+++ b/compiler/testData/codegen/box/sam/kt54600.ir.txt
@@ -0,0 +1,16 @@
+FILE fqName:<root> fileName:/box.kt
+  FUN name:box visibility:public modality:FINAL <> () returnType:kotlin.String
+    BLOCK_BODY
+      RETURN type=kotlin.Nothing from='public final fun box (): kotlin.String declared in <root>'
+        CALL 'public final fun foo (filter: kotlin.Function1<kotlin.String, kotlin.Boolean>?): kotlin.String declared in <root>' type=kotlin.String origin=null
+          filter: CONST Null type=kotlin.Nothing? value=null
+  FUN name:foo visibility:public modality:FINAL <> (filter:kotlin.Function1<kotlin.String, kotlin.Boolean>?) returnType:kotlin.String
+    VALUE_PARAMETER name:filter index:0 type:kotlin.Function1<kotlin.String, kotlin.Boolean>?
+    BLOCK_BODY
+      TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
+        CONSTRUCTOR_CALL 'public constructor <init> (filter: @[FlexibleNullability] <root>.Condition<in @[FlexibleNullability] kotlin.String?>?) declared in <root>.J' type=<root>.J origin=null
+          filter: TYPE_OP type=@[FlexibleNullability] <root>.Condition<kotlin.Any?>? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] <root>.Condition<kotlin.Any?>?
+            TYPE_OP type=@[FlexibleNullability] kotlin.Function1<@[ParameterName(name = 't')] kotlin.Any?, kotlin.Boolean>? origin=IMPLICIT_CAST typeOperand=@[FlexibleNullability] kotlin.Function1<@[ParameterName(name = 't')] kotlin.Any?, kotlin.Boolean>?
+              GET_VAR 'filter: kotlin.Function1<kotlin.String, kotlin.Boolean>? declared in <root>.foo' type=kotlin.Function1<kotlin.String, kotlin.Boolean>? origin=null
+      RETURN type=kotlin.Nothing from='public final fun foo (filter: kotlin.Function1<kotlin.String, kotlin.Boolean>?): kotlin.String declared in <root>'
+        CONST String type=kotlin.String value="OK"
diff --git a/compiler/testData/codegen/box/sam/kt54600.kt b/compiler/testData/codegen/box/sam/kt54600.kt
new file mode 100644
index 0000000..7b96d0a
--- /dev/null
+++ b/compiler/testData/codegen/box/sam/kt54600.kt
@@ -0,0 +1,27 @@
+// TARGET_BACKEND: JVM
+// DUMP_IR
+// FILE: box.kt
+
+fun box(): String =
+    foo(null)
+
+fun foo(filter: ((String) -> Boolean)?): String {
+    J(filter)
+    return "OK"
+}
+
+// FILE: J.java
+
+public class J {
+    public J(Condition<? super String> filter) {
+        if (filter != null) {
+            filter.value("");
+        }
+    }
+}
+
+// FILE: Condition.java
+
+public interface Condition<T> {
+    boolean value(T t);
+}
diff --git a/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.kt b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.kt
new file mode 100644
index 0000000..fe9991b
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.kt
@@ -0,0 +1,10 @@
+// This test checks that we use the `...$lambda-0` method name, instead of `...$lambda$0`, for extracted accessors of local delegated properties.
+// It's important to keep these names until we fix the binary compatibility issue KT-49030.
+
+operator fun String.getValue(thisRef: Any?, prop: Any?): String = this
+operator fun String.setValue(thisRef: Any?, prop: Any?, value: String) {}
+
+inline fun foo(): String {
+    var x by "OK"
+    return x
+}
diff --git a/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.txt b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.txt
new file mode 100644
index 0000000..076966a
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.txt
@@ -0,0 +1,20 @@
+@kotlin.Metadata
+public final class LocalDelegatedPropertyKt$foo$x$1 {
+    // source: 'localDelegatedProperty.kt'
+    public final static field INSTANCE: kotlin.reflect.KMutableProperty0
+    static method <clinit>(): void
+    method <init>(): void
+    public method getName(): java.lang.String
+    public method getOwner(): kotlin.reflect.KDeclarationContainer
+    public method getSignature(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class LocalDelegatedPropertyKt {
+    // source: 'localDelegatedProperty.kt'
+    synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
+    static method <clinit>(): void
+    public final static @org.jetbrains.annotations.NotNull method foo(): java.lang.String
+    public final static @org.jetbrains.annotations.NotNull method getValue(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: java.lang.Object, @org.jetbrains.annotations.Nullable p2: java.lang.Object): java.lang.String
+    public final static method setValue(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: java.lang.Object, @org.jetbrains.annotations.Nullable p2: java.lang.Object, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
+}
diff --git a/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty_ir.txt b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty_ir.txt
new file mode 100644
index 0000000..9220aaa
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty_ir.txt
@@ -0,0 +1,12 @@
+@kotlin.Metadata
+public final class LocalDelegatedPropertyKt {
+    // source: 'localDelegatedProperty.kt'
+    synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
+    static method <clinit>(): void
+    public synthetic final static method access$foo$lambda-0(p0: java.lang.String): java.lang.String
+    private final static method foo$lambda-0(p0: java.lang.String): java.lang.String
+    private final static method foo$lambda-1(p0: java.lang.String, p1: java.lang.String): void
+    public final static @org.jetbrains.annotations.NotNull method foo(): java.lang.String
+    public final static @org.jetbrains.annotations.NotNull method getValue(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: java.lang.Object, @org.jetbrains.annotations.Nullable p2: java.lang.Object): java.lang.String
+    public final static method setValue(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.Nullable p1: java.lang.Object, @org.jetbrains.annotations.Nullable p2: java.lang.Object, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
+}
diff --git a/compiler/testData/codegen/bytecodeText/checkcast/kt53465.kt b/compiler/testData/codegen/bytecodeText/checkcast/kt53465.kt
new file mode 100644
index 0000000..36e6e31
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/checkcast/kt53465.kt
@@ -0,0 +1,15 @@
+// TARGET_BACKEND: JVM_IR
+
+public inline fun <reified T> myEmptyArray(): Array<T> = arrayOfNulls<T>(0) as Array<T>
+
+inline fun <reified T> Array<out T>?.myOrEmpty(): Array<out T> = this ?: myEmptyArray<T>()
+
+fun foo(a : Array<String>?) = a.myOrEmpty()
+
+val a = arrayOf<Int>(1) as Array<Any>
+
+val b = arrayOf<Int>(1) as Array<Int>
+
+val c = arrayOf(arrayOf<Int>(1)) as Array<Array<Any>?>
+
+// 0 CHECKCAST
\ No newline at end of file
diff --git a/compiler/testData/codegen/bytecodeText/javaFields.kt b/compiler/testData/codegen/bytecodeText/javaFields.kt
index cbb3edc..a3afb7b 100644
--- a/compiler/testData/codegen/bytecodeText/javaFields.kt
+++ b/compiler/testData/codegen/bytecodeText/javaFields.kt
@@ -16,18 +16,8 @@
 
 fun test1(j: Kotlin2) = j.f
 
-// JVM_IR_TEMPLATES
-// @Kotlin2.class:
-// 2 GETFIELD Java2.f : I
-
-// JVM_IR_TEMPLATES
-// @TestKt.class:
-// 2 GETFIELD Java2.f : I
-
-// JVM_TEMPLATES
 // @Kotlin2.class:
 // 1 GETFIELD Java2.f : I
 
-// JVM_TEMPLATES
 // @TestKt.class:
-// 1 GETFIELD Java2.f : I
\ No newline at end of file
+// 1 GETFIELD Kotlin2.f : I
\ No newline at end of file
diff --git a/compiler/testData/codegen/bytecodeText/javaFieldsWithIntersectionTypes.kt b/compiler/testData/codegen/bytecodeText/javaFieldsWithIntersectionTypes.kt
index ac29c48..93bcb38 100644
--- a/compiler/testData/codegen/bytecodeText/javaFieldsWithIntersectionTypes.kt
+++ b/compiler/testData/codegen/bytecodeText/javaFieldsWithIntersectionTypes.kt
@@ -31,13 +31,7 @@
 }
 
 // @TestKt.class:
-// 1 PUTFIELD JFieldOwner.f : I
-// 1 PUTFIELD Mid.f : I
-
-// JVM_IR_TEMPLATES
-// 2 GETFIELD JFieldOwner.f : I
-// 0 GETFIELD Mid.f : I
-
-// JVM_TEMPLATES
 // 1 GETFIELD JFieldOwner.f : I
+// 1 PUTFIELD JFieldOwner.f : I
 // 1 GETFIELD Mid.f : I
+// 1 PUTFIELD Mid.f : I
diff --git a/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt b/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt
new file mode 100644
index 0000000..d45298b
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt
@@ -0,0 +1,18 @@
+// FIR_IDENTICAL
+
+object O : Code(0)
+
+open class Code(val x: Int) {
+    override fun toString() = "$x"
+}
+
+class A {
+    companion object: Code(0)
+}
+
+const val toString1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>O.toString()<!>
+const val toString2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>A.toString()<!>
+const val plusString1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"string" + O<!>
+const val plusString2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"string" + A<!>
+const val stringConcat1 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"$O"<!>
+const val stringConcat2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"$A"<!>
diff --git a/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.txt b/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.txt
new file mode 100644
index 0000000..aa9727da
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.txt
@@ -0,0 +1,40 @@
+package
+
+public const val plusString1: kotlin.String
+public const val plusString2: kotlin.String
+public const val stringConcat1: kotlin.String
+public const val stringConcat2: kotlin.String
+public const val toString1: kotlin.String
+public const val toString2: kotlin.String
+
+public final class A {
+    public constructor A()
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+
+    public companion object Companion : Code {
+        private constructor Companion()
+        public final override /*1*/ /*fake_override*/ val x: kotlin.Int
+        public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+        public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+        public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+    }
+}
+
+public open class Code {
+    public constructor Code(/*0*/ x: kotlin.Int)
+    public final val x: kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ fun toString(): kotlin.String
+}
+
+public object O : Code {
+    private constructor O()
+    public final override /*1*/ /*fake_override*/ val x: kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+}
+
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt
new file mode 100644
index 0000000..dfdcf24
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt
@@ -0,0 +1,24 @@
+class Foo<T : Any> {
+    fun doSmthng(arg: T) {}
+    var a: T? = null
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit) : Foo<T> = Foo<T>().apply(block)
+
+fun main(arg: Any) {
+    val x = 57
+    val value = myBuilder {
+        doSmthng("one ")
+        run { a; this }.a = <!ASSIGNMENT_TYPE_MISMATCH!>10<!>
+        a += 1
+        this.a = <!ASSIGNMENT_TYPE_MISMATCH!>57<!>
+        this.(a) = 57
+        a = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
+        (a) = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
+        a.<!FUNCTION_CALL_EXPECTED!>hashCode<!> = 99
+        if (arg is String) {
+            a = arg
+        }
+    }
+    println(value.a?.count { it in 'l' .. 'q' })
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt
new file mode 100644
index 0000000..08aa7d2c
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt
@@ -0,0 +1,24 @@
+class Foo<T : Any> {
+    fun doSmthng(arg: T) {}
+    var a: T? = null
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit) : Foo<T> = Foo<T>().apply(block)
+
+fun main(arg: Any) {
+    val x = 57
+    val value = myBuilder {
+        doSmthng("one ")
+        run { a; this }.a = <!TYPE_MISMATCH, TYPE_MISMATCH!>10<!>
+        <!BUILDER_INFERENCE_STUB_RECEIVER, STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY, TYPE_MISMATCH, TYPE_MISMATCH!>a<!> <!OVERLOAD_RESOLUTION_AMBIGUITY_BECAUSE_OF_STUB_TYPES!>+=<!> 1
+        this.a = <!TYPE_MISMATCH!>57<!>
+        this.<!ILLEGAL_SELECTOR, VARIABLE_EXPECTED!>(a)<!> = <!TYPE_MISMATCH!>57<!>
+        a = <!TYPE_MISMATCH!>x<!>
+        (a) = <!TYPE_MISMATCH!>x<!>
+        <!TYPE_MISMATCH!>a<!>.<!FUNCTION_CALL_EXPECTED, VARIABLE_EXPECTED!>hashCode<!> = <!TYPE_MISMATCH, TYPE_MISMATCH!>99<!>
+        if (arg is String) {
+            a = arg
+        }
+    }
+    println(value.a?.count { it in 'l' .. 'q' })
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.txt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.txt
new file mode 100644
index 0000000..15fed74
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.txt
@@ -0,0 +1,14 @@
+package
+
+public fun main(/*0*/ arg: kotlin.Any): kotlin.Unit
+public fun </*0*/ T : kotlin.Any> myBuilder(/*0*/ block: Foo<T>.() -> kotlin.Unit): Foo<T>
+
+public final class Foo</*0*/ T : kotlin.Any> {
+    public constructor Foo</*0*/ T : kotlin.Any>()
+    public final var a: T?
+    public final fun doSmthng(/*0*/ arg: T): kotlin.Unit
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+}
+
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt
new file mode 100644
index 0000000..8fad616
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt
@@ -0,0 +1,77 @@
+// WITH_REFLECT
+// FIR_DUMP
+import kotlin.reflect.*
+
+interface Foo<T : Any> {
+    var a: T
+    val b: Array<T>
+
+    fun accept(arg: T)
+}
+
+<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class FooImpl<!><T : Any> : Foo<T>
+
+fun bar(p: KMutableProperty0<Int>) {
+    p.set(100)
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit): Foo<T> = FooImpl<T>().apply(block)
+
+fun <T : Any> Foo<T>.change(block: Foo<T>.() -> Unit): Foo<T> {
+    this.block()
+    return this
+}
+
+fun main(arg: Any, condition: Boolean) {
+    val value = myBuilder {
+        b[0] = 123
+        a = 45
+        a<!OVERLOAD_RESOLUTION_AMBIGUITY!>++<!>
+        bar(::a)
+        if (<!USELESS_IS_CHECK!>a is Int<!>) {
+            a = 67
+            a<!OVERLOAD_RESOLUTION_AMBIGUITY!>--<!>
+            bar(::a)
+        }
+        when (condition) {
+            true -> a = 87
+            false -> a = 65
+        }
+        val x by <!DELEGATE_SPECIAL_FUNCTION_AMBIGUITY!>a<!>
+
+        change {
+            a = 99
+        }
+    }
+
+    val value2 = myBuilder {
+        accept("")
+        a = <!ASSIGNMENT_TYPE_MISMATCH!>45<!>
+        when (condition) {
+            true -> a = <!ASSIGNMENT_TYPE_MISMATCH!>87<!>
+            false -> a = <!ASSIGNMENT_TYPE_MISMATCH!>65<!>
+        }
+        change {
+            a = <!ASSIGNMENT_TYPE_MISMATCH!>99<!>
+        }
+        if (a is Int) {
+            a = <!ASSIGNMENT_TYPE_MISMATCH!>67<!>
+        }
+    }
+
+    // See KT-54664
+    val value3 = myBuilder {
+        accept("")
+        a = 45
+        bar(::a)
+    }
+
+    fun baz(t: Int) {}
+
+    val value4 = myBuilder {
+        accept("")
+        a = 45
+        b[0] = 123
+        baz(a)
+    }
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt
new file mode 100644
index 0000000..2189bd1
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt
@@ -0,0 +1,103 @@
+FILE: unsafeAssignmentExtra.fir.kt
+    public abstract interface Foo<T : R|kotlin/Any|> : R|kotlin/Any| {
+        public abstract var a: R|T|
+            public get(): R|T|
+            public set(value: R|T|): R|kotlin/Unit|
+
+        public abstract val b: R|kotlin/Array<T>|
+            public get(): R|kotlin/Array<T>|
+
+        public abstract fun accept(arg: R|T|): R|kotlin/Unit|
+
+    }
+    public final class FooImpl<T : R|kotlin/Any|> : R|Foo<T>| {
+        public constructor<T : R|kotlin/Any|>(): R|FooImpl<T>| {
+            super<R|kotlin/Any|>()
+        }
+
+    }
+    public final fun bar(p: R|kotlin/reflect/KMutableProperty0<kotlin/Int>|): R|kotlin/Unit| {
+        R|<local>/p|.R|SubstitutionOverride<kotlin/reflect/KMutableProperty0.set: R|kotlin/Unit|>|(Int(100))
+    }
+    public final fun <T : R|kotlin/Any|> myBuilder(block: R|Foo<T>.() -> kotlin/Unit|): R|Foo<T>| {
+        ^myBuilder R|/FooImpl.FooImpl|<R|T|>().R|kotlin/apply|<R|FooImpl<T>|>(R|<local>/block|)
+    }
+    public final fun <T : R|kotlin/Any|> R|Foo<T>|.change(block: R|Foo<T>.() -> kotlin/Unit|): R|Foo<T>| {
+        R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|kotlin/Unit|>|(this@R|/change|)
+        ^change this@R|/change|
+    }
+    public final fun main(arg: R|kotlin/Any|, condition: R|kotlin/Boolean|): R|kotlin/Unit| {
+        lval value: R|Foo<kotlin/Int>| = R|/myBuilder|<R|kotlin/Int|>(<L> = myBuilder@fun R|Foo<kotlin/Int>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.b: R|kotlin/Array<Stub (chain inference): TypeVariable(T)>|>|.R|SubstitutionOverride<kotlin/Array.set: R|kotlin/Unit|>|(Int(0), Int(123))
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(45)
+            lval <unary>: R|kotlin/Int| = this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = R|<local>/<unary>|.<Ambiguity: inc, [kotlin/inc, kotlin/inc]>#()
+            R|<local>/<unary>|
+            R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+            when () {
+                (this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| is R|kotlin/Int|) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(67)
+                    lval <unary>: R|kotlin/Int| = this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = R|<local>/<unary>|.<Ambiguity: dec, [kotlin/dec, kotlin/dec]>#()
+                    R|<local>/<unary>|
+                    R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+                }
+            }
+
+            when (R|<local>/condition|) {
+                ==($subj$, Boolean(true)) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(87)
+                }
+                ==($subj$, Boolean(false)) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(65)
+                }
+            }
+
+            lval x: <ERROR TYPE REF: Ambiguity: getValue, [kotlin/getValue, kotlin/getValue, kotlin/getValue, kotlin/collections/getValue, kotlin/collections/getValue]>by this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|
+            this@R|special/anonymous|.R|/change|<R|kotlin/Int|>(<L> = change@fun R|Foo<kotlin/Int>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+                this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(99)
+            }
+            )
+        }
+        )
+        lval value2: R|Foo<kotlin/String>| = R|/myBuilder|<R|kotlin/String|>(<L> = myBuilder@fun R|Foo<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.accept: R|kotlin/Unit|>|(String())
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(45)
+            when (R|<local>/condition|) {
+                ==($subj$, Boolean(true)) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(87)
+                }
+                ==($subj$, Boolean(false)) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(65)
+                }
+            }
+
+            this@R|special/anonymous|.R|/change|<R|kotlin/String|>(<L> = change@fun R|Foo<kotlin/String>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+                this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(99)
+            }
+            )
+            when () {
+                (this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| is R|kotlin/Int|) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(67)
+                }
+            }
+
+        }
+        )
+        lval value3: R|Foo<kotlin/Int>| = R|/myBuilder|<R|kotlin/Int|>(<L> = myBuilder@fun R|Foo<kotlin/Int>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.accept: R|kotlin/Unit|>|(String())
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(45)
+            R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+        }
+        )
+        local final fun baz(t: R|kotlin/Int|): R|kotlin/Unit| {
+        }
+
+        lval value4: R|Foo<it(kotlin/Comparable<*> & java/io/Serializable)>| = R|/myBuilder|<R|it(kotlin/Comparable<*> & java/io/Serializable)|>(<L> = myBuilder@fun R|Foo<it(kotlin/Comparable<*> & java/io/Serializable)>|.<anonymous>(): R|kotlin/Unit| <inline=NoInline>  {
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.accept: R|kotlin/Unit|>|(String())
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(45)
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.b: R|kotlin/Array<Stub (chain inference): TypeVariable(T)>|>|.R|SubstitutionOverride<kotlin/Array.set: R|kotlin/Unit|>|(Int(0), Int(123))
+            R|<local>/baz|(this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+        }
+        )
+    }
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt
new file mode 100644
index 0000000..e33c3c3
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt
@@ -0,0 +1,77 @@
+// WITH_REFLECT
+// FIR_DUMP
+import kotlin.reflect.*
+
+interface Foo<T : Any> {
+    var a: T
+    val b: Array<T>
+
+    fun accept(arg: T)
+}
+
+<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class FooImpl<!><T : Any> : Foo<T>
+
+fun bar(p: KMutableProperty0<Int>) {
+    p.set(100)
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit): Foo<T> = FooImpl<T>().apply(block)
+
+fun <T : Any> Foo<T>.change(block: Foo<T>.() -> Unit): Foo<T> {
+    this.block()
+    return this
+}
+
+fun main(arg: Any, condition: Boolean) {
+    val value = myBuilder {
+        b[0] = 123
+        a = 45
+        <!STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY!>a<!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, OVERLOAD_RESOLUTION_AMBIGUITY, OVERLOAD_RESOLUTION_AMBIGUITY_BECAUSE_OF_STUB_TYPES!>++<!>
+        bar(::a)
+        if (<!USELESS_IS_CHECK, USELESS_IS_CHECK!>a is Int<!>) {
+            a = 67
+            <!STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY!>a<!><!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, OVERLOAD_RESOLUTION_AMBIGUITY, OVERLOAD_RESOLUTION_AMBIGUITY_BECAUSE_OF_STUB_TYPES!>--<!>
+            bar(::a)
+        }
+        when (condition) {
+            true -> a = 87
+            false -> a = 65
+        }
+        val x by <!DELEGATE_SPECIAL_FUNCTION_AMBIGUITY!>a<!>
+
+        change {
+            a = 99
+        }
+    }
+
+    val value2 = myBuilder {
+        accept("")
+        a = <!TYPE_MISMATCH!>45<!>
+        when (condition) {
+            true -> a = <!TYPE_MISMATCH!>87<!>
+            false -> a = <!TYPE_MISMATCH!>65<!>
+        }
+        change {
+            a = <!TYPE_MISMATCH!>99<!>
+        }
+        if (<!USELESS_IS_CHECK, USELESS_IS_CHECK!>a is Int<!>) {
+            a = <!TYPE_MISMATCH!>67<!>
+        }
+    }
+
+    // See KT-54664
+    val value3 = myBuilder {
+        accept(<!TYPE_MISMATCH!>""<!>)
+        a = 45
+        bar(<!TYPE_MISMATCH!>::a<!>)
+    }
+
+    fun baz(t: Int) {}
+
+    val value4 = myBuilder {
+        accept("")
+        a = 45
+        b[0] = 123
+        baz(<!TYPE_MISMATCH, TYPE_MISMATCH!>a<!>)
+    }
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.txt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.txt
new file mode 100644
index 0000000..0a8a8c1
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.txt
@@ -0,0 +1,26 @@
+package
+
+public fun bar(/*0*/ p: kotlin.reflect.KMutableProperty0<kotlin.Int>): kotlin.Unit
+public fun main(/*0*/ arg: kotlin.Any, /*1*/ condition: kotlin.Boolean): kotlin.Unit
+public fun </*0*/ T : kotlin.Any> myBuilder(/*0*/ block: Foo<T>.() -> kotlin.Unit): Foo<T>
+public fun </*0*/ T : kotlin.Any> Foo<T>.change(/*0*/ block: Foo<T>.() -> kotlin.Unit): Foo<T>
+
+public interface Foo</*0*/ T : kotlin.Any> {
+    public abstract var a: T
+    public abstract val b: kotlin.Array<T>
+    public abstract fun accept(/*0*/ arg: T): kotlin.Unit
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+}
+
+public final class FooImpl</*0*/ T : kotlin.Any> : Foo<T> {
+    public constructor FooImpl</*0*/ T : kotlin.Any>()
+    public abstract override /*1*/ /*fake_override*/ var a: T
+    public abstract override /*1*/ /*fake_override*/ val b: kotlin.Array<T>
+    public abstract override /*1*/ /*fake_override*/ fun accept(/*0*/ arg: T): kotlin.Unit
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+}
+
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.fir.kt
new file mode 100644
index 0000000..8d3e441
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.fir.kt
@@ -0,0 +1,21 @@
+// !LANGUAGE: +NoBuilderInferenceWithoutAnnotationRestriction
+
+class Foo<T : Any> {
+    fun doSmthng(arg: T) {}
+    var a: T? = null
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit) : Foo<T> = Foo<T>().apply(block)
+
+fun main(arg: Any) {
+    val x = 57
+    val value = myBuilder {
+        doSmthng("one ")
+        a = <!ASSIGNMENT_TYPE_MISMATCH!>57<!>
+        a = <!ASSIGNMENT_TYPE_MISMATCH!>x<!>
+        if (arg is String) {
+            a = arg
+        }
+    }
+    println(value.a?.count { it in 'l' .. 'q' })
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt
new file mode 100644
index 0000000..78d6520
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt
@@ -0,0 +1,21 @@
+// !LANGUAGE: +NoBuilderInferenceWithoutAnnotationRestriction
+
+class Foo<T : Any> {
+    fun doSmthng(arg: T) {}
+    var a: T? = null
+}
+
+fun <T : Any> myBuilder(block: Foo<T>.() -> Unit) : Foo<T> = Foo<T>().apply(block)
+
+fun main(arg: Any) {
+    val x = 57
+    val value = myBuilder {
+        doSmthng("one ")
+        a = 57
+        a = x
+        if (arg is String) {
+            a = arg
+        }
+    }
+    println(value.a?.count { it in 'l' .. 'q' })
+}
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.txt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.txt
new file mode 100644
index 0000000..f920da6
--- /dev/null
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.txt
@@ -0,0 +1,13 @@
+package
+
+public fun main(/*0*/ arg: kotlin.Any): kotlin.Unit
+public fun </*0*/ T : kotlin.Any> myBuilder(/*0*/ block: Foo<T>.() -> kotlin.Unit): Foo<T>
+
+public final class Foo</*0*/ T : kotlin.Any> {
+    public constructor Foo</*0*/ T : kotlin.Any>()
+    public final var a: T?
+    public final fun doSmthng(/*0*/ arg: T): kotlin.Unit
+    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
+    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
+    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
+}
diff --git a/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.fir.kt.txt b/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.fir.kt.txt
index 2643c43..bbc7828 100644
--- a/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.fir.kt.txt
+++ b/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.fir.kt.txt
@@ -13,14 +13,14 @@
 
   fun f(): @FlexibleNullability String? {
     return eval<@FlexibleNullability String?>(f = local fun <anonymous>(): @FlexibleNullability String? {
-      return <this>(super<B>).#x
+      return <this>.#x
     }
 )
   }
 
   fun g(): @FlexibleNullability String? {
     return eval<@FlexibleNullability String?>(f = local fun <anonymous>(): @FlexibleNullability String? {
-      return <this>(super<B>).#y
+      return <this>.#y
     }
 )
   }
diff --git a/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.kt.txt b/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.kt.txt
index 2643c43..9ca60a6 100644
--- a/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.kt.txt
+++ b/compiler/testData/ir/irText/expressions/ambiguousFieldAccess.kt.txt
@@ -13,14 +13,14 @@
 
   fun f(): @FlexibleNullability String? {
     return eval<@FlexibleNullability String?>(f = local fun <anonymous>(): @FlexibleNullability String? {
-      return <this>(super<B>).#x
+      return <this>(super<C>).#x
     }
 )
   }
 
   fun g(): @FlexibleNullability String? {
     return eval<@FlexibleNullability String?>(f = local fun <anonymous>(): @FlexibleNullability String? {
-      return <this>(super<B>).#y
+      return <this>(super<C>).#y
     }
 )
   }
diff --git a/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.fir.kt.txt b/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.fir.kt.txt
index 941453d..ff523da 100644
--- a/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.fir.kt.txt
+++ b/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.fir.kt.txt
@@ -55,7 +55,7 @@
     else -> d2
   }
   k.#f = 42
-  k(super<JFieldOwner>).#f /*~> Unit */
+  k.#f /*~> Unit */
   val md1: DerivedThroughMid1 = DerivedThroughMid1()
   val md2: DerivedThroughMid2 = DerivedThroughMid2()
   val mk: Mid = when {
@@ -63,6 +63,6 @@
     else -> md2
   }
   mk.#f = 44
-  mk(super<JFieldOwner>).#f /*~> Unit */
+  mk.#f /*~> Unit */
 }
 
diff --git a/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.kt.txt b/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.kt.txt
index 9829e97..37ac60f 100644
--- a/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.kt.txt
+++ b/compiler/testData/ir/irText/expressions/jvmFieldReferenceWithIntersectionTypes.kt.txt
@@ -63,6 +63,6 @@
     else -> md2
   }
   mk /*as Mid */(super<Mid>).#f = 44
-  mk /*as Mid */(super<JFieldOwner>).#f /*~> Unit */
+  mk /*as Mid */(super<Mid>).#f /*~> Unit */
 }
 
diff --git a/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.fir.kt.txt b/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.fir.kt.txt
index bdc1eb9..b8d23df 100644
--- a/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.fir.kt.txt
+++ b/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.fir.kt.txt
@@ -10,7 +10,7 @@
   }
 
   fun getValue(): Int {
-    return <this>(super<Base>).#value
+    return <this>.#value
   }
 
   fun setValue(value: Int) {
diff --git a/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.kt.txt b/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.kt.txt
index 564bed8..0a51e83 100644
--- a/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.kt.txt
+++ b/compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.kt.txt
@@ -10,7 +10,7 @@
   }
 
   fun getValue(): Int {
-    return <this>(super<Base>).#value
+    return <this>(super<Derived>).#value
   }
 
   fun setValue(value: Int) {
diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.ir.txt b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.ir.txt
index 90f4639..21037d8 100644
--- a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.ir.txt
+++ b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.ir.txt
@@ -106,10 +106,9 @@
       CALL 'public open fun run1 (r: @[FlexibleNullability] java.lang.Runnable?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
         $this: CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in <root>.J' type=<root>.J origin=null
         r: TYPE_OP type=@[FlexibleNullability] java.lang.Runnable? origin=SAM_CONVERSION typeOperand=@[FlexibleNullability] java.lang.Runnable?
-          TYPE_OP type=kotlin.Function0<kotlin.Unit> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Function0<kotlin.Unit>
-            CALL 'public open fun id <T> (x: @[FlexibleNullability] T of <root>.J.id?): @[FlexibleNullability] T of <root>.J.id? declared in <root>.J' type=@[FlexibleNullability] kotlin.Function0<kotlin.Unit>? origin=null
-              <T>: @[FlexibleNullability] kotlin.Function0<kotlin.Unit>?
-              x: GET_VAR 'a: kotlin.Function0<kotlin.Unit> declared in <root>.test8' type=kotlin.Function0<kotlin.Unit> origin=null
+          CALL 'public open fun id <T> (x: @[FlexibleNullability] T of <root>.J.id?): @[FlexibleNullability] T of <root>.J.id? declared in <root>.J' type=@[FlexibleNullability] kotlin.Function0<kotlin.Unit>? origin=null
+            <T>: @[FlexibleNullability] kotlin.Function0<kotlin.Unit>?
+            x: GET_VAR 'a: kotlin.Function0<kotlin.Unit> declared in <root>.test8' type=kotlin.Function0<kotlin.Unit> origin=null
   FUN name:test9 visibility:public modality:FINAL <> () returnType:kotlin.Unit
     BLOCK_BODY
       CALL 'public open fun run1 (r: @[FlexibleNullability] java.lang.Runnable?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
diff --git a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.kt.txt b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.kt.txt
index c0b6482..a2b263c 100644
--- a/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.kt.txt
+++ b/compiler/testData/ir/irText/expressions/sam/samConversionsWithSmartCasts.kt.txt
@@ -58,9 +58,10 @@
 }
 
 fun test8(a: Function0<Unit>) {
-  J().run1(r = id<@FlexibleNullability Function0<Unit>?>(x = a) /*!! Function0<Unit> */ /*-> @FlexibleNullability Runnable? */)
+  J().run1(r = id<@FlexibleNullability Function0<Unit>?>(x = a) /*-> @FlexibleNullability Runnable? */)
 }
 
 fun test9() {
   J().run1(r = ::test9 /*-> @FlexibleNullability Runnable? */)
 }
+
diff --git a/compiler/testData/ir/irText/firProblems/JCTree.fir.kt.txt b/compiler/testData/ir/irText/firProblems/JCTree.fir.kt.txt
index 72d8be5..d7e0748 100644
--- a/compiler/testData/ir/irText/firProblems/JCTree.fir.kt.txt
+++ b/compiler/testData/ir/irText/firProblems/JCTree.fir.kt.txt
@@ -13,7 +13,7 @@
     get(): String {
       var tree: JCTree = <this>.<get-tree>()
       when {
-        tree is JCTypeApply -> return tree /*as JCTypeApply */(super<JCTypeApply>).#clazz /*!! String */
+        tree is JCTypeApply -> return tree /*as JCTypeApply */.#clazz /*!! String */
       }
       return ""
     }
diff --git a/compiler/testData/ir/irText/firProblems/typeParameterFromJavaClass.fir.kt.txt b/compiler/testData/ir/irText/firProblems/typeParameterFromJavaClass.fir.kt.txt
index 72870f5..9575285 100644
--- a/compiler/testData/ir/irText/firProblems/typeParameterFromJavaClass.fir.kt.txt
+++ b/compiler/testData/ir/irText/firProblems/typeParameterFromJavaClass.fir.kt.txt
@@ -1,6 +1,6 @@
 fun foo(movedPaths: MutableList<Couple<FilePath>>) {
   movedPaths.forEach<Couple<FilePath>>(action = local fun <anonymous>(it: Couple<FilePath>) {
-    it(super<Couple>).#second.getName() /*~> Unit */
+    it.#second.getName() /*~> Unit */
   }
 )
 }
diff --git a/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.fir.kt.txt b/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.fir.kt.txt
index 5bf439c..5cff33b 100644
--- a/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.fir.kt.txt
+++ b/compiler/testData/ir/irText/types/smartCastOnFieldReceiverOfGenericType.fir.kt.txt
@@ -6,6 +6,6 @@
 
 fun testGetField(a: Any): String {
   a as JCell<String> /*~> Unit */
-  return a /*as JCell<String> */(super<JCell>).#value /*!! String */
+  return a /*as JCell<String> */.#value /*!! String */
 }
 
diff --git a/compiler/testData/ir/loweredIr/interpreter/useCorrectToString.kt b/compiler/testData/ir/loweredIr/interpreter/useCorrectToString.kt
new file mode 100644
index 0000000..e1579b2
--- /dev/null
+++ b/compiler/testData/ir/loweredIr/interpreter/useCorrectToString.kt
@@ -0,0 +1,13 @@
+// This test is needed to check that IrCompileTimeChecker will not fail trying to find and analyze correct toString method
+
+object Obj {
+    override fun toString(): String = "OK"
+
+    fun Int.toString(): String = "Not OK"
+}
+
+const val a = 1 // this is a dummy const to avoid check in IrInterpreterDumpHandler
+
+fun box(): String {
+    return "" + "$Obj" // force a call
+}
diff --git a/compiler/testData/launcher/interpreterClassLoader.kt b/compiler/testData/launcher/interpreterClassLoader.kt
new file mode 100644
index 0000000..2db5da9
--- /dev/null
+++ b/compiler/testData/launcher/interpreterClassLoader.kt
@@ -0,0 +1,14 @@
+package test
+
+// for more information see KT-54509
+object Test {
+    fun foo(): String = "foo " + this
+
+    fun bar(): String = "bar $this"
+
+    fun baz(): String = "baz " + this.toString()
+}
+
+fun main() {
+    println(Test.foo() + Test.bar() + Test.baz())
+}
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
index 8d545fa..729d469 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
@@ -20364,6 +20364,12 @@
                 }
 
                 @Test
+                @TestMetadata("stringConcatenationWithObject.kt")
+                public void testStringConcatenationWithObject() throws Exception {
+                    runTest("compiler/testData/diagnostics/tests/modifiers/const/stringConcatenationWithObject.kt");
+                }
+
+                @Test
                 @TestMetadata("types.kt")
                 public void testTypes() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/modifiers/const/types.kt");
@@ -35629,6 +35635,24 @@
             }
 
             @Test
+            @TestMetadata("unsafeAssignment.kt")
+            public void testUnsafeAssignment() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignmentExtra.kt")
+            public void testUnsafeAssignmentExtra() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.kt");
+            }
+
+            @Test
+            @TestMetadata("unsafeAssignment_noReport.kt")
+            public void testUnsafeAssignment_noReport() throws Exception {
+                runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment_noReport.kt");
+            }
+
+            @Test
             @TestMetadata("useInferenceInformationFromExtension.kt")
             public void testUseInferenceInformationFromExtension() throws Exception {
                 runTest("compiler/testData/diagnostics/testsWithStdLib/builderInference/useInferenceInformationFromExtension.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java
index 510d40d..9d4b750 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java
@@ -4488,6 +4488,24 @@
         }
 
         @Test
+        @TestMetadata("arrayDowncastingContravariant.kt")
+        public void testArrayDowncastingContravariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDowncatingInvariant.kt")
+        public void testArrayDowncatingInvariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDownctingCovariant.kt")
+        public void testArrayDownctingCovariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt");
+        }
+
+        @Test
         @TestMetadata("as.kt")
         public void testAs() throws Exception {
             runTest("compiler/testData/codegen/box/casts/as.kt");
@@ -4614,6 +4632,24 @@
         }
 
         @Test
+        @TestMetadata("kt54581.kt")
+        public void testKt54581() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54581.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
+        @Test
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
@@ -14667,6 +14703,12 @@
             }
 
             @Test
+            @TestMetadata("kt54463_platformType.kt")
+            public void testKt54463_platformType() throws Exception {
+                runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt");
+            }
+
+            @Test
             @TestMetadata("memberExtensionPropertyAndImportFromObject.kt")
             public void testMemberExtensionPropertyAndImportFromObject() throws Exception {
                 runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.kt");
@@ -44544,6 +44586,12 @@
         }
 
         @Test
+        @TestMetadata("kt54600.kt")
+        public void testKt54600() throws Exception {
+            runTest("compiler/testData/codegen/box/sam/kt54600.kt");
+        }
+
+        @Test
         @TestMetadata("nonInlinedSamWrapper.kt")
         public void testNonInlinedSamWrapper() throws Exception {
             runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java
index 0987f13..0a79945 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java
@@ -1037,6 +1037,12 @@
         public void testDelegatedPropertiesInCompanionObject() throws Exception {
             runTest("compiler/testData/codegen/bytecodeListing/delegatedProperty/delegatedPropertiesInCompanionObject.kt");
         }
+
+        @Test
+        @TestMetadata("localDelegatedProperty.kt")
+        public void testLocalDelegatedProperty() throws Exception {
+            runTest("compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.kt");
+        }
     }
 
     @Nested
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 b5a4057..8fe7795 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
@@ -4602,6 +4602,24 @@
         }
 
         @Test
+        @TestMetadata("arrayDowncastingContravariant.kt")
+        public void testArrayDowncastingContravariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDowncatingInvariant.kt")
+        public void testArrayDowncatingInvariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt");
+        }
+
+        @Test
+        @TestMetadata("arrayDownctingCovariant.kt")
+        public void testArrayDownctingCovariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt");
+        }
+
+        @Test
         @TestMetadata("as.kt")
         public void testAs() throws Exception {
             runTest("compiler/testData/codegen/box/casts/as.kt");
@@ -4728,6 +4746,36 @@
         }
 
         @Test
+        @TestMetadata("kt53146.kt")
+        public void testKt53146() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53146.kt");
+        }
+
+        @Test
+        @TestMetadata("kt53677.kt")
+        public void testKt53677() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53677.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54581.kt")
+        public void testKt54581() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54581.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
+        @Test
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
@@ -14805,6 +14853,12 @@
             }
 
             @Test
+            @TestMetadata("kt54463_platformType.kt")
+            public void testKt54463_platformType() throws Exception {
+                runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt");
+            }
+
+            @Test
             @TestMetadata("memberExtensionPropertyAndImportFromObject.kt")
             public void testMemberExtensionPropertyAndImportFromObject() throws Exception {
                 runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.kt");
@@ -16738,6 +16792,18 @@
         }
 
         @Test
+        @TestMetadata("stringConcatenationWithObject.kt")
+        public void testStringConcatenationWithObject() throws Exception {
+            runTest("compiler/testData/codegen/box/evaluate/stringConcatenationWithObject.kt");
+        }
+
+        @Test
+        @TestMetadata("thisPlusString.kt")
+        public void testThisPlusString() throws Exception {
+            runTest("compiler/testData/codegen/box/evaluate/thisPlusString.kt");
+        }
+
+        @Test
         @TestMetadata("unaryMinus.kt")
         public void testUnaryMinus() throws Exception {
             runTest("compiler/testData/codegen/box/evaluate/unaryMinus.kt");
@@ -17482,6 +17548,12 @@
         }
 
         @Test
+        @TestMetadata("javaFieldAndKotlinPrivateProperty.kt")
+        public void testJavaFieldAndKotlinPrivateProperty() throws Exception {
+            runTest("compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinPrivateProperty.kt");
+        }
+
+        @Test
         @TestMetadata("javaFieldAndKotlinProperty.kt")
         public void testJavaFieldAndKotlinProperty() throws Exception {
             runTest("compiler/testData/codegen/box/fieldRename/javaFieldAndKotlinProperty.kt");
@@ -45168,6 +45240,12 @@
         }
 
         @Test
+        @TestMetadata("kt54600.kt")
+        public void testKt54600() throws Exception {
+            runTest("compiler/testData/codegen/box/sam/kt54600.kt");
+        }
+
+        @Test
         @TestMetadata("nonInlinedSamWrapper.kt")
         public void testNonInlinedSamWrapper() throws Exception {
             runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java
index 5d9f39b..6493459 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java
@@ -1133,6 +1133,12 @@
         public void testDelegatedPropertiesInCompanionObject() throws Exception {
             runTest("compiler/testData/codegen/bytecodeListing/delegatedProperty/delegatedPropertiesInCompanionObject.kt");
         }
+
+        @Test
+        @TestMetadata("localDelegatedProperty.kt")
+        public void testLocalDelegatedProperty() throws Exception {
+            runTest("compiler/testData/codegen/bytecodeListing/delegatedProperty/localDelegatedProperty.kt");
+        }
     }
 
     @Nested
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
index 71637d8..9255ac2 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
@@ -1087,6 +1087,12 @@
         }
 
         @Test
+        @TestMetadata("kt53465.kt")
+        public void testKt53465() throws Exception {
+            runTest("compiler/testData/codegen/bytecodeText/checkcast/kt53465.kt");
+        }
+
+        @Test
         @TestMetadata("noCheckcastOnDelegatingDefaultImplsCall.kt")
         public void testNoCheckcastOnDelegatingDefaultImplsCall() throws Exception {
             runTest("compiler/testData/codegen/bytecodeText/checkcast/noCheckcastOnDelegatingDefaultImplsCall.kt");
diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/D8Checker.java b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/D8Checker.java
index 2f15191..27fcbd7 100644
--- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/D8Checker.java
+++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/D8Checker.java
@@ -7,6 +7,7 @@
 
 import com.android.tools.r8.*;
 import com.android.tools.r8.origin.PathOrigin;
+import com.android.tools.r8.utils.ExceptionDiagnostic;
 import kotlin.Pair;
 import org.jetbrains.kotlin.backend.common.output.OutputFile;
 import org.jetbrains.kotlin.test.KtAssert;
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
index 22bfeb0..157411a 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
@@ -3921,6 +3921,21 @@
             KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/casts"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
         }
 
+        @TestMetadata("arrayDowncastingContravariant.kt")
+        public void testArrayDowncastingContravariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncastingContravariant.kt");
+        }
+
+        @TestMetadata("arrayDowncatingInvariant.kt")
+        public void testArrayDowncatingInvariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDowncatingInvariant.kt");
+        }
+
+        @TestMetadata("arrayDownctingCovariant.kt")
+        public void testArrayDownctingCovariant() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/arrayDownctingCovariant.kt");
+        }
+
         @TestMetadata("as.kt")
         public void testAs() throws Exception {
             runTest("compiler/testData/codegen/box/casts/as.kt");
@@ -4026,6 +4041,21 @@
             runTest("compiler/testData/codegen/box/casts/kt50577.kt");
         }
 
+        @TestMetadata("kt54581.kt")
+        public void testKt54581() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54581.kt");
+        }
+
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
@@ -11985,6 +12015,11 @@
                 runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/initializeContainerOfTopLevelProperties.kt");
             }
 
+            @TestMetadata("kt54463_platformType.kt")
+            public void testKt54463_platformType() throws Exception {
+                runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/kt54463_platformType.kt");
+            }
+
             @TestMetadata("memberExtensionPropertyAndImportFromObject.kt")
             public void testMemberExtensionPropertyAndImportFromObject() throws Exception {
                 runTest("compiler/testData/codegen/box/delegatedProperty/delegateToFinalProperty/memberExtensionPropertyAndImportFromObject.kt");
@@ -36006,6 +36041,11 @@
             runTest("compiler/testData/codegen/box/sam/kt52417.kt");
         }
 
+        @TestMetadata("kt54600.kt")
+        public void testKt54600() throws Exception {
+            runTest("compiler/testData/codegen/box/sam/kt54600.kt");
+        }
+
         @TestMetadata("nonInlinedSamWrapper.kt")
         public void testNonInlinedSamWrapper() throws Exception {
             runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
diff --git a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt
index f8dc017..7bb9712 100644
--- a/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt
+++ b/compiler/tests/org/jetbrains/kotlin/cli/LauncherScriptTest.kt
@@ -444,4 +444,10 @@
             workDirectory = subDir
         )
     }
+
+    fun testInterpreterClassLoader() {
+        runProcess(
+            "kotlinc", "$testDataDirectory/interpreterClassLoader.kt", "-d", tmpdir.path
+        )
+    }
 }
diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt
index 4d57de3..9dd1a99 100644
--- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt
+++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt
@@ -286,6 +286,10 @@
     ApproximateIntegerLiteralTypesInReceiverPosition(sinceVersion = null),
 
     // Disabled for indefinite time. Disables restrictions of builder inference without annotation
+    // Note: In 1.7.0, builder inference without annotation was introduced.
+    // However, later we encountered various situations when it works incorrectly, and decided to forbid them.
+    // When this feature is disabled, various errors are reported which are related to these incorrect situations.
+    // When this feature is enabled, no such errors are reported.
     NoBuilderInferenceWithoutAnnotationRestriction(sinceVersion = null, kind = OTHER, defaultState = State.DISABLED),
 
     // Experimental features
diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
index fecceb2..31fc34a 100644
--- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
+++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
@@ -44,8 +44,8 @@
     System.setProperty("java.awt.headless", "true")
     generateTestGroupSuite(args) {
         testGroup("compiler/incremental-compilation-impl/test", "jps/jps-plugin/testData") {
-            fun incrementalJvmTestData(targetBackend: TargetBackend): TestGroup.TestClass.() -> Unit = {
-                model("incremental/pureKotlin", extension = null, recursive = false, targetBackend = targetBackend)
+            fun incrementalJvmTestData(targetBackend: TargetBackend, excludePattern: String? = null): TestGroup.TestClass.() -> Unit = {
+                model("incremental/pureKotlin", extension = null, recursive = false, targetBackend = targetBackend, excludedPattern = excludePattern)
                 model("incremental/classHierarchyAffected", extension = null, recursive = false, targetBackend = targetBackend)
                 model("incremental/inlineFunCallSite", extension = null, excludeParentDirs = true, targetBackend = targetBackend)
                 model("incremental/withJava", extension = null, excludeParentDirs = true, targetBackend = targetBackend)
@@ -53,9 +53,9 @@
             }
             testClass<AbstractIncrementalJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR))
             testClass<AbstractIncrementalJvmOldBackendCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM))
-            testClass<AbstractIncrementalFirJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR))
-            testClass<AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR))
-            testClass<AbstractIncrementalFirLightTreeJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR))
+            testClass<AbstractIncrementalFirJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR, excludePattern = "^.*Expect.*"))
+            testClass<AbstractIncrementalFirICLightTreeJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR, excludePattern = "^.*Expect.*"))
+            testClass<AbstractIncrementalFirLightTreeJvmCompilerRunnerTest>(init = incrementalJvmTestData(TargetBackend.JVM_IR, excludePattern = "^.*Expect.*"))
 
             testClass<AbstractIncrementalJsCompilerRunnerTest> {
                 model("incremental/pureKotlin", extension = null, recursive = false)
diff --git a/gradle.properties b/gradle.properties
index 550cd54..83e36c3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -19,7 +19,7 @@
 #maven.repository.mirror=http://repository.jetbrains.com/remote-repos/
 #bootstrap.kotlin.repo=https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap
 #bootstrap.kotlin.version=1.1.50-dev-1451
-bootstrap.kotlin.default.version=1.7.20-dev-2726
+bootstrap.kotlin.default.version=1.7.21
 
 kotlin.build.publishing.attempts=20
 #signingRequired=true
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt
index 55f68956..30b0ed1 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt
@@ -62,6 +62,7 @@
 import java.io.File
 import java.io.PrintStream
 import java.util.*
+import kotlin.collections.ArrayList
 import kotlin.reflect.jvm.javaField
 
 abstract class AbstractIncrementalJpsTest(
@@ -532,7 +533,7 @@
         }
 
         override fun chunkBuildStarted(context: CompileContext, chunk: ModuleChunk) {
-            logDirtyFiles(markedDirtyBeforeRound) // files can be marked as dirty during build start (KotlinCompileContext initialization)
+            logDirtyFiles(markedDirtyBeforeRound, "ChunkBuildStarted") // files can be marked as dirty during build start (KotlinCompileContext initialization)
 
             if (!chunk.isDummy(context) && context.projectDescriptor.project.modules.size > 1) {
                 logLine("Building ${chunk.modules.sortedBy { it.name }.joinToString { it.name }}")
@@ -540,7 +541,11 @@
         }
 
         override fun afterChunkBuildStarted(context: CompileContext, chunk: ModuleChunk) {
-            logDirtyFiles(markedDirtyBeforeRound)
+            logDirtyFiles(markedDirtyBeforeRound, "After chunkBuildStarted")
+        }
+
+        override fun markedAsComplementaryFiles(files: Collection<File>) {
+            logDirtyFiles(ArrayList(files), "Complementary files")
         }
 
         override fun addCustomMessage(message: String) {
@@ -552,15 +557,15 @@
                 logLine(it)
             }
             customMessages.clear()
-            logDirtyFiles(markedDirtyAfterRound)
+            logDirtyFiles(markedDirtyAfterRound, "After build round")
             logLine("Exit code: $exitCode")
             logLine("------------------------------------------")
         }
 
-        private fun logDirtyFiles(files: MutableList<File>) {
+        private fun logDirtyFiles(files: MutableList<File>, phase: String) {
             if (files.isEmpty()) return
 
-            logLine("Marked as dirty by Kotlin:")
+            logLine("$phase. Marked as dirty by Kotlin:")
             files.apply {
                 map { FileUtil.toSystemIndependentName(it.path) }
                     .sorted()
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java
index 18f1a0a..e8bfb97 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java
@@ -1266,6 +1266,11 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/");
         }
 
+        @TestMetadata("sealedClassesAddIndirectInheritor")
+        public void testSealedClassesAddIndirectInheritor() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/");
+        }
+
         @TestMetadata("sealedClassesAddInheritor")
         public void testSealedClassesAddInheritor() throws Exception {
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/");
@@ -1281,9 +1286,14 @@
             runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/");
         }
 
-        @TestMetadata("sealedClassesUseSwitch")
-        public void testSealedClassesUseSwitch() throws Exception {
-            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/");
+        @TestMetadata("sealedClassesWhenExpression")
+        public void testSealedClassesWhenExpression() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/");
+        }
+
+        @TestMetadata("sealedClassesWithExpectActual")
+        public void testSealedClassesWithExpectActual() throws Exception {
+            runTest("jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/");
         }
 
         @TestMetadata("secondaryConstructorInlined")
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
index 3feb184..2660850 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
@@ -908,6 +908,7 @@
                 }
 
                 override fun afterChunkBuildStarted(context: CompileContext, chunk: ModuleChunk) {}
+                override fun markedAsComplementaryFiles(files: Collection<File>) {}
                 override fun invalidOrUnusedCache(
                     chunk: KotlinChunk?,
                     target: KotlinModuleBuildTarget<*>?,
diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt
index 206d77d..ded9acd 100644
--- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt
+++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt
@@ -52,6 +52,7 @@
 import org.jetbrains.kotlin.utils.PathUtil
 import java.io.File
 import java.util.*
+import kotlin.collections.ArrayList
 import kotlin.collections.HashSet
 import kotlin.system.measureTimeMillis
 
@@ -595,7 +596,7 @@
                 val targetDirtyFiles = dirtyFilesHolder.byTarget[jpsTarget]
                 if (cache != null && targetDirtyFiles != null) {
                     val complementaryFiles = cache.getComplementaryFilesRecursive(targetDirtyFiles.dirty.keys + targetDirtyFiles.removed)
-
+                    context.testingContext?.buildLogger?.markedAsComplementaryFiles(ArrayList(complementaryFiles))
                     fsOperations.markFilesForCurrentRound(jpsTarget, complementaryFiles)
 
                     cache.markDirty(targetDirtyFiles.dirty.keys + targetDirtyFiles.removed)
diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt
index 9beec30..4016110 100644
--- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt
+++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/TestingBuildLogger.kt
@@ -29,6 +29,7 @@
     fun invalidOrUnusedCache(chunk: KotlinChunk?, target: KotlinModuleBuildTarget<*>?, attributesDiff: CacheAttributesDiff<*>) = Unit
     fun chunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) = Unit
     fun afterChunkBuildStarted(context: CompileContext, chunk: org.jetbrains.jps.ModuleChunk) = Unit
+    fun markedAsComplementaryFiles(files: Collection<File>) = Unit
     fun compilingFiles(files: Collection<File>, allRemovedFilesFiles: Collection<File>) = Unit
     fun addCustomMessage(message: String) = Unit
     fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) = Unit
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/build.log
index d02fa1e..b32f770 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/build.log
@@ -2,7 +2,7 @@
 
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
@@ -15,7 +15,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/B.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
@@ -28,7 +28,7 @@
 ------------------------------------------
 Building module3
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module3' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module3/src/C.kt
 Cleaning output files:
   out/production/module3/META-INF/module3.kotlin_module
@@ -41,7 +41,7 @@
 ------------------------------------------
 Building module4
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module4/src/D.kt
 Cleaning output files:
   out/production/module4/D/D.class
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/data-container-version-build.log
index 7090b81..af4bcba 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
   module2/src/B.kt
   module3/src/C.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log
index cb094cc..c0788ed 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log
@@ -5,7 +5,7 @@
 ------------------------------------------
 Building module4
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module4/src/d.kt
 Cleaning output files:
   out/production/module4/META-INF/module4.kotlin_module
@@ -18,7 +18,7 @@
 ------------------------------------------
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
@@ -32,7 +32,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/b.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
@@ -45,7 +45,7 @@
 ------------------------------------------
 Building module3
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module3' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module3/src/c.kt
 Cleaning output files:
   out/production/module3/META-INF/module3.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log
index ed687a7..fef6001 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
   module2/src/b.kt
   module3/src/c.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/build.log
index ab0f369..3ee7a5b 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/build.log
@@ -2,7 +2,7 @@
 
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
@@ -16,7 +16,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/b.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/data-container-version-build.log
index 06ec947..2f44936 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/module2Modified/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
   module2/src/b.kt
 Building module1
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log
index 91b9331..ef02751 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log
@@ -2,7 +2,7 @@
 
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
@@ -15,7 +15,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/B.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log
index 4cc059a..42104b2 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
   module2/src/B.kt
 Building module1
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log
index 782a86c..fb4166f 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log
@@ -2,7 +2,7 @@
 
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
@@ -16,7 +16,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/B.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log
index 7f894f1..99bdf1e 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/A.kt
   module2/src/B.kt
 Building module1
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log
index e20f957..5cbb2be 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
   src/other.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/data-container-version-build.log
index 74e2feb..111ad0a 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
   src/other.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log
index 5c83283..7f98df8 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
   src/other.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log
index 53226e3..bb8773e 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
   src/other.kt
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/build.log
index f8e9946..2893ee2 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/data-container-version-build.log
index 62e214f..fce3457 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log
index 867b055..5aa5907 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log
@@ -5,7 +5,7 @@
 ------------------------------------------
 Building module4
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module4/src/d.kt
 Cleaning output files:
   out/production/module4/META-INF/module4.kotlin_module
@@ -18,7 +18,7 @@
 ------------------------------------------
 Building module1
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
   module1/src/f.kt
 Cleaning output files:
@@ -53,7 +53,7 @@
 ------------------------------------------
 Building module2
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module2' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/b.kt
 Cleaning output files:
   out/production/module2/META-INF/module2.kotlin_module
@@ -66,7 +66,7 @@
 ------------------------------------------
 Building module3
 Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module3' production) are INVALID
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module3/src/c.kt
 Cleaning output files:
   out/production/module3/META-INF/module3.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log b/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log
index 1ca540d..d3574a1 100644
--- a/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log
+++ b/jps/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 add file with compilation error to module1 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
   module1/src/f.kt
   module2/src/b.kt
diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log
index f02b9c5..ac6b379 100644
--- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log
+++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log
@@ -36,7 +36,7 @@
 ================ Step #2 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/z.kt
   module2/src/a.kt
   module2/src/b.kt
@@ -101,7 +101,7 @@
 Compiling files:
   module2/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOnJavaChanged/build.log b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOnJavaChanged/build.log
index 046b885..6367912 100644
--- a/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOnJavaChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOnJavaChanged/build.log
@@ -17,7 +17,7 @@
 ================ Step #2 =================
 
 Lookups cache are INVALID
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
   module2/src/c.kt
   module3/src/d.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationFlagRemoved/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationFlagRemoved/build.log
index b70458d..f4fd280 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationFlagRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationFlagRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/Ann1.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/UseAnn1Class.kt
   src/useAnn1Fun.kt
   src/useAnn1Val.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationListChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationListChanged/build.log
index ab20a6a..9904e04 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationListChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/annotationListChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
@@ -62,7 +62,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/bridgeGenerated/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/bridgeGenerated/build.log
index 8bed89d..819e20f 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/bridgeGenerated/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/bridgeGenerated/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/AChild.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameFinal/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameFinal/build.log
index 885ef88..2cf96e9 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameFinal/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameFinal/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameInterface/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameInterface/build.log
index 302867e..3dcaacf 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameInterface/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecameInterface/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecamePrivate/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecamePrivate/build.log
index 0ce14b0..c651af6 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecamePrivate/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classBecamePrivate/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classMovedIntoOtherClass/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classMovedIntoOtherClass/build.log
index fce0dad..0b0fcc0 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classMovedIntoOtherClass/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classMovedIntoOtherClass/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/A.kt
   src/B.kt
   src/C.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemoved/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemoved/build.log
index 924010e..69ad0a4 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemoved/build.log
@@ -4,7 +4,7 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/foo/A.class
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/B.kt
   src/C.kt
   src/createA.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemovedAndRestored/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemovedAndRestored/build.log
index 0b22828..a81a6d8 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemovedAndRestored/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/classRemovedAndRestored/build.log
@@ -4,7 +4,7 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/foo/A.class
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/B.kt
   src/createA.kt
   src/createB.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectInheritedMemberChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectInheritedMemberChanged/build.log
index 880e216..f86aeef 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectInheritedMemberChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectInheritedMemberChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/A.kt
   src/companionExtension.kt
   src/companionReferenceExplicit.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectMemberChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectMemberChanged/build.log
index db1bb1a..3e63373 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectMemberChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectMemberChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/companionExtension.kt
   src/companionReferenceExplicit.kt
   src/companionReferenceImplicit.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectNameChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectNameChanged/build.log
index 6ac7ec0..f1ad4e0 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectNameChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectNameChanged/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/A.kt
   src/companionExtension.kt
   src/companionReferenceExplicit.kt
@@ -29,7 +29,7 @@
   src/companionExtension.kt
   src/companionReferenceExplicit.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/companionReferenceImplicit.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectToSimpleObject/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectToSimpleObject/build.log
index 7f1637a..da893e5 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectToSimpleObject/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/companionObjectToSimpleObject/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/companionExtension.kt
   src/companionReferenceExplicit.kt
   src/companionReferenceImplicit.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/constructorVisibilityChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/constructorVisibilityChanged/build.log
index a58d772..8767e4b 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/constructorVisibilityChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/constructorVisibilityChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/createA.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log
index 9b457f3..19ba525 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/Enum.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/getRandomEnumEntry.kt
   src/use.kt
   src/useEnumImplicitly.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log
index 625f716..c6af34a 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/Enum.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/getRandomEnumEntry.kt
   src/use.kt
   src/useEnumImplicitly.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumMemberChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumMemberChanged/build.log
index de046be..2129e5b 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumMemberChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/enumMemberChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/Enum.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useBecameNullable.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInDifferentClassesChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInDifferentClassesChanged/build.log
index 0f6b6b5..c474625 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInDifferentClassesChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInDifferentClassesChanged/build.log
@@ -10,7 +10,7 @@
   src/AParent.kt
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/importA.kt
   src/importAChild.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInSameClassChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInSameClassChanged/build.log
index 354e1d4a..10b35c3 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInSameClassChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/flagsAndMemberInSameClassChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/getA.kt
   src/getB.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/implcitUpcast/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/implcitUpcast/build.log
index 96b6b83..0a6b34a 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/implcitUpcast/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/implcitUpcast/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/C.kt
   src/callUseAWithB.kt
   src/callUseAWithC.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeArgumentChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeArgumentChanged/build.log
index 6f82612..a961bc4 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeArgumentChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeArgumentChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/C.kt
   src/getListOfB.kt
   src/getListOfC.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeChanged/build.log
index 5db82eb..a83b19f 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/inferredTypeChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/C.kt
   src/getB.kt
   src/getBorC.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/build.log
index c9d58c7..824a9ab 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/lambdaParameterAffected/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/consumeBExtLambda.kt
   src/consumeBLambda.kt
   src/useConsumeBExtLambda.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/build.log
index 42d665f..ca47384 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAnnotationAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAnnotationAdded/build.log
index 42d665f..ca47384 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAnnotationAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodAnnotationAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodNullabilityChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodNullabilityChanged/build.log
index 09190cc..63dec95a 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodNullabilityChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodNullabilityChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodParameterWithDefaultValueAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodParameterWithDefaultValueAdded/build.log
index 42d665f..ca47384 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodParameterWithDefaultValueAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodParameterWithDefaultValueAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodRemoved/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodRemoved/build.log
index 98d534a..9e00f5a 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/methodRemoved/build.log
@@ -8,7 +8,7 @@
   src/A.kt
   src/utils.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideExplicit/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideExplicit/build.log
index 2d9097f7..b406a6e 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideExplicit/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideExplicit/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideImplicit/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideImplicit/build.log
index 6c6feca..f212374 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideImplicit/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/overrideImplicit/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/BA.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/propertyNullabilityChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/propertyNullabilityChanged/build.log
index 24ab5d1..9ed7cdb 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/propertyNullabilityChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/propertyNullabilityChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log
index 9595fe1..96fb1e4 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassImplAdded/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   src/Base.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/use.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log
index 81586cc..84ed09e 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassIndirectImplAdded/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   src/Base.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/use.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log
index 251ff31..037ce16 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/sealedClassNestedImplAdded/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   src/Base.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/use.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/build.log
index e6347e4..9bcb313 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/build.log
@@ -24,7 +24,7 @@
   src/A.kt
   src/createAFromString.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/createAFromInt.kt
   src/useA.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/fir-ic-build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/fir-ic-build.log
index 87cfda8c..f2a4dad 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/fir-ic-build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/secondaryConstructorAdded/fir-ic-build.log
@@ -24,7 +24,6 @@
 Compiling files:
   src/A.kt
   src/AChild.kt
-  src/AConstructorFunction.kt
   src/createAFromInt.kt
   src/createAFromString.kt
   src/useA.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/starProjectionUpperBoundChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/starProjectionUpperBoundChanged/build.log
index 15d6c05..485cf85 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/starProjectionUpperBoundChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/starProjectionUpperBoundChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AStarDeclaration.kt
   src/CallGetAStar.kt
   src/getAStar.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/supertypesListChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/supertypesListChanged/build.log
index 247b87b..0809861 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/supertypesListChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/supertypesListChanged/build.log
@@ -8,7 +8,7 @@
   src/A.kt
   src/AParent.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
@@ -62,7 +62,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/typeParameterListChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/typeParameterListChanged/build.log
index 4779b93..ac196c0 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/typeParameterListChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/typeParameterListChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/AGrandChild.kt
   src/ATypeParameter.kt
diff --git a/jps/jps-plugin/testData/incremental/classHierarchyAffected/varianceChanged/build.log b/jps/jps-plugin/testData/incremental/classHierarchyAffected/varianceChanged/build.log
index 6cc3c6f..ee581a7 100644
--- a/jps/jps-plugin/testData/incremental/classHierarchyAffected/varianceChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/classHierarchyAffected/varianceChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/D.kt
   src/useA.kt
   src/useD.kt
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/classProperty/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/classProperty/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/classProperty/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/classProperty/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/companionObjectProperty/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/companionObjectProperty/build.log
index ac49f40..8e4e51e 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/companionObjectProperty/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/companionObjectProperty/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log
index bc387a97..6ee5042 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/coroutine/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/function/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/function/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/function/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/function/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/getter/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/getter/build.log
index 3aee887..ef833dc 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/getter/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/getter/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
   src/topLevelUsage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/lambda/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/lambda/build.log
index 83eeb57..6603a3d 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/lambda/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/lambda/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/localFun/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/localFun/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/localFun/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/localFun/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/method/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/method/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/method/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/method/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/parameterDefaultValue/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/parameterDefaultValue/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/parameterDefaultValue/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/parameterDefaultValue/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/primaryConstructorParameterDefaultValue/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/primaryConstructorParameterDefaultValue/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/primaryConstructorParameterDefaultValue/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/primaryConstructorParameterDefaultValue/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/superCall/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/superCall/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/superCall/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/superCall/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/thisCall/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/thisCall/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/thisCall/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/thisCall/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelObjectProperty/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelObjectProperty/build.log
index 70b880e..b8907a5 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelObjectProperty/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelObjectProperty/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelProperty/build.log b/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelProperty/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelProperty/build.log
+++ b/jps/jps-plugin/testData/incremental/inlineFunCallSite/topLevelProperty/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/build.log b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/build.log
index f7eb1e8..9953aba 100644
--- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/build.log
+++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/constant/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/constant.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/build.log b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/build.log
+++ b/jps/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionWithUsage/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/build.log
index 7836e2f..939425a 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   module2/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/B.kt
   module2/src/createA.kt
   module2/src/createB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/js-jps-build.log
index 3df78bc..804f985 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/classAdded/js-jps-build.log
@@ -7,7 +7,7 @@
 Compiling files:
   module2/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/B.kt
   module2/src/createA.kt
   module2/src/createB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/build.log
index f062010..e704c12 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/build.log
@@ -8,7 +8,7 @@
   out/production/module2/foo/A.class
 End of files
 Building module2
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/B.kt
   module2/src/createA.kt
   module2/src/createB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/js-jps-build.log
index 70c139a..3ca4406 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/classRemoved/js-jps-build.log
@@ -4,7 +4,7 @@
 Exit code: NOTHING_DONE
 ------------------------------------------
 Building module2
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/B.kt
   module2/src/createA.kt
   module2/src/createB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/build.log
index 5c1d1a5..b00d9ff 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/js-jps-build.log
index 4a577ac..2aeed36 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/constantValueChanged/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/build.log
index b10de0a..749859d 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/build.log
@@ -4,7 +4,7 @@
 Compiling files:
   module1/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
   module2/src/useClassB.kt
   module2/src/useFunB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/js-jps-build.log
index 52437a4d..f5a9419 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/copyFileToAnotherModule/js-jps-build.log
@@ -4,7 +4,7 @@
 Compiling files:
   module1/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
   module2/src/useClassB.kt
   module2/src/useFunB.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/build.log
index eeeb3ad..a367b8b 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/createADefault.kt
   module2/src/createANonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/js-jps-build.log
index e2af6fd..df58489 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultArgumentInConstructorRemoved/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/createADefault.kt
   module2/src/createANonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/build.log
index 3641d30..a76a10c 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/js-jps-build.log
index 96900e7..f29645f 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAdded/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/build.log
index 341318a..8bfbb29 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/js-jps-build.log
index 96900e7..f29645f 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterAddedForTopLevelFun/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/build.log
index 3641d30..a76a10c 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/js-jps-build.log
index 96900e7..f29645f 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemoved/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/build.log
index 341318a..8bfbb29 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/js-jps-build.log
index 96900e7..f29645f 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultParameterRemovedForTopLevelFun/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/build.log
index 73dd59f..01cf8b8 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/createADefault.kt
   module2/src/createANonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/js-jps-build.log
index e2fa2d0..fa2dc82 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/defaultValueInConstructorRemoved/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/createADefault.kt
   module2/src/createANonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/build.log
index 6f49ab1..b45f085 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module3/src/AGrandChild.kt
   module3/src/importAGrandChild.kt
@@ -41,7 +41,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module3/src/AGrandChild.kt
   module3/src/importAGrandChild.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/js-jps-build.log
index 8bdfe13..035801b 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/exportedDependency/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module3/src/AGrandChild.kt
   module3/src/importAGrandChild.kt
@@ -44,7 +44,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module3/src/AGrandChild.kt
   module3/src/importAGrandChild.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/build.log
index 676df62..a7d1e36 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/foo.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/useFoo.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/js-jps-build.log
index af9ede2..51645bf 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/functionFromDifferentPackageChanged/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/foo.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/useFoo.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/build.log
index 55bc9b6..dc42992 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/js-jps-build.log
index d8abf06..2c8fb84 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionInlined/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/build.log
index ef3b395..080cc7a 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/inlineF.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usageF.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -35,7 +35,7 @@
 Compiling files:
   module1/src/inlineG.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usageG.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/js-jps-build.log
index b847314..27f2ade 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/inlineFunctionTwoPackageParts/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/inlineF.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usageF.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -38,7 +38,7 @@
 Compiling files:
   module1/src/inlineG.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/usageG.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/build.log
index 45d7dfb..91948733 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/build.log
@@ -4,7 +4,7 @@
 Compiling files:
   module1/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/useClassB.kt
   module2/src/useFunB.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
@@ -17,7 +17,7 @@
   out/production/module2/b/BKt.class
 End of files
 Building module2
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/useClassB.kt
 Cleaning output files:
   out/production/module2/usage/UseClassBKt.class
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/js-jps-build.log
index f9e2f1d..aa59d60 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/moveFileToAnotherModule/js-jps-build.log
@@ -4,7 +4,7 @@
 Compiling files:
   module1/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/useClassB.kt
   module2/src/useFunB.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
@@ -12,7 +12,7 @@
 Exit code: NOTHING_DONE
 ------------------------------------------
 Building module2
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module2/src/useClassB.kt
 Cleaning output files:
   out/production/module2/module2.js
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simple/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simple/build.log
index fe9147a..bf2d6f7 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simple/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simple/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module2/src/importA.kt
   module3/src/importAChild.kt
@@ -42,7 +42,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module2/src/importA.kt
   module3/src/importAChild.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simple/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simple/js-jps-build.log
index 0fbb2d9..0765876 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simple/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simple/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module2/src/importA.kt
   module3/src/importAChild.kt
@@ -45,7 +45,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/AChild.kt
   module2/src/importA.kt
   module3/src/importAChild.kt
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/build.log
index 6ddaba7..4da3427 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/js-jps-build.log
index 2301a16..284f592 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependency/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/build.log
index 21e1a57..2e5555a 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/build.log
@@ -11,7 +11,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/js-jps-build.log
index 654c739..b6574c8 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal1/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/build.log
index c2879e0..8ca8f24 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Building module1
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
 Cleaning output files:
   out/production/module1/META-INF/module1.kotlin_module
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/js-jps-build.log
index 52ab460..23af5c3 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/simpleDependencyErrorOnAccessToInternal2/js-jps-build.log
@@ -1,7 +1,7 @@
 ================ Step #1 =================
 
 Building module1
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   module1/src/a.kt
 Cleaning output files:
   out/production/module1/module1.js
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/build.log
index 4efd215..2880a9d 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/js-jps-build.log
index 13f1146..1f3b690 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveDependency/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/build.log
index a164a0f..8005361 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -22,7 +22,7 @@
 Compiling files:
   module2/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module3/src/c.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/js-jps-build.log
index e3aee07..9d04979 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/transitiveInlining/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -24,7 +24,7 @@
 Compiling files:
   module2/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module3/src/c.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/build.log b/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/build.log
index e15db13..80d0b5f 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
   module3/src/c.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/js-jps-build.log b/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/js-jps-build.log
index 89c5bf4..31895a3 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/js-jps-build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/common/twoDependants/js-jps-build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module1/src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module2/src/b.kt
   module3/src/c.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/jvm/circular/build.log b/jps/jps-plugin/testData/incremental/multiModule/jvm/circular/build.log
index 2174506..0316a69 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/jvm/circular/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/jvm/circular/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   module1/src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module1/src/D.kt
   module2/src/B.kt
   module3/src/C.kt
@@ -54,7 +54,7 @@
 Compiling files:
   module3/src/C.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module4/src/E.kt
   module5/src/F.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/multiModule/jvm/circularDependencyClasses/build.log b/jps/jps-plugin/testData/incremental/multiModule/jvm/circularDependencyClasses/build.log
index c779a39..db72cae 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/jvm/circularDependencyClasses/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/jvm/circularDependencyClasses/build.log
@@ -9,7 +9,7 @@
 Compiling files:
   module2/src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   module1/src/a.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log
index 104fae8..5a5c9d5 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError/build.log
@@ -7,6 +7,8 @@
   out/production/pJs/pJs.meta.js
   out/production/pJs/pJs/root-package.kjsm
 End of files
+Complementary files. Marked as dirty by Kotlin:
+  pJs/src/fJs.kt
 Compiling files:
   c/src/f.kt
   pJs/src/fJs.kt
@@ -31,6 +33,8 @@
 Cleaning output files:
   out/production/pJvm/META-INF/pJvm.kotlin_module
 End of files
+Complementary files. Marked as dirty by Kotlin:
+  pJvm/src/fJvm.kt
 Cleaning output files:
   out/production/pJvm/FJvmKt.class
 End of files
diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log
index 75f18a0..95b7cff 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/buildError2Levels/build.log
@@ -7,6 +7,9 @@
   out/production/pJs/pJs.meta.js
   out/production/pJs/pJs/root-package.kjsm
 End of files
+Complementary files. Marked as dirty by Kotlin:
+  c/src/g.kt
+  pJs/src/fg.kt
 Compiling files:
   c/src/f.kt
   c/src/g.kt
@@ -22,6 +25,8 @@
 
 Building c
 Building pJs
+Complementary files. Marked as dirty by Kotlin:
+  c/src/g.kt
 Compiling files:
   c/src/f.kt
   c/src/g.kt
@@ -29,12 +34,15 @@
 End of files
 Exit code: OK
 ------------------------------------------
-Marked as dirty by Kotlin:
+ChunkBuildStarted. Marked as dirty by Kotlin:
   c/src/g.kt
 Building pJvm
 Cleaning output files:
   out/production/pJvm/META-INF/pJvm.kotlin_module
 End of files
+Complementary files. Marked as dirty by Kotlin:
+  c/src/g.kt
+  pJvm/src/fg.kt
 Cleaning output files:
   out/production/pJvm/FgKt.class
 End of files
diff --git a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log
index 3a90f366..5316c8b 100644
--- a/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log
+++ b/jps/jps-plugin/testData/incremental/multiModule/multiplatform/custom/complementaryFiles/build.log
@@ -6,6 +6,8 @@
   out/production/pJvm/FJvmKt.class
   out/production/pJvm/META-INF/pJvm.kotlin_module
 End of files
+Complementary files. Marked as dirty by Kotlin:
+  c/src/f.kt
 Cleaning output files:
   out/production/pJvm/FKt.class
 End of files
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/addClass/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/addClass/build.log
index 9d2a2de..b03554c 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/addClass/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/addClass/build.log
@@ -3,7 +3,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/funA.kt
   src/useA.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/addFileWithFunctionOverload/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/addFileWithFunctionOverload/build.log
index 3d8ecd1..d21fe55 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/addFileWithFunctionOverload/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/addFileWithFunctionOverload/build.log
@@ -3,7 +3,7 @@
 Compiling files:
   src/foo2.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/foo1.kt
   src/use.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log
index 2b216fb..feefb42 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/addMemberTypeAlias/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a1Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log
index 4f5133e..034d7c3 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/addTopLevelTypeAlias/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a1Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/allConstants/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/allConstants/build.log
index 4a46633..665accc 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/allConstants/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/allConstants/build.log
@@ -19,7 +19,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/changeTypeImplicitlyWithCircularDependency/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/changeTypeImplicitlyWithCircularDependency/build.log
index a958ab5..e7baa4a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/changeTypeImplicitlyWithCircularDependency/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/changeTypeImplicitlyWithCircularDependency/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/usage1.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage2.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -18,7 +18,7 @@
 Compiling files:
   src/usage2.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage1.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/classInlineFunctionChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/classInlineFunctionChanged/build.log
index 0c97baf..66f8881 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/classInlineFunctionChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/classInlineFunctionChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/classObjectConstantChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/classObjectConstantChanged/build.log
index 0413c6c..7c73463 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/classObjectConstantChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/classObjectConstantChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/build.log
index 63944eb..e59b9b9 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/class.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log
index 9eb0e62..0b4416d 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/companionConstantChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/C.kt
   src/companionUsage.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixedWithPhantomPart3/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixedWithPhantomPart3/build.log
index 0833087..57c6993 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixedWithPhantomPart3/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/compilationErrorThenFixedWithPhantomPart3/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/other.kt
   src/usage.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log
index 7bee545..a26a34b 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/constantRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/build.log
index 9a77b78..c44889d 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/constantValueChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorAdded/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorAdded/build.log
index 6120b0c..2b639c7 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/createA.kt
   src/useA.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorRemoved/build.log
index 6b9705b..e2d7eff 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultArgumentInConstructorRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/createADefault.kt
   src/createANonDefault.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueAdded/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueAdded/build.log
index 9c5c62e..23c7f99 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault.kt
   src/useNonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueInConstructorRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueInConstructorRemoved/build.log
index dbd011c..efae3a3 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueInConstructorRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueInConstructorRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/createADefault.kt
   src/createANonDefault.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved1/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved1/build.log
index a2c286b..2f24af9 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved1/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved1/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault.kt
   src/useNonDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved2/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved2/build.log
index 63fae62..b3fd718 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved2/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/defaultValueRemoved2/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault1.kt
   src/useDefault2.kt
   src/useNonDefault.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineExtensionAccessor/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineExtensionAccessor/build.log
index 2de0bdb..537f2bc 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineExtensionAccessor/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineExtensionAccessor/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inlineGet.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/UsageVal.kt
   src/UsageVar.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
@@ -33,7 +33,7 @@
 Compiling files:
   src/inlineSet.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/UsageVar.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineMethodAccessor/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineMethodAccessor/build.log
index 4c198b3..ee15496 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineMethodAccessor/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/delegatedPropertyInlineMethodAccessor/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/UsageVal.kt
   src/UsageVar.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
@@ -33,7 +33,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/UsageVar.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/fileWithConstantRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/fileWithConstantRemoved/build.log
index fbb3cee..d1d90dc 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/fileWithConstantRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/fileWithConstantRemoved/build.log
@@ -6,7 +6,7 @@
 End of files
 Compiling files:
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/fileWithInlineFunctionRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/fileWithInlineFunctionRemoved/build.log
index 98e6b08..d9f9291 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/fileWithInlineFunctionRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/fileWithInlineFunctionRemoved/build.log
@@ -6,7 +6,7 @@
 End of files
 Compiling files:
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log
index 7813ba9..ecaae63 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/functionBecameInline/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionBecomesNonInline/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionBecomesNonInline/build.log
index cbce054..6baaeb0 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionBecomesNonInline/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionBecomesNonInline/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useInline.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionsCircularDependency/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionsCircularDependency/build.log
index 1a5df78..581618c 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionsCircularDependency/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlineFunctionsCircularDependency/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -18,7 +18,7 @@
 Compiling files:
   src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlineLinesChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlineLinesChanged/build.log
index c1da0ac..23d531e 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlineLinesChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlineLinesChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useG.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyInClass/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyInClass/build.log
index d2cee84..b88aa00 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyInClass/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyInClass/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useSetter.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -30,7 +30,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useGetter.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyOnTopLevel/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyOnTopLevel/build.log
index 9f1d5f3..eac89c8 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyOnTopLevel/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlinePropertyOnTopLevel/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useSetter.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -30,7 +30,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useGetter.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlineSuspendFunctionChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlineSuspendFunctionChanged/build.log
index cbce054..6baaeb0 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlineSuspendFunctionChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlineSuspendFunctionChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useInline.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/build.log
index d5bbb4e..d0487be 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/inlineTwoFunctionsOneChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usesG.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/moveFileWithChangingPackage/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/moveFileWithChangingPackage/build.log
index 64efa26..a5caee7 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/moveFileWithChangingPackage/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/moveFileWithChangingPackage/build.log
@@ -5,7 +5,7 @@
   out/production/module/foo/AKt.class
   out/production/module/foo/Foo.class
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/useClass.kt
 Cleaning output files:
   out/production/module/baz/UseClassKt.class
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/objectConstantChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/objectConstantChanged/build.log
index 261ecf1..663bce5 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/objectConstantChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/objectConstantChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/packageConstantChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/packageConstantChanged/build.log
index d140a27..635e13a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/packageConstantChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/packageConstantChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueAdded/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueAdded/build.log
index d037621..7624d3a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueAdded/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -30,7 +30,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueRemoved/build.log
index 1594b2d..6d2d15d 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueRemoved/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/parameterWithDefaultValueRemoved/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useDefault.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanion/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanion/build.log
index 4e6bb52..d5e43e3 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanion/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanion/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/A.kt
 Cleaning output files:
   out/production/module/META-INF/module.kotlin_module
@@ -10,7 +10,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useA.kt
   src/useAbar.kt
   src/useAfoo.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanionWithImplicitUsages/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanionWithImplicitUsages/build.log
index f8efb41..7d48420 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanionWithImplicitUsages/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeAndRestoreCompanionWithImplicitUsages/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/A.kt
   src/getACompanion.kt
   src/getACompanionShort.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeClass/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeClass/build.log
index 1c0af20..7e769aa 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeClass/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeClass/build.log
@@ -4,7 +4,7 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/foo/A.class
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/funA.kt
   src/useA.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeClassInDefaultPackage/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeClassInDefaultPackage/build.log
index 4686e03..9dc0f16 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeClassInDefaultPackage/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeClassInDefaultPackage/build.log
@@ -4,7 +4,7 @@
   out/production/module/A.class
   out/production/module/META-INF/module.kotlin_module
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/funA.kt
   src/useA.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeFileWithFunctionOverload/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeFileWithFunctionOverload/build.log
index bd46dda..3bc9a1a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeFileWithFunctionOverload/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeFileWithFunctionOverload/build.log
@@ -10,7 +10,7 @@
 Compiling files:
   src/use.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/foo1.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log
index 2b216fb..feefb42 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeMemberTypeAlias/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a1Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log
index 4f5133e..034d7c3 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/removeTopLevelTypeAlias/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/a.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a1Usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameClass/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/renameClass/build.log
index 5705976..2b1d94a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/renameClass/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameClass/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/A.kt
   src/funs.kt
   src/useA.kt
@@ -15,7 +15,7 @@
   src/funs.kt
   src/useA.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useB.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/build.log
index e2768cb..610ff77 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/build.log
@@ -11,7 +11,7 @@
   src/foo3.kt
   src/useF.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/foo1.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/returnTypeChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/returnTypeChanged/build.log
index bd04740..3aa1054 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/returnTypeChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/returnTypeChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/fun.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/build.log
index 2b74053..2563c3a 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddImplements/build.log
@@ -7,17 +7,20 @@
 Compiling files:
   src/B.kt
 End of files
-Marked as dirty by Kotlin:
-  src/A.kt
-  src/B.kt
+After build round. Marked as dirty by Kotlin:
   src/Base.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
 Cleaning output files:
   out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/Base.class
+End of files
+Complementary files. Marked as dirty by Kotlin:
+  src/A.kt
+  src/B.kt
+Cleaning output files:
   out/production/module/test/A.class
   out/production/module/test/B.class
-  out/production/module/test/Base.class
 End of files
 Compiling files:
   src/A.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/A.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/A.kt
similarity index 100%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/A.kt
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/A.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/B.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/B.kt
similarity index 100%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/B.kt
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/B.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/Base.kt
similarity index 100%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/Base.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt
new file mode 100644
index 0000000..d3c40f5
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt
@@ -0,0 +1,3 @@
+package test
+
+open class C : Any()
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt.new
new file mode 100644
index 0000000..d419193
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/C.kt.new
@@ -0,0 +1,3 @@
+package test
+
+open class C : Base
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/D.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/D.kt
new file mode 100644
index 0000000..cd964407
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/D.kt
@@ -0,0 +1,3 @@
+package test
+
+class D : C()
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/args.txt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/args.txt
similarity index 100%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/args.txt
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/args.txt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/build.log
similarity index 82%
rename from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log
rename to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/build.log
index d158195..e5fc782 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddIndirectInheritor/build.log
@@ -1,20 +1,29 @@
 ================ Step #1 =================
 
+Cleaning output files:
+  out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/C.class
+End of files
 Compiling files:
   src/C.kt
 End of files
-Marked as dirty by Kotlin:
-  src/A.kt
-  src/B.kt
+After build round. Marked as dirty by Kotlin:
   src/Base.kt
-  src/C.kt
+  src/D.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
 Cleaning output files:
   out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/Base.class
+  out/production/module/test/D.class
+End of files
+Complementary files. Marked as dirty by Kotlin:
+  src/A.kt
+  src/B.kt
+  src/C.kt
+Cleaning output files:
   out/production/module/test/A.class
   out/production/module/test/B.class
-  out/production/module/test/Base.class
   out/production/module/test/C.class
 End of files
 Compiling files:
@@ -22,16 +31,6 @@
   src/B.kt
   src/Base.kt
   src/C.kt
-End of files
-Marked as dirty by Kotlin:
-  src/D.kt
-Exit code: ADDITIONAL_PASS_REQUIRED
-------------------------------------------
-Cleaning output files:
-  out/production/module/META-INF/module.kotlin_module
-  out/production/module/test/D.class
-End of files
-Compiling files:
   src/D.kt
 End of files
 Exit code: OK
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/build.log
index 59554ef..57fb956 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesAddInheritor/build.log
@@ -3,18 +3,21 @@
 Compiling files:
   src/C.kt
 End of files
-Marked as dirty by Kotlin:
-  src/A.kt
-  src/B.kt
+After build round. Marked as dirty by Kotlin:
   src/Base.kt
-  src/C.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
 Cleaning output files:
   out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/Base.class
+End of files
+Complementary files. Marked as dirty by Kotlin:
+  src/A.kt
+  src/B.kt
+  src/C.kt
+Cleaning output files:
   out/production/module/test/A.class
   out/production/module/test/B.class
-  out/production/module/test/Base.class
   out/production/module/test/C.class
 End of files
 Compiling files:
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveImplements/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveImplements/build.log
index 379d4b7..c7bc1a8 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveImplements/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveImplements/build.log
@@ -4,19 +4,11 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/test/B.class
 End of files
-Compiling files:
-  src/B.kt
-End of files
-Marked as dirty by Kotlin:
+Complementary files. Marked as dirty by Kotlin:
   src/A.kt
-  src/B.kt
   src/Base.kt
-Exit code: ADDITIONAL_PASS_REQUIRED
-------------------------------------------
 Cleaning output files:
-  out/production/module/META-INF/module.kotlin_module
   out/production/module/test/A.class
-  out/production/module/test/B.class
   out/production/module/test/Base.class
 End of files
 Compiling files:
@@ -24,7 +16,7 @@
   src/B.kt
   src/Base.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/BaseUsage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/build.log
index cb874b1..83371f9 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesRemoveInheritor/build.log
@@ -4,15 +4,10 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/test/B.class
 End of files
-Compiling files:
-End of files
-Marked as dirty by Kotlin:
+Complementary files. Marked as dirty by Kotlin:
   src/A.kt
   src/Base.kt
-Exit code: ADDITIONAL_PASS_REQUIRED
-------------------------------------------
 Cleaning output files:
-  out/production/module/META-INF/module.kotlin_module
   out/production/module/test/A.class
   out/production/module/test/Base.class
 End of files
@@ -20,7 +15,7 @@
   src/A.kt
   src/Base.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/BaseUsage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/C.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/C.kt.new
deleted file mode 100644
index da276aa..0000000
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/C.kt.new
+++ /dev/null
@@ -1,3 +0,0 @@
-package test
-
-interface C : Base
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/D.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/D.kt
deleted file mode 100644
index 7123765..0000000
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/D.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package test
-
-class D {
-    lateinit var x: Base
-}
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/E.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/E.kt
deleted file mode 100644
index 7a1c358..0000000
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/E.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package test
-
-class E {
-}
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/A.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/A.kt
similarity index 100%
rename from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/A.kt
rename to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/A.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/B.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/B.kt
similarity index 100%
rename from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/B.kt
rename to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/B.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Base.kt
similarity index 100%
rename from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt
rename to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Base.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Base.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Base.kt.new
new file mode 100644
index 0000000..f3a37f6
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Base.kt.new
@@ -0,0 +1,7 @@
+package test
+
+sealed interface Base {
+
+    fun doSmth() = "doSmth"
+
+}
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Usage.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Usage.kt
new file mode 100644
index 0000000..3ec54b9
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/Usage.kt
@@ -0,0 +1,12 @@
+package test
+
+//sealed interface Base
+
+class Usage {
+
+    fun doSmth(x: Base) =
+        when (x) {
+            is A -> "A"
+            is B -> "B"
+        }
+}
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/args.txt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/args.txt
similarity index 100%
rename from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/args.txt
rename to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/args.txt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/build.log
new file mode 100644
index 0000000..420ed9d
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWhenExpression/build.log
@@ -0,0 +1,20 @@
+================ Step #1 =================
+
+Cleaning output files:
+  out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/Base.class
+End of files
+Complementary files. Marked as dirty by Kotlin:
+  src/A.kt
+  src/B.kt
+Cleaning output files:
+  out/production/module/test/A.class
+  out/production/module/test/B.class
+End of files
+Compiling files:
+  src/A.kt
+  src/B.kt
+  src/Base.kt
+End of files
+Exit code: OK
+------------------------------------------
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/A.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/A.kt
new file mode 100644
index 0000000..4efbb43
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/A.kt
@@ -0,0 +1,3 @@
+package test
+
+open class A: Base
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual.kt
new file mode 100644
index 0000000..1fefb6d
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual.kt
@@ -0,0 +1,9 @@
+package test
+
+actual class ExpectClass {
+    actual fun doSmth() = ""
+}
+
+expect class ExpectClass2 {
+    fun doSmth(): String
+}
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual2.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual2.kt
new file mode 100644
index 0000000..46f6e89
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Actual2.kt
@@ -0,0 +1,5 @@
+package test
+
+actual class ExpectClass2 {
+    actual fun doSmth() = ""
+}
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/B.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/B.kt
new file mode 100644
index 0000000..e83c33f
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/B.kt
@@ -0,0 +1,9 @@
+package test
+
+class B : Base {
+
+}
+
+expect class ExpectClass {
+    fun doSmth(): String
+}
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Base.kt
similarity index 100%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/Base.kt
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Base.kt
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/C.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/C.kt.new
new file mode 100644
index 0000000..3d7cf8a
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/C.kt.new
@@ -0,0 +1,3 @@
+package test
+
+class C : A()
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Unrelated.kt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Unrelated.kt
new file mode 100644
index 0000000..c0966da
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/Unrelated.kt
@@ -0,0 +1,3 @@
+package test
+
+class Unrelated {}
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/args.txt b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/args.txt
new file mode 100644
index 0000000..7d56734
--- /dev/null
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/args.txt
@@ -0,0 +1 @@
+-XXLanguage:+FreedomForSealedClasses -XXLanguage:+SealedInterfaces -Xmulti-platform
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/build.log
similarity index 69%
copy from jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log
copy to jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/build.log
index d158195..ed490ff 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesUseSwitch/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sealedClassesWithExpectActual/build.log
@@ -3,36 +3,34 @@
 Compiling files:
   src/C.kt
 End of files
-Marked as dirty by Kotlin:
-  src/A.kt
-  src/B.kt
+After build round. Marked as dirty by Kotlin:
   src/Base.kt
-  src/C.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
 Cleaning output files:
   out/production/module/META-INF/module.kotlin_module
+  out/production/module/test/Base.class
+End of files
+Complementary files. Marked as dirty by Kotlin:
+  src/A.kt
+  src/Actual.kt
+  src/Actual2.kt
+  src/B.kt
+  src/C.kt
+Cleaning output files:
   out/production/module/test/A.class
   out/production/module/test/B.class
-  out/production/module/test/Base.class
   out/production/module/test/C.class
+  out/production/module/test/ExpectClass.class
+  out/production/module/test/ExpectClass2.class
 End of files
 Compiling files:
   src/A.kt
+  src/Actual.kt
+  src/Actual2.kt
   src/B.kt
   src/Base.kt
   src/C.kt
 End of files
-Marked as dirty by Kotlin:
-  src/D.kt
-Exit code: ADDITIONAL_PASS_REQUIRED
-------------------------------------------
-Cleaning output files:
-  out/production/module/META-INF/module.kotlin_module
-  out/production/module/test/D.class
-End of files
-Compiling files:
-  src/D.kt
-End of files
 Exit code: OK
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/sequentualAddingAndDeletingOfPropertyAndUsage/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/sequentualAddingAndDeletingOfPropertyAndUsage/build.log
index 84723af..aad58ef 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/sequentualAddingAndDeletingOfPropertyAndUsage/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/sequentualAddingAndDeletingOfPropertyAndUsage/build.log
@@ -19,7 +19,7 @@
 Compiling files:
   src/DataClass.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/main.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -42,7 +42,7 @@
 Compiling files:
   src/DataClass.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/main.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
@@ -77,7 +77,7 @@
 Compiling files:
   src/DataClass.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/main.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/traitClassObjectConstantChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/traitClassObjectConstantChanged/build.log
index 10639a5..af94687 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/traitClassObjectConstantChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/traitClassObjectConstantChanged/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/const.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/valAddCustomAccessor/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/valAddCustomAccessor/build.log
index 3a6140a..3c371b4 100644
--- a/jps/jps-plugin/testData/incremental/pureKotlin/valAddCustomAccessor/build.log
+++ b/jps/jps-plugin/testData/incremental/pureKotlin/valAddCustomAccessor/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndBack/build.log b/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndBack/build.log
index 0b68928..9a224e3 100644
--- a/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndBack/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/javaToKotlinAndBack/build.log
@@ -20,7 +20,7 @@
   out/production/module/Foo.class
   out/production/module/META-INF/module.kotlin_module
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/usage.kt
 Cleaning output files:
   out/production/module/UsageKt.class
diff --git a/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/kotlinToJava/build.log b/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/kotlinToJava/build.log
index ce3183f..8b7a4b8 100644
--- a/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/kotlinToJava/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/convertBetweenJavaAndKotlin/kotlinToJava/build.log
@@ -4,7 +4,7 @@
   out/production/module/META-INF/module.kotlin_module
   out/production/module/TheClass.class
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/usageInKotlin.kt
 Cleaning output files:
   out/production/module/Usage.class
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/accessingFunctionsViaRenamedFileClass/build.log b/jps/jps-plugin/testData/incremental/withJava/other/accessingFunctionsViaRenamedFileClass/build.log
index d0f049c..e82596e 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/accessingFunctionsViaRenamedFileClass/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/accessingFunctionsViaRenamedFileClass/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/classToPackageFacade/build.log b/jps/jps-plugin/testData/incremental/withJava/other/classToPackageFacade/build.log
index f49b2b6..870d531 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/classToPackageFacade/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/classToPackageFacade/build.log
@@ -5,7 +5,7 @@
   out/production/module/A.class
   out/production/module/META-INF/module.kotlin_module
 End of files
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/AChild.kt
   src/getA.kt
   src/getAChild.kt
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/defaultValueInConstructorAdded/build.log b/jps/jps-plugin/testData/incremental/withJava/other/defaultValueInConstructorAdded/build.log
index ffa764f..6478fd4 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/defaultValueInConstructorAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/defaultValueInConstructorAdded/build.log
@@ -8,7 +8,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/B.kt
   src/createADefault.kt
   src/createANonDefault.kt
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/inlineFunctionWithJvmNameInClass/build.log b/jps/jps-plugin/testData/incremental/withJava/other/inlineFunctionWithJvmNameInClass/build.log
index bc7a894..5fe02a5 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/inlineFunctionWithJvmNameInClass/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/inlineFunctionWithJvmNameInClass/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelFunctionWithJvmName/build.log b/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelFunctionWithJvmName/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelFunctionWithJvmName/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelFunctionWithJvmName/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelValPropertyWithJvmName/build.log b/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelValPropertyWithJvmName/build.log
index 98c5e9e..a99704b 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelValPropertyWithJvmName/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/inlineTopLevelValPropertyWithJvmName/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/inline.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/jvmNameChanged/build.log b/jps/jps-plugin/testData/incremental/withJava/other/jvmNameChanged/build.log
index 42d665f..ca47384 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/jvmNameChanged/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/jvmNameChanged/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/A.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/AChild.kt
   src/useAChild.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/multifileClassAddTopLevelFunWithDefault/build.log b/jps/jps-plugin/testData/incremental/withJava/other/multifileClassAddTopLevelFunWithDefault/build.log
index 5ab0e5a..058219a 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/multifileClassAddTopLevelFunWithDefault/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/multifileClassAddTopLevelFunWithDefault/build.log
@@ -10,7 +10,7 @@
   src/a.kt
   src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileAdded/build.log b/jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileAdded/build.log
index 063de2e..e8ab492 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/multifileClassFileAdded/build.log
@@ -3,7 +3,7 @@
 Compiling files:
   src/b.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/a.kt
   src/b.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/multifileDependantUsage/build.log b/jps/jps-plugin/testData/incremental/withJava/other/multifileDependantUsage/build.log
index 46f5387..a2696f4 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/multifileDependantUsage/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/multifileDependantUsage/build.log
@@ -1,6 +1,6 @@
 ================ Step #1 =================
 
-Marked as dirty by Kotlin:
+After chunkBuildStarted. Marked as dirty by Kotlin:
   src/partB.kt
   src/usagePartB.kt
 Cleaning output files:
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/multifilePackagePartMethodAdded/build.log b/jps/jps-plugin/testData/incremental/withJava/other/multifilePackagePartMethodAdded/build.log
index 8326f06..59b0fd1 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/multifilePackagePartMethodAdded/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/multifilePackagePartMethodAdded/build.log
@@ -12,7 +12,7 @@
   src/partB.kt
   src/partC.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/useFooF.kt
   src/useFooG.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/topLevelFunctionWithJvmName/build.log b/jps/jps-plugin/testData/incremental/withJava/other/topLevelFunctionWithJvmName/build.log
index cce51e9..21cc7b51 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/topLevelFunctionWithJvmName/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/topLevelFunctionWithJvmName/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/function.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/jps/jps-plugin/testData/incremental/withJava/other/topLevelPropertyWithJvmName/build.log b/jps/jps-plugin/testData/incremental/withJava/other/topLevelPropertyWithJvmName/build.log
index c9ee993..fa39799 100644
--- a/jps/jps-plugin/testData/incremental/withJava/other/topLevelPropertyWithJvmName/build.log
+++ b/jps/jps-plugin/testData/incremental/withJava/other/topLevelPropertyWithJvmName/build.log
@@ -7,7 +7,7 @@
 Compiling files:
   src/property.kt
 End of files
-Marked as dirty by Kotlin:
+After build round. Marked as dirty by Kotlin:
   src/usage.kt
 Exit code: ADDITIONAL_PASS_REQUIRED
 ------------------------------------------
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java
index 39d6949..08740b2 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/JsCodegenBoxTestGenerated.java
@@ -3390,6 +3390,18 @@
         }
 
         @Test
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
+        @Test
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
index 46955dd..42f9233 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/IrJsCodegenBoxTestGenerated.java
@@ -3438,6 +3438,24 @@
         }
 
         @Test
+        @TestMetadata("kt53677.kt")
+        public void testKt53677() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53677.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @Test
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
+        @Test
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java
index c586bd7..175d21c 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/wasm/semantics/IrCodegenBoxWasmTestGenerated.java
@@ -3036,6 +3036,21 @@
             runTest("compiler/testData/codegen/box/casts/kt50577.kt");
         }
 
+        @TestMetadata("kt53677.kt")
+        public void testKt53677() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt53677.kt");
+        }
+
+        @TestMetadata("kt54707.kt")
+        public void testKt54707() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+        }
+
+        @TestMetadata("kt54802.kt")
+        public void testKt54802() throws Exception {
+            runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+        }
+
         @TestMetadata("lambdaToUnitCast.kt")
         public void testLambdaToUnitCast() throws Exception {
             runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt
index dbe0481..1af3cf3 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt
@@ -135,7 +135,7 @@
                 // TODO: When moving into proper deprecation cycle replace with WARNING.
                 configuration.report(
                         CompilerMessageSeverity.INFO,
-                        "`freezing` should not be enabled with the new MM. Freezing API is deprecated since 1.7.20. See https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation for details"
+                        "`freezing` should not be enabled with the new MM. Freezing API is deprecated since 1.7.20. See https://kotlinlang.org/docs/native-migration-guide.html for details"
                 )
                 freezingMode
             }
diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/native/concurrent/Annotations.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/native/concurrent/Annotations.kt
index fcf91d6..aa28420 100644
--- a/kotlin-native/runtime/src/main/kotlin/kotlin/native/concurrent/Annotations.kt
+++ b/kotlin-native/runtime/src/main/kotlin/kotlin/native/concurrent/Annotations.kt
@@ -29,7 +29,7 @@
  * PLEASE NOTE THAT THIS ANNOTATION MAY GO AWAY IN UPCOMING RELEASES.
  *
  * Since 1.7.20 usage of this annotation is deprecated.
- * See https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation for details.
+ * See https://kotlinlang.org/docs/native-migration-guide.html for details.
  */
 @Target(AnnotationTarget.PROPERTY)
 @Retention(AnnotationRetention.BINARY)
diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/GC.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/GC.kt
index 9892442..175c04e 100644
--- a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/GC.kt
+++ b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/GC.kt
@@ -13,7 +13,7 @@
  *
  * Kotlin/Native uses tracing garbage collector (GC) that is executed periodically to collect objects
  * that are not reachable from the "roots", like local and global variables.
- * See [documentation](https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md) to learn more about
+ * See [documentation](https://kotlinlang.org/docs/native-memory-manager.html) to learn more about
  * Kotlin/Native memory management.
  *
  * This object provides a set of functions and properties that allows to tune garbage collector.
diff --git a/libraries/stdlib/native-wasm/src/kotlin/native/FreezingIsDeprecated.kt b/libraries/stdlib/native-wasm/src/kotlin/native/FreezingIsDeprecated.kt
index 9149adf..1d9ff0e 100644
--- a/libraries/stdlib/native-wasm/src/kotlin/native/FreezingIsDeprecated.kt
+++ b/libraries/stdlib/native-wasm/src/kotlin/native/FreezingIsDeprecated.kt
@@ -9,14 +9,14 @@
 /**
  * Freezing API is deprecated since 1.7.20.
  *
- * See [NEW_MM.md#freezing-deprecation](https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation) for details
+ * See [documentation](https://kotlinlang.org/docs/native-migration-guide.html) for details
  */
 // Note: when changing level of deprecation here, also change
 // * `freezing` mode handling in KonanConfig.kt
 // * frontend diagnostics in ErrorsNative.kt
 @SinceKotlin("1.7")
 @RequiresOptIn(
-    message = "Freezing API is deprecated since 1.7.20. See https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation for details",
+    message = "Freezing API is deprecated since 1.7.20. See https://kotlinlang.org/docs/native-migration-guide.html for details",
     level = RequiresOptIn.Level.WARNING,
 )
 @Target(
diff --git a/libraries/stdlib/src/kotlin/annotations/NativeAnnotations.kt b/libraries/stdlib/src/kotlin/annotations/NativeAnnotations.kt
index f90d5be..5666b4e 100644
--- a/libraries/stdlib/src/kotlin/annotations/NativeAnnotations.kt
+++ b/libraries/stdlib/src/kotlin/annotations/NativeAnnotations.kt
@@ -20,14 +20,14 @@
 /**
  * Freezing API is deprecated since 1.7.20.
  *
- * See [NEW_MM.md#freezing-deprecation](https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation) for details
+ * See [documentation](https://kotlinlang.org/docs/native-migration-guide.html) for details
  */
 // Note: when changing level of deprecation here, also change
 // * `freezing` mode handling in KonanConfig.kt
 // * frontend diagnostics in ErrorsNative.kt
 @SinceKotlin("1.7")
 @RequiresOptIn(
-    message = "Freezing API is deprecated since 1.7.20. See https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation for details",
+    message = "Freezing API is deprecated since 1.7.20. See https://kotlinlang.org/docs/native-migration-guide.html for details",
     level = RequiresOptIn.Level.WARNING,
 )
 @Target(
diff --git a/libraries/stdlib/src/kotlin/annotations/NativeConcurrentAnnotations.kt b/libraries/stdlib/src/kotlin/annotations/NativeConcurrentAnnotations.kt
index 0cb5154..a359fc5 100644
--- a/libraries/stdlib/src/kotlin/annotations/NativeConcurrentAnnotations.kt
+++ b/libraries/stdlib/src/kotlin/annotations/NativeConcurrentAnnotations.kt
@@ -31,7 +31,7 @@
  *
  * PLEASE NOTE THAT THIS ANNOTATION MAY GO AWAY IN UPCOMING RELEASES.
  *
- * Since 1.7.20 usage of this annotation is deprecated. See https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md#freezing-deprecation for details.
+ * Since 1.7.20 usage of this annotation is deprecated. See https://kotlinlang.org/docs/native-migration-guide.html for details.
  */
 @Target(AnnotationTarget.PROPERTY)
 @Retention(AnnotationRetention.BINARY)
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt
index 2172180..58a3817 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt
@@ -29,7 +29,6 @@
 import org.jetbrains.kotlin.library.KLIB_PROPERTY_SHORT_NAME
 import org.jetbrains.kotlin.library.KLIB_PROPERTY_UNIQUE_NAME
 import org.junit.Assert
-import org.junit.Ignore
 import org.junit.Test
 import java.util.*
 import java.util.jar.JarFile
@@ -1624,6 +1623,25 @@
         }
     }
 
+    // https://youtrack.jetbrains.com/issue/KT-48436
+    @Test
+    fun testUnusedSourceSetsReportAndroid() = with(Project("new-mpp-android", gradleVersion)) {
+        setupWorkingDir()
+
+        build(
+            "assembleDebug",
+            // https://issuetracker.google.com/issues/152187160
+            options = defaultBuildOptions().copy(androidGradlePluginVersion = AGPVersion.v4_2_0)
+        ) {
+            assertSuccessful()
+            assertNotContains(
+                UnusedSourceSetsChecker.WARNING_PREFIX_ONE,
+                UnusedSourceSetsChecker.WARNING_PREFIX_MANY,
+                UnusedSourceSetsChecker.WARNING_INTRO
+            )
+        }
+    }
+
     @Test
     fun testIncrementalCompilation() = with(Project("new-mpp-jvm-js-ic", gradleVersion)) {
         build("build") {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt
index 85e6486..51d9b15 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt
@@ -172,9 +172,6 @@
     val enableKotlinToolingMetadataArtifact: Boolean
         get() = booleanProperty("kotlin.mpp.enableKotlinToolingMetadataArtifact") ?: true
 
-    val mppStabilityNoWarn: Boolean?
-        get() = booleanProperty(KotlinMultiplatformPlugin.STABILITY_NOWARN_FLAG)
-
     val mppEnableOptimisticNumberCommonization: Boolean
         get() = booleanProperty(KOTLIN_MPP_ENABLE_OPTIMISTIC_NUMBER_COMMONIZATION) ?: true
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt
index f96a960..c8af17e 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt
@@ -20,6 +20,7 @@
 
 import org.gradle.api.internal.HasConvention
 import org.gradle.api.plugins.ExtensionAware
+import org.gradle.api.plugins.ExtraPropertiesExtension
 
 @Deprecated("Conventions are deprecated in Gradle")
 internal inline fun <reified T : Any> Any.addConvention(name: String, plugin: T) {
@@ -42,3 +43,6 @@
 
 internal inline fun <reified T : Any> Any.getExtension(name: String): T? =
     (this as ExtensionAware).extensions.getByName(name) as T?
+
+inline val Any.extraProperties: ExtraPropertiesExtension
+    get() = (this as ExtensionAware).extensions.extraProperties
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt
index 36f167f..3761eba 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt
@@ -49,15 +49,6 @@
     override fun apply(project: Project) {
         checkGradleCompatibility("the Kotlin Multiplatform plugin", GradleVersion.version("6.0"))
 
-        if (PropertiesProvider(project).mppStabilityNoWarn != true) {
-            SingleWarningPerBuild.show(
-                project,
-                "Kotlin Multiplatform Projects are an Alpha feature. " +
-                        "See: https://kotlinlang.org/docs/reference/evolution/components-stability.html. " +
-                        "To hide this message, add '$STABILITY_NOWARN_FLAG=true' to the Gradle properties.\n"
-            )
-        }
-
         handleHierarchicalStructureFlagsMigration(project)
 
         project.plugins.apply(JavaBasePlugin::class.java)
@@ -213,8 +204,6 @@
 
         internal fun sourceSetFreeCompilerArgsPropertyName(sourceSetName: String) =
             "kotlin.mpp.freeCompilerArgsForSourceSet.$sourceSetName"
-
-        internal const val STABILITY_NOWARN_FLAG = "kotlin.mpp.stability.nowarn"
     }
 }
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/UnusedSourceSetsChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/UnusedSourceSetsChecker.kt
index 15a2cb5..9162e97 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/UnusedSourceSetsChecker.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/UnusedSourceSetsChecker.kt
@@ -8,6 +8,8 @@
 import org.gradle.api.Project
 import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
 import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
+import org.jetbrains.kotlin.gradle.plugin.extraProperties
+import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
 
 object UnusedSourceSetsChecker {
     const val WARNING_PREFIX_ONE =
@@ -35,11 +37,14 @@
     }
 
     fun checkSourceSets(project: Project) {
-        // TODO once Android compilations are configured eagerly, move this to afterEvaluate { ... } instead of taskGraph.whenReady { ... }
-        project.gradle.taskGraph.whenReady { _ ->
+        project.whenEvaluated {
             val compilationsBySourceSet = CompilationSourceSetUtil.compilationsBySourceSets(project)
             val unusedSourceSets = project.kotlinExtension.sourceSets.filter {
-                compilationsBySourceSet[it]?.isEmpty() ?: true
+                // Ignoring Android source sets
+                val isAndroidSourceSet = it.extraProperties.has(IS_ANDROID_SOURCE_SET) &&
+                        (it.extraProperties[IS_ANDROID_SOURCE_SET] as Boolean)
+
+                !isAndroidSourceSet && compilationsBySourceSet[it]?.isEmpty() ?: true
             }
             if (unusedSourceSets.isNotEmpty()) {
                 reportUnusedSourceSets(project, unusedSourceSets.toSet())
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt
index 6781d2f..3e3f59b 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/syncKotlinAndAndroidSourceSets.kt
@@ -16,13 +16,22 @@
 import org.jetbrains.kotlin.gradle.plugin.addConvention
 import org.jetbrains.kotlin.gradle.plugin.sources.KotlinSourceSetFactory.Companion.defaultSourceFolder
 
+internal const val IS_ANDROID_SOURCE_SET = "android-source-set"
+
 internal fun syncKotlinAndAndroidSourceSets(target: KotlinAndroidTarget) {
     val project = target.project
     val android = project.extensions.getByName("android") as BaseExtension
+    val kotlinExtension = project.kotlinExtension
 
+    val createdKotlinSourceSets = mutableSetOf<String>()
     android.sourceSets.all { androidSourceSet ->
         val kotlinSourceSetName = kotlinSourceSetNameForAndroidSourceSet(target, androidSourceSet.name)
-        val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(kotlinSourceSetName)
+        createdKotlinSourceSets.add(kotlinSourceSetName)
+        val kotlinSourceSet = kotlinExtension.sourceSets.maybeCreate(kotlinSourceSetName)
+
+        // Marking KotlinSource set is created for Android compilation to ignore it in UnusedSourceSetChecker
+        kotlinSourceSet.extraProperties.set(IS_ANDROID_SOURCE_SET, true)
+
         androidSourceSet.addKotlinSources(kotlinSourceSet)
 
         createDefaultDependsOnEdges(target, kotlinSourceSet, androidSourceSet)
diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java
index 045634b..4a682c6 100644
--- a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java
+++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/NativeCodegenBoxTestGenerated.java
@@ -3512,6 +3512,24 @@
             }
 
             @Test
+            @TestMetadata("kt53677.kt")
+            public void testKt53677() throws Exception {
+                runTest("compiler/testData/codegen/box/casts/kt53677.kt");
+            }
+
+            @Test
+            @TestMetadata("kt54707.kt")
+            public void testKt54707() throws Exception {
+                runTest("compiler/testData/codegen/box/casts/kt54707.kt");
+            }
+
+            @Test
+            @TestMetadata("kt54802.kt")
+            public void testKt54802() throws Exception {
+                runTest("compiler/testData/codegen/box/casts/kt54802.kt");
+            }
+
+            @Test
             @TestMetadata("lambdaToUnitCast.kt")
             public void testLambdaToUnitCast() throws Exception {
                 runTest("compiler/testData/codegen/box/casts/lambdaToUnitCast.kt");
diff --git a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
index 016b963..7d50f7e 100644
--- a/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
+++ b/plugins/atomicfu/atomicfu-compiler/src/org/jetbrains/kotlinx/atomicfu/compiler/backend/jvm/AtomicfuJvmIrTransformer.kt
@@ -8,6 +8,7 @@
 import org.jetbrains.kotlin.backend.common.extensions.*
 import org.jetbrains.kotlin.backend.common.lower.parents
 import org.jetbrains.kotlin.descriptors.ClassKind
+import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
 import org.jetbrains.kotlin.ir.*
 import org.jetbrains.kotlin.ir.builders.declarations.*
 import org.jetbrains.kotlin.ir.builders.*
@@ -434,6 +435,7 @@
             return context.irFactory.buildFun {
                 name = Name.identifier(mangledName)
                 isInline = true
+                visibility = atomicExtension.visibility
             }.apply {
                 val newDeclaration = this
                 extensionReceiverParameter = null
@@ -760,6 +762,7 @@
             return context.irFactory.buildFun {
                 name = Name.identifier(mangledName)
                 isInline = true
+                visibility = DescriptorVisibilities.PRIVATE
             }.apply {
                 dispatchReceiverParameter = (parent as? IrClass)?.thisReceiver?.deepCopyWithSymbols(this)
                 if (functionName == LOOP) {