@@ -117,8 +117,6 @@ class ReferencedTypeFinder : public TypeDeclFinder {
117117 }
118118};
119119
120- namespace {
121-
122120namespace compare_detail {
123121
124122enum : int {
@@ -244,7 +242,7 @@ static int lastDitchSort(Decl *lhs, Decl *rhs, bool suppressDiagnostic) {
244242 return result;
245243}
246244
247- }
245+ } // end namespace compare_detail
248246
249247// / Comparator for use with \c llvm::array_pod_sort() . This sorts decls into
250248// / reverse order since they will be pushed onto a stack.
@@ -334,6 +332,7 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
334332
335333 // Still nothing? Fine, we'll look for a difference between the members.
336334 {
335+ // First pass: compare names
337336 for (auto pair : llvm::zip_equal (lhsMembers, rhsMembers)) {
338337 auto *lhsMember = dyn_cast<ValueDecl>(std::get<0 >(pair)),
339338 *rhsMember = dyn_cast<ValueDecl>(std::get<1 >(pair));
@@ -345,9 +344,19 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
345344 ASSERT (lhsMember && rhsMember);
346345
347346 COMPARE (getNameString (lhsMember), getNameString (rhsMember));
347+ }
348+
349+ // Second pass: compare other traits.
350+ for (auto pair : llvm::zip_equal (lhsMembers, rhsMembers)) {
351+ auto *lhsMember = dyn_cast<ValueDecl>(std::get<0 >(pair)),
352+ *rhsMember = dyn_cast<ValueDecl>(std::get<1 >(pair));
353+ if (!lhsMember || !rhsMember)
354+ continue ;
355+
348356 COMPARE (getTypeString (lhsMember), getTypeString (rhsMember));
349357 COMPARE (getGenericSignatureString (lhsMember),
350358 getGenericSignatureString (rhsMember));
359+ COMPARE (getMangledNameString (lhsMember), getMangledNameString (rhsMember));
351360 }
352361 }
353362
@@ -361,7 +370,6 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
361370
362371#undef COMPARE
363372}
364- }
365373
366374class ModuleWriter {
367375 enum class EmissionState { NotYetDefined = 0 , DefinitionRequested, Defined };
0 commit comments