Block typedef with generic parameter used in Swift causes a crash
Description
Crash when instantiating a block of a block typedef defined with an obj-c lightweight generic type in an interface but in a function signature outside of that interface.
My hunch is that the generic type parameter is not known and somehow that passes type-checking but fails during SIL lowering. Example below
Reproduction
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface AsyncJob <__covariant ObjectType>: NSObject
typedef void (^AsyncJobResultReceiver)(ObjectType _Nullable result, NSError *_Nullable error);
typedef void (^AsyncJobCancellationBlock)(void);
typedef void (^AsyncJobCancellationBlockReceiver)(AsyncJobCancellationBlock executeOnCancellation);
typedef void (^AsyncJobFulfiller)(AsyncJobResultReceiver resultReceiver, AsyncJobCancellationBlockReceiver onCancelled);
/**
Crate a new task that is fulfilled asynchronously. This is useful when needing to convert block based API to using AsyncJob or when using GCD to manage concurrency.
It's very important that the resultReceiver is always fulfilled unless the task is cancelled.
example:
AsyncJob<NSDictionary *> networkTask = [AsyncJob<NSDictionary *> taskWithFutureResult:^(AsyncJobResultReceiver _Nonnull resultReceiver, AsyncJobCancellationBlockReceiver _Nonnull onCancelled) {
__auto_type token = [networker startAPIRequest:request
successHandler:^(NSHTTPURLResponse*_Nonnull response, NSDictionary *responseDict) {
resultReceiver(responseDict, nil);
}
failureHandler:^(NSHTTPURLResponse* _Nullable response, NSDictionary *_Nullable responseDict, NSError *_Nonnull error) {
resultReceiver(nil, error);
}];
onCancelled(^(void) {
[token cancel];
});
}];
*/
+ (AsyncJob<ObjectType> *)taskWithFutureResult:(AsyncJobFulfiller)taskFulfiller;
@end
AsyncJob<NSNumber *> *doSomethingAndThenFuture(AsyncJobFulfiller fulfiller);
NS_ASSUME_NONNULL_END
Then in swift try and express a value of type AsyncJobFulfiller and the compiler crashes
let task = doSomethingAndThenFuture { _, _ in
print("45")
}
Stack dump
Stack dump:
0. Program arguments: /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file /Users/adamcmiel/Documents/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller/ContentView.swift /Users/adamcmiel/Documents/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller/IGAsyncTaskFulfillerApp.swift /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/DerivedSources/GeneratedAssetSymbols.swift -emit-dependencies-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.d -emit-const-values-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.swiftconstvalues -emit-reference-dependencies-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.swiftdeps -serialize-diagnostics-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.dia -emit-localized-strings -emit-localized-strings-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64 -target arm64-apple-ios18.0-simulator -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator18.0.sdk -I /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Products/Debug-iphonesimulator -F /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Products/Debug-iphonesimulator -no-color-diagnostics -enable-testing -g -debug-info-format=dwarf -dwarf-version=5 -module-cache-path /Users/adamcmiel/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 /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/IGAsyncTaskFulfiller_const_extract_protocols.json -enable-experimental-feature DebugDescriptionMacro -enable-experimental-feature OpaqueTypeErasure -enable-bare-slash-regex -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/adamcmiel/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/adamcmiel/Documents/IGAsyncTaskFulfiller -resource-dir /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -file-compilation-dir /Users/adamcmiel/Documents/IGAsyncTaskFulfiller -Xcc -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc /Users/adamcmiel/Library/Developer/Xcode/DerivedData/SDKStatCaches.noindex/iphonesimulator18.0-22A348-30f40da314e8e34c6ab1d0c109cbb58d.sdkstatcache -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/IGAsyncTaskFulfiller-generated-files.hmap -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/IGAsyncTaskFulfiller-own-target-headers.hmap -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/IGAsyncTaskFulfiller-all-target-headers.hmap -Xcc -iquote -Xcc /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/IGAsyncTaskFulfiller-project-headers.hmap -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/DerivedSources-normal/arm64 -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/DerivedSources/arm64 -Xcc -I/Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/DerivedSources -Xcc -DDEBUG=1 -import-objc-header /Users/adamcmiel/Documents/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller-Bridging-Header.h -pch-output-dir /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/PrecompiledHeaders -pch-disable-validation -module-name IGAsyncTaskFulfiller -frontend-parseable-output -disable-clang-spi -target-sdk-version 18.0 -target-sdk-name iphonesimulator18.0 -external-plugin-path /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/swift-plugin-server -plugin-path /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Applications/Xcode_16.0.0_16A242_fb.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/local/lib/swift/host/plugins -o /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Build/Intermediates.noindex/IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.o -index-unit-output-path /IGAsyncTaskFulfiller.build/Debug-iphonesimulator/IGAsyncTaskFulfiller.build/Objects-normal/arm64/ContentView.o -index-store-path /Users/adamcmiel/Library/Developer/Xcode/DerivedData/IGAsyncTaskFulfiller-gtbyrltosklfywdyqtnmqqclusdm/Index.noindex/DataStore -index-system-modules
1. Apple Swift version 6.0 (swiftlang-6.0.0.9.10 clang-1600.0.26.2)
2. Compiling with effective version 5.10
3. While evaluating request ASTLoweringRequest(Lowering AST to SIL for file "/Users/adamcmiel/Documents/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller/ContentView.swift")
4. While silgen emitFunction SIL function "@$s20IGAsyncTaskFulfiller11ContentViewV11doSomethingyyF".
for 'doSomething()' (at /Users/adamcmiel/Documents/IGAsyncTaskFulfiller/IGAsyncTaskFulfiller/ContentView.swift:23:5)
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 0x0000000105f130fc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1 swift-frontend 0x0000000105f11350 llvm::sys::RunSignalHandlers() + 112
2 swift-frontend 0x0000000105f136c8 SignalHandler(int) + 292
3 libsystem_platform.dylib 0x000000019b55e584 _sigtramp + 56
4 swift-frontend 0x00000001011c8174 (anonymous namespace)::TypeClassifierBase<(anonymous namespace)::TypeClassifier, swift::Lowering::TypeLowering::RecursiveProperties>::visitAbstractTypeParamType(swift::CanType, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t) + 96
5 swift-frontend 0x00000001011c8174 (anonymous namespace)::TypeClassifierBase<(anonymous namespace)::TypeClassifier, swift::Lowering::TypeLowering::RecursiveProperties>::visitAbstractTypeParamType(swift::CanType, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t) + 96
6 swift-frontend 0x00000001011c7180 swift::CanTypeVisitor<(anonymous namespace)::TypeClassifier, swift::Lowering::TypeLowering::RecursiveProperties, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t>::visit(swift::CanType, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t) + 232
7 swift-frontend 0x00000001011c7084 (anonymous namespace)::TypeClassifierBase<(anonymous namespace)::TypeClassifier, swift::Lowering::TypeLowering::RecursiveProperties>::visit(swift::CanType, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t) + 148
8 swift-frontend 0x00000001011cca80 (anonymous namespace)::LowerType::visitAnyEnumType(swift::CanType, swift::Lowering::AbstractionPattern, swift::EnumDecl*, swift::Lowering::IsTypeExpansionSensitive_t) + 1256
9 swift-frontend 0x00000001011c0604 (anonymous namespace)::TypeClassifierBase<(anonymous namespace)::LowerType, swift::Lowering::TypeLowering*>::visit(swift::CanType, swift::Lowering::AbstractionPattern, swift::Lowering::IsTypeExpansionSensitive_t) + 332
10 swift-frontend 0x00000001011c10b8 swift::Lowering::TypeConverter::getTypeLoweringForLoweredType(swift::Lowering::AbstractionPattern, swift::CanType, swift::TypeExpansionContext, swift::Lowering::IsTypeExpansionSensitive_t) + 456
11 swift-frontend 0x00000001011c0398 swift::Lowering::TypeConverter::getTypeLowering(swift::Lowering::AbstractionPattern, swift::Type, swift::TypeExpansionContext) + 768
12 swift-frontend 0x0000000101131790 (anonymous namespace)::DestructureInputs::visit(swift::ValueOwnership, bool, swift::Lowering::AbstractionPattern, swift::CanType, swift::ParameterTypeFlags) + 148
13 swift-frontend 0x000000010113161c (anonymous namespace)::DestructureInputs::visit(swift::Lowering::AbstractionPattern, swift::AnyFunctionType::Param, bool) + 252
14 swift-frontend 0x000000010113264c void llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>::callback_fn<(anonymous namespace)::DestructureInputs::visitTopLevelParams(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&)::'lambda'(swift::Lowering::FunctionParamGenerator&)>(long, swift::Lowering::FunctionParamGenerator&) + 672
15 swift-frontend 0x00000001010e2b34 swift::Lowering::AbstractionPattern::forEachFunctionParam(swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, bool, llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>) const + 208
16 swift-frontend 0x0000000101130bec (anonymous namespace)::DestructureInputs::destructure(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&) + 380
17 swift-frontend 0x000000010112f11c getSILFunctionType(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, (anonymous namespace)::Conventions const&, swift::ForeignInfo const&, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SubstitutionMap>, swift::ProtocolConformanceRef) + 2708
18 swift-frontend 0x000000010112e658 getSILFunctionTypeForAbstractCFunction(swift::Lowering::TypeConverter&, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, std::__1::optional<swift::SILDeclRef>) + 772
19 swift-frontend 0x0000000101125538 getNativeSILFunctionType(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SubstitutionMap>, swift::ProtocolConformanceRef) + 284
20 swift-frontend 0x00000001011d185c swift::Lowering::TypeConverter::computeLoweredRValueType(swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanType)::LoweredRValueTypeVisitor::visitAnyFunctionType(swift::CanTypeWrapper<swift::AnyFunctionType>) + 1120
21 swift-frontend 0x00000001011c02d8 swift::Lowering::TypeConverter::getTypeLowering(swift::Lowering::AbstractionPattern, swift::Type, swift::TypeExpansionContext) + 576
22 swift-frontend 0x0000000101131790 (anonymous namespace)::DestructureInputs::visit(swift::ValueOwnership, bool, swift::Lowering::AbstractionPattern, swift::CanType, swift::ParameterTypeFlags) + 148
23 swift-frontend 0x000000010113161c (anonymous namespace)::DestructureInputs::visit(swift::Lowering::AbstractionPattern, swift::AnyFunctionType::Param, bool) + 252
24 swift-frontend 0x000000010113264c void llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>::callback_fn<(anonymous namespace)::DestructureInputs::visitTopLevelParams(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&)::'lambda'(swift::Lowering::FunctionParamGenerator&)>(long, swift::Lowering::FunctionParamGenerator&) + 672
25 swift-frontend 0x00000001010e2b34 swift::Lowering::AbstractionPattern::forEachFunctionParam(swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, bool, llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>) const + 208
26 swift-frontend 0x0000000101130bec (anonymous namespace)::DestructureInputs::destructure(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&) + 380
27 swift-frontend 0x000000010112f11c getSILFunctionType(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, (anonymous namespace)::Conventions const&, swift::ForeignInfo const&, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SubstitutionMap>, swift::ProtocolConformanceRef) + 2708
28 swift-frontend 0x000000010112e658 getSILFunctionTypeForAbstractCFunction(swift::Lowering::TypeConverter&, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, std::__1::optional<swift::SILDeclRef>) + 772
29 swift-frontend 0x0000000101125538 getNativeSILFunctionType(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SubstitutionMap>, swift::ProtocolConformanceRef) + 284
30 swift-frontend 0x00000001011d185c swift::Lowering::TypeConverter::computeLoweredRValueType(swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanType)::LoweredRValueTypeVisitor::visitAnyFunctionType(swift::CanTypeWrapper<swift::AnyFunctionType>) + 1120
31 swift-frontend 0x00000001011c02d8 swift::Lowering::TypeConverter::getTypeLowering(swift::Lowering::AbstractionPattern, swift::Type, swift::TypeExpansionContext) + 576
32 swift-frontend 0x0000000101131790 (anonymous namespace)::DestructureInputs::visit(swift::ValueOwnership, bool, swift::Lowering::AbstractionPattern, swift::CanType, swift::ParameterTypeFlags) + 148
33 swift-frontend 0x000000010113161c (anonymous namespace)::DestructureInputs::visit(swift::Lowering::AbstractionPattern, swift::AnyFunctionType::Param, bool) + 252
34 swift-frontend 0x000000010113264c void llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>::callback_fn<(anonymous namespace)::DestructureInputs::visitTopLevelParams(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&)::'lambda'(swift::Lowering::FunctionParamGenerator&)>(long, swift::Lowering::FunctionParamGenerator&) + 672
35 swift-frontend 0x00000001010e2b34 swift::Lowering::AbstractionPattern::forEachFunctionParam(swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, bool, llvm::function_ref<void (swift::Lowering::FunctionParamGenerator&)>) const + 208
36 swift-frontend 0x0000000101130bec (anonymous namespace)::DestructureInputs::destructure(swift::Lowering::AbstractionPattern, swift::ArrayRefView<swift::AnyFunctionType::Param, swift::AnyFunctionType::CanParam, swift::AnyFunctionType::CanParam::getFromParam(swift::AnyFunctionType::Param const&), true>, swift::SILExtInfoBuilder, bool&) + 380
37 swift-frontend 0x000000010112f11c getSILFunctionType(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::Lowering::AbstractionPattern, swift::CanTypeWrapper<swift::AnyFunctionType>, swift::SILExtInfoBuilder, (anonymous namespace)::Conventions const&, swift::ForeignInfo const&, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SILDeclRef>, std::__1::optional<swift::SubstitutionMap>, swift::ProtocolConformanceRef) + 2708
38 swift-frontend 0x0000000101128fbc getUncachedSILFunctionTypeForConstant(swift::Lowering::TypeConverter&, swift::TypeExpansionContext, swift::SILDeclRef, swift::Lowering::TypeConverter::LoweredFormalTypes) + 1160
39 swift-frontend 0x0000000101129c04 swift::Lowering::TypeConverter::getConstantInfo(swift::TypeExpansionContext, swift::SILDeclRef) + 192
40 swift-frontend 0x00000001012f0d78 (anonymous namespace)::Callee::forDirect(swift::Lowering::SILGenFunction&, swift::SILDeclRef, swift::SubstitutionMap, swift::SILLocation, bool) + 172
41 swift-frontend 0x0000000101303368 (anonymous namespace)::SILGenApply::visitDeclRefExpr(swift::DeclRefExpr*) + 2196
42 swift-frontend 0x00000001012ed6c0 swift::Lowering::SILGenFunction::emitApplyExpr(swift::ApplyExpr*, swift::Lowering::SGFContext) + 352
43 swift-frontend 0x000000010135b100 swift::Lowering::SILGenFunction::emitExprInto(swift::Expr*, swift::Lowering::Initialization*, std::__1::optional<swift::SILLocation>) + 128
44 swift-frontend 0x0000000101346690 swift::Lowering::SILGenFunction::emitPatternBinding(swift::PatternBindingDecl*, unsigned int, bool) + 2016
45 swift-frontend 0x000000010134d5c4 swift::ASTVisitor<swift::Lowering::SILGenFunction, void, void, void, void, void, void>::visit(swift::Decl*) + 140
46 swift-frontend 0x00000001014160ec swift::ASTVisitor<(anonymous namespace)::StmtEmitter, void, void, void, void, void, void>::visit(swift::Stmt*) + 5756
47 swift-frontend 0x000000010138dd4c swift::Lowering::SILGenFunction::emitFunction(swift::FuncDecl*) + 492
48 swift-frontend 0x00000001012d98a0 swift::Lowering::SILGenModule::emitFunctionDefinition(swift::SILDeclRef, swift::SILFunction*) + 8420
49 swift-frontend 0x00000001012da140 swift::Lowering::SILGenModule::emitOrDelayFunction(swift::SILDeclRef) + 216
50 swift-frontend 0x00000001012d7770 swift::Lowering::SILGenModule::emitFunction(swift::FuncDecl*) + 364
51 swift-frontend 0x000000010142da10 (anonymous namespace)::SILGenType::visitFuncDecl(swift::FuncDecl*) + 32
52 swift-frontend 0x0000000101429fb8 (anonymous namespace)::SILGenType::emitType() + 424
53 swift-frontend 0x00000001012d73a8 swift::ASTVisitor<swift::Lowering::SILGenModule, void, void, void, void, void, void>::visit(swift::Decl*) + 104
54 swift-frontend 0x00000001012dddbc swift::ASTLoweringRequest::evaluate(swift::Evaluator&, swift::ASTLoweringDescriptor) const + 1804
55 swift-frontend 0x00000001014146b0 swift::SimpleRequest<swift::ASTLoweringRequest, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule>> (swift::ASTLoweringDescriptor), (swift::RequestFlags)9>::evaluateRequest(swift::ASTLoweringRequest const&, swift::Evaluator&) + 196
56 swift-frontend 0x00000001012e2c98 swift::ASTLoweringRequest::OutputType swift::Evaluator::getResultUncached<swift::ASTLoweringRequest, swift::ASTLoweringRequest::OutputType swift::evaluateOrFatal<swift::ASTLoweringRequest>(swift::Evaluator&, swift::ASTLoweringRequest)::'lambda'()>(swift::ASTLoweringRequest const&, swift::ASTLoweringRequest::OutputType swift::evaluateOrFatal<swift::ASTLoweringRequest>(swift::Evaluator&, swift::ASTLoweringRequest)::'lambda'()) + 528
57 swift-frontend 0x00000001008bcf34 swift::performCompileStepsPostSema(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 920
58 swift-frontend 0x00000001008c0228 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 1680
59 swift-frontend 0x00000001008bef58 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3572
60 swift-frontend 0x000000010084601c swift::mainEntry(int, char const**) + 3680
61 dyld 0x000000019b1a3154 start + 2476
Expected behavior
From the stack trace we see
::visitAbstractTypeParamType
...
::CanTypeVisitor
...
::LowerType::visitAnyEnumType
So my poorly informed guess is that AsyncJob.ObjectType is unable to be specialized in the call to the free function doSomethingAndThenFuture, and when lowering the abstract type parameter to SIL an invariant is reached but I don't see off the bat where in visitAbstractTypeParamType we're actually crashing.
I would accept that this type is not usable from a decl outside of AsyncJob's interface but I would expect that that would fail at type checking, not crash during SIL lowering.
Environment
Xcode 16 (16A242) swiftlang-6.0.0.9.10 swift-version 5 (also crashes in 6 lang mode)
Additional information
No response