libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / Wstringop-truncation-8.c
blob1745da50a37a543d7de81de58551e1c574b831f1
1 /* PR tree-optimization/89644 - False-positive -Warray-bounds diagnostic
2 on strncpy
3 { dg-do compile }
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
6 #define NONSTR __attribute__ ((nonstring))
8 typedef __SIZE_TYPE__ size_t;
10 size_t strlen (const char*);
11 extern char* stpncpy (char*, const char*, size_t);
12 extern char* strncpy (char*, const char*, size_t);
14 void sink (char*, ...);
16 char f0 (char *s)
18 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
19 if (*s)
20 strncpy (a, s, sizeof a); /* { dg-bogus "\\\[-Warray-bounds" } */
21 return a[0];
24 void f1 (char *s)
26 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
27 if (*s)
28 strncpy (a, s, sizeof a); /* { dg-bogus "\\\[-Warray-bounds" } */
29 sink (a);
32 char f2 (void)
34 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
35 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
36 strncpy (a, b + 1, 5); /* { dg-bogus "\\\[-Warray-bounds" } */
37 return a[0];
40 void f3 (void)
42 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
43 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
44 strncpy (a, b + 2, 4); /* { dg-bogus "\\\[-Warray-bounds" } */
45 sink (a);
48 void f4 (NONSTR char *d)
50 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
51 strncpy (d, b + 3, 3); /* { dg-bogus "\\\[-Warray-bounds" } */
52 sink (d);
56 char g0 (char *s)
58 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
59 if (*s)
60 stpncpy (a, s, sizeof a); /* { dg-bogus "\\\[-Warray-bounds" } */
61 return a[0];
64 void g1 (char *s)
66 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
67 char *p = 0;
68 if (*s)
69 p = stpncpy (a, s, sizeof a); /* { dg-bogus "\\\[-Warray-bounds" } */
70 sink (a, p);
73 char g2 (void)
75 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
76 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
77 stpncpy (a, b + 1, 5); /* { dg-bogus "\\\[-Warray-bounds" } */
78 return a[0];
81 void g3 (void)
83 char a[6] NONSTR = { 1, 2, 3, 4, 5, 6 };
84 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
85 char *p = stpncpy (a, b + 2, 4); /* { dg-bogus "\\\[-Warray-bounds" } */
86 sink (a, p);
89 void g4 (NONSTR char *d)
91 char b[6] NONSTR = { 6, 5, 4, 3, 2, 1 };
92 char *p = stpncpy (d, b + 3, 3); /* { dg-bogus "\\\[-Warray-bounds" } */
93 sink (d, p);