41 lines · plain
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 %s9// 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 %s16// 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: NSObject26@property(copy, nullable) NSObject *x; // plist check ensures no control flow piece from here to 'self.x'.27-(void) method;28@end;29@implementation ClassWithProperties30-(void) method {31 clang_analyzer_warnOnDeadSymbol(self);32 // no-crash33 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@end40 41