forked from OSchip/llvm-project
Correct the range returned by ParmVarDecl::getSourceRange(), for parameters in ObjC methods with postfix types.
For a parameter in a method like this: -(int)methodWithFn:(void (*)(int *p))fn; we would return the source range of the type and not include the parameter name. Fixes rdar://13668626. llvm-svn: 179660
This commit is contained in:
parent
406503a0f9
commit
a077279184
|
@ -1892,6 +1892,11 @@ SourceRange ParmVarDecl::getSourceRange() const {
|
||||||
return SourceRange(getOuterLocStart(), ArgRange.getEnd());
|
return SourceRange(getOuterLocStart(), ArgRange.getEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeclaratorDecl considers the range of postfix types as overlapping with the
|
||||||
|
// declaration name, but this is not the case with parameters in ObjC methods.
|
||||||
|
if (isa<ObjCMethodDecl>(getDeclContext()))
|
||||||
|
return SourceRange(DeclaratorDecl::getLocStart(), getLocation());
|
||||||
|
|
||||||
return DeclaratorDecl::getSourceRange();
|
return DeclaratorDecl::getSourceRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ int test_multi_declaration(void) {
|
||||||
id var_ext;
|
id var_ext;
|
||||||
}
|
}
|
||||||
@property (assign) id pro_ext;
|
@property (assign) id pro_ext;
|
||||||
|
-(int)methodWithFn:(void (*)(int *p))fn;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// RUN: c-index-test -test-load-source-usrs all -target x86_64-apple-macosx10.7 %s | FileCheck %s
|
// RUN: c-index-test -test-load-source-usrs all -target x86_64-apple-macosx10.7 %s | FileCheck %s
|
||||||
|
@ -146,7 +147,7 @@ int test_multi_declaration(void) {
|
||||||
// CHECK: usrs.m c:objc(pl)P1 Extent=[79:1 - 81:5]
|
// CHECK: usrs.m c:objc(pl)P1 Extent=[79:1 - 81:5]
|
||||||
// CHECK: usrs.m c:objc(pl)P1(im)method Extent=[80:1 - 80:16]
|
// CHECK: usrs.m c:objc(pl)P1(im)method Extent=[80:1 - 80:16]
|
||||||
// CHECK: usrs.m c:objc(cs)CWithExt2 Extent=[83:1 - 84:5]
|
// CHECK: usrs.m c:objc(cs)CWithExt2 Extent=[83:1 - 84:5]
|
||||||
// CHECK: usrs.m c:objc(ext)CWithExt2@usrs.m@1111 Extent=[85:1 - 89:5]
|
// CHECK: usrs.m c:objc(ext)CWithExt2@usrs.m@1111 Extent=[85:1 - 90:5]
|
||||||
// CHECK: usrs.m c:objc(cs)CWithExt2@var_ext Extent=[86:3 - 86:13]
|
// CHECK: usrs.m c:objc(cs)CWithExt2@var_ext Extent=[86:3 - 86:13]
|
||||||
// CHECK: usrs.m c:objc(cs)CWithExt2(py)pro_ext Extent=[88:1 - 88:30]
|
// CHECK: usrs.m c:objc(cs)CWithExt2(py)pro_ext Extent=[88:1 - 88:30]
|
||||||
// CHECK: usrs.m c:objc(cs)CWithExt2(im)pro_ext Extent=[88:23 - 88:30]
|
// CHECK: usrs.m c:objc(cs)CWithExt2(im)pro_ext Extent=[88:23 - 88:30]
|
||||||
|
@ -279,4 +280,6 @@ int test_multi_declaration(void) {
|
||||||
// CHECK-source: usrs.m:76:10: IntegerLiteral= Extent=[76:10 - 76:11]
|
// CHECK-source: usrs.m:76:10: IntegerLiteral= Extent=[76:10 - 76:11]
|
||||||
// CHECK-source: usrs.m:79:11: ObjCProtocolDecl=P1:79:11 (Definition) Extent=[79:1 - 81:5]
|
// CHECK-source: usrs.m:79:11: ObjCProtocolDecl=P1:79:11 (Definition) Extent=[79:1 - 81:5]
|
||||||
// CHECK-source: usrs.m:80:9: ObjCInstanceMethodDecl=method:80:9 Extent=[80:1 - 80:16]
|
// CHECK-source: usrs.m:80:9: ObjCInstanceMethodDecl=method:80:9 Extent=[80:1 - 80:16]
|
||||||
|
// CHECK-source: usrs.m:89:7: ObjCInstanceMethodDecl=methodWithFn::89:7 Extent=[89:1 - 89:41]
|
||||||
|
// CHECK-source: usrs.m:89:38: ParmDecl=fn:89:38 (Definition) Extent=[89:21 - 89:40]
|
||||||
|
// CHECK-source: usrs.m:89:35: ParmDecl=p:89:35 (Definition) Extent=[89:30 - 89:36]
|
||||||
|
|
Loading…
Reference in New Issue