| /* 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); |
| } |