mescc: x86_64 support: Refactor to abstracted assembly, add x86_64.
[mes.git] / scaffold / tests / 23-pointer.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 char *g_hello = "hello";
22 char g_arena[4] = "XXX";
23 char *g_chars = g_arena;
24
25 int
26 main ()
27 {
28   if (*g_hello != 'h')
29     return 1;
30   if (g_hello[0] != 'h')
31     return 2;
32   if (g_chars[0] != 'X')
33     return 3;
34   if (*g_chars != 'X')
35     return 4;
36
37   g_arena[0] = 'A';
38   if (*g_chars != 'A')
39     return 5;
40   char *x = g_arena;
41   if (*x++ != 'A')
42     return 5;
43   *x++ = 'C';
44   if (g_chars[1] != 'C')
45     return 7;
46   if (g_chars[2] != 'X')
47     return 8;
48   *--x = 'X';
49   if (g_chars[1] != 'X')
50     return 9;
51
52   char **pp = &x;
53   if (**pp != 'X')
54     return 10;
55
56   char *p = *pp;
57   if (*p != 'X')
58     return 11;
59
60   char ***ppp = &pp;
61   if (***ppp != 'X')
62     return 12;
63
64   char **pp2 = *ppp;
65   if (**pp2 != 'X')
66     return 13;
67
68   return 0;
69 }