File: variable.c

package info (click to toggle)
chibicc 1.0.23.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,832 kB
  • sloc: ansic: 62,911; sh: 275; makefile: 92
file content (72 lines) | stat: -rwxr-xr-x 2,312 bytes parent folder | download | duplicates (3)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "test.h"

int g1, g2[4];
static int g3 = 3;

int main() {
  ASSERT(3, ({ int a; a=3; a; }));
  ASSERT(3, ({ int a=3; a; }));
  ASSERT(8, ({ int a=3; int z=5; a+z; }));

  ASSERT(3, ({ int a=3; a; }));
  ASSERT(8, ({ int a=3; int z=5; a+z; }));
  ASSERT(6, ({ int a; int b; a=b=3; a+b; }));
  ASSERT(3, ({ int foo=3; foo; }));
  ASSERT(8, ({ int foo123=3; int bar=5; foo123+bar; }));

  ASSERT(4, ({ int x; sizeof(x); }));
  ASSERT(4, ({ int x; sizeof x; }));
  ASSERT(8, ({ int *x; sizeof(x); }));
  ASSERT(16, ({ int x[4]; sizeof(x); }));
  ASSERT(48, ({ int x[3][4]; sizeof(x); }));
  ASSERT(16, ({ int x[3][4]; sizeof(*x); }));
  ASSERT(4, ({ int x[3][4]; sizeof(**x); }));
  ASSERT(5, ({ int x[3][4]; sizeof(**x) + 1; }));
  ASSERT(5, ({ int x[3][4]; sizeof **x + 1; }));
  ASSERT(4, ({ int x[3][4]; sizeof(**x + 1); }));
  ASSERT(4, ({ int x=1; sizeof(x=2); }));
  ASSERT(1, ({ int x=1; sizeof(x=2); x; }));

  ASSERT(0, g1);
  ASSERT(3, ({ g1=3; g1; }));
  ASSERT(0, ({ g2[0]=0; g2[1]=1; g2[2]=2; g2[3]=3; g2[0]; }));
  ASSERT(1, ({ g2[0]=0; g2[1]=1; g2[2]=2; g2[3]=3; g2[1]; }));
  ASSERT(2, ({ g2[0]=0; g2[1]=1; g2[2]=2; g2[3]=3; g2[2]; }));
  ASSERT(3, ({ g2[0]=0; g2[1]=1; g2[2]=2; g2[3]=3; g2[3]; }));

  ASSERT(4, sizeof(g1));
  ASSERT(16, sizeof(g2));

  ASSERT(1, ({ char x=1; x; }));
  ASSERT(1, ({ char x=1; char y=2; x; }));
  ASSERT(2, ({ char x=1; char y=2; y; }));

  ASSERT(1, ({ char x; sizeof(x); }));
  ASSERT(10, ({ char x[10]; sizeof(x); }));

  ASSERT(2, ({ int x=2; { int x=3; } x; }));
  ASSERT(2, ({ int x=2; { int x=3; } int y=4; x; }));
  ASSERT(3, ({ int x=2; { x=3; } x; }));

  ASSERT(7, ({ int x; int y; char z; char *a=&y; char *b=&z; b-a; }));
  ASSERT(1, ({ int x; char y; int z; char *a=&y; char *b=&z; b-a; }));

  ASSERT(8, ({ long x; sizeof(x); }));
  ASSERT(2, ({ short x; sizeof(x); }));

  ASSERT(24, ({ char *x[3]; sizeof(x); }));
  ASSERT(8, ({ char (*x)[3]; sizeof(x); }));
  ASSERT(1, ({ char (x); sizeof(x); }));
  ASSERT(3, ({ char (x)[3]; sizeof(x); }));
  ASSERT(12, ({ char (x[3])[4]; sizeof(x); }));
  ASSERT(4, ({ char (x[3])[4]; sizeof(x[0]); }));
  ASSERT(3, ({ char *x[3]; char y; x[0]=&y; y=3; x[0][0]; }));
  ASSERT(4, ({ char x[3]; char (*y)[3]=x; y[0][0]=4; y[0][0]; }));

  { void *x; }

  ASSERT(3, g3);

  printf("OK\n");
  return 0;
}