mescc: x86_64 support: Refactor to abstracted assembly, add x86_64.
[mes.git] / scaffold / tests / 7b-struct-int-array.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * GNU Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <libmes.h>
22
23 struct foo
24 {
25   int a;
26   int b;
27 };
28
29 struct foo g_foo[2] = {0,1,2,3};
30
31 struct bar
32 {
33   int bar[4];
34 };
35
36 struct bar g_bar = {101,102};
37 typedef struct bar bar_struct;
38 typedef struct bar foo_struct;
39
40 int
41 main ()
42 {
43   if (g_foo[0].a != 0)
44     return 1;
45   if (g_foo[0].b != 1)
46     return 2;
47   if (g_foo[1].a != 2)
48     return 3;
49   if (g_foo[1].b != 3)
50     return 4;
51
52   void *p = &g_foo;
53   struct foo* pfoo = (((struct foo *)p) + 1);
54   if (pfoo->a != 2)
55     return 5;
56   if (pfoo->b != 3)
57     return 6;
58
59   int *pi = &g_foo;
60   if (*pi != 0)
61     return 7;
62
63   pi = &g_bar;
64   if (*pi != 101)
65     return 8;
66
67   struct bar bar = {0x22, 0x33};
68   pi = &bar;
69   if (*pi != 0x22)
70     return 9;
71
72   bar_struct bs;
73   bs.bar[0] = 102;
74   pi = &bs;
75   if (*pi != 102)
76     return 10;
77
78   foo_struct fs;
79   fs.bar[0] = 0x22;
80   fs.bar[1] = 0x33;
81
82   pi = &fs;
83   if (*pi != 0x22)
84     return 11;
85   pi++;
86
87   if (*pi != 0x33)
88     return 12;
89
90   foo_struct *pfs = &fs;
91   pfs->bar[3] = 0x44;
92   pfs->bar[4] = 0x55;
93
94   pi = &fs.bar[3];
95   if (*pi != 0x44)
96     return 13;
97   pi++;
98   if (*pi != 0x55)
99     return 14;
100
101   return 0;
102 }