Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=basic -verify %s
      2 // RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=range -verify %s
      3 
      4 #include <stdarg.h>
      5 
      6 //===----------------------------------------------------------------------===//
      7 // The following code is reduced using delta-debugging from
      8 // Foundation.h (Mac OS X).
      9 //
     10 // It includes the basic definitions for the test cases below.
     11 // Not directly including Foundation.h directly makes this test case 
     12 // both svelte and portable to non-Mac platforms.
     13 //===----------------------------------------------------------------------===//
     14 
     15 typedef signed char BOOL;
     16 typedef unsigned int NSUInteger;
     17 typedef struct _NSZone NSZone;
     18 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
     19 @protocol NSObject  - (BOOL)isEqual:(id)object;
     20 @end  @protocol NSCopying  - (id)copyWithZone:(NSZone *)zone;
     21 @end  @protocol NSMutableCopying  - (id)mutableCopyWithZone:(NSZone *)zone; @end
     22 @protocol NSCoding  - (void)encodeWithCoder:(NSCoder *)aCoder; @end
     23 @interface NSObject <NSObject> {} @end
     24 extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
     25 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>
     26 - (NSUInteger)length;
     27 + (id)stringWithFormat:(NSString *)format, ...;
     28 @end
     29 @interface NSSimpleCString : NSString {} @end
     30 @interface NSConstantString : NSSimpleCString @end
     31 extern void *_NSConstantStringClassReference;
     32 typedef double NSTimeInterval;
     33 @interface NSDate : NSObject <NSCopying, NSCoding>  - (NSTimeInterval)timeIntervalSinceReferenceDate; @end
     34 @class NSString, NSDictionary, NSArray;
     35 @interface NSException : NSObject <NSCopying, NSCoding> {}
     36 + (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo;
     37 - (void)raise;
     38 @end
     39 @interface NSException (NSExceptionRaisingConveniences)
     40 + (void)raise:(NSString *)name format:(NSString *)format, ...;
     41 + (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList;
     42 @end
     43 
     44 enum {NSPointerFunctionsStrongMemory = (0 << 0),     NSPointerFunctionsZeroingWeakMemory = (1 << 0),     NSPointerFunctionsOpaqueMemory = (2 << 0),     NSPointerFunctionsMallocMemory = (3 << 0),     NSPointerFunctionsMachVirtualMemory = (4 << 0),        NSPointerFunctionsObjectPersonality = (0 << 8),     NSPointerFunctionsOpaquePersonality = (1 << 8),     NSPointerFunctionsObjectPointerPersonality = (2 << 8),     NSPointerFunctionsCStringPersonality = (3 << 8),     NSPointerFunctionsStructPersonality = (4 << 8),     NSPointerFunctionsIntegerPersonality = (5 << 8),      NSPointerFunctionsCopyIn = (1 << 16), };
     45 
     46 //===----------------------------------------------------------------------===//
     47 // Test cases.
     48 //===----------------------------------------------------------------------===//
     49 
     50 int f1(int *x, NSString* s) {
     51   
     52   if (x) ++x;
     53   
     54   [NSException raise:@"Blah" format:[NSString stringWithFormat:@"Blah %@", s]];
     55   
     56   return *x; // no-warning
     57 }
     58 
     59 int f2(int *x, ...) {
     60   
     61   if (x) ++x;
     62   va_list alist;
     63   va_start(alist, x);
     64   
     65   [NSException raise:@"Blah" format:@"Blah %@" arguments:alist];
     66   
     67   return *x; // no-warning
     68 }
     69 
     70 int f3(int* x) {
     71   
     72   if (x) ++x;
     73   
     74   [[NSException exceptionWithName:@"My Exception" reason:@"Want to test exceptions." userInfo:0] raise];
     75 
     76   return *x; // no-warning
     77 }
     78 
     79