Skip to content

Swift Testing @Test macro arguments parameter fails to successfully parse a clousure type of enum value #81758

Closed
@adozenlines

Description

@adozenlines

Description

The following macro @Test fails to parse the following arguments under swift-6.0.3. No issues with swift-6.1.2.

Reproduction

import Testing

enum TestClosure {
    case failed(f: () -> Void)
}

struct ClosureWrapper {
    let f: () -> Void
    init(f: @escaping () -> Void) {
        self.f = f
    }
}

enum TestClosureWrapper {
    case failed(ClosureWrapper)
}

struct AbstractClosureTests {
    @Test(arguments: [TestClosure.failed(f: {})])
    func example(_ input: TestClosure) async throws {
        switch input {
        case .failed(let f):
            f()
        }
    }
    
    @Test(arguments: [TestClosureWrapper.failed(ClosureWrapper(f: {}))])
    func example(_ input: TestClosureWrapper) async throws {
        switch input {
        case .failed(let wrapper):
            wrapper.f()
        }
    }
}

Stack dump

Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file /Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift -emit-dependencies-path ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.d -emit-const-values-path ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.swiftconstvalues -emit-reference-dependencies-path ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.swiftdeps -serialize-diagnostics-path ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.dia -target arm64-apple-ios15.6-macabi -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -cxx-interoperability-mode=default -sdk ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk -I ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Products/Debug-maccatalyst -I ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -F ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Products/Debug-maccatalyst -Fsystem ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/System/iOSSupport/System/Library/Frameworks -F ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -no-color-diagnostics -enable-testing -g -debug-info-format=dwarf -dwarf-version=4 -module-cache-path ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -profile-generate -profile-coverage-mapping -swift-version 5 -enforce-exclusivity=checked -Onone -D DEBUG -serialize-debugging-options -const-gather-protocols-file ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests_const_extract_protocols.json -enable-experimental-feature DebugDescriptionMacro -enable-experimental-feature OpaqueTypeErasure -enable-bare-slash-regex -empty-abi-descriptor -plugin-path ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins/testing -validate-clang-modules-once -clang-build-session-file ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Volumes/MacintoshData2/Mobile/PGS/AbstractClosure -resource-dir ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -file-compilation-dir /Volumes/MacintoshData2/Mobile/PGS/AbstractClosure -Xcc -std=gnu++20 -Xcc -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc ~/Library/Developer/Xcode/DerivedData/SDKStatCaches.noindex/macosx15.2-24C94-adb7e3b2ac9371c132d38cd54945bc99.sdkstatcache -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/swift-overrides.hmap -Xcc -iquote -Xcc ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/AbstractClosureTests-generated-files.hmap -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/AbstractClosureTests-own-target-headers.hmap -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/AbstractClosureTests-all-target-headers.hmap -Xcc -iquote -Xcc ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/AbstractClosureTests-project-headers.hmap -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Products/Debug-maccatalyst/include -Xcc -isystem -Xcc ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/System/iOSSupport/usr/include -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/DerivedSources-normal/arm64 -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/DerivedSources/arm64 -Xcc -I~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/DerivedSources -Xcc -DDEBUG=1 -module-name AbstractClosureTests -frontend-parseable-output -disable-clang-spi -target-sdk-version 18.2 -target-sdk-name macosx15.2 -prebuilt-module-cache-path ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/prebuilt-modules/15.2 -external-plugin-path ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path ~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#~/Downloads/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -plugin-path ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path ~/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -parse-as-library -o ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Build/Intermediates.noindex/AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.o -index-unit-output-path /AbstractClosure.build/Debug-maccatalyst/AbstractClosureTests.build/Objects-normal/arm64/AbstractClosureTests.o -index-store-path ~/Library/Developer/Xcode/DerivedData/AbstractClosure-hidfjrycdmkglydpawncnmhrfwso/Index.noindex/DataStore -index-system-modules
1.	Apple Swift version 6.0.3 (swiftlang-6.0.3.1.10 clang-1600.0.30.1)
2.	Compiling with effective version 5.10
3.	While evaluating request TypeCheckSourceFileRequest(source_file "/Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift")
4.	While type-checking 'AbstractClosureTests' (at /Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift:25:1)
5.	While evaluating request StoredPropertiesRequest(AbstractClosureTests.(file).AbstractClosureTests@/Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift:25:8)
6.	While evaluating request ExpandPeerMacroRequest(AbstractClosureTests.(file).AbstractClosureTests.example@/Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift:27:10)
7.	While evaluating request ResolveMacroRequest(custom-attr, 0x1268b2d98 StructDecl name=AbstractClosureTests)
8.	While type-checking expression at [/Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift:26:5 - line:26:49] RangeText="@Test(arguments: [TestClosure.failed(f: {})]"
9.	While type-checking-target starting at /Volumes/MacintoshData2/Mobile/PGS/AbstractClosure/AbstractClosureTests/AbstractClosureTests.swift:26:5
10.	While evaluating request FragileFunctionKindRequest(0x1268b2f78 AbstractClosureExpr line=26 : () -> ())
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  swift-frontend           0x00000001085caa9c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x00000001085c8cf0 llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x00000001085cb068 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x000000019f7d0624 _sigtramp + 56
4  swift-frontend           0x000000010480fe04 swift::FragileFunctionKindRequest::OutputType swift::Evaluator::getResultCached<swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType swift::evaluateOrDefault<swift::FragileFunctionKindRequest>(swift::Evaluator&, swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType)::'lambda'(), (void*)0>(swift::FragileFunctionKindRequest const&, swift::FragileFunctionKindRequest::OutputType swift::evaluateOrDefault<swift::FragileFunctionKindRequest>(swift::Evaluator&, swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType)::'lambda'()) + 1256
5  swift-frontend           0x000000010480fe04 swift::FragileFunctionKindRequest::OutputType swift::Evaluator::getResultCached<swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType swift::evaluateOrDefault<swift::FragileFunctionKindRequest>(swift::Evaluator&, swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType)::'lambda'(), (void*)0>(swift::FragileFunctionKindRequest const&, swift::FragileFunctionKindRequest::OutputType swift::evaluateOrDefault<swift::FragileFunctionKindRequest>(swift::Evaluator&, swift::FragileFunctionKindRequest, swift::FragileFunctionKindRequest::OutputType)::'lambda'()) + 1256
6  swift-frontend           0x00000001042ab3d0 swift::ExportContext::forFunctionBody(swift::DeclContext*, swift::SourceLoc) + 208
7  swift-frontend           0x00000001042bb36c (anonymous namespace)::ExprAvailabilityWalker::walkToExprPre(swift::Expr*) + 3036
8  swift-frontend           0x00000001042bba04 (anonymous namespace)::ExprAvailabilityWalker::walkToArgumentPre(swift::Argument const&) + 52
9  swift-frontend           0x00000001046d4330 (anonymous namespace)::Traversal::visit(swift::ArgumentList*) + 208
10 swift-frontend           0x00000001046d0f18 (anonymous namespace)::Traversal::visitApplyExpr(swift::ApplyExpr*) + 196
11 swift-frontend           0x00000001046ce43c (anonymous namespace)::Traversal::visit(swift::Expr*) + 88
12 swift-frontend           0x00000001046d0d2c (anonymous namespace)::Traversal::visitCollectionExpr(swift::CollectionExpr*) + 136
13 swift-frontend           0x00000001046ce454 (anonymous namespace)::Traversal::visit(swift::Expr*) + 112
14 swift-frontend           0x00000001042bba28 (anonymous namespace)::ExprAvailabilityWalker::walkToArgumentPre(swift::Argument const&) + 88
15 swift-frontend           0x00000001046d4330 (anonymous namespace)::Traversal::visit(swift::ArgumentList*) + 208
16 swift-frontend           0x00000001046d11f0 (anonymous namespace)::Traversal::visitFreestandingMacroArgs(swift::FreestandingMacroExpansion*) + 152
17 swift-frontend           0x00000001046d0bd8 (anonymous namespace)::Traversal::visitMacroExpansionExpr(swift::MacroExpansionExpr*) + 164
18 swift-frontend           0x00000001046ce8c0 (anonymous namespace)::Traversal::visit(swift::Expr*) + 1244
19 swift-frontend           0x00000001042b3e88 swift::diagnoseExprAvailability(swift::Expr const*, swift::DeclContext*) + 272
20 swift-frontend           0x000000010422bc8c swift::performSyntacticExprDiagnostics(swift::Expr const*, swift::DeclContext const*, std::__1::optional<swift::ContextualTypePurpose>, bool, bool, bool) + 3584
21 swift-frontend           0x00000001042f0898 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 720
22 swift-frontend           0x00000001042f04a4 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 416
23 swift-frontend           0x000000010438cd34 swift::ResolveMacroRequest::evaluate(swift::Evaluator&, swift::UnresolvedMacroReference, swift::DeclContext*) const + 1760
24 swift-frontend           0x0000000104366a2c swift::ResolveMacroRequest::OutputType swift::Evaluator::getResultUncached<swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType swift::evaluateOrDefault<swift::ResolveMacroRequest>(swift::Evaluator&, swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType)::'lambda'()>(swift::ResolveMacroRequest const&, swift::ResolveMacroRequest::OutputType swift::evaluateOrDefault<swift::ResolveMacroRequest>(swift::Evaluator&, swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType)::'lambda'()) + 600
25 swift-frontend           0x000000010436678c swift::ResolveMacroRequest::OutputType swift::Evaluator::getResultCached<swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType swift::evaluateOrDefault<swift::ResolveMacroRequest>(swift::Evaluator&, swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType)::'lambda'(), (void*)0>(swift::ResolveMacroRequest const&, swift::ResolveMacroRequest::OutputType swift::evaluateOrDefault<swift::ResolveMacroRequest>(swift::Evaluator&, swift::ResolveMacroRequest, swift::ResolveMacroRequest::OutputType)::'lambda'()) + 260
26 swift-frontend           0x0000000104731418 swift::Decl::forEachAttachedMacro(swift::MacroRole, llvm::function_ref<void (swift::CustomAttr*, swift::MacroDecl*)>) const + 372
27 swift-frontend           0x0000000104388eb8 swift::ExpandPeerMacroRequest::evaluate(swift::Evaluator&, swift::Decl*) const + 84
28 swift-frontend           0x00000001043f3bc0 swift::ExpandPeerMacroRequest::OutputType swift::Evaluator::getResultUncached<swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType swift::evaluateOrDefault<swift::ExpandPeerMacroRequest>(swift::Evaluator&, swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType)::'lambda'()>(swift::ExpandPeerMacroRequest const&, swift::ExpandPeerMacroRequest::OutputType swift::evaluateOrDefault<swift::ExpandPeerMacroRequest>(swift::Evaluator&, swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType)::'lambda'()) + 612
29 swift-frontend           0x00000001043f38c0 swift::ExpandPeerMacroRequest::OutputType swift::Evaluator::getResultCached<swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType swift::evaluateOrDefault<swift::ExpandPeerMacroRequest>(swift::Evaluator&, swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType)::'lambda'(), (void*)0>(swift::ExpandPeerMacroRequest const&, swift::ExpandPeerMacroRequest::OutputType swift::evaluateOrDefault<swift::ExpandPeerMacroRequest>(swift::Evaluator&, swift::ExpandPeerMacroRequest, swift::ExpandPeerMacroRequest::OutputType)::'lambda'()) + 328
30 swift-frontend           0x00000001043e98d8 computeLoweredProperties(swift::NominalTypeDecl*, swift::IterableDeclContext*, (anonymous namespace)::LoweredPropertiesReason) + 800
31 swift-frontend           0x00000001043e81f4 swift::StoredPropertiesRequest::evaluate(swift::Evaluator&, swift::NominalTypeDecl*) const + 348
32 swift-frontend           0x000000010478cf88 swift::StoredPropertiesRequest::OutputType swift::Evaluator::getResultCached<swift::StoredPropertiesRequest, swift::StoredPropertiesRequest::OutputType swift::evaluateOrDefault<swift::StoredPropertiesRequest>(swift::Evaluator&, swift::StoredPropertiesRequest, swift::StoredPropertiesRequest::OutputType)::'lambda'(), (void*)0>(swift::StoredPropertiesRequest const&, swift::StoredPropertiesRequest::OutputType swift::evaluateOrDefault<swift::StoredPropertiesRequest>(swift::Evaluator&, swift::StoredPropertiesRequest, swift::StoredPropertiesRequest::OutputType)::'lambda'()) + 1268
33 swift-frontend           0x0000000104344b30 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 3452
34 swift-frontend           0x0000000104343da4 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 152
35 swift-frontend           0x000000010442b01c swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 660
36 swift-frontend           0x0000000104432680 swift::TypeCheckSourceFileRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()>(swift::TypeCheckSourceFileRequest const&, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()) + 620
37 swift-frontend           0x000000010442ad6c swift::performTypeChecking(swift::SourceFile&) + 328
38 swift-frontend           0x0000000103347e00 swift::CompilerInstance::performSema() + 260
39 swift-frontend           0x0000000102f74df0 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1532
40 swift-frontend           0x0000000102f73bb4 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
41 swift-frontend           0x0000000102efaa5c swift::mainEntry(int, char const**) + 3680
42 dyld                     0x000000019f3f6b98 start + 6076
Command SwiftCompile failed with a nonzero exit code

Command SwiftCompile failed with a nonzero exit code



Build failed    2025-05-23, 11:45 PM    45.3 seconds

Expected behavior

The compiler should successfully parse the closure within the enum value.

Environment

swift 6.0.3

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.closuresFeature: closurescompilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwareexpressionsFeature: expressionsswift 6.0swift macroFeature → declarations: Swift `macro` declarationstype checkerArea → compiler: Semantic analysis

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions