Skip to content

Commit f35042a

Browse files
authored
Merge pull request #38216 from drexin/wip-fix-codable-enum-5.5
[5.5][Sema] Properly handle missing coding keys in enum Codable synthesis
2 parents 970f441 + 394c191 commit f35042a

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

lib/Sema/DerivedConformanceCodable.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,15 @@ static bool validateCaseCodingKeysEnum(const DerivedConformance &derived,
488488
? addImplicitCaseCodingKeys(
489489
enumDecl, elementDecl, codingKeysEnum)
490490
: caseCodingKeysDecls.front();
491+
492+
if (!result) {
493+
// There is no coding key defined for this element,
494+
// which is okay, because not all elements have to
495+
// be considered for serialization. Attempts to
496+
// en-/decode them will be handled at runtime.
497+
return true;
498+
}
499+
491500
auto *codingKeysTypeDecl = dyn_cast<TypeDecl>(result);
492501
if (!codingKeysTypeDecl) {
493502
result->diagnose(diag::codable_codingkeys_type_is_not_an_enum_here,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
enum EnumWithExcludedElement : Codable {
4+
case x
5+
case y
6+
7+
enum CodingKeys: CodingKey {
8+
case x
9+
}
10+
}

0 commit comments

Comments
 (0)