Skip to content

Commit 0ae3ab4

Browse files
committed
IRGen: Weak-link references to swift_getExtendedExistentialTypeMetadata()
Fixes rdar://117530421.
1 parent 5b23b23 commit 0ae3ab4

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,7 +1310,8 @@ FUNCTION(GetExistentialMetadata,
13101310
// swift_getExtendedExistentialTypeShape(
13111311
// const NonUniqueExtendedExistentialTypeShape *nonUnique);
13121312
FUNCTION(GetExtendedExistentialTypeShape,
1313-
swift_getExtendedExistentialTypeShape, C_CC, AlwaysAvailable,
1313+
swift_getExtendedExistentialTypeShape, C_CC,
1314+
ParameterizedExistentialAvailability,
13141315
RETURNS(TypeMetadataPtrTy),
13151316
ARGS(Int8PtrTy, Int8PtrPtrTy),
13161317
ATTRS(NoUnwind, WillReturn),
@@ -1321,7 +1322,8 @@ FUNCTION(GetExtendedExistentialTypeShape,
13211322
// const NonUniqueExtendedExistentialTypeShape *shape,
13221323
// const void * const *generalizationArgs);
13231324
FUNCTION(GetExtendedExistentialTypeMetadata,
1324-
swift_getExtendedExistentialTypeMetadata, C_CC, AlwaysAvailable,
1325+
swift_getExtendedExistentialTypeMetadata, C_CC,
1326+
ParameterizedExistentialAvailability,
13251327
RETURNS(TypeMetadataPtrTy),
13261328
ARGS(Int8PtrTy, Int8PtrPtrTy),
13271329
ATTRS(NoUnwind, WillReturn),
@@ -1332,7 +1334,8 @@ FUNCTION(GetExtendedExistentialTypeMetadata,
13321334
// const ExtendedExistentialTypeShape *shape,
13331335
// const void * const *generalizationArgs);
13341336
FUNCTION(GetExtendedExistentialTypeMetadataUnique,
1335-
swift_getExtendedExistentialTypeMetadata_unique, C_CC, AlwaysAvailable,
1337+
swift_getExtendedExistentialTypeMetadata_unique, C_CC,
1338+
ParameterizedExistentialAvailability,
13361339
RETURNS(TypeMetadataPtrTy),
13371340
ARGS(Int8PtrTy, Int8PtrPtrTy),
13381341
ATTRS(NoUnwind, WillReturn),

lib/IRGen/IRGenModule.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,14 @@ namespace RuntimeConstants {
930930
return RuntimeAvailability::ConditionallyAvailable;
931931
}
932932

933+
RuntimeAvailability ParameterizedExistentialAvailability(ASTContext &Context) {
934+
auto featureAvailability = Context.getParameterizedExistentialRuntimeAvailability();
935+
if (!isDeploymentAvailabilityContainedIn(Context, featureAvailability)) {
936+
return RuntimeAvailability::ConditionallyAvailable;
937+
}
938+
return RuntimeAvailability::AlwaysAvailable;
939+
}
940+
933941
} // namespace RuntimeConstants
934942

935943
// We don't use enough attributes to justify generalizing the
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: %target-swift-frontend -emit-ir %s -target arm64-apple-macos12 | %FileCheck %s
2+
// REQUIRES: OS=macosx
3+
4+
public protocol P<A> {
5+
associatedtype A
6+
}
7+
8+
public func f<T>(_: T.Type) {}
9+
10+
@available(macOS 13, *)
11+
public func g<T>(_: T.Type) { f((any P<T>).self) }
12+
13+
// CHECK-LABEL: declare extern_weak ptr @swift_getExtendedExistentialTypeMetadata(ptr, ptr)

0 commit comments

Comments
 (0)