Skip to content

Commit

Permalink
FixIt: use getLocForEndOfToken to insert fix-it after a type name.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
manman-ren committed Jun 2, 2016
1 parent 7b8ed4f commit d063c5a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
1 change: 0 additions & 1 deletion clang/lib/Parse/ParseObjc.cpp
Expand Up @@ -1277,7 +1277,6 @@ ParsedType Parser::ParseObjCTypeName(ObjCDeclSpec &DS,
if (context == Declarator::ObjCResultContext)
dsContext = DSC_objc_method_result;
ParseSpecifierQualifierList(declSpec, AS_none, dsContext);
declSpec.SetRangeEnd(Tok.getLocation());
Declarator declarator(declSpec, context);
ParseDeclarator(declarator);

Expand Down
3 changes: 2 additions & 1 deletion clang/lib/Sema/SemaDecl.cpp
Expand Up @@ -10954,7 +10954,8 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
// Parameter declarators cannot be interface types. All ObjC objects are
// passed by reference.
if (T->isObjCObjectType()) {
SourceLocation TypeEndLoc = TSInfo->getTypeLoc().getLocEnd();
SourceLocation TypeEndLoc =
getLocForEndOfToken(TSInfo->getTypeLoc().getLocEnd());
Diag(NameLoc,
diag::err_object_cannot_be_passed_returned_by_value) << 1 << T
<< FixItHint::CreateInsertion(TypeEndLoc, "*");
Expand Down
13 changes: 11 additions & 2 deletions clang/test/FixIt/fixit-interface-as-param.m
@@ -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

@interface NSView @end

@interface INTF
- (void) drawRect : inView:(NSView)view;
- (void)test:(NSView )a;
- (void)foo;
@end

// CHECK: {7:35-7:35}:"*"

// CHECK: {8:21-8:21}:"*"
@implementation INTF
-(void)foo {
^(NSView view) {
};
}
@end
// CHECK: {16:11-16:11}:"*"

0 comments on commit d063c5a

Please sign in to comment.