diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt index 7b21d69debe..4e275f223ca 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt @@ -17,9 +17,9 @@ package org.jetbrains.kotlin.backend.common import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -283,6 +283,19 @@ class CheckIrElementVisitor( expression.symbol.ensureBound(expression) } + override fun visitDeclaration(declaration: IrDeclaration) { + super.visitDeclaration(declaration) + + if (declaration is IrOverridableDeclaration<*>) { + for (overriddenSymbol in declaration.overriddenSymbols) { + val overriddenDeclaration = overriddenSymbol.owner as? IrDeclarationWithVisibility ?: continue + if (overriddenDeclaration.visibility == Visibilities.PRIVATE) { + reportError(declaration, "Overrides private declaration $overriddenDeclaration") + } + } + } + } + override fun visitFunctionAccess(expression: IrFunctionAccessExpression) { super.visitFunctionAccess(expression) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 4071d66e136..1508000b1c9 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -464,6 +464,7 @@ fun IrClass.addFakeOverrides() { irClass.declarations .flatMap { it.toList() } .filter { it !in overriddenFunctions } + .filter { it.visibility != Visibilities.PRIVATE } } .toMutableSet() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt index 93ca8397797..3cd4fa20428 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt @@ -24,7 +24,7 @@ private fun ClassLoweringPass.runOnFilesPostfix(moduleFragment: IrModuleFragment private fun validationCallback(context: JsIrBackendContext, module: IrModuleFragment) { val validatorConfig = IrValidatorConfig( - abortOnError = false, + abortOnError = true, ensureAllNodesAreDifferent = true, checkTypes = false, checkDescriptors = false