mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-10 19:34:29 +00:00
ObjC Module: try to make objc module deterministic.
Make sure that comparing selectors in DeclarationName does its job. rdar://problem/28988750 llvm-svn: 287244
This commit is contained in:
parent
35a5fe9f07
commit
b666573238
@ -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;
|
||||
}
|
||||
}
|
||||
|
22
clang/test/Modules/stress-objc.m
Normal file
22
clang/test/Modules/stress-objc.m
Normal file
@ -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…
x
Reference in New Issue
Block a user