49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
/* { dg-do run } */
|
|
/* { dg-options "-std=c99 -pedantic-errors" } */
|
|
/* PR c/18740 */
|
|
|
|
static int i;
|
|
|
|
int foo(int n)
|
|
{
|
|
int (*t)[n];
|
|
i = 0;
|
|
int j = 0;
|
|
char b[1][n+3]; /* Variable length array. */
|
|
int d[3][n]; /* Variable length array. */
|
|
sizeof (b[i++ + sizeof(j++)]); /* Outer sizeof is evaluated for vla, but not the inner one. */
|
|
if (i != 1 || j != 0)
|
|
return 1;
|
|
__typeof__(b[i++]) c1; /* typeof is evauluated when given a vm */
|
|
if (i != 2)
|
|
return 1;
|
|
__typeof__(t + (i++,0)) c2; /* typeof is evauluated when given a vm */
|
|
if (i != 3)
|
|
return 1;
|
|
__typeof__(i + (i++,0)) c3; /* typeof is not evauluated when not given a vm */
|
|
if (i != 3)
|
|
return 1;
|
|
sizeof (d[i++]); /* sizeof is evaluated for vla. */
|
|
if (i != 4)
|
|
return 1;
|
|
__alignof__(__typeof__(t + (i++,0))); /* typeof is not evauluated when given a vm inside alignof*/
|
|
if (i != 4)
|
|
return 1;
|
|
sizeof(__typeof__(t + (i++,0))); /* typeof is not evauluated when given a vm inside sizeof*/
|
|
if (i != 4)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
|
|
int foo6(int a, int b[a][a], int (*c)[sizeof(*b)]) {
|
|
return sizeof (*c);
|
|
}
|
|
|
|
int main() {
|
|
int b[10][10];
|
|
int (*c)[sizeof(int)*10];
|
|
if (foo6(10, b, c) != 10*sizeof(int)*sizeof(int))
|
|
return 1;
|
|
return foo(10);
|
|
}
|