Don't wrap ProcessCanceledException with other exceptions

ProcessCanceledException indicates that the compilation process was
terminated by user. This kind of exception should not be wrapped anyhow
in order to be handled on toplevel in CLICompiler.
#KT-38483 Fixed
diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt
index 0d2b899..8662c59 100644
--- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt
+++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/CodegenUtil.kt
@@ -6,6 +6,7 @@
 package org.jetbrains.kotlin.backend.common
 
 import com.intellij.openapi.application.ApplicationManager
+import com.intellij.openapi.progress.ProcessCanceledException
 import com.intellij.openapi.project.Project
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.descriptors.*
@@ -236,6 +237,7 @@
         // CompilationException (the only KotlinExceptionWithAttachments possible here) is already supposed
         // to have all information about the context.
         if (exception is KotlinExceptionWithAttachments) throw exception
+        if (exception is ProcessCanceledException) throw exception
         throw BackendException(
             getExceptionMessage("Backend", "Exception during $phase", exception, location) +
                     additionalMessage?.let { "\n" + it }.orEmpty(),
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt
index fcfc90c..edb9890 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CompilationException.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.backend.common
 
+import com.intellij.openapi.progress.ProcessCanceledException
 import org.jetbrains.kotlin.ir.IrElement
 import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
 import org.jetbrains.kotlin.ir.declarations.IrDeclaration
@@ -96,13 +97,16 @@
     message: String,
     file: IrFile,
     element: IrElement?
-): CompilationException {
-    return CompilationException(
-        "$message: ${this::class.qualifiedName}: ${this.message}",
-        file,
-        element,
-        cause = this
-    ).apply {
-        stackTrace = this@wrapWithCompilationException.stackTrace
-    }
+): RuntimeException {
+    return if (this is ProcessCanceledException)
+        this
+    else
+        CompilationException(
+            "$message: ${this::class.qualifiedName}: ${this.message}",
+            file,
+            element,
+            cause = this
+        ).apply {
+            stackTrace = this@wrapWithCompilationException.stackTrace
+        }
 }
\ No newline at end of file
diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt
index 2dfce61..0700f6f 100644
--- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt
+++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/FunctionCodegen.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.backend.jvm.codegen
 
+import com.intellij.openapi.progress.ProcessCanceledException
 import org.jetbrains.kotlin.backend.common.lower.BOUND_RECEIVER_PARAMETER
 import org.jetbrains.kotlin.backend.common.lower.BOUND_VALUE_PARAMETER
 import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
@@ -42,6 +43,8 @@
     ): SMAPAndMethodNode =
         try {
             doGenerate(reifiedTypeParameters)
+        } catch (e: ProcessCanceledException) {
+            throw e
         } catch (e: Throwable) {
             throw RuntimeException("Exception while generating code for:\n${irFunction.dump()}", e)
         }