| // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 -analyzer-checker=core,alpha.security.ArrayBoundV2 -verify %s |
| // RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -analyzer-checker=core,alpha.security.ArrayBoundV2 -DM32 -verify %s |
| // expected-no-diagnostics |
| |
| #define UINT_MAX (~0u) |
| |
| #ifdef M32 |
| |
| #define X86_ARRAY_SIZE (UINT_MAX/2 + 4) |
| |
| void testIndexTooBig() { |
| char arr[X86_ARRAY_SIZE]; |
| char *ptr = arr + UINT_MAX/2; |
| ptr += 2; // index shouldn't overflow |
| *ptr = 42; // no-warning |
| } |
| |
| #else // 64-bit tests |
| |
| #define ARRAY_SIZE 0x100000000 |
| |
| void testIndexOverflow64() { |
| char arr[ARRAY_SIZE]; |
| char *ptr = arr + UINT_MAX/2; |
| ptr += 2; // don't overflow 64-bit index |
| *ptr = 42; // no-warning |
| } |
| |
| #define ULONG_MAX (~0ul) |
| #define BIG_INDEX (ULONG_MAX/16) |
| |
| void testIndexTooBig64() { |
| char arr[ULONG_MAX/8-1]; |
| char *ptr = arr + BIG_INDEX; |
| ptr += 2; // don't overflow 64-bit index |
| *ptr = 42; // no-warning |
| } |
| |
| #endif |