diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/resolveUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/resolveUtil.kt index a3662f9d578..ce92e779851 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/resolveUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/resolveUtil.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.resolve.source.KotlinSourceElement fun PropertyDescriptor.hasBackingField(bindingContext: BindingContext?): Boolean = when { kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE -> overriddenDescriptors.any { it.hasBackingField(bindingContext) } + extensionReceiverParameter != null -> false source is KotlinSourceElement && bindingContext != null -> bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, this) ?: false compileTimeInitializer != null -> true // backingField != null -> true // TODO: in case of DeserializedPropetyDescriptor this function returns incorrect result for FO field diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionValPropertyDeclaration/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionValPropertyDeclaration/source.kt new file mode 100644 index 00000000000..eb7ad43b6ad --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionValPropertyDeclaration/source.kt @@ -0,0 +1,7 @@ +// KT-44496 + +class C { + val todo: String = TODO() + + val String.noGetterExtensionProperty: Int +} diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionVarPropertyDeclaration/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionVarPropertyDeclaration/source.kt new file mode 100644 index 00000000000..569482f6fb8 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/unreachableExtensionVarPropertyDeclaration/source.kt @@ -0,0 +1,8 @@ +// KT-44496 + +class C { + val todo: String = TODO() + + var String.noSetterExtensionProperty: Int + get() = 42 +} diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index 20cd32ce46f..c417879f652 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -696,6 +696,16 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration compileKotlin("main.kt", tmpdir, listOf(library), additionalOptions = features) } + fun testUnreachableExtensionVarPropertyDeclaration() { + val (output, exitCode) = compileKotlin("source.kt", tmpdir, expectedFileName = null) + assertEquals("Output:\n$output", ExitCode.INTERNAL_ERROR, exitCode) + } + + fun testUnreachableExtensionValPropertyDeclaration() { + val (output, exitCode) = compileKotlin("source.kt", tmpdir, expectedFileName = null) + assertEquals("Output:\n$output", ExitCode.INTERNAL_ERROR, exitCode) + } + // If this test fails, then bootstrap compiler most likely should be advanced fun testPreReleaseFlagIsConsistentBetweenBootstrapAndCurrentCompiler() { val bootstrapCompiler = JarFile(PathUtil.kotlinPathsForCompiler.compilerPath)