chibicc/test/vla.c

27 lines
1.0 KiB
C

#include "test.h"
int main() {
ASSERT(20, ({ int n=5; int x[n]; sizeof(x); }));
ASSERT((5+1)*(8*2)*4, ({ int m=5, n=8; int x[m+1][n*2]; sizeof(x); }));
ASSERT(8, ({ char n=10; int (*x)[n][n+2]; sizeof(x); }));
ASSERT(480, ({ char n=10; int (*x)[n][n+2]; sizeof(*x); }));
ASSERT(48, ({ char n=10; int (*x)[n][n+2]; sizeof(**x); }));
ASSERT(4, ({ char n=10; int (*x)[n][n+2]; sizeof(***x); }));
ASSERT(60, ({ char n=3; int x[5][n]; sizeof(x); }));
ASSERT(12, ({ char n=3; int x[5][n]; sizeof(*x); }));
ASSERT(60, ({ char n=3; int x[n][5]; sizeof(x); }));
ASSERT(20, ({ char n=3; int x[n][5]; sizeof(*x); }));
ASSERT(0, ({ int n=10; int x[n+1][n+6]; int *p=x; for (int i = 0; i<sizeof(x)/4; i++) p[i]=i; x[0][0]; }));
ASSERT(5, ({ int n=10; int x[n+1][n+6]; int *p=x; for (int i = 0; i<sizeof(x)/4; i++) p[i]=i; x[0][5]; }));
ASSERT(5*16+2, ({ int n=10; int x[n+1][n+6]; int *p=x; for (int i = 0; i<sizeof(x)/4; i++) p[i]=i; x[5][2]; }));
ASSERT(10, ({ int n=5; sizeof(char[2][n]); }));
printf("OK\n");
return 0;
}