summaryrefslogtreecommitdiffstats
path: root/test/ARCMT/nonobjc-to-objc-cast.m
diff options
context:
space:
mode:
authorBen Langmuir <blangmuir@apple.com>2015-02-25 20:09:06 +0000
committerBen Langmuir <blangmuir@apple.com>2015-02-25 20:09:06 +0000
commitb378995a9f641f1bb51f2a6b0f4fde18ad4ab916 (patch)
tree4aecd804f13881ba310be48cded7f1b613f2509a /test/ARCMT/nonobjc-to-objc-cast.m
parent3cd9f9f0549506f591c0b0e260e244d3c58004ed (diff)
Allow (Object *)kMyGlobalCFObj casts without bridging
Previously we allowed these casts only for constants declared in system headers, which we assume are retain/release-neutral. Now also allow them for constants in user headers, treating them as +0. Practically, this means that we will now allow: id x = (id)kMyGlobalConst; But unlike with system headers we cannot mix them with +1 values: id y = (id)(b ? kMyGlobalConst : [Obj newValAtPlusOne]); // error id z = (id)(b ? kSystemGlobalConst: [Obj newValAtPlusOne]); // OK Thanks to John for suggesting this improvement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230534 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/ARCMT/nonobjc-to-objc-cast.m')
-rw-r--r--test/ARCMT/nonobjc-to-objc-cast.m11
1 files changed, 8 insertions, 3 deletions
diff --git a/test/ARCMT/nonobjc-to-objc-cast.m b/test/ARCMT/nonobjc-to-objc-cast.m
index b7d2a734b9..7913661787 100644
--- a/test/ARCMT/nonobjc-to-objc-cast.m
+++ b/test/ARCMT/nonobjc-to-objc-cast.m
@@ -7,6 +7,7 @@
typedef const struct __CFString * CFStringRef;
extern const CFStringRef kUTTypePlainText;
extern const CFStringRef kUTTypeRTF;
+extern CFStringRef kNonConst;
typedef const struct __CFAllocator * CFAllocatorRef;
typedef const struct __CFUUID * CFUUIDRef;
@@ -28,11 +29,15 @@ struct StrS {
@end
void f(BOOL b, id p) {
- NSString *str = (NSString *)kUTTypePlainText;
- str = b ? kUTTypeRTF : kUTTypePlainText;
- str = (NSString *)(b ? kUTTypeRTF : kUTTypePlainText);
+ NSString *str = (NSString *)kUTTypePlainText; // no change
+ str = b ? kUTTypeRTF : kUTTypePlainText; // no change
+ str = (NSString *)(b ? kUTTypeRTF : kUTTypePlainText); // no change
str = (NSString *)p; // no change.
+ str = (NSString *)kNonConst;
+ str = b ? kUTTypeRTF : kNonConst;
+ str = (NSString *)(b ? kUTTypeRTF : kNonConst);
+
CFUUIDRef _uuid;
NSString *_uuidString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid);
_uuidString = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, _uuid) autorelease];