diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 539f458a5d6..0ae870af545 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -1,26 +1,18 @@ package org.jetbrains.kotlin.cli.bc -import org.jetbrains.kotlin.backend.konan.* -import org.jetbrains.kotlin.backend.konan.util.profile import com.intellij.openapi.Disposable -import org.jetbrains.kotlin.analyzer.AnalysisResult +import org.jetbrains.kotlin.backend.konan.KonanCompilationException +import org.jetbrains.kotlin.backend.konan.KonanConfig +import org.jetbrains.kotlin.backend.konan.KonanConfigKeys +import org.jetbrains.kotlin.backend.konan.runTopLevelPhases +import org.jetbrains.kotlin.backend.konan.util.profile import org.jetbrains.kotlin.cli.common.CLICompiler -import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport import org.jetbrains.kotlin.cli.common.ExitCode -import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport -import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.backend.konan.KonanConfigKeys -import org.jetbrains.kotlin.backend.konan.Distribution import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.config.addKotlinSourceRoots -import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor -import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration -import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator -import org.jetbrains.kotlin.psi.KtFile -import java.lang.System.out import java.util.* class K2Native : CLICompiler() { @@ -36,7 +28,12 @@ class K2Native : CLICompiler() { val project = environment.project val konanConfig = KonanConfig(project, configuration) - runTopLevelPhases(konanConfig, environment) + try { + runTopLevelPhases(konanConfig, environment) + } catch (e: KonanCompilationException) { + return ExitCode.COMPILATION_ERROR + } + // TODO: catch Errors and IllegalStateException. return ExitCode.OK } diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Exceptions.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Exceptions.kt new file mode 100644 index 00000000000..08f97286c46 --- /dev/null +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Exceptions.kt @@ -0,0 +1,6 @@ +package org.jetbrains.kotlin.backend.konan + +/** + * Represents a compilation error caused by mistakes in an input file, e.g. undefined reference. + */ +class KonanCompilationException(message: String = "", cause: Throwable? = null) : Exception(message, cause) {} diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt index af83087103e..186bfcbec86 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanDriver.kt @@ -1,23 +1,15 @@ package org.jetbrains.kotlin.backend.konan import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.backend.konan.llvm.emitLLVM -import org.jetbrains.kotlin.backend.konan.util.profile -import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.ir.ModuleIndex -import org.jetbrains.kotlin.cli.common.CLICompiler +import org.jetbrains.kotlin.backend.konan.llvm.emitLLVM import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.kotlinSourceRoots -import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.resolve.BindingContext class NativeAnalyzer( val environment: KotlinCoreEnvironment, @@ -60,6 +52,9 @@ public fun runTopLevelPhases(konanConfig: KonanConfig, environment: KotlinCoreEn // Build AST and binding info. analyzerWithCompilerReport.analyzeAndReport(environment.getSourceFiles(), NativeAnalyzer(environment, environment.getSourceFiles(), konanConfig)) + if (analyzerWithCompilerReport.hasErrors()) { + throw KonanCompilationException() + } context.moduleDescriptor = analyzerWithCompilerReport.analysisResult.moduleDescriptor }