forked from OSchip/llvm-project
Fixes a rewrite bug, rewriting nested property usage
inside blocks. Fixes //rdar: //8608293. llvm-svn: 118425
This commit is contained in:
parent
c745320cf9
commit
086a24a2be
|
@ -1931,7 +1931,6 @@
|
|||
isa = PBXProject;
|
||||
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
|
||||
compatibilityVersion = "Xcode 2.4";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
English,
|
||||
|
|
|
@ -5524,7 +5524,12 @@ Stmt *RewriteObjC::RewriteFunctionBodyOrGlobalInitializer(Stmt *S) {
|
|||
GetInnerBlockDeclRefExprs(BE->getBody(),
|
||||
InnerBlockDeclRefs, InnerContexts);
|
||||
// Rewrite the block body in place.
|
||||
Stmt *SaveCurrentBody = CurrentBody;
|
||||
CurrentBody = BE->getBody();
|
||||
PropParentMap = 0;
|
||||
RewriteFunctionBodyOrGlobalInitializer(BE->getBody());
|
||||
CurrentBody = SaveCurrentBody;
|
||||
PropParentMap = 0;
|
||||
ImportedLocalExternalDecls.clear();
|
||||
// Now we snarf the rewritten text and stash it away for later use.
|
||||
std::string Str = Rewrite.getRewrittenText(BE->getSourceRange());
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||||
// RUN: %clang_cc1 -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||||
// radar 8608293
|
||||
|
||||
void *sel_registerName(const char *);
|
||||
|
||||
extern "C" void nowarn(id);
|
||||
|
||||
extern "C" void noblockwarn(void (^)());
|
||||
|
||||
@interface INTFOFPROP
|
||||
@property (readwrite, retain) INTFOFPROP *outer;
|
||||
@property (readwrite, retain) id inner;
|
||||
@end
|
||||
|
||||
@interface NSSet
|
||||
- (NSSet *)objectsPassingTest:(char (^)(id obj, char *stop))predicate ;
|
||||
@end
|
||||
|
||||
@interface INTF
|
||||
- (NSSet *)Meth;
|
||||
@end
|
||||
|
||||
@implementation INTF
|
||||
|
||||
- (NSSet *)Meth
|
||||
{
|
||||
NSSet *aces;
|
||||
|
||||
noblockwarn(^() {
|
||||
INTFOFPROP *ace;
|
||||
nowarn(ace.outer.inner);
|
||||
noblockwarn(^() {
|
||||
INTFOFPROP *ace;
|
||||
nowarn(ace.outer.inner);
|
||||
});
|
||||
});
|
||||
|
||||
noblockwarn(^() {
|
||||
INTFOFPROP *ace;
|
||||
nowarn(ace.outer.inner);
|
||||
});
|
||||
|
||||
return [aces objectsPassingTest:^(id obj, char *stop)
|
||||
{
|
||||
INTFOFPROP *ace = (INTFOFPROP *)obj;
|
||||
nowarn(ace.outer.inner);
|
||||
return (char)0;
|
||||
}];
|
||||
|
||||
}
|
||||
@end
|
Loading…
Reference in New Issue