xref: /aosp_15_r20/external/clang/test/ARCMT/nonobjc-to-objc-cast.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
2*67e74705SXin Li// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t
3*67e74705SXin Li// RUN: diff %t %s.result
4*67e74705SXin Li
5*67e74705SXin Li#include "Common.h"
6*67e74705SXin Li
7*67e74705SXin Litypedef const struct __CFString * CFStringRef;
8*67e74705SXin Liextern const CFStringRef kUTTypePlainText;
9*67e74705SXin Liextern const CFStringRef kUTTypeRTF;
10*67e74705SXin Liextern CFStringRef kNonConst;
11*67e74705SXin Li
12*67e74705SXin Litypedef const struct __CFAllocator * CFAllocatorRef;
13*67e74705SXin Litypedef const struct __CFUUID * CFUUIDRef;
14*67e74705SXin Li
15*67e74705SXin Liextern const CFAllocatorRef kCFAllocatorDefault;
16*67e74705SXin Li
17*67e74705SXin Liextern CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid);
18*67e74705SXin Li
19*67e74705SXin Listruct StrS {
20*67e74705SXin Li  CFStringRef sref_member;
21*67e74705SXin Li};
22*67e74705SXin Li
23*67e74705SXin Li@interface NSString : NSObject {
24*67e74705SXin Li  CFStringRef sref;
25*67e74705SXin Li  struct StrS *strS;
26*67e74705SXin Li}
27*67e74705SXin Li-(id)string;
28*67e74705SXin Li-(id)newString;
29*67e74705SXin Li@end
30*67e74705SXin Li
31*67e74705SXin Livoid f(BOOL b, id p) {
32*67e74705SXin Li  NSString *str = (NSString *)kUTTypePlainText; // no change
33*67e74705SXin Li  str = b ? kUTTypeRTF : kUTTypePlainText; // no change
34*67e74705SXin Li  str = (NSString *)(b ? kUTTypeRTF : kUTTypePlainText); // no change
35*67e74705SXin Li  str = (NSString *)p; // no change.
36*67e74705SXin Li
37*67e74705SXin Li  str = (NSString *)kNonConst;
38*67e74705SXin Li  str = b ? kUTTypeRTF : kNonConst;
39*67e74705SXin Li  str = (NSString *)(b ? kUTTypeRTF : kNonConst);
40*67e74705SXin Li
41*67e74705SXin Li  CFUUIDRef   _uuid;
42*67e74705SXin Li  NSString *_uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid);
43*67e74705SXin Li  _uuidString = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid) autorelease];
44*67e74705SXin Li  _uuidString = CFRetain(_uuid);
45*67e74705SXin Li}
46*67e74705SXin Li
47*67e74705SXin Li@implementation NSString (StrExt)
48*67e74705SXin Li- (NSString *)stringEscapedAsURI {
49*67e74705SXin Li  CFStringRef str = (CFStringRef)self;
50*67e74705SXin Li  CFStringRef str2 = self;
51*67e74705SXin Li  return self;
52*67e74705SXin Li}
53*67e74705SXin Li@end
54*67e74705SXin Li
55*67e74705SXin Li@implementation NSString
56*67e74705SXin Li-(id)string {
57*67e74705SXin Li  if (0)
58*67e74705SXin Li    return sref;
59*67e74705SXin Li  else
60*67e74705SXin Li    return strS->sref_member;
61*67e74705SXin Li}
62*67e74705SXin Li-(id)newString { return 0; }
63*67e74705SXin Li@end
64*67e74705SXin Li
65*67e74705SXin Liextern void consumeParam(CFStringRef CF_CONSUMED p);
66*67e74705SXin Li
67*67e74705SXin Livoid f2(NSString *s) {
68*67e74705SXin Li  CFStringRef ref = [s string];
69*67e74705SXin Li  ref = (CFStringRef)[s string];
70*67e74705SXin Li  ref = s.string;
71*67e74705SXin Li  ref = [NSString new];
72*67e74705SXin Li  ref = [s newString];
73*67e74705SXin Li  ref = (CFStringRef)[NSString new];
74*67e74705SXin Li  ref = [[NSString alloc] init];
75*67e74705SXin Li  ref = [[s string] retain];
76*67e74705SXin Li  ref = CFRetain((CFStringRef)[s string]);
77*67e74705SXin Li  ref = CFRetain([s string]);
78*67e74705SXin Li  ref = CFRetain(s);
79*67e74705SXin Li  ref = [s retain];
80*67e74705SXin Li
81*67e74705SXin Li  consumeParam((CFStringRef)s);
82*67e74705SXin Li  consumeParam(s);
83*67e74705SXin Li}
84