forked from OSchip/llvm-project
Fix a rewriter bug involving call to property's
block. // rdar://9055596 llvm-svn: 126535
This commit is contained in:
parent
d2e7b05d8a
commit
f2890fc93f
|
@ -1349,13 +1349,13 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
|
|||
MsgExpr = ObjCMessageExpr::Create(*Context,
|
||||
Ty.getNonReferenceType(),
|
||||
Expr::getValueKindForType(Ty),
|
||||
/*FIXME?*/SourceLocation(),
|
||||
PropOrGetterRefExpr->getLocStart(),
|
||||
SuperLocation,
|
||||
/*IsInstanceSuper=*/true,
|
||||
SuperTy,
|
||||
Sel, SelectorLoc, OMD,
|
||||
0, 0,
|
||||
/*FIXME:*/SourceLocation());
|
||||
PropOrGetterRefExpr->getLocEnd());
|
||||
else {
|
||||
assert (Receiver && "RewritePropertyOrImplicitGetter - Receiver is null");
|
||||
if (Expr *Exp = dyn_cast<Expr>(Receiver))
|
||||
|
@ -1365,14 +1365,15 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) {
|
|||
MsgExpr = ObjCMessageExpr::Create(*Context,
|
||||
Ty.getNonReferenceType(),
|
||||
Expr::getValueKindForType(Ty),
|
||||
/*FIXME:*/SourceLocation(),
|
||||
PropOrGetterRefExpr->getLocStart(),
|
||||
cast<Expr>(Receiver),
|
||||
Sel, SelectorLoc, OMD,
|
||||
0, 0,
|
||||
/*FIXME:*/SourceLocation());
|
||||
PropOrGetterRefExpr->getLocEnd());
|
||||
}
|
||||
|
||||
Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr);
|
||||
Stmt *ReplacingStmt = SynthMessageExpr(MsgExpr, MsgExpr->getLocStart(),
|
||||
MsgExpr->getLocEnd());
|
||||
|
||||
if (!PropParentMap)
|
||||
PropParentMap = new ParentMap(CurrentBody);
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
|
||||
// rdar://9055596
|
||||
void *sel_registerName(const char *);
|
||||
|
||||
typedef void (^FooBlock) (int foo, int bar, int baz);
|
||||
|
||||
@interface Foo { }
|
||||
@property (readwrite, copy, nonatomic) FooBlock fooBlock;
|
||||
@end
|
||||
|
||||
static void Bar (Foo * foo) {
|
||||
foo.fooBlock (1,2,3);
|
||||
}
|
Loading…
Reference in New Issue