1// RUN: rm -rf %t
2// RUN: %clang_cc1 -objcmt-migrate-all -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11
3// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result
4// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result
5// rdar://15396636
6
7#ifndef NS_RETURNS_INNER_POINTER // defined in iOS 6 for sure
8#define NS_RETURNS_INNER_POINTER __attribute__((objc_returns_inner_pointer))
9#endif
10
11#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin")
12
13#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end")
14
15#if __has_feature(attribute_ns_returns_retained)
16#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained))
17#endif
18#if __has_feature(attribute_cf_returns_retained)
19#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
20#endif
21#if __has_feature(attribute_ns_returns_not_retained)
22#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
23#endif
24#if __has_feature(attribute_cf_returns_not_retained)
25#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained))
26#endif
27#if __has_feature(attribute_ns_consumes_self)
28#define NS_CONSUMES_SELF __attribute__((ns_consumes_self))
29#endif
30#if __has_feature(attribute_ns_consumed)
31#define NS_CONSUMED __attribute__((ns_consumed))
32#endif
33#if __has_feature(attribute_cf_consumed)
34#define CF_CONSUMED __attribute__((cf_consumed))
35#endif
36#if __has_attribute(ns_returns_autoreleased)
37#define NS_RETURNS_AUTORELEASED __attribute__((ns_returns_autoreleased))
38#endif
39
40#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
41
42CF_IMPLICIT_BRIDGING_ENABLED
43
44typedef unsigned long CFTypeID;
45typedef unsigned long CFOptionFlags;
46typedef unsigned long CFHashCode;
47
48typedef signed long CFIndex; /*AnyObj*/
49typedef const struct __CFArray * CFArrayRef;
50typedef struct {
51    CFIndex location;
52    CFIndex length;
53} CFRange;
54
55typedef void (*CFArrayApplierFunction)(const void *value, void *context);
56
57typedef enum CFComparisonResult : CFIndex CFComparisonResult; enum CFComparisonResult : CFIndex {
58    kCFCompareLessThan = -1L,
59    kCFCompareEqualTo = 0,
60    kCFCompareGreaterThan = 1
61};
62
63
64typedef CFComparisonResult (*CFComparatorFunction)(const void *val1, const void *val2, void *context);
65
66typedef struct __CFArray * CFMutableArrayRef;
67
68typedef const struct __CFAttributedString *CFAttributedStringRef;
69typedef struct __CFAttributedString *CFMutableAttributedStringRef;
70
71typedef const struct __CFAllocator * CFAllocatorRef;
72
73typedef const struct __CFString * CFStringRef;
74typedef struct __CFString * CFMutableStringRef;
75
76typedef const struct __CFDictionary * CFDictionaryRef;
77typedef struct __CFDictionary * CFMutableDictionaryRef;
78
79typedef struct CGImage *CGImageRef;
80
81typedef struct OpaqueJSValue* JSObjectRef;
82
83typedef JSObjectRef TTJSObjectRef;
84typedef unsigned int NSUInteger;
85
86CF_IMPLICIT_BRIDGING_DISABLED
87
88@interface I
89@property (nonatomic, readonly) void *ReturnsInnerPointer;
90@property (nonatomic, readonly) int *AlreadyReturnsInnerPointer NS_RETURNS_INNER_POINTER;
91@end
92
93@interface UIImage
94@property (nonatomic, readonly) CGImageRef CGImage CF_RETURNS_NOT_RETAINED;
95@end
96
97@interface NSData
98@property (nonatomic, readonly) void *bytes;
99@property (nonatomic, readonly) void **ptr_bytes __attribute__((availability(macosx,unavailable)));
100@end
101
102@interface NSMutableData
103@property (nonatomic, readonly) void *mutableBytes  __attribute__((deprecated)) __attribute__((unavailable));
104@end
105
106@interface JS
107@property (nonatomic, readonly) JSObjectRef JSObject;
108@property (nonatomic, readonly) TTJSObjectRef JSObject1;
109@property (nonatomic, readonly) JSObjectRef *JSObject2;
110@end
111
112// rdar://15044991
113typedef void *SecTrustRef;
114
115@interface NSURLProtectionSpace
116@property (readonly) SecTrustRef serverTrust NS_AVAILABLE;
117@property (nonatomic, readonly) void *FOO NS_AVAILABLE;
118@property (readonly) void * mitTrust NS_AVAILABLE;
119
120@property (readonly) void * mittiTrust;
121
122@property (readonly) SecTrustRef XserverTrust;
123
124@property (nonatomic, readonly) SecTrustRef FOO1 NS_AVAILABLE;
125
126+ (const NSURLProtectionSpace *)ProtectionSpace;
127
128// pointer personality functions
129@property NSUInteger (*hashFunction)(const void *item, NSUInteger (*size)(const void *item));
130@end
131
132@interface MustNotMigrateToInnerPointer
133@property (nonatomic) void *nono;
134@end
135