Fix a rewriter bug involving call to property's

block. // rdar://9055596

llvm-svn: 126535
This commit is contained in:
Fariborz Jahanian 2011-02-26 00:33:41 +00:00
parent d2e7b05d8a
commit f2890fc93f
2 changed files with 21 additions and 5 deletions

View File

@ -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);

View File

@ -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);
}