diff options
author | Ben Langmuir <blangmuir@apple.com> | 2015-02-25 20:09:06 +0000 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2015-02-25 20:09:06 +0000 |
commit | b378995a9f641f1bb51f2a6b0f4fde18ad4ab916 (patch) | |
tree | 4aecd804f13881ba310be48cded7f1b613f2509a /test/ARCMT/nonobjc-to-objc-cast.m | |
parent | 3cd9f9f0549506f591c0b0e260e244d3c58004ed (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.m | 11 |
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]; |