summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2017-08-17 16:48:03 +0000
committerHans Wennborg <hans@hanshq.net>2017-08-17 16:48:03 +0000
commitf1c97542ff84f0a49cdc2af11cc30d499cd9adba (patch)
tree6fc7166fe357352fc47877e05e52c84aab926ccd /test
parentaf145231499333600c48437ed838de2903172704 (diff)
Merging r310672:
------------------------------------------------------------------------ r310672 | ahatanak | 2017-08-10 17:06:49 -0700 (Thu, 10 Aug 2017) | 7 lines [Sema][ObjC] Fix spurious -Wcast-qual warnings. We do not meaningfully track object const-ness of Objective-C object types. Silence the -Wcast-qual warning that is issued when casting to or from Objective-C object types results in losing const qualification. rdar://problem/33807915 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@311095 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/SemaObjC/illegal-nonarc-bridged-cast.m17
1 files changed, 15 insertions, 2 deletions
diff --git a/test/SemaObjC/illegal-nonarc-bridged-cast.m b/test/SemaObjC/illegal-nonarc-bridged-cast.m
index f3406ef983..23c7b96e37 100644
--- a/test/SemaObjC/illegal-nonarc-bridged-cast.m
+++ b/test/SemaObjC/illegal-nonarc-bridged-cast.m
@@ -1,8 +1,9 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fblocks -verify %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fblocks -Wcast-qual -verify %s
// rdar://10597832
typedef const void *CFTypeRef;
typedef const struct __CFString *CFStringRef;
+@class NSString;
@interface NSString
@end
@@ -18,7 +19,7 @@ NSString *CreateNSString();
void from_cf() {
id obj1 = (__bridge_transfer id)CFCreateSomething(); // expected-warning {{'__bridge_transfer' casts have no effect when not using ARC}}
id obj2 = (__bridge_transfer NSString*)CFCreateString(); // expected-warning {{'__bridge_transfer' casts have no effect when not using ARC}}
- (__bridge int*)CFCreateSomething(); // expected-warning {{expression result unused}}
+ (__bridge int*)CFCreateSomething(); // expected-warning {{expression result unused}} expected-warning {{cast from 'const void *' to 'int *' drops const qualifier}}
id obj3 = (__bridge id)CFGetSomething();
id obj4 = (__bridge NSString*)CFGetString();
}
@@ -41,3 +42,15 @@ void to_cf_ignored(id obj) {
CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething(); // no-warning
CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething(); // no-warning
}
+
+// Check that clang doesn't warn about dropping const from Objective-C object
+// types.
+void test_wcast_qual() {
+ CFStringRef c;
+ NSString *n0 = (NSString *)c;
+ NSString **n1 = (NSString **)&c;
+ const NSString *n2;
+ const NSString **n3;
+ void *p0 = (void *)n2;
+ void **p1 = (void **)n3;
+}