summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-08-10 18:55:58 +0000
committerAnna Zaks <ganna@apple.com>2012-08-10 18:55:58 +0000
commit75f49a9c07b671c7d16f8651b977eadfb260f761 (patch)
treee24eae319b120770df514c0c72101d52c474f8fa /clang/test
parent920af014c1687ba7250dc9a97e08327872d70b9b (diff)
downloadbcm5719-llvm-75f49a9c07b671c7d16f8651b977eadfb260f761.tar.gz
bcm5719-llvm-75f49a9c07b671c7d16f8651b977eadfb260f761.zip
[analyzer] Track if a region can be a subclass in the dynamic type info.
When object is allocated with alloc or init, we assume it cannot be a subclass (currently used only for bifurcation purposes). llvm-svn: 161682
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/inlining/InlineObjCClassMethod.m2
-rw-r--r--clang/test/Analysis/inlining/InlineObjCInstanceMethod.h10
-rw-r--r--clang/test/Analysis/inlining/InlineObjCInstanceMethod.m2
-rw-r--r--clang/test/Analysis/inlining/ObjCDynTypePopagation.m51
-rw-r--r--clang/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m2
5 files changed, 27 insertions, 40 deletions
diff --git a/clang/test/Analysis/inlining/InlineObjCClassMethod.m b/clang/test/Analysis/inlining/InlineObjCClassMethod.m
index a5a1369bfe5..7e8b51fe0be 100644
--- a/clang/test/Analysis/inlining/InlineObjCClassMethod.m
+++ b/clang/test/Analysis/inlining/InlineObjCClassMethod.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=dynamic -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=dynamic-bifurcate -verify %s
// Test inlining of ObjC class methods.
diff --git a/clang/test/Analysis/inlining/InlineObjCInstanceMethod.h b/clang/test/Analysis/inlining/InlineObjCInstanceMethod.h
index bae80c60ec6..715b89eff8c 100644
--- a/clang/test/Analysis/inlining/InlineObjCInstanceMethod.h
+++ b/clang/test/Analysis/inlining/InlineObjCInstanceMethod.h
@@ -11,6 +11,7 @@ typedef struct objc_object {
@protocol NSObject - (BOOL)isEqual:(id)object; @end
@interface NSObject <NSObject> {}
+(id)alloc;
++(id)new;
-(id)init;
-(id)autorelease;
-(id)copy;
@@ -24,3 +25,12 @@ typedef struct objc_object {
@interface PublicSubClass : PublicClass
@end
+
+@interface PublicParent : NSObject
+- (int)getZeroOverridden;
+@end
+
+@interface PublicSubClass2 : PublicParent
+- (int) getZeroOverridden;
+@end
+
diff --git a/clang/test/Analysis/inlining/InlineObjCInstanceMethod.m b/clang/test/Analysis/inlining/InlineObjCInstanceMethod.m
index d7b184e0020..31b6d5baa6f 100644
--- a/clang/test/Analysis/inlining/InlineObjCInstanceMethod.m
+++ b/clang/test/Analysis/inlining/InlineObjCInstanceMethod.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=dynamic -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-ipa=dynamic-bifurcate -verify %s
#include "InlineObjCInstanceMethod.h"
diff --git a/clang/test/Analysis/inlining/ObjCDynTypePopagation.m b/clang/test/Analysis/inlining/ObjCDynTypePopagation.m
index 960449758bf..4faaa2cb303 100644
--- a/clang/test/Analysis/inlining/ObjCDynTypePopagation.m
+++ b/clang/test/Analysis/inlining/ObjCDynTypePopagation.m
@@ -1,28 +1,12 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=dynamic -verify %s
-
-typedef signed char BOOL;
-typedef struct objc_class *Class;
-typedef struct objc_object {
- Class isa;
-} *id;
-
-void clang_analyzer_eval(BOOL);
-
-@protocol NSObject - (BOOL)isEqual:(id)object; @end
-@interface NSObject <NSObject> {}
-+(id)alloc;
--(id)init;
-+(id)new;
--(id)autorelease;
--(id)copy;
-- (Class)class;
--(id)retain;
-@end
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=dynamic-bifurcate -verify %s
-@interface MyParent : NSObject
-- (int)getZeroOverridden;
-@end
-@implementation MyParent
+#include "InlineObjCInstanceMethod.h"
+
+void clang_analyzer_eval(int);
+
+PublicSubClass2 *getObj();
+
+@implementation PublicParent
- (int) getZeroOverridden {
return 1;
}
@@ -31,19 +15,12 @@ void clang_analyzer_eval(BOOL);
}
@end
-@interface MyClass : MyParent
-- (int) getZeroOverridden;
-@end
-
-MyClass *getObj();
-
-@implementation MyClass
+@implementation PublicSubClass2
- (int) getZeroOverridden {
return 0;
}
/* Test that we get the right type from call to alloc. */
-
+ (void) testAllocSelf {
id a = [self alloc];
clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
@@ -51,7 +28,7 @@ MyClass *getObj();
+ (void) testAllocClass {
- id a = [MyClass alloc];
+ id a = [PublicSubClass2 alloc];
clang_analyzer_eval([a getZeroOverridden] == 0); // expected-warning{{TRUE}}
}
@@ -79,19 +56,19 @@ MyClass *getObj();
// Casting to parent should not pessimize the dynamic type.
+ (void) testCastToParent {
id a = [[self alloc] init];
- MyParent *p = a;
+ PublicParent *p = a;
clang_analyzer_eval([p getZeroOverridden] == 0); // expected-warning{{TRUE}}
}
// The type of parameter gets used.
-+ (void)testTypeFromParam:(MyParent*) p {
++ (void)testTypeFromParam:(PublicParent*) p {
clang_analyzer_eval([p getZero] == 0); // expected-warning{{TRUE}}
}
// Test implicit cast.
// Note, in this case, p could also be a subclass of MyParent.
+ (void) testCastFromId:(id) a {
- MyParent *p = a;
+ PublicParent *p = a;
clang_analyzer_eval([p getZero] == 0); // expected-warning{{TRUE}}
}
@end
@@ -99,7 +76,7 @@ MyClass *getObj();
// TODO: Would be nice to handle the case of dynamically obtained class info
// as well. We need a MemRegion for class types for this.
int testDynamicClass(BOOL coin) {
- Class AllocClass = (coin ? [NSObject class] : [MyClass class]);
+ Class AllocClass = (coin ? [NSObject class] : [PublicSubClass2 class]);
id x = [[AllocClass alloc] init];
if (coin)
return [x getZero];
diff --git a/clang/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m b/clang/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m
index d337ee4b164..739e10f2a5f 100644
--- a/clang/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m
+++ b/clang/test/Analysis/inlining/ObjCImproperDynamictallyDetectableCast.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=dynamic -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-ipa=dynamic-bifurcate -verify %s
typedef signed char BOOL;
@protocol NSObject - (BOOL)isEqual:(id)object; @end
OpenPOWER on IntegriCloud