Skip to content

Commit a6ee248

Browse files
committed
[Serialization] Use getAllMembers() to eliminate nondeterminism.
When serializing the members of a nominal type or extension, use `getAllMembers()` instead of `getMembers()` to provide a deterministic ordering. Fixes rdar://63294687. (cherry picked from commit ce12778)
1 parent 7a07956 commit a6ee248

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

lib/Serialization/Serialization.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2711,7 +2711,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
27112711
/// \param members The decls within the context.
27122712
/// \param isClass True if the context could be a class context (class,
27132713
/// class extension, or protocol).
2714-
void writeMembers(DeclID parentID, DeclRange members, bool isClass) {
2714+
void writeMembers(DeclID parentID, ArrayRef<Decl *> members, bool isClass) {
27152715
using namespace decls_block;
27162716

27172717
SmallVector<DeclID, 16> memberIDs;
@@ -2852,7 +2852,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
28522852

28532853
SmallVector<DeclID, 16> witnessIDs;
28542854

2855-
for (auto member : proto->getMembers()) {
2855+
for (auto member : proto->getAllMembers()) {
28562856
if (auto *value = dyn_cast<ValueDecl>(member)) {
28572857
auto witness = proto->getDefaultWitness(value);
28582858
if (!witness)
@@ -3013,7 +3013,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
30133013
for (auto *genericParams : llvm::reverse(allGenericParams))
30143014
writeGenericParams(genericParams);
30153015

3016-
writeMembers(id, extension->getMembers(), isClassExtension);
3016+
writeMembers(id, extension->getAllMembers(), isClassExtension);
30173017
S.writeConformances(conformances, S.DeclTypeAbbrCodes);
30183018
}
30193019

@@ -3229,7 +3229,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
32293229

32303230

32313231
writeGenericParams(theStruct->getGenericParams());
3232-
writeMembers(id, theStruct->getMembers(), false);
3232+
writeMembers(id, theStruct->getAllMembers(), false);
32333233
S.writeConformances(conformances, S.DeclTypeAbbrCodes);
32343234
}
32353235

@@ -3286,7 +3286,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
32863286
inheritedAndDependencyTypes);
32873287

32883288
writeGenericParams(theEnum->getGenericParams());
3289-
writeMembers(id, theEnum->getMembers(), false);
3289+
writeMembers(id, theEnum->getAllMembers(), false);
32903290
S.writeConformances(conformances, S.DeclTypeAbbrCodes);
32913291
}
32923292

@@ -3345,7 +3345,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
33453345
inheritedAndDependencyTypes);
33463346

33473347
writeGenericParams(theClass->getGenericParams());
3348-
writeMembers(id, theClass->getMembers(), true);
3348+
writeMembers(id, theClass->getAllMembers(), true);
33493349
S.writeConformances(conformances, S.DeclTypeAbbrCodes);
33503350
}
33513351

@@ -3394,7 +3394,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
33943394
writeGenericParams(proto->getGenericParams());
33953395
S.writeGenericRequirements(
33963396
proto->getRequirementSignature(), S.DeclTypeAbbrCodes);
3397-
writeMembers(id, proto->getMembers(), true);
3397+
writeMembers(id, proto->getAllMembers(), true);
33983398
writeDefaultWitnessTable(proto);
33993399
}
34003400

@@ -5128,7 +5128,7 @@ static void collectInterestingNestedDeclarations(
51285128

51295129
// Recurse into nested declarations.
51305130
if (auto iterable = dyn_cast<IterableDeclContext>(member)) {
5131-
collectInterestingNestedDeclarations(S, iterable->getMembers(),
5131+
collectInterestingNestedDeclarations(S, iterable->getAllMembers(),
51325132
operatorMethodDecls,
51335133
objcMethods, nestedTypeDecls,
51345134
derivativeConfigs,
@@ -5210,7 +5210,7 @@ void Serializer::writeAST(ModuleOrSourceFile DC) {
52105210
if (auto bodyFP = IDC->getBodyFingerprint()) {
52115211
declFingerprints.insert({addDeclRef(D), *bodyFP});
52125212
}
5213-
collectInterestingNestedDeclarations(*this, IDC->getMembers(),
5213+
collectInterestingNestedDeclarations(*this, IDC->getAllMembers(),
52145214
operatorMethodDecls, objcMethods,
52155215
nestedTypeDecls,
52165216
uniquedDerivativeConfigs);
@@ -5243,7 +5243,7 @@ void Serializer::writeAST(ModuleOrSourceFile DC) {
52435243
if (auto bodyFP = IDC->getBodyFingerprint()) {
52445244
declFingerprints.insert({addDeclRef(TD), *bodyFP});
52455245
}
5246-
collectInterestingNestedDeclarations(*this, IDC->getMembers(),
5246+
collectInterestingNestedDeclarations(*this, IDC->getAllMembers(),
52475247
operatorMethodDecls, objcMethods,
52485248
nestedTypeDecls,
52495249
uniquedDerivativeConfigs,

0 commit comments

Comments
 (0)