swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
67.5k stars 10.35k forks source link

Crash with a macro having a closure argument #69427

Open kenji21 opened 12 months ago

kenji21 commented 12 months ago

Description Crash with a macro having a closure argument

Steps to reproduce

protocol SomeDepencyProtocol {}

class SomeDepency: SomeDepencyProtocol {}

@Inject(closureReturningImplemenation: { SomeDepency() as SomeDepencyProtocol })
extension InjectedValues {}

with the https://github.com/openium/DITestApp

Expected behavior No crash of course, and macro expanded

Environment

Initially I was planing only @Injectable macro on SomeDepency to generate InjectValues extension, but still not possible

I'll try a more recent toolchain to see if the crash is still present

Crash backtrace: ``` Stack dump: 0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c /Users/kenji/Desktop/DITestApp/DITestApp/ContentView.swift -primary-file /Users/kenji/Desktop/DITestApp/DITestApp/DITestAppApp.swift /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DerivedSources/GeneratedAssetSymbols.swift -emit-dependencies-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.d -emit-const-values-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.swiftconstvalues -emit-reference-dependencies-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.swiftdeps -serialize-diagnostics-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.dia -emit-localized-strings -emit-localized-strings-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64 -target arm64-apple-ios17.0-simulator -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk -I /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Products/Debug-iphonesimulator -F /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Products/Debug-iphonesimulator/PackageFrameworks -F /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Products/Debug-iphonesimulator -no-color-diagnostics -enable-testing -g -module-cache-path /Users/kenji/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -profile-generate -profile-coverage-mapping -swift-version 5 -enforce-exclusivity=checked -Onone -D DEBUG -serialize-debugging-options -load-plugin-executable /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Products/Debug/DependencyInjectionMacroImpl#DependencyInjectionMacroImpl -const-gather-protocols-file /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestApp_const_extract_protocols.json -enable-bare-slash-regex -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/kenji/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/kenji/Desktop/DITestApp -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -Xcc -ivfsstatcache -Xcc /Users/kenji/Library/Developer/Xcode/DerivedData/SDKStatCaches.noindex/iphonesimulator17.0-21A325-9f995cea1212cde75317d7d3cd2045e2.sdkstatcache -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DITestApp-generated-files.hmap -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DITestApp-own-target-headers.hmap -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DITestApp-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DITestApp-project-headers.hmap -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DerivedSources-normal/arm64 -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DerivedSources/arm64 -Xcc -I/Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/DerivedSources -Xcc -DDEBUG=1 -module-name DITestApp -frontend-parseable-output -disable-clang-spi -target-sdk-version 17.0 -target-sdk-name iphonesimulator17.0 -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator17.0.sdk/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -o /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Build/Intermediates.noindex/DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.o -index-unit-output-path /DITestApp.build/Debug-iphonesimulator/DITestApp.build/Objects-normal/arm64/DITestAppApp.o -index-store-path /Users/kenji/Library/Developer/Xcode/DerivedData/DITestApp-hjbzygiwikmfgvaxzfuvavmttpew/Index.noindex/DataStore -index-system-modules 1. Apple Swift version 5.9 (swiftlang-5.9.0.128.108 clang-1500.0.40.1) 2. Compiling with the current language version 3. While evaluating request TypeCheckSourceFileRequest(source_file "/Users/kenji/Desktop/DITestApp/DITestApp/DITestAppApp.swift") 4. While evaluating request ExpandPeerMacroRequest(extension of InjectedValues) 5. While evaluating request ResolveMacroRequest(custom-attr, 0x12784cfb0 FileUnit file="/Users/kenji/Desktop/DITestApp/DITestApp/DITestAppApp.swift") 6. While type-checking expression at [/Users/kenji/Desktop/DITestApp/DITestApp/DITestAppApp.swift:24:1 - line:24:49] RangeText="@Inject({ SomeDepency() as SomeDepencyProtocol }" 7. While type-checking-target starting at /Users/kenji/Desktop/DITestApp/DITestApp/DITestAppApp.swift:24:1 8. While evaluating request FragileFunctionKindRequest(0x128968690 AbstractClosureExpr line=24 : () -> SomeDepencyProtocol) 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 0x000000010717b14c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56 1 swift-frontend 0x0000000109cf9f2c llvm::sys::RunSignalHandlers() + 112 2 swift-frontend 0x0000000105a3b10c SignalHandler(int) + 352 3 libsystem_platform.dylib 0x0000000189f4da24 _sigtramp + 56 4 swift-frontend 0x00000001079a0814 llvm::Expected swift::Evaluator::getResultCached(swift::FragileFunctionKindRequest const&) + 1312 5 swift-frontend 0x00000001079a0814 llvm::Expected swift::Evaluator::getResultCached(swift::FragileFunctionKindRequest const&) + 1312 6 swift-frontend 0x0000000107994c5c swift::DeclContext::getFragileFunctionKind() const + 128 7 swift-frontend 0x000000010922ebcc swift::ExportContext::forFunctionBody(swift::DeclContext*, swift::SourceLoc) + 140 8 swift-frontend 0x0000000106c9fe94 (anonymous namespace)::ExprAvailabilityWalker::walkToExprPre(swift::Expr*) (.llvm.2546472823880439407) + 4696 9 swift-frontend 0x0000000105122ba8 (anonymous namespace)::Traversal::doIt(swift::ArgumentList*) (.llvm.2978194388735398092) + 148 10 swift-frontend 0x0000000105cd9c2c (anonymous namespace)::Traversal::visitMacroExpansionExpr(swift::MacroExpansionExpr*) + 472 11 swift-frontend 0x0000000104b90358 (anonymous namespace)::Traversal::visit(swift::Expr*) (.llvm.2978194388735398092) + 1184 12 swift-frontend 0x0000000106c8d23c swift::diagnoseExprAvailability(swift::Expr const*, swift::DeclContext*) + 256 13 swift-frontend 0x0000000106ac3128 swift::performSyntacticExprDiagnostics(swift::Expr const*, swift::DeclContext const*, bool, bool) + 3544 14 swift-frontend 0x00000001093b7eb0 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::OptionSet) + 796 15 swift-frontend 0x0000000106d5f0bc swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::OptionSet) + 436 16 swift-frontend 0x00000001096e6300 swift::ResolveMacroRequest::evaluate(swift::Evaluator&, swift::UnresolvedMacroReference, swift::DeclContext*) const + 1436 17 swift-frontend 0x000000010967827c llvm::Expected swift::Evaluator::getResultUncached(swift::ResolveMacroRequest const&) + 636 18 swift-frontend 0x0000000109677ea8 llvm::Expected swift::Evaluator::getResultCached(swift::ResolveMacroRequest const&) + 284 19 swift-frontend 0x00000001076b21a0 swift::Decl::forEachAttachedMacro(swift::MacroRole, llvm::function_ref) const + 608 20 swift-frontend 0x00000001096de700 swift::ExpandPeerMacroRequest::evaluate(swift::Evaluator&, swift::Decl*) const + 84 21 swift-frontend 0x00000001070332a8 llvm::Expected swift::Evaluator::getResultUncached(swift::ExpandPeerMacroRequest const&) + 648 22 swift-frontend 0x0000000109a22188 llvm::Expected swift::Evaluator::getResultCached(swift::ExpandPeerMacroRequest const&) + 344 23 swift-frontend 0x00000001076b1958 swift::Decl::visitAuxiliaryDecls(llvm::function_ref, bool) const + 296 24 swift-frontend 0x000000010961025c (anonymous namespace)::DeclChecker::visit(swift::Decl*) (.llvm.2616703737363524152) + 144 25 swift-frontend 0x0000000106e39888 swift::TypeChecker::typeCheckDecl(swift::Decl*, bool) + 220 26 swift-frontend 0x00000001070b99d8 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 432 27 swift-frontend 0x00000001070c1c84 llvm::Expected swift::Evaluator::getResultUncached(swift::TypeCheckSourceFileRequest const&) + 664 28 swift-frontend 0x00000001070b9660 swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType) + 228 29 swift-frontend 0x0000000105d26d24 swift::CompilerInstance::performSema() + 160 30 swift-frontend 0x0000000109cb1418 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 464 31 swift-frontend 0x0000000109cb5474 swift::performFrontend(llvm::ArrayRef, char const*, void*, swift::FrontendObserver*) + 4568 32 swift-frontend 0x00000001095fb4e0 swift::mainEntry(int, char const**) + 4116 33 dyld 0x0000000189ba5058 start + 2224 ```
kenji21 commented 12 months ago

same issue with the latest toolchain:

Screenshot 12

kenji21 commented 11 months ago

using

../build/Ninja-DebugAssert/swift-macosx-x86_64/bin/swiftc --version
Swift version 5.11-dev (LLVM 26ea15ae72ba6e9, Swift 8a1eefae07b19e9)
Target: x86_64-apple-darwin22.6.0

Screenshot 6