1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,alpha.security.ArrayBoundV2 -verify %s 2 // RUN: %clang_cc1 -triple i386-apple-darwin10 -analyze -analyzer-checker=core,alpha.security.ArrayBoundV2 -DM32 -verify %s 3 // expected-no-diagnostics 4 5 #define UINT_MAX (~0u) 6 7 #ifdef M32 8 9 #define X86_ARRAY_SIZE (UINT_MAX/2 + 4) 10 testIndexTooBig()11void testIndexTooBig() { 12 char arr[X86_ARRAY_SIZE]; 13 char *ptr = arr + UINT_MAX/2; 14 ptr += 2; // index shouldn't overflow 15 *ptr = 42; // no-warning 16 } 17 18 #else // 64-bit tests 19 20 #define ARRAY_SIZE 0x100000000 21 testIndexOverflow64()22void testIndexOverflow64() { 23 char arr[ARRAY_SIZE]; 24 char *ptr = arr + UINT_MAX/2; 25 ptr += 2; // don't overflow 64-bit index 26 *ptr = 42; // no-warning 27 } 28 29 #define ULONG_MAX (~0ul) 30 #define BIG_INDEX (ULONG_MAX/16) 31 testIndexTooBig64()32void testIndexTooBig64() { 33 char arr[ULONG_MAX/8-1]; 34 char *ptr = arr + BIG_INDEX; 35 ptr += 2; // don't overflow 64-bit index 36 *ptr = 42; // no-warning 37 } 38 39 #endif 40