summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-07-18 07:44:45 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-07-18 07:44:45 +0000
commit73a0d32df546c9780bdfa9a5a298467d07e4458c (patch)
treeb35a2d356f3b7e08d084087c7f22fe0f8ab124a3 /clang/test
parentba4cc01a1fb1e11689782e21cc5413690ade128a (diff)
downloadbcm5719-llvm-73a0d32df546c9780bdfa9a5a298467d07e4458c.tar.gz
bcm5719-llvm-73a0d32df546c9780bdfa9a5a298467d07e4458c.zip
[arcmt] NSInvocation's [get/set]ReturnValue and [get/set]Argument are only safe
with __unsafe_unretained parameters. Emit error for strong/weak ones. rdar://9206226 llvm-svn: 135381
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/ARCMT/check-api.m43
1 files changed, 43 insertions, 0 deletions
diff --git a/clang/test/ARCMT/check-api.m b/clang/test/ARCMT/check-api.m
new file mode 100644
index 00000000000..47adb797112
--- /dev/null
+++ b/clang/test/ARCMT/check-api.m
@@ -0,0 +1,43 @@
+// RUN: %clang_cc1 -arcmt-check -verify -triple x86_64-apple-macosx10.7 -fobjc-nonfragile-abi %s
+
+#include "Common.h"
+
+@interface NSInvocation : NSObject
+- (void)getReturnValue:(void *)retLoc;
+- (void)setReturnValue:(void *)retLoc;
+
+- (void)getArgument:(void *)argumentLocation atIndex:(int)idx;
+- (void)setArgument:(void *)argumentLocation atIndex:(int)idx;
+@end
+
+@interface Test
+@end
+
+@implementation Test {
+ id strong_id;
+ __weak id weak_id;
+ __unsafe_unretained id unsafe_id;
+ int arg;
+}
+- (void) test:(NSInvocation *)invok {
+ [invok getReturnValue:&strong_id]; // expected-error {{NSInvocation's getReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok getReturnValue:&weak_id]; // expected-error {{NSInvocation's getReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok getReturnValue:&unsafe_id];
+ [invok getReturnValue:&arg];
+
+ [invok setReturnValue:&strong_id]; // expected-error {{NSInvocation's setReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok setReturnValue:&weak_id]; // expected-error {{NSInvocation's setReturnValue is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok setReturnValue:&unsafe_id];
+ [invok setReturnValue:&arg];
+
+ [invok getArgument:&strong_id atIndex:0]; // expected-error {{NSInvocation's getArgument is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok getArgument:&weak_id atIndex:0]; // expected-error {{NSInvocation's getArgument is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok getArgument:&unsafe_id atIndex:0];
+ [invok getArgument:&arg atIndex:0];
+
+ [invok setArgument:&strong_id atIndex:0]; // expected-error {{NSInvocation's setArgument is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok setArgument:&weak_id atIndex:0]; // expected-error {{NSInvocation's setArgument is not safe to be used with an object with ownership other than __unsafe_unretained}}
+ [invok setArgument:&unsafe_id atIndex:0];
+ [invok setArgument:&arg atIndex:0];
+}
+@end
OpenPOWER on IntegriCloud