mirror of https://github.com/microsoft/clang.git
ObjC Module: try to make objc module deterministic.
Make sure that comparing selectors in DeclarationName does its job. rdar://problem/28988750 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@287244 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9d3affe6fd
commit
5b8679eae4
|
@ -95,12 +95,18 @@ int DeclarationName::compare(DeclarationName LHS, DeclarationName RHS) {
|
|||
case DeclarationName::ObjCMultiArgSelector: {
|
||||
Selector LHSSelector = LHS.getObjCSelector();
|
||||
Selector RHSSelector = RHS.getObjCSelector();
|
||||
// getNumArgs for ZeroArgSelector returns 0, but we still need to compare.
|
||||
if (LHS.getNameKind() == DeclarationName::ObjCZeroArgSelector &&
|
||||
RHS.getNameKind() == DeclarationName::ObjCZeroArgSelector) {
|
||||
return LHSSelector.getAsIdentifierInfo()->getName().compare(
|
||||
RHSSelector.getAsIdentifierInfo()->getName());
|
||||
}
|
||||
unsigned LN = LHSSelector.getNumArgs(), RN = RHSSelector.getNumArgs();
|
||||
for (unsigned I = 0, N = std::min(LN, RN); I != N; ++I) {
|
||||
switch (LHSSelector.getNameForSlot(I).compare(
|
||||
RHSSelector.getNameForSlot(I))) {
|
||||
case -1: return true;
|
||||
case 1: return false;
|
||||
case -1: return -1;
|
||||
case 1: return 1;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
// RUN: cd %S
|
||||
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00.pch -fno-pch-timestamp
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00_1.pch -fno-pch-timestamp
|
||||
// RUN: diff %t_c00.pch %t_c00_1.pch
|
||||
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00_2.pch -fno-pch-timestamp
|
||||
// RUN: diff %t_c00.pch %t_c00_2.pch
|
||||
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00_3.pch -fno-pch-timestamp
|
||||
// RUN: diff %t_c00.pch %t_c00_3.pch
|
||||
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00_4.pch -fno-pch-timestamp
|
||||
// RUN: diff %t_c00.pch %t_c00_4.pch
|
||||
|
||||
// RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00_5.pch -fno-pch-timestamp
|
||||
// RUN: diff %t_c00.pch %t_c00_5.pch
|
||||
|
||||
@protocol NSObject
|
||||
- (void)doesNotRecognizeSelector:(SEL)aSelector;
|
||||
- (id)forwardingTargetForSelector:(SEL)aSelector;
|
||||
@end
|
Loading…
Reference in New Issue