1// RUN: %clang_cc1 -E %s -o %t.mm
2// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %t.mm -o %t-rw.cpp
3// RUN: FileCheck --input-file=%t-rw.cpp %s
4// RUN: %clang_cc1 -fsyntax-only -std=gnu++98 -Werror -DSEL="void *" -Did="struct objc_object *" -Wno-attributes -Wno-address-of-temporary -U__declspec -D"__declspec(X)=" %t-rw.cpp
5// rdar://11374235
6
7extern "C" void *sel_registerName(const char *);
8
9@interface NSObject
10- (void) release;
11- (id) retain;
12@end
13@class NSString;
14
15@interface SynthItAll : NSObject
16@property int howMany;
17@property (retain) NSString* what;
18@end
19
20@implementation SynthItAll
21@end
22
23
24@interface SynthSetter : NSObject
25@property (nonatomic) int howMany;
26@property (nonatomic, retain) NSString* what;
27@end
28
29@implementation SynthSetter
30
31- (int) howMany {
32    return _howMany;
33}
34// - (void) setHowMany: (int) value
35
36- (NSString*) what {
37    return _what;
38}
39// - (void) setWhat: (NSString*) value
40@end
41
42
43@interface SynthGetter : NSObject
44@property (nonatomic) int howMany;
45@property (nonatomic, retain) NSString* what;
46@end
47
48@implementation SynthGetter
49// - (int) howMany
50- (void) setHowMany: (int) value {
51    _howMany = value;
52}
53
54// - (NSString*) what
55- (void) setWhat: (NSString*) value {
56    if (_what != value) {
57        [_what release];
58        _what = [value retain];
59    }
60}
61@end
62
63typedef struct {
64        int x:1;
65        int y:1;
66} TBAR;
67
68@interface NONAME
69{
70  TBAR _bar;
71}
72@property TBAR bad;
73@end
74
75@implementation NONAME
76@end
77
78// CHECK: (*(int *)((char *)self + OBJC_IVAR_$_SynthItAll$_howMany)) = howMany;
79// CHECK: return (*(int *)((char *)self + OBJC_IVAR_$_SynthGetter$_howMany));
80// CHECK: (*(TBAR *)((char *)self + OBJC_IVAR_$_NONAME$_bad)) = bad;
81