Skip to content

Commit 93a28da

Browse files
authored
Merge pull request swiftlang#36066 from DougGregor/marker-protocol-requirement-signature-abi
2 parents 421d118 + 2ff8808 commit 93a28da

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5219,10 +5219,10 @@ GenericRequirementsMetadata irgen::addGenericRequirements(
52195219
assert(sig);
52205220
GenericRequirementsMetadata metadata;
52215221
for (auto &requirement : requirements) {
5222-
++metadata.NumRequirements;
5223-
52245222
switch (auto kind = requirement.getKind()) {
52255223
case RequirementKind::Layout:
5224+
++metadata.NumRequirements;
5225+
52265226
switch (auto layoutKind =
52275227
requirement.getLayoutConstraint()->getKind()) {
52285228
case LayoutConstraintKind::Class: {
@@ -5247,9 +5247,11 @@ GenericRequirementsMetadata irgen::addGenericRequirements(
52475247
->getDecl();
52485248

52495249
// Marker protocols do not record generic requirements at all.
5250-
if (protocol->isMarkerProtocol())
5250+
if (protocol->isMarkerProtocol()) {
52515251
break;
5252+
}
52525253

5254+
++metadata.NumRequirements;
52535255
bool needsWitnessTable =
52545256
Lowering::TypeConverter::protocolRequiresWitnessTable(protocol);
52555257
auto flags = GenericRequirementFlags(GenericRequirementKind::Protocol,
@@ -5273,6 +5275,7 @@ GenericRequirementsMetadata irgen::addGenericRequirements(
52735275

52745276
case RequirementKind::SameType:
52755277
case RequirementKind::Superclass: {
5278+
++metadata.NumRequirements;
52765279
auto abiKind = kind == RequirementKind::SameType
52775280
? GenericRequirementKind::SameType
52785281
: GenericRequirementKind::BaseClass;

test/IRGen/marker_protocol.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
extension Int: P { }
1212
extension Array: P where Element: P { }
1313

14+
// CHECK: @"$s15marker_protocol1QMp" = {{(protected )?}}constant
15+
// CHECK-SAME: i32 trunc{{.*}}s15marker_protocolMXM{{.*}}s15marker_protocol1QMp
16+
// CHECK-SAME: i32 0, i32 5, i32 0
17+
public protocol Q: P {
18+
func f()
19+
func g()
20+
func h()
21+
func i()
22+
func j()
23+
}
24+
1425
// Note: no witness tables
1526
// CHECK: swiftcc void @"$s15marker_protocol7genericyyxAA1PRzlF"(%swift.opaque* noalias nocapture %0, %swift.type* %T)
1627
public func generic<T: P>(_: T) { }
@@ -19,5 +30,3 @@ public func testGeneric(i: Int, array: [Int]) {
1930
generic(i)
2031
generic(array)
2132
}
22-
23-
public protocol Q: P { }

0 commit comments

Comments
 (0)