Skip to content

Commit a30bcff

Browse files
committed
[Sema] Emit dynamic actor isolation checks for derived Codable protocol witnesses
1 parent 04fd5a2 commit a30bcff

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

lib/Sema/DerivedConformanceCodable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,7 +1254,7 @@ static FuncDecl *deriveEncodable_encode(DerivedConformance &derived) {
12541254
encodeDecl->getAttrs().add(attr);
12551255
}
12561256

1257-
addNonIsolatedToSynthesized(derived.Nominal, encodeDecl);
1257+
addNonIsolatedToSynthesized(derived, encodeDecl);
12581258

12591259
encodeDecl->copyFormalAccessFrom(derived.Nominal,
12601260
/*sourceIsParentContext*/ true);
@@ -1906,7 +1906,7 @@ static ValueDecl *deriveDecodable_init(DerivedConformance &derived) {
19061906
initDecl->getAttrs().add(reqAttr);
19071907
}
19081908

1909-
addNonIsolatedToSynthesized(derived.Nominal, initDecl);
1909+
addNonIsolatedToSynthesized(derived, initDecl);
19101910

19111911
initDecl->copyFormalAccessFrom(derived.Nominal,
19121912
/*sourceIsParentContext*/ true);

test/SILGen/preconcurrency_conformances.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,26 @@ struct TestDerivedHashable : @preconcurrency Hashable {
353353
// CHECK: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF
354354
// CHECK-NEXT: {{.*}} = apply [[CHECK_EXEC_REF]]({{.*}}, [[EXEC]])
355355

356+
extension NotSendable : Codable {}
357+
358+
@MainActor
359+
struct TestDerivedCodable : @preconcurrency Codable {
360+
var x: NotSendable
361+
}
362+
363+
// protocol witness for Decodable.init(from:) in conformance TestDerivedCodable
364+
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$s27preconcurrency_conformances18TestDerivedCodableVSeAASe4fromxs7Decoder_p_tKcfCTW
365+
// CHECK: [[MAIN_ACTOR:%.*]] = begin_borrow {{.*}} : $MainActor
366+
// CHECK-NEXT: [[EXEC:%.*]] = extract_executor [[MAIN_ACTOR]] : $MainActor
367+
// CHECK: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF
368+
// CHECK-NEXT: {{.*}} = apply [[CHECK_EXEC_REF]]({{.*}}, [[EXEC]])
369+
370+
// protocol witness for Encodable.encode(to:) in conformance TestDerivedCodable
371+
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$s27preconcurrency_conformances18TestDerivedCodableVSEAASE6encode2toys7Encoder_p_tKFTW
372+
// CHECK: [[MAIN_ACTOR:%.*]] = begin_borrow {{.*}} : $MainActor
373+
// CHECK-NEXT: [[EXEC:%.*]] = extract_executor [[MAIN_ACTOR]] : $MainActor
374+
// CHECK: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF
375+
// CHECK-NEXT: {{.*}} = apply [[CHECK_EXEC_REF]]({{.*}}, [[EXEC]])
356376

357377
//--- checks_disabled.swift
358378
protocol P {
@@ -575,3 +595,18 @@ struct TestDerivedHashable : @preconcurrency Hashable {
575595
// protocol witness for static Equatable.== infix(_:_:) in conformance TestDerivedHashable
576596
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$s27preconcurrency_conformances19TestDerivedHashableVSQAASQ2eeoiySbx_xtFZTW
577597
// CHECK-NOT: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF
598+
599+
extension NotSendable : Codable {}
600+
601+
@MainActor
602+
struct TestDerivedCodable : @preconcurrency Codable {
603+
var x: NotSendable
604+
}
605+
606+
// protocol witness for Decodable.init(from:) in conformance TestDerivedCodable
607+
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$s27preconcurrency_conformances18TestDerivedCodableVSeAASe4fromxs7Decoder_p_tKcfCTW
608+
// CHECK-NOT: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF
609+
610+
// protocol witness for Encodable.encode(to:) in conformance TestDerivedCodable
611+
// CHECK-LABEL: sil private [transparent] [thunk] [ossa] @$s27preconcurrency_conformances18TestDerivedCodableVSEAASE6encode2toys7Encoder_p_tKFTW
612+
// CHECK-NOT: [[CHECK_EXEC_REF:%.*]] = function_ref @$ss22_checkExpectedExecutor14_filenameStart01_D6Length01_D7IsASCII5_line9_executoryBp_BwBi1_BwBetF

0 commit comments

Comments
 (0)