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 970c5c6..e85e9d3 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
@@ -14625,6 +14625,18 @@
                     public void testRenderingStubTypes() throws Exception {
                         runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/renderingStubTypes.kt");
                     }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestriction.kt")
+                    public void testStubTypeReceiverRestriction() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt");
+                    }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestrictionDisabled.kt")
+                    public void testStubTypeReceiverRestrictionDisabled() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt");
+                    }
                 }
             }
 
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 0004dac..b509f0e 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
@@ -14625,6 +14625,18 @@
                     public void testRenderingStubTypes() throws Exception {
                         runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/renderingStubTypes.kt");
                     }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestriction.kt")
+                    public void testStubTypeReceiverRestriction() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt");
+                    }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestrictionDisabled.kt")
+                    public void testStubTypeReceiverRestrictionDisabled() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.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 0a20c57..22ae96e 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
@@ -14625,6 +14625,18 @@
                     public void testRenderingStubTypes() throws Exception {
                         runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/renderingStubTypes.kt");
                     }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestriction.kt")
+                    public void testStubTypeReceiverRestriction() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt");
+                    }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestrictionDisabled.kt")
+                    public void testStubTypeReceiverRestrictionDisabled() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt");
+                    }
                 }
             }
 
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java
index 7664f60..36e3ddf 100644
--- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java
+++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java
@@ -862,6 +862,7 @@
     DiagnosticFactory3<PsiElement, KotlinType, String, String> STUB_TYPE_IN_ARGUMENT_CAUSES_AMBIGUITY = DiagnosticFactory3.create(ERROR);
     DiagnosticFactory4<PsiElement, KotlinType, String, String, BuilderLambdaLabelingInfo> STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY = DiagnosticFactory4.create(ERROR);
     DiagnosticFactory2<PsiElement, Name, Name> BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION = DiagnosticFactory2.create(ERROR);
+    DiagnosticFactory2<PsiElement, Name, Name> BUILDER_INFERENCE_STUB_RECEIVER = DiagnosticFactory2.create(ERROR);
 
     DiagnosticFactory1<PsiElement, Collection<? extends ResolvedCall<?>>> NONE_APPLICABLE = DiagnosticFactory1.create(ERROR);
     DiagnosticFactory1<PsiElement, Collection<? extends ResolvedCall<?>>> CANNOT_COMPLETE_RESOLVE = DiagnosticFactory1.create(ERROR);
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java
index 1c9decc..329347d 100644
--- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java
+++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java
@@ -945,6 +945,7 @@
         MAP.put(STUB_TYPE_IN_ARGUMENT_CAUSES_AMBIGUITY, "The type of an argument hasn''t been inferred yet. To disambiguate this call, explicitly cast it to `{0}` if you want the builder''s type parameter(s) `{1}` to be inferred to `{2}`.", RENDER_TYPE, STRING, STRING);
         MAP.put(STUB_TYPE_IN_RECEIVER_CAUSES_AMBIGUITY, "The type of a receiver hasn''t been inferred yet. To disambiguate this call, explicitly cast it to `{0}` if you want the builder''s type parameter(s) `{1}` to be inferred to `{2}`.", RENDER_TYPE, STRING, STRING, null);
         MAP.put(BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION, "Unstable inference behaviour with multiple lambdas. Please either specify type argument for generic parameter `{0}` of `{1}` explicitly or add @BuilderInference to corresponding parameter declaration", TO_STRING, TO_STRING);
+        MAP.put(BUILDER_INFERENCE_STUB_RECEIVER, "The type of a receiver hasn''t been inferred yet. Please specify type argument for generic parameter `{0}` of `{1}` explicitly", TO_STRING, TO_STRING);
         MAP.put(NONE_APPLICABLE, "None of the following functions can be called with the arguments supplied: {0}", AMBIGUOUS_CALLS);
         MAP.put(CANNOT_COMPLETE_RESOLVE, "Cannot choose among the following candidates without completing type inference: {0}", AMBIGUOUS_CALLS);
         MAP.put(UNRESOLVED_REFERENCE_WRONG_RECEIVER, "Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: {0}", AMBIGUOUS_CALLS);
diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt
index cd7edad..9b57556 100644
--- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt
+++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt
@@ -39,6 +39,7 @@
 import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
 import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
 import org.jetbrains.kotlin.types.KotlinType
+import org.jetbrains.kotlin.types.StubTypeForBuilderInference
 import org.jetbrains.kotlin.types.TypeUtils
 import org.jetbrains.kotlin.types.checker.intersectWrappedTypes
 import org.jetbrains.kotlin.types.error.ErrorUtils
@@ -199,6 +200,21 @@
                     trace.report(SUPER_CANT_BE_EXTENSION_RECEIVER.on(psiExpression, psiExpression.text))
                 }
             }
+
+            StubBuilderInferenceReceiver::class.java -> {
+                diagnostic as StubBuilderInferenceReceiver
+
+                val stubType = callReceiver.receiver.receiverValue.type as? StubTypeForBuilderInference
+                val originalTypeParameter = stubType?.originalTypeVariable?.originalTypeParameter
+
+                trace.report(
+                    BUILDER_INFERENCE_STUB_RECEIVER.on(
+                        callReceiver.psiExpression ?: call.callElement,
+                        originalTypeParameter?.name ?: SpecialNames.NO_NAME_PROVIDED,
+                        originalTypeParameter?.containingDeclaration?.name ?: SpecialNames.NO_NAME_PROVIDED
+                    )
+                )
+            }
         }
     }
 
diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt
index 2d172f6..d45efcd 100644
--- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt
+++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt
@@ -661,9 +661,25 @@
                 candidateDescriptor.dispatchReceiverParameter,
                 shouldCheckImplicitInvoke = true,
             )
+
             1 -> {
-                if (resolvedCall.extensionReceiverArgument == null) {
-                    resolvedCall.extensionReceiverArgument = chooseExtensionReceiverCandidate() ?: return
+                val checkBuilderInferenceRestriction =
+                    !callComponents.languageVersionSettings
+                        .supportsFeature(LanguageFeature.NoBuilderInferenceWithoutAnnotationRestriction)
+                if (checkBuilderInferenceRestriction) {
+                    var extensionReceiverArgument = resolvedCall.extensionReceiverArgument
+                    if (extensionReceiverArgument == null) {
+                        extensionReceiverArgument = chooseExtensionReceiverCandidate() ?: return
+                        resolvedCall.extensionReceiverArgument = extensionReceiverArgument
+                    }
+                    if (extensionReceiverArgument.receiver.receiverValue.type is StubTypeForBuilderInference) {
+                        addDiagnostic(
+                            StubBuilderInferenceReceiver(
+                                extensionReceiverArgument,
+                                candidateDescriptor.extensionReceiverParameter!!
+                            )
+                        )
+                    }
                 }
                 checkReceiver(
                     resolvedCall.extensionReceiverArgument,
diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallDiagnostics.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallDiagnostics.kt
index 2846208..11878bb 100644
--- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallDiagnostics.kt
+++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallDiagnostics.kt
@@ -73,6 +73,13 @@
     override fun report(reporter: DiagnosticReporter) = reporter.onCallArgument(argument, this)
 }
 
+class StubBuilderInferenceReceiver(
+    val receiver: SimpleKotlinCallArgument,
+    val extensionReceiverParameter: ReceiverParameterDescriptor,
+) : KotlinCallDiagnostic(RESOLVED) {
+    override fun report(reporter: DiagnosticReporter) = reporter.onCallReceiver(receiver, this)
+}
+
 class MixingNamedAndPositionArguments(override val argument: KotlinCallArgument) : InapplicableArgumentDiagnostic()
 
 class NamedArgumentNotAllowed(val argument: KotlinCallArgument, val descriptor: CallableDescriptor) : KotlinCallDiagnostic(INAPPLICABLE) {
diff --git a/compiler/testData/codegen/box/inference/builderInference/memberScope.kt b/compiler/testData/codegen/box/inference/builderInference/memberScope.kt
index 42d2b17..1c33204 100644
--- a/compiler/testData/codegen/box/inference/builderInference/memberScope.kt
+++ b/compiler/testData/codegen/box/inference/builderInference/memberScope.kt
@@ -20,9 +20,10 @@
     val ret = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        // Error, resolved to extension on stub receiver
+//        get()?.test()
+//        get()?.test2()
+//        get().test2()
         get()?.hashCode()
         get()?.equals(1)
         val x = get()
@@ -38,9 +39,10 @@
             x.equals("")
             x.hashCode()
             x.toString()
-            x.test()
-            x?.test2()
-            x.test2()
+            // Error, resolved to extension on stub receiver
+//            x.test()
+//            x?.test2()
+//            x.test2()
         }
 
         if (x == null) {
@@ -50,8 +52,9 @@
 //            x.hashCode()
 //            x.toString()
 //            x.test()
-            x?.test2()
-            x.test2()
+            // Error, resolved to extension on stub receiver
+//            x?.test2()
+//            x.test2()
         }
 
         if (x === null) {
@@ -61,8 +64,9 @@
 //            x.hashCode()
 //            x.toString()
 //            x.test()
-            x?.test2()
-            x.test2()
+            // Error, resolved to extension on stub receiver
+//            x?.test2()
+//            x.test2()
         }
 
         ""
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt
index 655a98e..38e5002 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt
@@ -12,7 +12,7 @@
 
     buildList {
         add(Bar())
-        this.get(0).test() // resolved to Any?.test
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)<!>.test() // resolved to Any?.test
     }
     buildList<Bar> {
         add(Bar())
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt
index 5ec0bf5..8a84de7 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt
@@ -1,4 +1,5 @@
 // WITH_STDLIB
+// SKIP_TXT
 fun test() {
     foo(
         flow { emit(0) }
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.kt
index e2c112f..24f6b4e 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.kt
@@ -3,7 +3,7 @@
 fun test() {
     foo(
         flow { emit(0) }
-    ) <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ it.collect <!TOO_MANY_ARGUMENTS!>{}<!> }<!>
+    ) <!BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION!>{ <!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>.collect <!TOO_MANY_ARGUMENTS!>{}<!> }<!>
 
     // 0. Initial
     // W <: Any / declared upper bound
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.kt
index 821f280..c13790a 100644
--- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.kt
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.kt
@@ -20,9 +20,9 @@
     val ret1 = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>.test2()
         get()?.hashCode()
         get()?.equals(1)
         // there is `String?.equals` extension
@@ -31,9 +31,9 @@
     val ret2 = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>.test2()
         get()?.hashCode()
         get()?.equals(1)
         val x = get()
@@ -44,9 +44,9 @@
     val ret3 = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>.test2()
         get()?.hashCode()
         get()?.equals(1)
         val x = get()
@@ -62,9 +62,9 @@
             x.equals("")
             x.hashCode()
             x.toString()
-            x.test()
-            x<!UNNECESSARY_SAFE_CALL!>?.<!>test2()
-            x.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!>.test()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!><!UNNECESSARY_SAFE_CALL!>?.<!>test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!>.test2()
         }
 
         ""
@@ -104,7 +104,7 @@
         emit(null)
         val x = get()
         if (x == null) {
-            <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
         }
 
         ""
@@ -144,7 +144,7 @@
         emit(null)
         val x = get()
         if (x === null) {
-            <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
         }
 
         ""
@@ -153,16 +153,16 @@
         emit(1)
         emit(null)
         val x = get()
-        <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
 
         ""
     }
     val ret41 = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>.test2()
         get()?.hashCode()
         get()?.equals(1)
         val x = get()
@@ -181,11 +181,11 @@
         }
 
         if (x == null) {
-            <!DEBUG_INFO_CONSTANT!>x<!>?.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, DEBUG_INFO_CONSTANT!>x<!>?.test2()
         }
 
         if (x == null) {
-            x.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!>.test2()
         }
 
         if (x === null) {
@@ -197,11 +197,11 @@
         }
 
         if (x === null) {
-            <!DEBUG_INFO_CONSTANT!>x<!>?.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, DEBUG_INFO_CONSTANT!>x<!>?.test2()
         }
 
         if (x === null) {
-            x.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!>.test2()
         }
 
         ""
@@ -239,7 +239,7 @@
         emit(null)
         val x = get()
         if (x == null) {
-            <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
         }
         ""
     }
@@ -276,7 +276,7 @@
         emit(null)
         val x = get()
         if (x === null) {
-            <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
         }
         ""
     }
@@ -284,15 +284,15 @@
         emit(1)
         emit(null)
         val x = get()
-        <!TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER, TYPE_MISMATCH("Any; Nothing?")!>x<!>.test()
         ""
     }
     val ret51 = build {
         emit(1)
         emit(null)
-        get()?.test()
-        get()?.test2()
-        get().test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>?.test2()
+        <!BUILDER_INFERENCE_STUB_RECEIVER!>get()<!>.test2()
         get()?.hashCode()
         get()?.equals(1)
         val x = get()
@@ -305,8 +305,8 @@
         if (x == null) {
             <!DEBUG_INFO_CONSTANT!>x<!>?.hashCode()
             <!DEBUG_INFO_CONSTANT!>x<!>?.equals(1)
-            <!DEBUG_INFO_CONSTANT!>x<!>?.test2()
-            x.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER, DEBUG_INFO_CONSTANT!>x<!>?.test2()
+            <!BUILDER_INFERENCE_STUB_RECEIVER!>x<!>.test2()
         }
 
         ""
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt
new file mode 100644
index 0000000..0294509
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt
@@ -0,0 +1,72 @@
+// WITH_STDLIB
+// SKIP_TXT
+
+fun <R> a(lambda: List<R>.(R) -> Unit) {}
+
+fun <T> T.extension() {}
+
+fun use(p: Any?) {}
+
+fun test1() {
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        this.get(0).extension()
+        use(this.get(0)::extension)
+        use(it::extension)
+    }
+}
+
+
+fun test2() {
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v = this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun test3() {
+    operator fun <T> T.getValue(thisRef: Any?, prop: Any?): T = this
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+class Box<TIn>(val t: TIn)
+
+fun test4() {
+    operator fun <T> T.provideDelegate(thisRef: Any?, prop: Any?): Box<T> = Box(this)
+    operator fun <T> Box<T>.getValue(thisRef: Any?, prop: Any?): T = this.t
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun <R> b(lambda: R.(List<R>) -> Unit) {}
+
+fun test5() {
+
+    operator fun <T> T.invoke(): T = this
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>b<!> {
+        extension()
+        this().extension()
+        use(::extension)
+    }
+}
+
+val <T> T.genericLambda: T.((T) -> Unit) -> Unit get() = {}
+
+fun test6() {
+    b {
+        extension()
+        genericLambda { }
+        genericLambda { it.extension() }
+        use(::extension)
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt
new file mode 100644
index 0000000..9444a28
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt
@@ -0,0 +1,72 @@
+// WITH_STDLIB
+// SKIP_TXT
+
+fun <R> a(lambda: List<R>.(R) -> Unit) {}
+
+fun <T> T.extension() {}
+
+fun use(p: Any?) {}
+
+fun test1() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>this.get(0)<!>.extension()
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>this.get(0)<!>::extension)
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>it<!>::extension)
+    }
+}
+
+
+fun test2() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v = this.get(0)
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>.extension()
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>::extension)
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>it<!>::extension)
+    }
+}
+
+fun test3() {
+    operator fun <T> T.getValue(thisRef: Any?, prop: Any?): T = this
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v by <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>this.get(0)<!>
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>.extension()
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>::extension)
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>it<!>::extension)
+    }
+}
+
+class Box<TIn>(val t: TIn)
+
+fun test4() {
+    operator fun <T> T.provideDelegate(thisRef: Any?, prop: Any?): Box<T> = Box(this)
+    operator fun <T> Box<T>.getValue(thisRef: Any?, prop: Any?): T = this.t
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v by <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>this.get(0)<!>
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>.extension()
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>v<!>::extension)
+        use(<!BUILDER_INFERENCE_STUB_RECEIVER("R; a")!>it<!>::extension)
+    }
+}
+
+fun <R> b(lambda: R.(List<R>) -> Unit) {}
+
+fun test5() {
+
+    operator fun <T> T.invoke(): T = this
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>b<!> {
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>extension()<!>
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!><!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>this<!>()<!>.extension()
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>use(::extension)<!>
+    }
+}
+
+val <T> T.genericLambda: T.((T) -> Unit) -> Unit get() = {}
+
+fun test6() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>b<!> {
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>extension()<!>
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>genericLambda<!> { }
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>genericLambda<!> { <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>it<!>.extension() }
+        <!BUILDER_INFERENCE_STUB_RECEIVER("R; b")!>use(::extension)<!>
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.fir.kt
new file mode 100644
index 0000000..bd649fb
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.fir.kt
@@ -0,0 +1,73 @@
+// WITH_STDLIB
+// LANGUAGE: +NoBuilderInferenceWithoutAnnotationRestriction
+// SKIP_TXT
+
+fun <R> a(lambda: List<R>.(R) -> Unit) {}
+
+fun <T> T.extension() {}
+
+fun use(p: Any?) {}
+
+fun test1() {
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        this.get(0).extension()
+        use(this.get(0)::extension)
+        use(it::extension)
+    }
+}
+
+
+fun test2() {
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v = this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun test3() {
+    operator fun <T> T.getValue(thisRef: Any?, prop: Any?): T = this
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+class Box<TIn>(val t: TIn)
+
+fun test4() {
+    operator fun <T> T.provideDelegate(thisRef: Any?, prop: Any?): Box<T> = Box(this)
+    operator fun <T> Box<T>.getValue(thisRef: Any?, prop: Any?): T = this.t
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun <R> b(lambda: R.(List<R>) -> Unit) {}
+
+fun test5() {
+
+    operator fun <T> T.invoke(): T = this
+    <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>b<!> {
+        extension()
+        this().extension()
+        use(::extension)
+    }
+}
+
+val <T> T.genericLambda: T.((T) -> Unit) -> Unit get() = {}
+
+fun test6() {
+    b {
+        extension()
+        genericLambda { }
+        genericLambda { it.extension() }
+        use(::extension)
+    }
+}
\ No newline at end of file
diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt
new file mode 100644
index 0000000..38f5c9c
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt
@@ -0,0 +1,73 @@
+// WITH_STDLIB
+// LANGUAGE: +NoBuilderInferenceWithoutAnnotationRestriction
+// SKIP_TXT
+
+fun <R> a(lambda: List<R>.(R) -> Unit) {}
+
+fun <T> T.extension() {}
+
+fun use(p: Any?) {}
+
+fun test1() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        this.get(0).extension()
+        use(this.get(0)::extension)
+        use(it::extension)
+    }
+}
+
+
+fun test2() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v = this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun test3() {
+    operator fun <T> T.getValue(thisRef: Any?, prop: Any?): T = this
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+class Box<TIn>(val t: TIn)
+
+fun test4() {
+    operator fun <T> T.provideDelegate(thisRef: Any?, prop: Any?): Box<T> = Box(this)
+    operator fun <T> Box<T>.getValue(thisRef: Any?, prop: Any?): T = this.t
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>a<!> {
+        val v by this.get(0)
+        v.extension()
+        use(v::extension)
+        use(it::extension)
+    }
+}
+
+fun <R> b(lambda: R.(List<R>) -> Unit) {}
+
+fun test5() {
+
+    operator fun <T> T.invoke(): T = this
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>b<!> {
+        extension()
+        this().extension()
+        use(::extension)
+    }
+}
+
+val <T> T.genericLambda: T.((T) -> Unit) -> Unit get() = {}
+
+fun test6() {
+    <!INFERRED_INTO_DECLARED_UPPER_BOUNDS!>b<!> {
+        extension()
+        genericLambda { }
+        genericLambda { it.extension() }
+        use(::extension)
+    }
+}
\ No newline at end of file
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 77441d8..2b47bf1 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
@@ -14631,6 +14631,18 @@
                     public void testRenderingStubTypes() throws Exception {
                         runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/renderingStubTypes.kt");
                     }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestriction.kt")
+                    public void testStubTypeReceiverRestriction() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.kt");
+                    }
+
+                    @Test
+                    @TestMetadata("stubTypeReceiverRestrictionDisabled.kt")
+                    public void testStubTypeReceiverRestrictionDisabled() throws Exception {
+                        runTest("compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestrictionDisabled.kt");
+                    }
                 }
             }
 
