Skip to content

Commit 8e45f44

Browse files
Harlan HaskinsCodaFi
authored andcommitted
[Serialization] Serialize hasMissingDesignatedInitializers
Since this is going to be something modules tell clients, rather than something clients discover about modules, serialize it.
1 parent b133b7e commit 8e45f44

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3416,6 +3416,7 @@ class DeclDeserializer {
34163416
DeclContextID contextID;
34173417
bool isImplicit, isObjC;
34183418
bool inheritsSuperclassInitializers;
3419+
bool hasMissingDesignatedInits;
34193420
GenericSignatureID genericSigID;
34203421
TypeID superclassID;
34213422
uint8_t rawAccessLevel;
@@ -3424,6 +3425,7 @@ class DeclDeserializer {
34243425
decls_block::ClassLayout::readRecord(scratch, nameID, contextID,
34253426
isImplicit, isObjC,
34263427
inheritsSuperclassInitializers,
3428+
hasMissingDesignatedInits,
34273429
genericSigID, superclassID,
34283430
rawAccessLevel, numConformances,
34293431
numInheritedTypes,
@@ -3466,6 +3468,8 @@ class DeclDeserializer {
34663468
theClass->setSuperclass(MF.getType(superclassID));
34673469
ctx.evaluator.cacheOutput(InheritsSuperclassInitializersRequest{theClass},
34683470
std::move(inheritsSuperclassInitializers));
3471+
ctx.evaluator.cacheOutput(HasMissingDesignatedInitializersRequest{theClass},
3472+
std::move(hasMissingDesignatedInits));
34693473

34703474
handleInherited(theClass,
34713475
rawInheritedAndDependencyIDs.slice(0, numInheritedTypes));
@@ -5390,7 +5394,8 @@ Decl *handleErrorAndSupplyMissingClassMember(ASTContext &context,
53905394
Decl *suppliedMissingMember = nullptr;
53915395
auto handleMissingClassMember = [&](const DeclDeserializationError &error) {
53925396
if (error.isDesignatedInitializer())
5393-
containingClass->setHasMissingDesignatedInitializers();
5397+
context.evaluator.cacheOutput(
5398+
HasMissingDesignatedInitializersRequest{containingClass}, true);
53945399
if (error.getNumberOfVTableEntries() > 0)
53955400
containingClass->setHasMissingVTableEntries();
53965401

lib/Serialization/ModuleFormat.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const uint16_t SWIFTMODULE_VERSION_MAJOR = 0;
5555
/// describe what change you made. The content of this comment isn't important;
5656
/// it just ensures a conflict if two people change the module format.
5757
/// Don't worry about adhering to the 80-column limit for this line.
58-
const uint16_t SWIFTMODULE_VERSION_MINOR = 531; // function parameter noDerivative
58+
const uint16_t SWIFTMODULE_VERSION_MINOR = 532; // @_hasMissingDesignatedInitializers
5959

6060
/// A standard hash seed used for all string hashes in a serialized module.
6161
///
@@ -1114,6 +1114,7 @@ namespace decls_block {
11141114
BCFixed<1>, // implicit?
11151115
BCFixed<1>, // explicitly objc?
11161116
BCFixed<1>, // inherits convenience initializers from its superclass?
1117+
BCFixed<1>, // has missing designated initializers?
11171118
GenericSignatureIDField, // generic environment
11181119
TypeIDField, // superclass
11191120
AccessLevelField, // access level

lib/Serialization/Serialization.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3139,17 +3139,16 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
31393139
uint8_t rawAccessLevel =
31403140
getRawStableAccessLevel(theClass->getFormalAccess());
31413141

3142-
bool inheritsSuperclassInitializers =
3143-
const_cast<ClassDecl *>(theClass)->
3144-
inheritsSuperclassInitializers();
3142+
auto mutableClass = const_cast<ClassDecl *>(theClass);
31453143

31463144
unsigned abbrCode = S.DeclTypeAbbrCodes[ClassLayout::Code];
31473145
ClassLayout::emitRecord(S.Out, S.ScratchRecord, abbrCode,
31483146
S.addDeclBaseNameRef(theClass->getName()),
31493147
contextID.getOpaqueValue(),
31503148
theClass->isImplicit(),
31513149
theClass->isObjC(),
3152-
inheritsSuperclassInitializers,
3150+
mutableClass->inheritsSuperclassInitializers(),
3151+
mutableClass->hasMissingDesignatedInitializers(),
31533152
S.addGenericSignatureRef(
31543153
theClass->getGenericSignature()),
31553154
S.addTypeRef(theClass->getSuperclass()),

0 commit comments

Comments
 (0)