diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Reporting.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Reporting.kt index ffe4e88be2f..6d3fb8d9d67 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Reporting.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Reporting.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.util.render internal fun CommonBackendContext.reportCompilationError(message: String, irFile: IrFile, irElement: IrElement): Nothing { report(irElement, irFile, message, true) @@ -22,3 +23,22 @@ internal fun CommonBackendContext.reportCompilationError(message: String): Nothi internal fun CommonBackendContext.reportCompilationWarning(message: String) { report(null, null, message, false) } + +internal fun error(irFile: IrFile, element: IrElement?, message: String): Nothing { + error(buildString { + append("Internal compiler error: $message\n") + if (element == null) { + append("(IR element is null)") + } else { + val location = element.getCompilerMessageLocation(irFile) + append("at $location\n") + + val renderedElement = try { + element.render() + } catch (e: Throwable) { + "(unable to render IR element)" + } + append(renderedElement) + } + }) +}