1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/* Test to verify that VLAs are handled gracefully by -Wrestrict
{ dg-do compile }
{ dg-options "-O2 -Wrestrict" }
{ dg-require-effective-target alloca } */
typedef __SIZE_TYPE__ size_t;
#define memcpy(d, s, n) __builtin_memcpy (d, s, n)
#define strcpy(d, s) __builtin_strcpy (d, s)
void test_vla (void *d, const char *s1, const char *s2, int i, size_t n)
{
char a[n];
char b[n];
strcpy (a, s1);
strcpy (b, s2);
memcpy (d, i ? a : b, n);
}
void test_vla_member (void *d, const char *s1, const char *s2, int i, size_t n)
{
struct S
{
char a[n];
char b[n];
} s;
strcpy (s.a, s1);
strcpy (s.b, s2);
memcpy (d, i ? s.a : s.b, n);
}
|