Skip to content

Commit c14a2ee

Browse files
Merge pull request swiftlang#29834 from nate-chandler/generic-metadata-prespecialization-components/linkonceodr
[metadata prespecialization] Specify linkage to be shared.
2 parents 5ec9adc + d44247a commit c14a2ee

File tree

38 files changed

+61
-56
lines changed

38 files changed

+61
-56
lines changed

lib/IRGen/Linking.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,11 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
490490
if (getDeclLinkage(nominal) == FormalLinkage::PublicNonUnique)
491491
return SILLinkage::Shared;
492492

493+
// Prespecialization of the same generic metadata may be requested
494+
// multiple times within the same module, so it needs to be uniqued.
495+
if (nominal->isGenericContext())
496+
return SILLinkage::Shared;
497+
493498
// The full metadata object is private to the containing module.
494499
return SILLinkage::Private;
495500
case TypeMetadataAddress::AddressPoint: {

test/IRGen/prespecialized-metadata/enum-fileprivate-inmodule-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// UNSUPPORTED: CPU=armv7 && OS=ios
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

8-
// CHECK: @"$s4main5Value[[UNIQUE_ID_1:[0-9A-Z_]+]]OySiGMf" = internal constant <{
8+
// CHECK: @"$s4main5Value[[UNIQUE_ID_1:[0-9A-Z_]+]]OySiGMf" = linkonce_odr hidden constant <{
99
// CHECK-SAME: i8**,
1010
// CHECK-SAME: [[INT]],
1111
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-0argument-within-class-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// UNSUPPORTED: CPU=armv7 && OS=ios
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

8-
// CHECK: @"$s4main9NamespaceC5ValueOySi_GMf" = internal constant <{
8+
// CHECK: @"$s4main9NamespaceC5ValueOySi_GMf" = linkonce_odr hidden constant <{
99
// CHECk-SAME: i8**,
1010
// CHECK-SAME: [[INT]],
1111
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-1conformance-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
// CHECK: @"$sytN" = external{{( dllimport)?}} global %swift.full_type
99

10-
// CHECK: @"$s4main5ValueOySiGMf" = internal constant <{
10+
// CHECK: @"$s4main5ValueOySiGMf" = linkonce_odr hidden constant <{
1111
// CHECK-SAME: i8**,
1212
// CHECK-SAME: [[INT]],
1313
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-1conformance-public-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
// CHECK: @"$sytN" = external{{( dllimport)?}} global %swift.full_type
99

10-
// CHECK: @"$s4main5ValueOySiGMf" = internal constant <{
10+
// CHECK: @"$s4main5ValueOySiGMf" = linkonce_odr hidden constant <{
1111
// CHECK-SAME: i8**,
1212
// CHECK-SAME: [[INT]],
1313
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-1distinct_generic_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

88
// CHECK: @"$s4main5OuterOyAA5InnerVySiGGWV" = linkonce_odr hidden constant %swift.enum_vwtable
9-
// CHECK: @"$s4main5OuterOyAA5InnerVySiGGMf" = internal constant <{
9+
// CHECK: @"$s4main5OuterOyAA5InnerVySiGGMf" = linkonce_odr hidden constant <{
1010
// CHECK-SAME: i8**,
1111
// CHECK-SAME: [[INT]],
1212
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
// CHECK-SAME: i8* bitcast (void (%swift.opaque*, %swift.type*)* @"$s4main5ValueOySiGwup" to i8*),
2222
// CHECK-SAME: i8* bitcast (void (%swift.opaque*, i32, %swift.type*)* @"$s4main5ValueOySiGwui" to i8*)
2323
// CHECK-SAME: }, align [[ALIGNMENT]]
24-
// CHECK: @"$s4main5ValueOySiGMf" = internal constant <{
24+
// CHECK: @"$s4main5ValueOySiGMf" = linkonce_odr hidden constant <{
2525
// CHECK-SAME: i8**,
2626
// CHECK-SAME: [[INT]],
2727
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-within-class-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// UNSUPPORTED: CPU=armv7 && OS=ios
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

8-
// CHECK: @"$s4main9NamespaceC5ValueOySS_SiGMf" = internal constant <{
8+
// CHECK: @"$s4main9NamespaceC5ValueOySS_SiGMf" = linkonce_odr hidden constant <{
99
// CHECK-SAME: i8**,
1010
// CHECK-SAME: [[INT]],
1111
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-within-enum-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// UNSUPPORTED: CPU=armv7 && OS=ios
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

8-
// CHECK: @"$s4main9NamespaceO5ValueOySS_SiGMf" = internal constant <{
8+
// CHECK: @"$s4main9NamespaceO5ValueOySS_SiGMf" = linkonce_odr hidden constant <{
99
// CHECK-SAME: i8**,
1010
// CHECK-SAME: [[INT]],
1111
// CHECK-SAME: %swift.type_descriptor*,

test/IRGen/prespecialized-metadata/enum-inmodule-1argument-within-struct-1argument-1distinct_use.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// UNSUPPORTED: CPU=armv7 && OS=ios
66
// UNSUPPORTED: CPU=armv7s && OS=ios
77

8-
// CHECK: @"$s4main9NamespaceV5ValueOySS_SiGMf" = internal constant <{
8+
// CHECK: @"$s4main9NamespaceV5ValueOySS_SiGMf" = linkonce_odr hidden constant <{
99
// CHECK-SAME: i8**,
1010
// CHECK-SAME: [[INT]],
1111
// CHECK-SAME: %swift.type_descriptor*,

0 commit comments

Comments
 (0)