mescc: Tinycc support: ((foo*) p) + n.
[mes.git] / scaffold / tests / 7a-struct-char-array.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * 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  * 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 Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include "30-test.i"
22
23 struct file {
24   unsigned char buffer[1];
25 };
26
27 int fill0;
28 int fill1;
29 int fill2;
30 int fill3;
31 int fill4;
32
33 struct file file;
34
35 int fill5;
36 int fill6;
37 int fill7;
38 int fill8;
39 int fill9;
40
41 void *
42 memcpy (void *dest, void const *src, int n)
43 {
44   char* p = dest;
45   char* q = src;
46   while (n--) *p++ = *q++;
47   return dest;
48 }
49
50 #if __MESC__
51 char *
52 strcpy (char *dest, char const *src)
53 {
54   char *p = dest;
55   while (*src) *p++ = *src++;
56   *p = 0;
57   return dest;
58 }
59 #endif
60
61 int
62 test ()
63 {
64   struct file *pfile = &file;
65   strcpy (file.buffer, "0123456789\n");
66   eputs (file.buffer);
67   char *p = pfile->buffer;
68   if (p[4] != '4') return 1;
69   if (file.buffer[4] != '4') return 2;
70   if (pfile->buffer[4] != '4') return 3;
71
72   memcpy (pfile->buffer + 4, " ", 1);
73   eputs (file.buffer);
74   if (p[4] != ' ') return 4;
75   if (file.buffer[4] != ' ') return 5;
76   if (pfile->buffer[4] != ' ') return 6;
77
78   strcpy (file.buffer, "0123456789\n");
79   eputs (file.buffer);
80   p[4] = 'A';
81   eputs (file.buffer);
82   if (p[4] != 'A') return 7;
83   if (file.buffer[4] != 'A') return 8;
84   if (pfile->buffer[4] != 'A') return 9;
85
86   return 0;
87 }