1*184c6242SDominic Chen// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -fblocks -analyzer-output=text -verify %s 240c74c6dSAnna Zaks 340c74c6dSAnna Zaks#include "../Inputs/system-header-simulator-objc.h" 440c74c6dSAnna Zaks 540c74c6dSAnna Zaks@interface NSDictionary : NSObject 640c74c6dSAnna Zaks- (NSUInteger)count; 740c74c6dSAnna Zaks- (id)objectForKey:(id)aKey; 840c74c6dSAnna Zaks- (NSEnumerator *)keyEnumerator; 940c74c6dSAnna Zaks@end 1040c74c6dSAnna Zaks@interface NSMutableDictionary : NSDictionary 1140c74c6dSAnna Zaks- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey; 1240c74c6dSAnna Zaks@end 1340c74c6dSAnna Zaks 1440c74c6dSAnna Zaksvoid testBOOLMacro(BOOL b) { 1540c74c6dSAnna Zaks if (b == YES) { // expected-note {{Assuming 'b' is equal to YES}} 1640c74c6dSAnna Zaks // expected-note@-1 {{Taking true branch}} 1740c74c6dSAnna Zaks char *p = NULL;// expected-note {{'p' initialized to a null pointer value}} 1840c74c6dSAnna Zaks *p = 7; // expected-warning {{Dereference of null pointer (loaded from variable 'p')}} 1940c74c6dSAnna Zaks // expected-note@-1 {{Dereference of null pointer (loaded from variable 'p')}} 2040c74c6dSAnna Zaks } 2140c74c6dSAnna Zaks} 2240c74c6dSAnna Zaks 2340c74c6dSAnna Zaksvoid testNilMacro(NSMutableDictionary *d, NSObject *o) { 2440c74c6dSAnna Zaks if (o == nil) // expected-note {{Assuming 'o' is equal to nil}} 2540c74c6dSAnna Zaks // expected-note@-1 {{Taking true branch}} 2640c74c6dSAnna Zaks [d setObject:o forKey:[o description]]; // expected-warning {{Key argument to 'setObject:forKey:' cannot be nil}} 2740c74c6dSAnna Zaks // expected-note@-1 {{'description' not called because the receiver is nil}} 2840c74c6dSAnna Zaks // expected-note@-2 {{Key argument to 'setObject:forKey:' cannot be nil}} 2940c74c6dSAnna Zaks 3040c74c6dSAnna Zaks return; 3140c74c6dSAnna Zaks} 32