diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Analysis/retain-release-crashes.m | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/test/Analysis/retain-release-crashes.m b/test/Analysis/retain-release-crashes.m deleted file mode 100644 index 40171a39c9..0000000000 --- a/test/Analysis/retain-release-crashes.m +++ /dev/null @@ -1,62 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.cocoa.RetainCount,osx.cocoa.SelfInit,debug.ExprInspection -verify -w %s - -// This file contains crash regression tests; please do not remove any checkers -// from the RUN line because they may have been necessary to produce the crash. -// (Adding checkers should be fine.) - -void clang_analyzer_eval(int); - -@interface NSObject -- (id)init; -@end - -@interface Foo : NSObject -@end - -void touch(id, SEL); -id getObject(); -int getInt(); - - -@implementation Foo -// Bizarre crash related to the ExprEngine reaching a previously-seen -// ExplodedNode /during/ the processing of a message. Removing any -// parts of this test case seem not to trigger the crash any longer. -// <rdar://problem/12243648> -- (id)init { - // Step 0: properly call the superclass's initializer - self = [super init]; - if (!self) return self; - - // Step 1: Perturb the state with a new conjured symbol. - int value = getInt(); - - // Step 2: Loop. Some loops seem to trigger this, some don't. - // The original used a for-in loop. - while (--value) { - // Step 3: Make it impossible to retain-count 'self' by calling - // a function that takes a "callback" (in this case, a selector). - // Note that this does not trigger the crash if you use a message! - touch(self, @selector(hi)); - } - - // Step 4: Use 'self', so that we know it's non-nil. - [self bar]; - - // Step 5: Once again, make it impossible to retain-count 'self'... - // ...while letting ObjCSelfInitChecker mark this as an interesting - // message, since 'self' is an argument... - // ...but this time do it in such a way that we'll also assume that - // 'other' is non-nil. Once we've made the latter assumption, we - // should cache out. - id other = getObject(); - [other use:self withSelector:@selector(hi)]; - - // Step 6: Check that we did, in fact, keep the assumptions about 'self' - // and 'other' being non-nil. - clang_analyzer_eval(other != 0); // expected-warning{{TRUE}} - clang_analyzer_eval(self != 0); // expected-warning{{TRUE}} - - return self; -} -@end |