diff --git a/infer/src/checkers/liveness.ml b/infer/src/checkers/liveness.ml index 3aa20a520..6a1369b6a 100644 --- a/infer/src/checkers/liveness.ml +++ b/infer/src/checkers/liveness.ml @@ -126,7 +126,7 @@ let checker {Callbacks.tenv; summary; proc_desc} : Specs.summary = not ( Pvar.is_frontend_tmp pvar || Pvar.is_return pvar || Pvar.is_global pvar || Domain.mem (Var.of_pvar pvar) live_vars || Procdesc.is_captured_var proc_desc pvar - || is_scope_guard typ ) + || is_scope_guard typ || Procdesc.has_modify_in_block_attr proc_desc pvar ) in let log_report pvar loc = let issue_id = IssueType.dead_store.unique_id in diff --git a/infer/tests/codetoanalyze/objc/liveness/ObserverExample.m b/infer/tests/codetoanalyze/objc/liveness/ObserverExample.m new file mode 100644 index 000000000..40c1d5c5c --- /dev/null +++ b/infer/tests/codetoanalyze/objc/liveness/ObserverExample.m @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014 - present Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +@interface ObervserExample : NSObject + +@end + +@implementation ObervserExample + +- (void)observer_no_dead_store:(id)object { + __block id observer = [[NSNotificationCenter defaultCenter] + addObserverForName:nil + object:object + queue:nil + usingBlock:^(NSNotification* note) { + [[NSNotificationCenter defaultCenter] removeObserver:observer + name:nil + object:nil]; + }]; +} + +@end