annotate gcc/testsuite/gcc.dg/Wstringop-overflow-20.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 tree-optimization/92226 - live nul char store to array eliminated
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 Test to verify warnings are issued for overflow detected thanks to
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 the enhancement committed on top of the fix for PR 92226.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 { dg-do compile }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 { dg-options "-O2 -Wall -Wno-array-bounds -ftrack-macro-expansion=0" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 #include "strlenopt.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 #define NOIPA __attribute__ ((noipa))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 #define T(MIN, MAX, SIZE, IDX) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 NOIPA void \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 test_ ## MIN ## _ ## MAX ## _ ## SIZE ## _ ## IDX (const char *s) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 { \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 size_t len = strlen (s); \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 if (MIN <= len && len <= MAX) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 { \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 extern char d[]; \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 strcpy (d, s); \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 d[IDX] = 0; \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 extern char a ## SIZE[SIZE]; \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 strcpy (a ## SIZE, d); \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 } \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 } typedef void dummy_type
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 T (2, 2, 1, 0);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 T (2, 2, 1, 1); // { dg-warning "writing 2 bytes into a region of size 1" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 T (2, 2, 1, 2); // { dg-warning "writing 3 bytes into a region of size 1" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 T (2, 3, 1, 0);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 T (2, 3, 1, 1); // { dg-warning "writing 2 bytes into a region of size 1" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 T (2, 3, 1, 2); // { dg-warning "writing 3 bytes into a region of size 1" "" { xfail *-*-*} }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 T (2, 3, 1, 3); // { dg-warning "writing 4 bytes into a region of size 1" "" { xfail *-*-* } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 T (5, 7, 3, 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 T (5, 7, 3, 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 T (5, 7, 3, 3); // { dg-warning "writing 4 bytes into a region of size 3" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 T (5, 7, 3, 4); // { dg-warning "writing 5 bytes into a region of size 3" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 T (5, 7, 3, 5); // { dg-warning "writing 6 bytes into a region of size 3" "" { xfail *-*-* } }