annotate gcc/testsuite/c-c++-common/array-5.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* PR c++/87996 - "size of array is negative" error when SIZE_MAX/2 < sizeof(array) <= SIZE_MAX
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 { dg-do compile }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 { dg-options "-ftrack-macro-expansion=0" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 #define INT16_MAX __INT16_MAX__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 #define UINT16_MAX ((INT16_MAX << 1) + 1)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 #define DIFF_MAX __PTRDIFF_MAX__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 #define SIZE_MAX __SIZE_MAX__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 typedef __INT16_TYPE__ int16_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 typedef __INT32_TYPE__ int32_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 typedef __SIZE_TYPE__ size_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 /* Verify errors for types. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 typedef char i8a1_d_m1_t[DIFF_MAX - 1];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 /* The following should also be diagnosed because the difference between
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 &i8a1_dx[0] and &i8a1_dx[sizeof i8a1_dx] cannot be represented.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 typedef char i8a1_d_t[DIFF_MAX];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 typedef char i8a1_d_p1_t[(size_t)DIFF_MAX + 1]; /* { dg-error "size .\[0-9\]+. of array .i8a1_d_p1_t. exceeds maximum object size .\[0-9\]+.|is too large" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 typedef char i8a1_s_t[SIZE_MAX]; /* { dg-error "size .\[0-9\]+. of array .i8a1_s_t. exceeds maximum object size .\[0-9\]+.|is too large" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 typedef int16_t i16a_s_d2_t[SIZE_MAX / 2]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d2_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 typedef int16_t i16a_s_d3_t[SIZE_MAX / 3]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d3_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 typedef int16_t i16a_s_d4_m1_t[SIZE_MAX / 4 - 1];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 typedef int16_t i16a_s_d4_p1_t[SIZE_MAX / 4 + 1]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d4_p1_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 /* The internal computation overflows the message doesn't show the object
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 size (but GCC should compute the result and print it anyway). */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 typedef int32_t i32a_s_d2_t[SIZE_MAX / 2]; /* { dg-error "size of array .i32a_s_d2_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 typedef int32_t i32a_s_d3_t[SIZE_MAX / 3]; /* { dg-error "size of array .i32a_s_d3_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 typedef int32_t i32a_s_d4_t[SIZE_MAX / 4]; /* { dg-error "size .\[0-9\]+. of array .i32a_s_d4_t. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 /* Verify errors for objects. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 char i8a1_d_m1[DIFF_MAX - 1];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 /* The following should also be diagnosed because the difference between
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 &i8a1_dx[0] and &i8a1_dx[sizeof i8a1_dx] cannot be represented.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 char i8a1_d[DIFF_MAX];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 char i8a_d_p1[(size_t)DIFF_MAX + 1]; /* { dg-error "size .\[0-9\]+. of array .i8a_d_p1. exceeds maximum object size .\[0-9\]+.|is too large" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 char i8a_s[SIZE_MAX]; /* { dg-error "size .\[0-9\]+. of array .i8a_s. exceeds maximum object size .\[0-9\]+.|is too large" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 int16_t i16a_s_d2[SIZE_MAX / 2]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d2. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 int16_t i16a_s_d3[SIZE_MAX / 3]; /* { dg-error "size .\[0-9\]+. of array .i16a_s_d3. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 int16_t i16a_sz_d4_m1[SIZE_MAX / 4 - 1];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 int16_t i16a_sz_d4_p1[SIZE_MAX / 4 + 1]; /* { dg-error "size .\[0-9\]+. of array .i16a_sz_d4_p1. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 /* The internal computation overflows the message doesn't show the object
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 size (but GCC should compute the result and print it anyway). */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 int32_t i32a_s_d2[SIZE_MAX / 2]; /* { dg-error "size of array .i32a_s_d2. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 int32_t i32a_s_d3[SIZE_MAX / 3]; /* { dg-error "size of array .i32a_s_d3. exceeds maximum object size .\[0-9\]+." } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 int32_t i32a_s_d4[SIZE_MAX / 4]; /* { dg-error "size .\[0-9\]+. of array .i32a_s_d4. exceeds maximum object size .\[0-9\]+." } */