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