]> granicus.if.org Git - clang/commit
[analyzer] Nullability: Treat nil _Nonnull ivar as invariant violation.
authorDevin Coughlin <dcoughlin@apple.com>
Wed, 13 Apr 2016 00:41:54 +0000 (00:41 +0000)
committerDevin Coughlin <dcoughlin@apple.com>
Wed, 13 Apr 2016 00:41:54 +0000 (00:41 +0000)
commit215d5ab34a51bfb5f8bfe13b1c7800ae01462e63
tree23cf791664dea27f41f32acefbde535941f5c037
parente4f3465928c4832e338345acf6d2a09885183416
[analyzer] Nullability: Treat nil _Nonnull ivar as invariant violation.

Treat a _Nonnull ivar that is nil as an invariant violation in a similar
fashion to how a nil _Nonnull parameter is treated as a precondition violation.

This avoids warning on defensive returns of nil on defensive internal
checks, such as the following common idiom:

@class InternalImplementation
@interface PublicClass {
  InternalImplementation * _Nonnull _internal;
}
-(id _Nonnull)foo;
@end

@implementation PublicClass
-(id _Nonnull)foo {
  if (!_internal)
    return nil; // no-warning

  return [_internal foo];
}
@end

rdar://problem/24485171

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266157 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
test/Analysis/nullability.mm