Skip to content

Running test suites under linux with asan shows a memory leak in xctest #342

Closed
@hassila

Description

@hassila

Running with the 5.6 swift toolchain and related artefacts - this is reproduced on Ubuntu - running

gives the following from xctest:

ubuntu@swift:/home/xyzzy/swift-data-model$ swift test --sanitize address | swift demangle
Compiling plugin Swift-DocC...
Compiling plugin Swift-DocC Preview...
Building for debugging...
[1/3] Emitting module DataModelTests
[2/3] Compiling DataModelTests DataModelTests.swift
[5/8] /home/xyzzy/swift-data-model/.build/aarch64-unknown-linux-gnu/debug/swift-data-modelPackageTests.derived/runner.swift
[6/8] Wrapping AST for DataModelTests for debugging
[7/11] Compiling swift_data_modelPackageTests runner.swift
[8/11] Compiling swift_data_modelPackageTests DataModelTests.swift
[9/11] Emitting module swift_data_modelPackageTests
[12/13] Wrapping AST for swift-data-modelPackageTests for debugging
/usr/bin/ld.gold: warning: Cannot export local symbol '__asan_extra_spill_area'
[13/13] Linking swift-data-modelPackageTests.xctest
Build complete! (3.13s)
Test Suite 'All tests' started at 2022-04-27 18:31:07.420
Test Suite 'debug.xctest' started at 2022-04-27 18:31:07.423
Test Suite 'DataModelTests' started at 2022-04-27 18:31:07.423
Test Case 'DataModelTests.testThatDataModelFailsWriting' started at 2022-04-27 18:31:07.423
Test Case 'DataModelTests.testThatDataModelFailsWriting' passed (0.153 seconds)
Test Suite 'DataModelTests' passed at 2022-04-27 18:31:07.577
	 Executed 1 test, with 0 failures (0 unexpected) in 0.153 (0.153) seconds
Test Suite 'debug.xctest' passed at 2022-04-27 18:31:07.577
	 Executed 1 test, with 0 failures (0 unexpected) in 0.153 (0.153) seconds
Test Suite 'All tests' passed at 2022-04-27 18:31:07.577
	 Executed 1 test, with 0 failures (0 unexpected) in 0.153 (0.153) seconds

=================================================================
==6874==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 32 byte(s) in 1 object(s) allocated from:
    #0 0xaaaad334683c in malloc /home/build-user/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:129:3
    #1 0xffff9861db58 in operator new(unsigned long) (/lib/aarch64-linux-gnu/libstdc++.so.6+0x9fb58)
    #2 0xffff997ce258 in swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1> >::formWeakReference() (/usr/lib/swift/linux/libswiftCore.so+0x3ea258)
    #3 0xffff9979e938 in swift_weakAssign (/usr/lib/swift/linux/libswiftCore.so+0x3ba938)
    #4 0xffff98951168 in $s6XCTest9XCTWaiterC4wait3for7timeout12enforceOrder4file4lineAC6ResultOSayAA0A11ExpectationCG_SdSbs12StaticStringVSitF (/usr/lib/swift/linux/libXCTest.so+0x3f168)
    #5 0xffff989514a8 in $s6XCTest9XCTWaiterC4wait3for7timeout12enforceOrder4file4lineAC6ResultOSayAA0A11ExpectationCG_SdSbs12StaticStringVSitFZ (/usr/lib/swift/linux/libXCTest.so+0x3f4a8)
    #6 0xffff9893fda8 in $s6XCTest21awaitUsingExpectationyyyyYaKcKF (/usr/lib/swift/linux/libXCTest.so+0x2dda8)
    #7 0xffff9893f37c in $s6XCTest0A4CaseC10invokeTestyyF (/usr/lib/swift/linux/libXCTest.so+0x2d37c)
    #8 0xffff9893f1b0 in $s6XCTest0A4CaseC7performyyAA0A3RunCF (/usr/lib/swift/linux/libXCTest.so+0x2d1b0)
    #9 0xffff989436d4 in $s6XCTestAAC3runyyF (/usr/lib/swift/linux/libXCTest.so+0x316d4)
    #10 0xffff9894194c in $s6XCTest0A5SuiteC7performyyAA0A3RunCF (/usr/lib/swift/linux/libXCTest.so+0x2f94c)
    #11 0xffff989436d4 in $s6XCTestAAC3runyyF (/usr/lib/swift/linux/libXCTest.so+0x316d4)
    #12 0xffff9894194c in $s6XCTest0A5SuiteC7performyyAA0A3RunCF (/usr/lib/swift/linux/libXCTest.so+0x2f94c)
    #13 0xffff989436d4 in $s6XCTestAAC3runyyF (/usr/lib/swift/linux/libXCTest.so+0x316d4)
    #14 0xffff9894194c in $s6XCTest0A5SuiteC7performyyAA0A3RunCF (/usr/lib/swift/linux/libXCTest.so+0x2f94c)
    #15 0xffff989436d4 in $s6XCTestAAC3runyyF (/usr/lib/swift/linux/libXCTest.so+0x316d4)
    #16 0xffff9893dee0 in $s6XCTest7XCTMain_9arguments9observerss5NeverOSayAA0A4CaseCm04testF5Class_SaySS_yAHKctG8allTeststG_SaySSGSayAA0A11Observation_pGtF (/usr/lib/swift/linux/libXCTest.so+0x2bee0)
    #17 0xffff9893da58 in $s6XCTest7XCTMainys5NeverOSayAA0A4CaseCm04testD5Class_SaySS_yAFKctG8allTeststGF (/usr/lib/swift/linux/libXCTest.so+0x2ba58)
    #18 0xaaaad36ef024 in $s28swift_data_modelPackageTests6RunnerV4mainyyFZ /home/xyzzy/swift-data-model/.build/aarch64-unknown-linux-gnu/debug/swift-data-modelPackageTests.derived/runner.swift:10:9
    #19 0xaaaad36ef098 in $s28swift_data_modelPackageTests6RunnerV5$mainyyFZ /home/xyzzy/swift-data-model/.build/aarch64-unknown-linux-gnu/debug/swift-data-modelPackageTests.derived/runner.swift:3:1
    #20 0xaaaad36ef0b0 in main /home/xyzzy/swift-data-model/.build/aarch64-unknown-linux-gnu/debug/swift-data-modelPackageTests.derived/runner.swift
    #21 0xffff98783d4c in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x20d4c)
    #22 0xaaaad32d3670 in _start (/home/xyzzy/swift-data-model/.build/aarch64-unknown-linux-gnu/debug/swift-data-modelPackageTests.xctest+0x91670)

SUMMARY: AddressSanitizer: 32 byte(s) leaked in 1 allocation(s).
ubuntu@swift:/home/xyzzy/swift-data-model$ 

The test is just empty (after having stripped it out piece by piece to nail down the leaker):

import XCTest

@testable import DataModel
@testable import DataModelExecutable

final class DataModelTests: XCTestCase {

    override func setUp() {
        super.setUp()
    }

    override func tearDown() {
        super.tearDown()
    }

    func testThatDataModelFailsWriting() async throws {
    }
}

On macOS with the xctest running there with Xcode 13.3, I don't get any leak.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions