|
@@ -0,0 +1,85 @@
|
|
|
+// RUN: %clang_cc1 -E %s -o %t.mm
|
|
|
+// RUN: %clang_cc1 -x objective-c++ -fms-extensions -fobjc-default-synthesize-properties -rewrite-objc %t.mm -o %t-rw.cpp
|
|
|
+// RUN: FileCheck --input-file=%t-rw.cpp %s
|
|
|
+// RUN: %clang_cc1 -fsyntax-only -Werror -DSEL="void *" -Did="struct objc_object *" -Wno-attributes -Wno-address-of-temporary -U__declspec -D"__declspec(X)=" %t-rw.cpp
|
|
|
+// rdar://11374235
|
|
|
+
|
|
|
+extern "C" void *sel_registerName(const char *);
|
|
|
+
|
|
|
+@interface NSObject
|
|
|
+- (void) release;
|
|
|
+- (id) retain;
|
|
|
+@end
|
|
|
+@class NSString;
|
|
|
+
|
|
|
+@interface SynthItAll : NSObject
|
|
|
+@property int howMany;
|
|
|
+@property (retain) NSString* what;
|
|
|
+@end
|
|
|
+
|
|
|
+@implementation SynthItAll
|
|
|
+@end
|
|
|
+
|
|
|
+
|
|
|
+@interface SynthSetter : NSObject
|
|
|
+@property (nonatomic) int howMany;
|
|
|
+@property (nonatomic, retain) NSString* what;
|
|
|
+@end
|
|
|
+
|
|
|
+@implementation SynthSetter
|
|
|
+
|
|
|
+- (int) howMany {
|
|
|
+ return _howMany;
|
|
|
+}
|
|
|
+// - (void) setHowMany: (int) value
|
|
|
+
|
|
|
+- (NSString*) what {
|
|
|
+ return _what;
|
|
|
+}
|
|
|
+// - (void) setWhat: (NSString*) value
|
|
|
+@end
|
|
|
+
|
|
|
+
|
|
|
+@interface SynthGetter : NSObject
|
|
|
+@property (nonatomic) int howMany;
|
|
|
+@property (nonatomic, retain) NSString* what;
|
|
|
+@end
|
|
|
+
|
|
|
+@implementation SynthGetter
|
|
|
+// - (int) howMany
|
|
|
+- (void) setHowMany: (int) value {
|
|
|
+ _howMany = value;
|
|
|
+}
|
|
|
+
|
|
|
+// - (NSString*) what
|
|
|
+- (void) setWhat: (NSString*) value {
|
|
|
+ if (_what != value) {
|
|
|
+ [_what release];
|
|
|
+ _what = [value retain];
|
|
|
+ }
|
|
|
+}
|
|
|
+@end
|
|
|
+
|
|
|
+typedef struct {
|
|
|
+ int x:1;
|
|
|
+ int y:1;
|
|
|
+} TBAR;
|
|
|
+
|
|
|
+@interface NONAME
|
|
|
+{
|
|
|
+ TBAR _bar;
|
|
|
+}
|
|
|
+@property TBAR bad;
|
|
|
+@end
|
|
|
+
|
|
|
+@implementation NONAME
|
|
|
+@end
|
|
|
+
|
|
|
+// CHECK: static int _I_SynthGetter_howMany
|
|
|
+// CHECK: return (*(int *)((char *)self + OBJC_IVAR_$_SynthGetter$_howMany));
|
|
|
+// CHECK: static NSString * _I_SynthGetter_what
|
|
|
+// CHECK: return (*(NSString **)((char *)self + OBJC_IVAR_$_SynthGetter$_what));
|
|
|
+// CHECK: static TBAR _I_NONAME_bad
|
|
|
+// CHECK: return (*(TBAR *)((char *)self + OBJC_IVAR_$_NONAME$_bad));
|
|
|
+// CHECK: static void _I_NONAME_setBad_
|
|
|
+// CHECK: (*(TBAR *)((char *)self + OBJC_IVAR_$_NONAME$_bad)) = bad;
|