1// RUN: %clang_analyze_cc1 -fblocks -analyzer-checker=core \ 2// RUN: -analyzer-checker=nullability.NullPassedToNonnull \ 3// RUN: -analyzer-checker=nullability.NullReturnedFromNonnull \ 4// RUN: -analyzer-checker=nullability.NullablePassedToNonnull \ 5// RUN: -analyzer-checker=nullability.NullableReturnedFromNonnull \ 6// RUN: -analyzer-checker=nullability.NullableDereferenced \ 7// RUN: -analyzer-checker=debug.ExprInspection \ 8// RUN: -analyzer-output=text -verify %s 9// RUN: %clang_analyze_cc1 -fblocks -analyzer-checker=core \ 10// RUN: -analyzer-checker=nullability.NullPassedToNonnull \ 11// RUN: -analyzer-checker=nullability.NullReturnedFromNonnull \ 12// RUN: -analyzer-checker=nullability.NullablePassedToNonnull \ 13// RUN: -analyzer-checker=nullability.NullableReturnedFromNonnull \ 14// RUN: -analyzer-checker=nullability.NullableDereferenced \ 15// RUN: -analyzer-output=plist -o %t.plist %s 16// RUN: %normalize_plist <%t.plist \ 17// RUN: | diff -ub %S/Inputs/expected-plists/nullability-notes.m.plist - 18 19void clang_analyzer_warnOnDeadSymbol(id); 20 21#include "Inputs/system-header-simulator-for-nullability.h" 22 23void takesNonnull(NSObject *_Nonnull y); 24 25@interface ClassWithProperties: NSObject 26@property(copy, nullable) NSObject *x; // plist check ensures no control flow piece from here to 'self.x'. 27-(void) method; 28@end; 29@implementation ClassWithProperties 30-(void) method { 31 clang_analyzer_warnOnDeadSymbol(self); 32 // no-crash 33 NSObject *x = self.x; // expected-note{{Nullability 'nullable' is inferred}} 34 // expected-warning@-1{{SYMBOL DEAD}} 35 // expected-note@-2 {{SYMBOL DEAD}} 36 takesNonnull(x); // expected-warning{{Nullable pointer is passed to a callee that requires a non-null 1st parameter}} 37 // expected-note@-1{{Nullable pointer is passed to a callee that requires a non-null 1st parameter}} 38} 39@end 40 41