1// RUN: %clang_cc1 -E %s -o %t.mm 2// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s 3 4// rdar://11095151 5 6typedef void (^void_block_t)(void); 7 8@interface PropertyClass { 9 int q; 10 void_block_t __completion; 11 PropertyClass* YVAR; 12 id ID; 13} 14@property int q; 15@property int r; 16 17@property (copy) void_block_t completionBlock; 18@property (retain) PropertyClass* Yblock; 19@property (readonly) PropertyClass* readonlyAttr; 20@property (readonly,copy) PropertyClass* readonlyCopyAttr; 21@property (readonly,retain) PropertyClass* readonlyRetainAttr; 22@property (readonly,retain,nonatomic) PropertyClass* readonlyNonatomicAttr; 23@property (copy) id ID; 24 25@end 26 27@implementation PropertyClass 28@synthesize q; // attributes should be "Ti,Vq" 29@dynamic r; // attributes should be "Ti,D" 30@synthesize completionBlock=__completion; // "T@?,C,V__completion" 31@synthesize Yblock = YVAR; // "T@\"PropertyClass\",&,VYVAR" 32@synthesize readonlyAttr; 33@synthesize readonlyCopyAttr; 34@synthesize readonlyRetainAttr; 35@synthesize readonlyNonatomicAttr; 36@synthesize ID; // "T@,C,VID" 37@end 38 39// CHECK: Ti,Vq 40// CHECK: Ti,D 41// CHECK: T@?,C,V__completion 42// CHECK: T@\"PropertyClass\",&,VYVAR 43// CHECK: T@\"PropertyClass\",R,VreadonlyAttr 44// CHECK: T@\"PropertyClass\",R,C,VreadonlyCopyAttr 45// CHECK: T@\"PropertyClass\",R,&,VreadonlyRetainAttr 46// CHECK: T@\"PropertyClass\",R,&,N,VreadonlyNonatomicAttr 47 48@interface Test @end 49@interface Test (Category) 50@property int q; 51@end 52 53@implementation Test (Category) 54@dynamic q; 55@end 56 57// CHECK: {{"q","Ti,D"}} 58