FixIt: use getLocForEndOfToken to insert fix-it after a type name.
Instead of setting DeclSpec's range end to point to the next token after the DeclSpec, we use getLocForEndOfToken to insert fix-it after a type name. Before this fix, fix-it will change ^(NSView view) to ^(*NSView view) This commit correctly updates the source to ^(NSView* view). rdar://21042144 Differential Revision: http://reviews.llvm.org/D20844 llvm-svn: 271448
This commit is contained in:
parent
7b8ed4f223
commit
d063c5a181
|
@ -1277,7 +1277,6 @@ ParsedType Parser::ParseObjCTypeName(ObjCDeclSpec &DS,
|
||||||
if (context == Declarator::ObjCResultContext)
|
if (context == Declarator::ObjCResultContext)
|
||||||
dsContext = DSC_objc_method_result;
|
dsContext = DSC_objc_method_result;
|
||||||
ParseSpecifierQualifierList(declSpec, AS_none, dsContext);
|
ParseSpecifierQualifierList(declSpec, AS_none, dsContext);
|
||||||
declSpec.SetRangeEnd(Tok.getLocation());
|
|
||||||
Declarator declarator(declSpec, context);
|
Declarator declarator(declSpec, context);
|
||||||
ParseDeclarator(declarator);
|
ParseDeclarator(declarator);
|
||||||
|
|
||||||
|
|
|
@ -10954,7 +10954,8 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
|
||||||
// Parameter declarators cannot be interface types. All ObjC objects are
|
// Parameter declarators cannot be interface types. All ObjC objects are
|
||||||
// passed by reference.
|
// passed by reference.
|
||||||
if (T->isObjCObjectType()) {
|
if (T->isObjCObjectType()) {
|
||||||
SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd();
|
SourceLocation TypeEndLoc =
|
||||||
|
getLocForEndOfToken(TSInfo->getTypeLoc().getLocEnd());
|
||||||
Diag(NameLoc,
|
Diag(NameLoc,
|
||||||
diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
|
diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
|
||||||
<< FixItHint::CreateInsertion(TypeEndLoc, "*");
|
<< FixItHint::CreateInsertion(TypeEndLoc, "*");
|
||||||
|
|
|
@ -1,11 +1,20 @@
|
||||||
// RUN: not %clang_cc1 -triple x86_64-apple-darwin10 -fdiagnostics-parseable-fixits -x objective-c %s 2>&1 | FileCheck %s
|
// RUN: not %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -fdiagnostics-parseable-fixits -x objective-c %s 2>&1 | FileCheck %s
|
||||||
// rdar://11311333
|
// rdar://11311333
|
||||||
|
|
||||||
@interface NSView @end
|
@interface NSView @end
|
||||||
|
|
||||||
@interface INTF
|
@interface INTF
|
||||||
- (void) drawRect : inView:(NSView)view;
|
- (void) drawRect : inView:(NSView)view;
|
||||||
|
- (void)test:(NSView )a;
|
||||||
|
- (void)foo;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// CHECK: {7:35-7:35}:"*"
|
// CHECK: {7:35-7:35}:"*"
|
||||||
|
// CHECK: {8:21-8:21}:"*"
|
||||||
|
@implementation INTF
|
||||||
|
-(void)foo {
|
||||||
|
^(NSView view) {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
// CHECK: {16:11-16:11}:"*"
|
||||||
|
|
Loading…
Reference in New Issue