xref: /aosp_15_r20/external/clang/test/Analysis/uninit-msg-expr.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store=region -verify %s
2*67e74705SXin Li
3*67e74705SXin Li//===----------------------------------------------------------------------===//
4*67e74705SXin Li// The following code is reduced using delta-debugging from
5*67e74705SXin Li// Foundation.h (Mac OS X).
6*67e74705SXin Li//
7*67e74705SXin Li// It includes the basic definitions for the test cases below.
8*67e74705SXin Li// Not directly including Foundation.h directly makes this test case
9*67e74705SXin Li// both svelte and portable to non-Mac platforms.
10*67e74705SXin Li//===----------------------------------------------------------------------===//
11*67e74705SXin Li
12*67e74705SXin Litypedef signed char BOOL;
13*67e74705SXin Litypedef unsigned int NSUInteger;
14*67e74705SXin Litypedef struct _NSZone NSZone;
15*67e74705SXin Li@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
16*67e74705SXin Li@protocol NSObject  - (BOOL)isEqual:(id)object; @end
17*67e74705SXin Li@protocol NSCopying  - (id)copyWithZone:(NSZone *)zone; @end
18*67e74705SXin Li@protocol NSMutableCopying  - (id)mutableCopyWithZone:(NSZone *)zone; @end
19*67e74705SXin Li@protocol NSCoding  - (void)encodeWithCoder:(NSCoder *)aCoder; @end
20*67e74705SXin Li@interface NSObject <NSObject> {} @end
21*67e74705SXin Li@class NSString, NSData;
22*67e74705SXin Li@class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray;
23*67e74705SXin Litypedef struct {} NSFastEnumerationState;
24*67e74705SXin Li@protocol NSFastEnumeration
25*67e74705SXin Li- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len;
26*67e74705SXin Li@end
27*67e74705SXin Li@class NSData, NSIndexSet, NSString, NSURL;
28*67e74705SXin Li@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>
29*67e74705SXin Li- (NSUInteger)count;
30*67e74705SXin Li@end
31*67e74705SXin Li@interface NSArray (NSArrayCreation)
32*67e74705SXin Li+ (id)array;
33*67e74705SXin Li- (NSUInteger)length;
34*67e74705SXin Li- (void)addObject:(id)object;
35*67e74705SXin Li@end
36*67e74705SXin Liextern NSString * const NSUndoManagerCheckpointNotification;
37*67e74705SXin Li
38*67e74705SXin Li//===----------------------------------------------------------------------===//
39*67e74705SXin Li// Test cases.
40*67e74705SXin Li//===----------------------------------------------------------------------===//
41*67e74705SXin Li
42*67e74705SXin Liunsigned f1() {
43*67e74705SXin Li  NSString *aString;
44*67e74705SXin Li  return [aString length]; // expected-warning {{Receiver in message expression is an uninitialized value}}
45*67e74705SXin Li}
46*67e74705SXin Li
47*67e74705SXin Liunsigned f2() {
48*67e74705SXin Li  NSString *aString = 0;
49*67e74705SXin Li  return [aString length]; // no-warning
50*67e74705SXin Li}
51*67e74705SXin Li
52*67e74705SXin Livoid f3() {
53*67e74705SXin Li  NSMutableArray *aArray = [NSArray array];
54*67e74705SXin Li  NSString *aString;
55*67e74705SXin Li  [aArray addObject:aString]; // expected-warning {{Argument in message expression is an uninitialized value}}
56*67e74705SXin Li}
57