Disable running checkers by default (#4644)
* Make checkers be disabled by default * Allow running checkers in test launcher
This commit is contained in:
committed by
Nikolay Krasko
parent
71f44dce0f
commit
77e2b9f9a0
@@ -783,9 +783,7 @@ task array_to_any(type: KonanLocalTest) {
|
||||
}
|
||||
|
||||
standaloneTest("runtime_basic_init") {
|
||||
disabled = (project.testTarget == 'wasm32') // -g not yet properly works for WASM.
|
||||
source = "runtime/basic/init.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatus = 0
|
||||
}
|
||||
|
||||
@@ -941,20 +939,6 @@ standaloneTest("cleaner_in_main_without_checker") {
|
||||
goldValue = ""
|
||||
}
|
||||
|
||||
standaloneTest("cleaner_leak_release") {
|
||||
enabled = !project.globalTestArgs.contains('-g') && (project.testTarget != 'wasm32') // Cleaners need workers
|
||||
source = "runtime/basic/cleaner_leak.kt"
|
||||
goldValue = ""
|
||||
}
|
||||
|
||||
standaloneTest("cleaner_leak_debug") {
|
||||
enabled = !project.globalTestArgs.contains('-opt') && (project.testTarget != 'wasm32') // Cleaners need workers
|
||||
source = "runtime/basic/cleaner_leak.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() }
|
||||
}
|
||||
|
||||
standaloneTest("cleaner_leak_without_checker") {
|
||||
enabled = (project.testTarget != 'wasm32') // Cleaners need workers
|
||||
source = "runtime/basic/cleaner_leak_without_checker.kt"
|
||||
@@ -1066,9 +1050,8 @@ task worker11(type: KonanLocalTest) {
|
||||
}
|
||||
|
||||
standaloneTest("worker_threadlocal_no_leak") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build and pthreads.
|
||||
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
||||
source = "runtime/workers/worker_threadlocal_no_leak.kt"
|
||||
flags = ['-g']
|
||||
}
|
||||
|
||||
task freeze0(type: KonanLocalTest) {
|
||||
@@ -1168,17 +1151,15 @@ task enumIdentity(type: KonanLocalTest) {
|
||||
}
|
||||
|
||||
standaloneTest("leakWorker") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build and pthreads.
|
||||
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
||||
source = "runtime/workers/leak_worker.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Unfinished workers detected, 1 workers leaked!") }
|
||||
}
|
||||
|
||||
standaloneTest("leakMemoryWithWorkerTermination") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build and pthreads.
|
||||
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
||||
source = "runtime/workers/leak_memory_with_worker_termination.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
||||
}
|
||||
@@ -2965,7 +2946,6 @@ standaloneTest("cycle_detector") {
|
||||
|
||||
standaloneTest("cycle_collector") {
|
||||
disabled = true // Needs USE_CYCLIC_GC, which is disabled.
|
||||
flags = ['-g']
|
||||
source = "runtime/memory/cycle_collector.kt"
|
||||
}
|
||||
|
||||
@@ -2975,9 +2955,14 @@ standaloneTest("cycle_collector_deadlock1") {
|
||||
}
|
||||
|
||||
standaloneTest("leakMemory") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build.
|
||||
source = "runtime/memory/leak_memory.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
||||
}
|
||||
|
||||
standaloneTest("leakMemoryWithTestRunner") {
|
||||
source = "runtime/memory/leak_memory_test_runner.kt"
|
||||
flags = ['-tr']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
||||
}
|
||||
@@ -4084,17 +4069,13 @@ interopTest("interop_kt43265") {
|
||||
}
|
||||
|
||||
interopTest("interop_leakMemoryWithRunningThreadUnchecked") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build.
|
||||
interop = 'leakMemoryWithRunningThread'
|
||||
source = "interop/leakMemoryWithRunningThread/unchecked.kt"
|
||||
flags = ['-g']
|
||||
}
|
||||
|
||||
interopTest("interop_leakMemoryWithRunningThreadChecked") {
|
||||
disabled = project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build.
|
||||
interop = 'leakMemoryWithRunningThread'
|
||||
source = "interop/leakMemoryWithRunningThread/checked.kt"
|
||||
flags = ['-g']
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Cannot run checkers when there are 1 alive runtimes at the shutdown") }
|
||||
}
|
||||
@@ -4192,7 +4173,6 @@ if (PlatformInfo.isAppleTarget(project)) {
|
||||
goldValue = "OK\n"
|
||||
source = "interop/objc_with_initializer/objc_test.kt"
|
||||
interop = 'objcMisc'
|
||||
flags = ['-g']
|
||||
|
||||
doBeforeBuild {
|
||||
mkdir(buildDir)
|
||||
@@ -4395,11 +4375,10 @@ dynamicTest("interop_concurrentRuntime") {
|
||||
}
|
||||
|
||||
dynamicTest("interop_kt42397") {
|
||||
disabled = project.target.name != project.hostName || project.globalTestArgs.contains('-opt')
|
||||
disabled = project.target.name != project.hostName
|
||||
source = "interop/kt42397/knlibrary.kt"
|
||||
cSource = "$projectDir/interop/kt42397/test.cpp"
|
||||
clangTool = "clang++"
|
||||
flags = ['-g']
|
||||
}
|
||||
|
||||
dynamicTest("interop_cleaners_main_thread") {
|
||||
@@ -4447,12 +4426,11 @@ dynamicTest("interop_migrating_main_thread") {
|
||||
}
|
||||
|
||||
dynamicTest("interop_memory_leaks") {
|
||||
disabled = (project.target.name != project.hostName) ||
|
||||
project.globalTestArgs.contains('-opt') || (project.testTarget == 'wasm32') // Needs debug build.
|
||||
disabled = (project.target.name != project.hostName)
|
||||
source = "interop/memory_leaks/lib.kt"
|
||||
cSource = "$projectDir/interop/memory_leaks/main.cpp"
|
||||
clangTool = "clang++"
|
||||
flags = ['-g', '-Xdestroy-runtime-mode=legacy'] // Runtime cannot be destroyed with interop with on-shutdown.
|
||||
flags = ['-Xdestroy-runtime-mode=legacy'] // Runtime cannot be destroyed with interop with on-shutdown.
|
||||
expectedExitStatusChecker = { it != 0 }
|
||||
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
||||
}
|
||||
@@ -4732,7 +4710,6 @@ if (isAppleTarget(project)) {
|
||||
enabled = !project.globalTestArgs.contains('-opt')
|
||||
framework("Kt42397") {
|
||||
sources = ['framework/kt42397']
|
||||
opts = ['-g']
|
||||
}
|
||||
swiftSources = ['framework/kt42397']
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import kotlin.native.Platform
|
||||
|
||||
// The following 2 singletons are unused. However, since we are generating ObjC bindings for them,
|
||||
// they should be marked as used, so that the code generator emits their deinitialization.
|
||||
|
||||
@@ -10,3 +12,7 @@ class B {
|
||||
fun foo() = 2
|
||||
}
|
||||
}
|
||||
|
||||
fun enableMemoryChecker() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ class Results {
|
||||
|
||||
func runTestKt42397(pointer: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? {
|
||||
autoreleasepool {
|
||||
KnlibraryKt.enableMemoryChecker()
|
||||
let results = pointer.bindMemory(to: Results.self, capacity: 1).pointee
|
||||
results.aFoo = A().foo()
|
||||
results.bFoo = B.Companion().foo()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package knlibrary
|
||||
|
||||
import kotlin.native.Platform
|
||||
|
||||
// The following 2 singletons are unused. However, since we are generating C bindings for them,
|
||||
// they should be marked as used, so that the code generator emits their deinitialization.
|
||||
|
||||
@@ -8,3 +10,7 @@ object A {}
|
||||
class B {
|
||||
companion object {}
|
||||
}
|
||||
|
||||
fun enableMemoryChecker() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ int main() {
|
||||
auto t = std::thread([] {
|
||||
auto lib = testlib_symbols();
|
||||
|
||||
lib->kotlin.root.knlibrary.enableMemoryChecker();
|
||||
|
||||
// Initialize A and B.Companion and get their stable pointers.
|
||||
auto a = lib->kotlin.root.knlibrary.A._instance();
|
||||
auto bCompanion = lib->kotlin.root.knlibrary.B.Companion._instance();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import leakMemory.*
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.Platform
|
||||
import kotlin.test.*
|
||||
import kotlinx.cinterop.*
|
||||
|
||||
@@ -13,6 +14,7 @@ fun ensureInititalized() {
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
kotlin.native.internal.Debugging.forceCheckedShutdown = true
|
||||
assertTrue(global.value == 0)
|
||||
// Created a thread, made sure Kotlin is initialized there.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import leakMemory.*
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.Platform
|
||||
import kotlin.test.*
|
||||
import kotlinx.cinterop.*
|
||||
|
||||
@@ -13,6 +14,7 @@ fun ensureInititalized() {
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
kotlin.native.internal.Debugging.forceCheckedShutdown = false
|
||||
assertTrue(global.value == 0)
|
||||
// Created a thread, made sure Kotlin is initialized there.
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
*/
|
||||
|
||||
import kotlinx.cinterop.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
fun enableMemoryChecker() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
}
|
||||
|
||||
fun leakMemory() {
|
||||
StableRef.create(Any())
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
int main() {
|
||||
std::thread t([]() {
|
||||
testlib_symbols()->kotlin.root.enableMemoryChecker();
|
||||
testlib_symbols()->kotlin.root.leakMemory();
|
||||
});
|
||||
t.join();
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import objc_misc.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
val a = B.giveC()!! as C
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
println("OK")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
@file:OptIn(ExperimentalStdlibApi::class)
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
import kotlin.native.internal.*
|
||||
|
||||
// This cleaner won't be run, because it's deinitialized with globals after
|
||||
// cleaners are disabled.
|
||||
val globalCleaner = createCleaner(42) {
|
||||
println(it)
|
||||
}
|
||||
|
||||
fun main() {
|
||||
// Cleaner holds onto a finalization lambda. If it doesn't get executed,
|
||||
// the memory will leak. Suppress memory leak checker to check for cleaners
|
||||
// leak only.
|
||||
Platform.isMemoryLeakCheckerActive = false
|
||||
// Make sure cleaner is initialized.
|
||||
assertNotNull(globalCleaner)
|
||||
}
|
||||
@@ -16,10 +16,6 @@ val globalCleaner = createCleaner(42) {
|
||||
}
|
||||
|
||||
fun main() {
|
||||
// Cleaner holds onto a finalization lambda. If it doesn't get executed,
|
||||
// the memory will leak. Suppress memory leak checker to check for cleaners
|
||||
// leak only.
|
||||
Platform.isMemoryLeakCheckerActive = false
|
||||
Platform.isCleanersLeakCheckerActive = true
|
||||
// Make sure cleaner is initialized.
|
||||
assertNotNull(globalCleaner)
|
||||
|
||||
@@ -16,11 +16,6 @@ val globalCleaner = createCleaner(42) {
|
||||
}
|
||||
|
||||
fun main() {
|
||||
// Cleaner holds onto a finalization lambda. If it doesn't get executed,
|
||||
// the memory will leak. Suppress memory leak checker to check for cleaners
|
||||
// leak only.
|
||||
Platform.isMemoryLeakCheckerActive = false
|
||||
Platform.isCleanersLeakCheckerActive = false
|
||||
// Make sure cleaner is initialized.
|
||||
assertNotNull(globalCleaner)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.internal.GC
|
||||
import kotlin.native.Platform
|
||||
import kotlin.test.*
|
||||
|
||||
fun test1() {
|
||||
@@ -175,6 +176,7 @@ fun test9() {
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
kotlin.native.internal.GC.cyclicCollectorEnabled = true
|
||||
test1()
|
||||
test2()
|
||||
@@ -187,4 +189,4 @@ fun main() {
|
||||
test7()
|
||||
test8()
|
||||
test9()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.internal.GC
|
||||
import kotlin.native.Platform
|
||||
import kotlin.test.*
|
||||
|
||||
class Holder(var other: Any?)
|
||||
@@ -32,6 +33,11 @@ fun assertArrayEquals(
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeTest
|
||||
fun enableMemoryChecker() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
}
|
||||
|
||||
@Test
|
||||
fun noCycles() {
|
||||
val atomic1 = AtomicReference<Any?>(null)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import kotlinx.cinterop.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
StableRef.create(Any())
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import kotlin.test.*
|
||||
|
||||
import kotlinx.cinterop.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
@BeforeTest
|
||||
fun enableMemoryChecker() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test() {
|
||||
StableRef.create(Any())
|
||||
}
|
||||
+2
@@ -1,7 +1,9 @@
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.Platform
|
||||
import kotlinx.cinterop.*
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
val worker = Worker.start()
|
||||
// Make sure worker is initialized.
|
||||
worker.execute(TransferMode.SAFE, {}, {}).result;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.Platform
|
||||
import kotlinx.cinterop.*
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
val worker = Worker.start()
|
||||
// Make sure worker is initialized.
|
||||
worker.execute(TransferMode.SAFE, {}, {}).result;
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
*/
|
||||
|
||||
import kotlin.native.concurrent.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
@ThreadLocal
|
||||
var x = Any()
|
||||
|
||||
fun main() {
|
||||
Platform.isMemoryLeakCheckerActive = true
|
||||
val worker = Worker.start()
|
||||
|
||||
worker.execute(TransferMode.SAFE, {}) {
|
||||
|
||||
@@ -71,8 +71,8 @@ void InitOrDeinitGlobalVariables(int initialize, MemoryState* memory) {
|
||||
}
|
||||
}
|
||||
|
||||
KBoolean g_checkLeaks = KonanNeedDebugInfo;
|
||||
KBoolean g_checkLeakedCleaners = KonanNeedDebugInfo;
|
||||
KBoolean g_checkLeaks = false;
|
||||
KBoolean g_checkLeakedCleaners = false;
|
||||
KBoolean g_forceCheckedShutdown = false;
|
||||
|
||||
constexpr RuntimeState* kInvalidRuntime = nullptr;
|
||||
|
||||
@@ -23,16 +23,21 @@ fun testLauncherEntryPoint(args: Array<String>): Int {
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
exitProcess(testLauncherEntryPoint(args))
|
||||
val exitCode = testLauncherEntryPoint(args)
|
||||
if (exitCode != 0) {
|
||||
exitProcess(exitCode)
|
||||
}
|
||||
}
|
||||
|
||||
fun worker(args: Array<String>) {
|
||||
val worker = Worker.start()
|
||||
val result = worker.execute(TransferMode.SAFE, { args.freeze() }) {
|
||||
val exitCode = worker.execute(TransferMode.SAFE, { args.freeze() }) {
|
||||
it -> testLauncherEntryPoint(it)
|
||||
}.result
|
||||
worker.requestTermination().result
|
||||
exitProcess(result)
|
||||
if (exitCode != 0) {
|
||||
exitProcess(exitCode)
|
||||
}
|
||||
}
|
||||
|
||||
fun mainNoExit(args: Array<String>) {
|
||||
|
||||
Reference in New Issue
Block a user