@@ -117,8 +117,6 @@ class ReferencedTypeFinder : public TypeDeclFinder {
117
117
}
118
118
};
119
119
120
- namespace {
121
-
122
120
namespace compare_detail {
123
121
124
122
enum : int {
@@ -244,7 +242,7 @@ static int lastDitchSort(Decl *lhs, Decl *rhs, bool suppressDiagnostic) {
244
242
return result;
245
243
}
246
244
247
- }
245
+ } // end namespace compare_detail
248
246
249
247
// / Comparator for use with \c llvm::array_pod_sort() . This sorts decls into
250
248
// / reverse order since they will be pushed onto a stack.
@@ -334,6 +332,7 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
334
332
335
333
// Still nothing? Fine, we'll look for a difference between the members.
336
334
{
335
+ // First pass: compare names
337
336
for (auto pair : llvm::zip_equal (lhsMembers, rhsMembers)) {
338
337
auto *lhsMember = dyn_cast<ValueDecl>(std::get<0 >(pair)),
339
338
*rhsMember = dyn_cast<ValueDecl>(std::get<1 >(pair));
@@ -345,9 +344,19 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
345
344
ASSERT (lhsMember && rhsMember);
346
345
347
346
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
+
348
356
COMPARE (getTypeString (lhsMember), getTypeString (rhsMember));
349
357
COMPARE (getGenericSignatureString (lhsMember),
350
358
getGenericSignatureString (rhsMember));
359
+ COMPARE (getMangledNameString (lhsMember), getMangledNameString (rhsMember));
351
360
}
352
361
}
353
362
@@ -361,7 +370,6 @@ static int reverseCompareDecls(Decl * const *lhs, Decl * const *rhs) {
361
370
362
371
#undef COMPARE
363
372
}
364
- }
365
373
366
374
class ModuleWriter {
367
375
enum class EmissionState { NotYetDefined = 0 , DefinitionRequested, Defined };
0 commit comments