~ reasonable
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/commonSuperTypeContravariant.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/commonSuperTypeContravariant.fir.kt
index e842749..51e5c55 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/commonSuperTypeContravariant.fir.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/commonSuperTypeContravariant.fir.kt
@@ -34,35 +34,35 @@
 fun test() {
     val ret = build {
         emit("1")
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>select1(get(), getIn())<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>select1(get(), Test.foo(getIn()))<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>select1(Test.foo(get()), Test.foo(getIn()))<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String?")!>select1(Test.foo(get()), getIn())<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String..kotlin.String?!")!>select4(get(), getIn())<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String..kotlin.String?!")!>select4(get(), Test.foo(getIn()))<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String..kotlin.String?!")!>select4(Test.foo(get()), Test.foo(getIn()))<!>
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String..kotlin.String?!")!>select4(Test.foo(get()), getIn())<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*>? & java.io.Serializable?")!>select1(get(), getIn())<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*>? & java.io.Serializable?")!>select1(get(), Test.foo(getIn()))<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*>? & java.io.Serializable?")!>select1(Test.foo(get()), Test.foo(getIn()))<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*>? & java.io.Serializable?")!>select1(Test.foo(get()), getIn())<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*> & java.io.Serializable..kotlin.Comparable<*>? & java.io.Serializable?")!>select4(get(), getIn())<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*> & java.io.Serializable..kotlin.Comparable<*>? & java.io.Serializable?")!>select4(get(), Test.foo(getIn()))<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*> & java.io.Serializable..kotlin.Comparable<*>? & java.io.Serializable?")!>select4(Test.foo(get()), Test.foo(getIn()))<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*> & java.io.Serializable..kotlin.Comparable<*>? & java.io.Serializable?")!>select4(Test.foo(get()), getIn())<!>
 
-        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String..kotlin.String?!")!>select4(id(Test.foo(get())), getIn())<!>
+        <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Comparable<*> & java.io.Serializable..kotlin.Comparable<*>? & java.io.Serializable?")!>select4(id(Test.foo(get())), getIn())<!>
 
         build2 {
             emit(1)
             select1(this@build.get(), getIn())
-            select1(get(), <!ARGUMENT_TYPE_MISMATCH!>Test.foo(this@build.getIn())<!>)
+            select1(get(), Test.foo(this@build.getIn()))
             select1(Test.foo(this@build.get()), Test.foo(getIn()))
-            select1(Test.foo(get()), <!ARGUMENT_TYPE_MISMATCH!>this@build.getIn()<!>)
+            select1(Test.foo(get()), this@build.getIn())
             select2(this@build.get(), getIn())
-            select2(get(), <!ARGUMENT_TYPE_MISMATCH!>Test.foo(this@build.getIn())<!>)
+            select2(get(), Test.foo(this@build.getIn()))
             select2(Test.foo(this@build.get()), Test.foo(getIn()))
-            select2(Test.foo(get()), <!ARGUMENT_TYPE_MISMATCH!>this@build.getIn()<!>)
+            select2(Test.foo(get()), this@build.getIn())
             select3(this@build.get(), getIn())
-            select3(get(), <!ARGUMENT_TYPE_MISMATCH!>Test.foo(this@build.getIn())<!>)
+            select3(get(), Test.foo(this@build.getIn()))
             select3(Test.foo(this@build.get()), Test.foo(getIn()))
-            select3(Test.foo(get()), <!ARGUMENT_TYPE_MISMATCH!>this@build.getIn()<!>)
+            select3(Test.foo(get()), this@build.getIn())
             select4(this@build.get(), getIn())
-            select4(get(), <!ARGUMENT_TYPE_MISMATCH!>Test.foo(this@build.getIn())<!>)
+            select4(get(), Test.foo(this@build.getIn()))
             select4(Test.foo(this@build.get()), Test.foo(getIn()))
-            select4(Test.foo(get()), <!ARGUMENT_TYPE_MISMATCH!>this@build.getIn()<!>)
+            select4(Test.foo(get()), this@build.getIn())
 
             select4(id(Test.foo(this@build.get())), getIn())
             ""
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/intersect.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/intersect.fir.kt
index 20fbfeb..3f82ccf 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/intersect.fir.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/intersect.fir.kt
@@ -31,7 +31,7 @@
 fun test() {
     val ret = build {
         emit("1")
-        intersect(getIn(), getIn())
+        <!INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION_ERROR!>intersect<!>(getIn(), getIn())
         intersect(getIn(), Test.foo(getIn()))
         intersect(Test.foo(getIn()), Test.foo(getIn()))
         intersect(Test.foo(getIn()), getIn())
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt
index 8fad616..406c014 100644
--- a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt
@@ -26,18 +26,18 @@
     val value = myBuilder {
         b[0] = 123
         a = 45
-        a<!OVERLOAD_RESOLUTION_AMBIGUITY!>++<!>
+        a<!NONE_APPLICABLE!>++<!>
         bar(::a)
         if (<!USELESS_IS_CHECK!>a is Int<!>) {
             a = 67
-            a<!OVERLOAD_RESOLUTION_AMBIGUITY!>--<!>
+            a<!NONE_APPLICABLE!>--<!>
             bar(::a)
         }
         when (condition) {
             true -> a = 87
             false -> a = 65
         }
-        val x by <!DELEGATE_SPECIAL_FUNCTION_AMBIGUITY!>a<!>
+        val x by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>a<!>
 
         change {
             a = 99
@@ -62,8 +62,8 @@
     // See KT-54664
     val value3 = myBuilder {
         accept("")
-        a = 45
-        bar(::a)
+        a = <!ASSIGNMENT_TYPE_MISMATCH!>45<!>
+        bar(::<!UNRESOLVED_REFERENCE!>a<!>)
     }
 
     fun baz(t: Int) {}
@@ -72,6 +72,6 @@
         accept("")
         a = 45
         b[0] = 123
-        baz(a)
+        baz(<!ARGUMENT_TYPE_MISMATCH!>a<!>)
     }
 }
diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt
index 09adea5..d5c21e8 100644
--- a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt
+++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.txt
@@ -28,73 +28,73 @@
     }
     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.b: R|kotlin/Array<kotlin/Int>|>|.R|SubstitutionOverride<kotlin/Array.set: R|kotlin/Unit|>|(Int(0), Int(123))
             Unit
-            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>| = Int(45)
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| = 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]>#()
+                lval <unary>: R|kotlin/Int| = this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>|
+                this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| = R|<local>/<unary>|.<Ambiguity: inc, [kotlin/inc, kotlin/inc]>#()
                 R|<local>/<unary>|
             }
 
-            R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+            R|/bar|(::R|SubstitutionOverride</Foo.a: R|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)
+                (this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| is R|kotlin/Int|) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| = 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]>#()
+                        lval <unary>: R|kotlin/Int| = this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>|
+                        this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| = R|<local>/<unary>|.<Ambiguity: dec, [kotlin/dec, kotlin/dec]>#()
                         R|<local>/<unary>|
                     }
 
-                    R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+                    R|/bar|(::R|SubstitutionOverride</Foo.a: R|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)
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|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|SubstitutionOverride</Foo.a: R|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)|>|
+            lval x: <ERROR TYPE REF: Ambiguity: getValue, [kotlin/getValue, kotlin/getValue, kotlin/getValue, kotlin/collections/getValue]>by this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>|
             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)
+                this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/Int|>| = 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)
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/String|>| = 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)
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|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|SubstitutionOverride</Foo.a: R|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)
+                this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/String|>| = 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)
+                (this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/String|>| is R|kotlin/Int|) ->  {
+                    this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|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>  {
+        lval value3: 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)
-            R|/bar|(::R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|kotlin/String|>| = Int(45)
+            R|/bar<Inapplicable(INAPPLICABLE): /bar>#|(::<Unresolved reference: a>#)
         }
         )
         local final fun baz(t: R|kotlin/Int|): R|kotlin/Unit| {
@@ -102,10 +102,10 @@
 
         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))
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|it(kotlin/Comparable<*> & java/io/Serializable)|>| = Int(45)
+            this@R|special/anonymous|.R|SubstitutionOverride</Foo.b: R|kotlin/Array<it(kotlin/Comparable<*> & java/io/Serializable)>|>|.R|SubstitutionOverride<kotlin/Array.set: R|kotlin/Unit|>|(Int(0), Int(123))
             Unit
-            R|<local>/baz|(this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|Stub (chain inference): TypeVariable(T)|>|)
+            R|<local>/baz<Inapplicable(INAPPLICABLE): <local>/baz>#|(this@R|special/anonymous|.R|SubstitutionOverride</Foo.a: R|it(kotlin/Comparable<*> & java/io/Serializable)|>|)
         }
         )
     }