]> granicus.if.org Git - clang/commitdiff
[Static Analyzer] Added an XFAIL test for inlining when the type inference involves...
authorGabor Horvath <xazax.hun@gmail.com>
Tue, 15 Sep 2015 23:14:01 +0000 (23:14 +0000)
committerGabor Horvath <xazax.hun@gmail.com>
Tue, 15 Sep 2015 23:14:01 +0000 (23:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247739 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/DynamicTypePropagation.m [new file with mode: 0644]

diff --git a/test/Analysis/DynamicTypePropagation.m b/test/Analysis/DynamicTypePropagation.m
new file mode 100644 (file)
index 0000000..7db8660
--- /dev/null
@@ -0,0 +1,58 @@
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.ObjCGenerics -verify %s
+// XFAIL: *
+
+#if !__has_feature(objc_generics)
+#  error Compiler does not support Objective-C generics?
+#endif
+
+#define nil 0
+typedef unsigned long NSUInteger;
+typedef int BOOL;
+
+@protocol NSCopying
+@end
+
+__attribute__((objc_root_class))
+@interface NSObject
+- (void) myFunction:(int*)p myParam:(int) n;
+@end
+
+@interface MyType : NSObject <NSCopying>
+- (void) myFunction:(int*)p myParam:(int) n;
+@end
+
+@interface NSArray<ObjectType> : NSObject
+- (BOOL)contains:(ObjectType)obj;
+- (ObjectType)getObjAtIndex:(NSUInteger)idx;
+- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx;
+@property(readonly) ObjectType firstObject;
+@end
+
+@implementation NSObject
+- (void) myFunction:(int*)p myParam:(int) n {
+  (void)*p;// no warning
+}
+@end
+
+@implementation MyType
+- (void) myFunction:(int*)p myParam:(int) n {
+  int i = 5/n;  // expected-warning {{}}
+  (void)i;
+}
+@end
+
+void testReturnType(NSArray<MyType *> *arr) {
+  NSArray *erased = arr;
+  NSObject *element = [erased firstObject];
+  // TODO: myFunction currently dispatches to NSObject. Make it dispatch to
+  // MyType instead!
+  [element myFunction:0 myParam:0 ];
+}
+
+void testArgument(NSArray<MyType *> *arr, id element) {
+  NSArray *erased = arr;
+  [erased contains: element];
+  // TODO: myFunction currently is not dispatched to MyType. Make it dispatch to
+  // MyType!
+  [element myFunction:0 myParam:0 ];
+}