// RUN: %clang_cc1 -triple i686-pc-windows -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-runtime=macosx-fragile-10.5 %s -o %t-rw.cpp
// RUN: %clang_cc1 -triple i686-pc-windows -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
// RUN: %clang_cc1 -triple i686-pc-windows -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp
// RUN: %clang_cc1 -triple i686-pc-windows -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-modern-rw.cpp

typedef unsigned long size_t;
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
