misc-ps.m revision d427023c334fe03105d9359711a3df4d6f23b344
1// RUN: clang -analyze -checker-cfref --verify -fblocks %s 2 3// Reduced test case from crash in <rdar://problem/6253157> 4@class NSObject; 5@interface A @end 6@implementation A 7- (void)foo:(void (^)(NSObject *x))block { 8 if (!((block != ((void *)0)))) {} 9} 10@end 11 12// Reduced test case from crash in PR 2796; 13// http://llvm.org/bugs/show_bug.cgi?id=2796 14 15unsigned foo(unsigned x) { return __alignof__((x)) + sizeof(x); } 16 17// Improvement to path-sensitivity involving compound assignments. 18// Addresses false positive in <rdar://problem/6268365> 19// 20 21unsigned r6268365Aux(); 22 23void r6268365() { 24 unsigned x = 0; 25 x &= r6268365Aux(); 26 unsigned j = 0; 27 28 if (x == 0) ++j; 29 if (x == 0) x = x / j; // no-warning 30} 31 32void divzeroassume(unsigned x, unsigned j) { 33 x /= j; 34 if (j == 0) x /= 0; // no-warning 35 if (j == 0) x /= j; // no-warning 36 if (j == 0) x = x / 0; // no-warning 37} 38 39void divzeroassumeB(unsigned x, unsigned j) { 40 x = x / j; 41 if (j == 0) x /= 0; // no-warning 42 if (j == 0) x /= j; // no-warning 43 if (j == 0) x = x / 0; // no-warning 44} 45 46// PR 2948 (testcase; crash on VisitLValue for union types) 47// http://llvm.org/bugs/show_bug.cgi?id=2948 48 49void checkaccess_union() { 50 int ret = 0, status; 51 if (((((__extension__ (((union { 52 __typeof (status) __in; int __i;} 53 ) 54 { 55 .__in = (status)} 56 ).__i))) & 0xff00) >> 8) == 1) 57 ret = 1; 58} 59 60// InitListExpr processing 61 62typedef float __m128 __attribute__((__vector_size__(16), __may_alias__)); 63__m128 return128() { 64 // This compound literal has a Vector type. We currently just 65 // return UnknownVal. 66 return __extension__(__m128) { 0.0f, 0.0f, 0.0f, 0.0f }; 67} 68 69typedef long long __v2di __attribute__ ((__vector_size__ (16))); 70typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); 71__m128i vec128i(long long __q1, long long __q0) { 72 // This compound literal returns true for both isVectorType() and 73 // isIntegerType(). 74 return __extension__ (__m128i)(__v2di){ __q0, __q1 }; 75} 76 77// Zero-sized VLAs. 78void check_zero_sized_VLA(int x) { 79 if (x) 80 return; 81 82 int vla[x]; // expected-warning{{VLAs with no elements have undefined behavior}} 83} 84 85void check_uninit_sized_VLA() { 86 int x; 87 int vla[x]; // expected-warning{{The expression used to specify the number of elements in the VLA 'vla' evaluates to an undefined or garbage value.}} 88} 89 90// sizeof(void) 91// - Tests a regression reported in PR 3211: http://llvm.org/bugs/show_bug.cgi?id=3211 92void handle_sizeof_void(unsigned flag) { 93 int* p = 0; 94 95 if (flag) { 96 if (sizeof(void) == 1) 97 return; 98 // Infeasible. 99 *p = 1; // no-warning 100 } 101 102 void* q; 103 104 if (!flag) { 105 if (sizeof(*q) == 1) 106 return; 107 // Infeasibe. 108 *p = 1; // no-warning 109 } 110 111 // Infeasible. 112 *p = 1; // no-warning 113} 114 115