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