Balázs Kéri | 51bb212 | 2020-05-19 08:21:47 +0200 | [diff] [blame] | 1 | // RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -analyzer-checker=core -verify %s |
| 2 | |
| 3 | typedef unsigned long size_t; |
| 4 | #define BIGINDEX 65536U |
| 5 | |
| 6 | size_t check_VLA_overflow_sizeof(unsigned int x) { |
| 7 | if (x == BIGINDEX) { |
| 8 | // We expect here that size_t is a 64 bit value. |
| 9 | // Size of this array should be the first to overflow. |
| 10 | size_t s = sizeof(char[x][x][x][x]); // expected-warning{{Declared variable-length array (VLA) has too large size [core.VLASize]}} |
| 11 | return s; |
| 12 | } |
| 13 | return 0; |
| 14 | } |
| 15 | |
| 16 | void check_VLA_overflow_typedef() { |
| 17 | unsigned int x = BIGINDEX; |
| 18 | typedef char VLA[x][x][x][x]; // expected-warning{{Declared variable-length array (VLA) has too large size [core.VLASize]}} |
| 19 | } |
| 20 | |
| 21 | void check_VLA_no_overflow() { |
| 22 | unsigned int x = BIGINDEX; |
| 23 | typedef char VLA[x][x][x][x - 1]; |
| 24 | typedef char VLA1[0xffffffffu]; |
| 25 | } |