Skip to content

Commit 3b51407

Browse files
authored
Merge pull request #69459 from slavapestov/fix-extended-existential-metadata-weak
IRGen: Weak-link references to swift_getExtendedExistentialTypeMetadata()
2 parents 0cc0df9 + c9c0572 commit 3b51407

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
@@ -929,6 +929,14 @@ namespace RuntimeConstants {
929929
return RuntimeAvailability::ConditionallyAvailable;
930930
}
931931

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

934942
// 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 %target-swift-abi-5.5-triple | %FileCheck %s
2+
// REQUIRES: VENDOR=apple
3+
4+
public protocol P<A> {
5+
associatedtype A
6+
}
7+
8+
public func f<T>(_: T.Type) {}
9+
10+
@available(SwiftStdlib 5.7, *)
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)