llvm-project

Форк
0
/
nonobjc-to-objc-cast.m.result 
83 строки · 2.4 Кб
1
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
2
// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t
3
// RUN: diff %t %s.result
4

5
#include "Common.h"
6

7
typedef const struct __CFString * CFStringRef;
8
extern const CFStringRef kUTTypePlainText;
9
extern const CFStringRef kUTTypeRTF;
10
extern CFStringRef kNonConst;
11

12
typedef const struct __CFAllocator * CFAllocatorRef;
13
typedef const struct __CFUUID * CFUUIDRef;
14

15
extern const CFAllocatorRef kCFAllocatorDefault;
16

17
extern CFStringRef CFUUIDCreateString(CFAllocatorRef alloc, CFUUIDRef uuid);
18

19
struct StrS {
20
  CFStringRef sref_member;
21
};
22

23
@interface NSString : NSObject {
24
  CFStringRef sref;
25
  struct StrS *strS;
26
}
27
-(id)string;
28
-(id)newString;
29
@end
30

31
void f(BOOL b, id p) {
32
  NSString *str = (NSString *)kUTTypePlainText; // no change
33
  str = b ? kUTTypeRTF : kUTTypePlainText; // no change
34
  str = (NSString *)(b ? kUTTypeRTF : kUTTypePlainText); // no change
35
  str = (NSString *)p; // no change.
36

37
  str = (__bridge NSString *)kNonConst;
38
  str = (__bridge NSString *)(b ? kUTTypeRTF : kNonConst);
39
  str = (__bridge NSString *)(b ? kUTTypeRTF : kNonConst);
40

41
  CFUUIDRef   _uuid;
42
  NSString *_uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid));
43
  _uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, _uuid));
44
  _uuidString = CFBridgingRelease(CFRetain(_uuid));
45
}
46

47
@implementation NSString (StrExt)
48
- (NSString *)stringEscapedAsURI {
49
  CFStringRef str = (__bridge CFStringRef)self;
50
  CFStringRef str2 = (__bridge CFStringRef)(self);
51
  return self;
52
}
53
@end
54

55
@implementation NSString
56
-(id)string {
57
  if (0)
58
    return (__bridge id)(sref);
59
  else
60
    return (__bridge id)(strS->sref_member);
61
}
62
-(id)newString { return 0; }
63
@end
64

65
extern void consumeParam(CFStringRef CF_CONSUMED p);
66

67
void f2(NSString *s) {
68
  CFStringRef ref = (__bridge CFStringRef)([s string]);
69
  ref = (__bridge CFStringRef)[s string];
70
  ref = (__bridge CFStringRef)(s.string);
71
  ref = CFBridgingRetain([NSString new]);
72
  ref = CFBridgingRetain([s newString]);
73
  ref = (CFStringRef)CFBridgingRetain([NSString new]);
74
  ref = CFBridgingRetain([[NSString alloc] init]);
75
  ref = CFBridgingRetain([s string]);
76
  ref = (CFStringRef)CFBridgingRetain([s string]);
77
  ref = CFBridgingRetain([s string]);
78
  ref = CFBridgingRetain(s);
79
  ref = CFBridgingRetain(s);
80

81
  consumeParam((CFStringRef)CFBridgingRetain(s));
82
  consumeParam(CFBridgingRetain(s));
83
}
84

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.