Compare commits

...

5 Commits

Author SHA1 Message Date
Igor Chevdar
de840b7e70 [IR][cache] Fix for https://youtrack.jetbrains.com/issue/KT-44764
The .konanLibrary is cached for each declaration for performance purposes, but it is only ok to do it
after IR has been lowered to its final state (or at least when declarations aren't being moved around),
so the fix respects that by only taking .konanLibrary of a IrFile (it is assumed that files stay on their place
during entire backend lowering procedure).

(cherry picked from commit e021138368b48e306ba99a96f47d93ecbe039f4d)
2021-03-15 10:35:33 +01:00
Alexander Udalov
99bf2c48a1 Fix/suppress some warnings
(cherry picked from commit d8a43c216925b3a9e1475b786978436835a57927)
2021-03-15 10:35:10 +01:00
Igor Chevdar
2d88f0cd79 Disposed target data
(cherry picked from commit 250be87acf66d5c780fb593f46da3540a536e049)
2021-03-15 10:20:27 +01:00
Vladimir Ivanov
842dbb9006 Add test for [KT-3706]
Issue is already fixed by metadata-based cinterop

(cherry picked from commit fd4f5b2c07ebdc431d6243ac087f911ee30e88ca)
2021-03-15 10:18:29 +01:00
Vladimir Ivanov
6594fac213 Fix sample file naming for case-sensitive FS
(cherry picked from commit 72235c31852fba4f2ab330d8178197c2584b1cda)
2021-03-15 10:16:20 +01:00
14 changed files with 71 additions and 7 deletions

View File

@@ -139,5 +139,7 @@ fun JsValue.setter(property: String, string: String) {
object ArenaManager {
val globalArena = allocateArena()
@Suppress("VARIABLE_IN_SINGLETON_WITHOUT_THREAD_LOCAL")
var currentArena = globalArena
}
}

View File

@@ -78,7 +78,7 @@ tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach
freeCompilerArgs = listOf("-Xuse-experimental=kotlin.ExperimentalUnsignedTypes",
"-Xuse-experimental=kotlin.Experimental",
"-Xopt-in=kotlin.RequiresOptIn",
"-XXLanguage:+InlineClasses",
"-Xinline-classes",
"-Xskip-prerelease-check")
allWarningsAsErrors = true
}

View File

@@ -58,6 +58,7 @@ external fun CPointer<*>.getRawValue(): NativePtr
internal fun CPointer<*>.cPointerToString() = "CPointer(raw=$rawValue)"
@Suppress("FINAL_UPPER_BOUND")
public class Vector128VarOf<T : Vector128>(rawPtr: NativePtr) : CVariable(rawPtr) {
@Deprecated("Use sizeOf<T>() or alignOf<T>() instead.")
@Suppress("DEPRECATION")
@@ -66,6 +67,7 @@ public class Vector128VarOf<T : Vector128>(rawPtr: NativePtr) : CVariable(rawPtr
public typealias Vector128Var = Vector128VarOf<Vector128>
@Suppress("FINAL_UPPER_BOUND", "UNCHECKED_CAST")
public var <T : Vector128> Vector128VarOf<T>.value: T
get() = nativeMemUtils.getVector(this) as T
set(value) = nativeMemUtils.putVector(this, value)

View File

@@ -252,7 +252,7 @@ targetList.each { target ->
def testCommon = project(":kotlin-test:kotlin-test-common").files("src/main/kotlin").files
args = [*konanArgs,
'-output', project(':kotlin-native:runtime').file("build/${target}Stdlib"),
'-produce', 'library', '-module-name', 'stdlib', '-XXLanguage:+AllowContractsForCustomFunctions',
'-produce', 'library', '-module-name', 'stdlib',
'-Xmulti-platform', '-Xopt-in=kotlin.RequiresOptIn', '-Xinline-classes',
'-Xopt-in=kotlin.contracts.ExperimentalContracts',
'-Xopt-in=kotlin.ExperimentalMultiplatform',
@@ -358,4 +358,4 @@ publishing {
from components.java
}
}
}
}

View File

@@ -338,8 +338,10 @@ internal class Context(config: KonanConfig) : KonanBackendContext(config) {
LLVMDisposeDIBuilder(debugInfo.builder)
if (llvmModule != null)
LLVMDisposeModule(llvmModule)
if (::llvm.isInitialized)
if (::llvm.isInitialized) {
LLVMDisposeTargetData(llvm.runtime.targetData)
LLVMDisposeModule(llvm.runtime.llvmModule)
}
tryDisposeLLVMContext()
llvmDisposed = true
}

View File

@@ -7,7 +7,9 @@ package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
import org.jetbrains.kotlin.library.KotlinLibrary
/**
@@ -20,5 +22,6 @@ interface LlvmModuleSpecification {
fun containsLibrary(library: KotlinLibrary): Boolean
fun containsModule(module: ModuleDescriptor): Boolean
fun containsModule(module: IrModuleFragment): Boolean
fun containsPackageFragment(packageFragment: IrPackageFragment): Boolean
fun containsDeclaration(declaration: IrDeclaration): Boolean
}

View File

@@ -8,7 +8,9 @@ package org.jetbrains.kotlin.backend.konan
import org.jetbrains.kotlin.backend.konan.ir.konanLibrary
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
import org.jetbrains.kotlin.library.KotlinLibrary
internal abstract class LlvmModuleSpecificationBase(protected val cachedLibraries: CachedLibraries) : LlvmModuleSpecification {
@@ -24,6 +26,9 @@ internal abstract class LlvmModuleSpecificationBase(protected val cachedLibrarie
override fun containsModule(module: ModuleDescriptor): Boolean =
module.konanLibrary.let { it == null || containsLibrary(it) }
override fun containsPackageFragment(packageFragment: IrPackageFragment): Boolean =
packageFragment.konanLibrary.let { it == null || containsLibrary(it) }
override fun containsDeclaration(declaration: IrDeclaration): Boolean =
declaration.konanLibrary.let { it == null || containsLibrary(it) }
}

View File

@@ -114,6 +114,11 @@ internal fun IrExpression.isBoxOrUnboxCall() =
val ModuleDescriptor.konanLibrary get() = (this.klibModuleOrigin as? DeserializedKlibModuleOrigin)?.library
val IrModuleFragment.konanLibrary get() =
(this as? KonanIrModuleFragmentImpl)?.konanLibrary ?: descriptor.konanLibrary
val IrPackageFragment.konanLibrary get() =
if (this is IrFile)
this.konanLibrary
else
this.packageFragmentDescriptor.containingDeclaration.konanLibrary
val IrFile.konanLibrary get() =
(metadata as? KonanFileMetadataSource)?.module?.konanLibrary ?: packageFragmentDescriptor.containingDeclaration.konanLibrary
val IrDeclaration.konanLibrary: KotlinLibrary? get() {

View File

@@ -15,6 +15,9 @@ import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.file
import org.jetbrains.kotlin.ir.util.fileOrNull
import org.jetbrains.kotlin.ir.util.getPackageFragment
// TODO: This is a bit hacky. Think about adopting persistent IR ideas.
internal class NativeInlineFunctionResolver(override val context: Context) : DefaultInlineFunctionResolver(context) {
@@ -39,7 +42,7 @@ internal class NativeInlineFunctionResolver(override val context: Context) : Def
LocalClassesInInlineLambdasLowering(context).lower(body, function)
if (context.llvmModuleSpecification.containsDeclaration(function)) {
if (context.llvmModuleSpecification.containsPackageFragment(function.getPackageFragment()!!)) {
// Do not extract local classes off of inline functions from cached libraries.
LocalClassesInInlineFunctionsLowering(context).lower(body, function)
LocalClassesExtractionFromInlineFunctionsLowering(context).lower(body, function)

View File

@@ -0,0 +1,12 @@
#import <objc/NSObject.h>
@interface KT37067_Impl : NSObject
@property (nonatomic, readonly) NSObject *newValue;
@property (nonatomic, readonly) NSObject *allocValue;
@property (nonatomic, readonly) NSObject *copyValue;
@property (nonatomic, readonly) NSObject *mutableCopyValue;
@end;

View File

@@ -0,0 +1,10 @@
import kotlin.test.*
import objcTests.*
/// KT-37067: attribute prefixed with "new" causes cinterop failure
// No matter what is in the test: I only need to get it compilable with cinterop
@Test fun testKT37067() {
val impl = KT37067_Impl()
assertEquals(null, impl.newValue)
}

View File

@@ -0,0 +1,20 @@
#include "KT37067_prefix.h"
@implementation KT37067_Impl : NSObject
/// KT-37067 is a cinterop issue, so .m implementaion is not relevant at all,
// but I still need to make objc compilable with `-fobjc-arc` option
- (NSObject *)newValue {
return nil;
}
- (NSObject *)allocValue {
return nil;
}
- (NSObject *)copyValue {
return nil;
}
- (NSObject *)mutableCopyValue {
return nil;
}
@end;

View File

@@ -93,7 +93,7 @@ targetList.each { target ->
jvmArgs = konanJvmArgs
args = [*konanArgs,
'-output', outputFile,
'-produce', 'library', '-module-name', moduleName, '-XXLanguage:+AllowContractsForCustomFunctions',
'-produce', 'library', '-module-name', moduleName,
'-Xmulti-platform', '-Xopt-in=kotlinx.cli.ExperimentalCli',
'-Xopt-in=kotlin.ExperimentalMultiplatform',
'-Xallow-result-return-type', '-Werror', '-Xopt-in=kotlin.RequiresOptIn',