Skip to content
Snippets Groups Projects
Commit 5d640479 authored by Devin Coughlin's avatar Devin Coughlin
Browse files

[analyzer] ObjCDeallocChecker: Only check for nil-out when type is retainable.

This fixes a crash when setting a property of struct type in -dealloc.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@262659 91177308-0d34-0410-b5e6-96231b3b80d8
parent 19447978
No related branches found
No related tags found
No related merge requests found
......@@ -860,9 +860,13 @@ ObjCDeallocChecker::getValueReleasedByNillingOut(const ObjCMethodCall &M,
if (!ReceiverVal.isValid())
return nullptr;
// Is the first argument nil?
if (M.getNumArgs() == 0)
return nullptr;
if (!M.getArgExpr(0)->getType()->isObjCRetainableType())
return nullptr;
// Is the first argument nil?
SVal Arg = M.getArgSVal(0);
ProgramStateRef notNilState, nilState;
std::tie(notNilState, nilState) =
......
......@@ -664,6 +664,25 @@ void ReleaseMe(id arg);
@end
#endif
struct SomeStruct {
int f;
};
@interface ZeroOutStructWithSetter : NSObject
@property(assign) struct SomeStruct s;
@end
@implementation ZeroOutStructWithSetter
- (void)dealloc {
struct SomeStruct zeroedS;
zeroedS.f = 0;
self.s = zeroedS;
#if NON_ARC
[super dealloc];
#endif
}
@end
#if NON_ARC
@interface ReleaseIvarInArray : NSObject {
NSObject *_array[3];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment