From e5aa7e1625f6b90f4f518716508337961b70136c Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Mon, 28 Jun 2021 20:46:19 +0700 Subject: [PATCH] [K/N] Disable some tests for noop GC --- .../backend.native/tests/build.gradle | 75 ++++++++++++++++--- .../tests/objcexport/deallocRetain.swift | 2 + .../tests/objcexport/values.swift | 6 ++ 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/kotlin-native/backend.native/tests/build.gradle b/kotlin-native/backend.native/tests/build.gradle index 337d681e067..bb013b1c800 100644 --- a/kotlin-native/backend.native/tests/build.gradle +++ b/kotlin-native/backend.native/tests/build.gradle @@ -108,6 +108,7 @@ tasks.withType(RunExternalTestGroup.class).configureEach { } ext.isExperimentalMM = project.globalTestArgs.contains("-memory-model") && project.globalTestArgs.contains("experimental") +ext.isNoopGC = project.globalTestArgs.contains("-Xgc=noop") if (ext.isExperimentalMM) { // TODO: Make it more aggressive and only turn it on for a subset of tests. @@ -209,7 +210,7 @@ task resultsTask() { reports += new KonanTestGroupReport(it.name, it.testGroupReporter.suiteReports) statistics.add(it.testGroupReporter.statistics) } - + tasks.withType(KonanGTest).matching { it.state.executed }.each { statistics.add(it.statistics) } @@ -832,19 +833,22 @@ task empty_substring(type: KonanLocalTest) { } standaloneTest("cleaner_basic") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_basic.kt" flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] } standaloneTest("cleaner_workers") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_workers.kt" flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] } standaloneTest("cleaner_in_main_with_checker") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_in_main_with_checker.kt" goldValue = "42\n" } @@ -862,7 +866,8 @@ standaloneTest("cleaner_leak_without_checker") { } standaloneTest("cleaner_leak_with_checker") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_leak_with_checker.kt" expectedExitStatusChecker = { it != 0 } outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() } @@ -874,14 +879,16 @@ standaloneTest("cleaner_in_tls_main_without_checker") { } standaloneTest("cleaner_in_tls_main_with_checker") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_in_tls_main_with_checker.kt" expectedExitStatusChecker = { it != 0 } outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() } } standaloneTest("cleaner_in_tls_worker") { - enabled = (project.testTarget != 'wasm32') // Cleaners need workers + enabled = (project.testTarget != 'wasm32') && // Cleaners need workers + !isNoopGC source = "runtime/basic/cleaner_in_tls_worker.kt" flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] } @@ -890,6 +897,18 @@ standaloneTest("worker_bound_reference0") { enabled = (project.testTarget != 'wasm32') // Workers need pthreads. source = "runtime/concurrent/worker_bound_reference0.kt" flags = ['-tr'] + + if (isNoopGC) { + def exclude = [ + "*.testCollect", + "*.testCollectFrozen", + "*.testCollectInWorkerFrozen", + "*.collectCyclicGarbage", + "*.collectCyclicGarbageWithAtomicsFrozen", + "*.collectCrossThreadCyclicGarbageWithAtomicsFrozen" + ] + arguments += ["--ktest_filter=*-${exclude.join(":")}"] + } } task worker0(type: KonanLocalTest) { @@ -958,7 +977,8 @@ task worker9(type: KonanLocalTest) { } task worker10(type: KonanLocalTest) { - enabled = (project.testTarget != 'wasm32') // Workers need pthreads. + enabled = (project.testTarget != 'wasm32') && // Workers need pthreads. + !isNoopGC goldValue = "OK\ntrue\ntrue\n" source = "runtime/workers/worker10.kt" } @@ -1026,7 +1046,8 @@ task freeze5(type: KonanLocalTest) { } task freeze6(type: KonanLocalTest) { - enabled = (project.testTarget != 'wasm32') // No exceptions on WASM. + enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM. + !isNoopGC goldValue = "OK\nOK\n" source = "runtime/workers/freeze6.kt" } @@ -1061,6 +1082,7 @@ standaloneTest("lazy2") { } standaloneTest("lazy3") { + enabled = !isNoopGC source = "runtime/workers/lazy3.kt" } @@ -2905,6 +2927,7 @@ task memory_cycles0(type: KonanLocalTest) { } task memory_cycles1(type: KonanLocalTest) { + enabled = !isNoopGC source = "runtime/memory/cycles1.kt" } @@ -2918,6 +2941,7 @@ task memory_escape2(type: KonanLocalTest) { } task memory_weak0(type: KonanLocalTest) { + enabled = !isNoopGC goldValue = "Data(s=Hello)\nnull\nOK\n" source = "runtime/memory/weak0.kt" } @@ -2977,7 +3001,8 @@ standaloneTest("stress_gc_allocations") { (project.testTarget != "watchos_arm32") && (project.testTarget != "watchos_arm64") && (project.testTarget != "watchos_x86") && - (project.testTarget != "watchos_x64") + (project.testTarget != "watchos_x64") && + !isNoopGC source = "runtime/memory/stress_gc_allocations.kt" flags = ['-tr', '-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] } @@ -4318,6 +4343,11 @@ if (PlatformInfo.isAppleTarget(project)) { "Deallocated\nDeallocated\n" + "Class TestExportObjCClass34 has multiple implementations. Which one will be used is undefined.\n" + if (isNoopGC) { + // No deallocations for the no-op GC. + goldValue = goldValue.replace("Deallocated\n", "") + } + source = "interop/objc/smoke.kt" interop = 'objcSmoke' @@ -4346,6 +4376,17 @@ if (PlatformInfo.isAppleTarget(project)) { interop = 'objcTests' flags = ['-tr', '-e', 'main'] + if (isNoopGC) { + def exclude = [ + "Kt41811Kt.*", + "CustomStringKt.testCustomString", + "Kt42482Kt.testKT42482", + "ObjcWeakRefsKt.testObjCWeakRef", + "WeakRefsKt.testWeakRefs" + ] + arguments += ["--ktest_filter=*-${exclude.join(":")}"] + } + doBeforeBuild { mkdir(buildDir) execClangForCompilerTests(project.target) { @@ -4477,6 +4518,7 @@ if (PlatformInfo.isAppleTarget(project)) { } interopTest("interop_objc_kt42172") { + enabled = !isNoopGC source = "interop/objc/kt42172/main.kt" interop = "objc_kt42172" flags = ['-Xopt-in=kotlin.native.internal.InternalForKotlinNative'] @@ -4611,7 +4653,7 @@ dynamicTest("interop_kt42397") { } dynamicTest("interop_cleaners_main_thread") { - disabled = (project.target.name != project.hostName) + disabled = (project.target.name != project.hostName) || isNoopGC source = "interop/cleaners/cleaners.kt" cSource = "$projectDir/interop/cleaners/main_thread.cpp" clangTool = "clang++" @@ -4620,7 +4662,7 @@ dynamicTest("interop_cleaners_main_thread") { } dynamicTest("interop_cleaners_second_thread") { - disabled = (project.target.name != project.hostName) + disabled = (project.target.name != project.hostName) || isNoopGC source = "interop/cleaners/cleaners.kt" cSource = "$projectDir/interop/cleaners/second_thread.cpp" clangTool = "clang++" @@ -4851,6 +4893,9 @@ if (isAppleTarget(project)) { opts = ["-Xemit-lazy-objc-header=$lazyHeader", "-Xexport-kdoc"] } swiftSources = ['objcexport'] + if (isNoopGC) { + swiftExtraOpts += ["-D", "NOOP_GC"] + } } frameworkTest('testObjCExportNoGenerics') { @@ -4903,6 +4948,9 @@ if (isAppleTarget(project)) { } swiftSources = ['objcexport'] swiftExtraOpts = [ '-D', 'NO_GENERICS' ] + if (isNoopGC) { + swiftExtraOpts += ["-D", "NOOP_GC"] + } } frameworkTest('testObjCExportStatic') { @@ -4933,6 +4981,9 @@ if (isAppleTarget(project)) { isStatic = true } swiftSources = ['objcexport'] + if (isNoopGC) { + swiftExtraOpts += ["-D", "NOOP_GC"] + } } frameworkTest('testValuesGenericsFramework') { diff --git a/kotlin-native/backend.native/tests/objcexport/deallocRetain.swift b/kotlin-native/backend.native/tests/objcexport/deallocRetain.swift index 3c8758331a1..97186c66bd0 100644 --- a/kotlin-native/backend.native/tests/objcexport/deallocRetain.swift +++ b/kotlin-native/backend.native/tests/objcexport/deallocRetain.swift @@ -66,6 +66,8 @@ class DeallocRetainTests : SimpleTestProvider { override init() { super.init() +#if !NOOP_GC test("Test1", test1) +#endif } } diff --git a/kotlin-native/backend.native/tests/objcexport/values.swift b/kotlin-native/backend.native/tests/objcexport/values.swift index 6f1bd508216..03f4b80dd65 100644 --- a/kotlin-native/backend.native/tests/objcexport/values.swift +++ b/kotlin-native/backend.native/tests/objcexport/values.swift @@ -317,10 +317,12 @@ func testExceptions() throws { try assertTrue(error.kotlinException is MyError) } +#if !NOOP_GC try assertFalse(TestThrowingConstructorRelease.deinitialized) try testThrowing { try TestThrowingConstructorRelease(doThrow: true) } ValuesKt.gc() try assertTrue(TestThrowingConstructorRelease.deinitialized) +#endif try testThrowing { try Throwing(doThrow: true) } @@ -781,8 +783,10 @@ func setAssociatedObject(object: AnyObject, value: AnyObject) { } func testWeakRefs() throws { +#if !NOOP_GC try testWeakRefs0(frozen: false) try testWeakRefs0(frozen: true) +#endif } func testWeakRefs0(frozen: Bool) throws { @@ -1123,6 +1127,7 @@ class TestSharedRefs { try testLambdaSimple() try testObjectPartialRelease() +#if !NOOP_GC try testBackgroundRefCount(createObject: { $0.createLambda() }) try testBackgroundRefCount(createObject: { $0.createRegularObject() }) try testBackgroundRefCount(createObject: { $0.createCollection() }) @@ -1137,6 +1142,7 @@ class TestSharedRefs { try testRememberNewObject(createObject: { $0.createFrozenRegularObject() }) try testRememberNewObject(createObject: { $0.createFrozenCollection() }) +#endif usleep(300 * 1000) }