115 lines
1.3 KiB
C
115 lines
1.3 KiB
C
/* PR middle-end/92349 - ICE in -Warray-bounds on a VLA member
|
|
{ dg-do compile }
|
|
{ dg-options "-O2 -Wall" }
|
|
{ dg-require-effective-target alloca } */
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
|
|
void sink (void*, ...);
|
|
|
|
void mem_vla_cst_store_idx (void)
|
|
{
|
|
int n = 3;
|
|
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
s.a[0] = 0;
|
|
s.b = 0;
|
|
|
|
*++p = 1;
|
|
*++p = 2;
|
|
|
|
sink (&s, p);
|
|
}
|
|
|
|
void mem_vla_range_store_idx (int n)
|
|
{
|
|
if (n < 3 || 4 < n)
|
|
n = 3;
|
|
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
s.a[0] = 0;
|
|
s.b = 0;
|
|
|
|
*++p = 1;
|
|
*++p = 2;
|
|
|
|
sink (&s, p);
|
|
}
|
|
|
|
void mem_vla_var_store_idx (size_t n)
|
|
{
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
s.a[0] = 0;
|
|
s.b = 0;
|
|
|
|
*++p = 1;
|
|
*++p = 2;
|
|
|
|
sink (&s, p);
|
|
}
|
|
|
|
|
|
void mem_vla_cst_store_ptr (void)
|
|
{
|
|
int n = 3;
|
|
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
|
|
sink (&s, p);
|
|
}
|
|
|
|
void mem_vla_range_store_ptr (int n)
|
|
{
|
|
if (n < 3 || 4 < n)
|
|
n = 3;
|
|
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
|
|
sink (&s, p);
|
|
}
|
|
|
|
void mem_vla_var_store_ptr (size_t n)
|
|
{
|
|
struct {
|
|
char a[n], b;
|
|
} s;
|
|
|
|
char *p = s.a;
|
|
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
*p++ = __LINE__;
|
|
|
|
sink (&s, p);
|
|
}
|