mescc: Tinycc support: struct foo {int bar; int baz} = {0}.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 23 Jul 2017 08:44:17 +0000 (10:44 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 09:36:08 +0000 (11:36 +0200)
* module/language/c99/compiler.mes (decl->info): struct foo {int bar; int baz} = {0}.
* scaffold/tests/72-typedef-struct-def.c (test):

module/language/c99/compiler.mes
scaffold/tests/72-typedef-struct-def.c

index 348081ea1e27b0e099f3b5e526bff9e22e9d06c6..07c77c96207aaed2c51f0170aa3af530ebd4ad2a 100644 (file)
                  (let loop ((fields fields) (initzers initzers) (info info))
                    (if (null? fields) info
                        (let ((offset (field-offset info type (field:name (car fields))))
-                             (initzer (car initzers)))
-                         (loop (cdr fields) (cdr initzers)
+                             (initzer (if (null? initzers) '(p-expr (fixed "0")) (car initzers))))
+                         (loop (cdr fields) (if (null? initzers) '() (cdr initzers))
                                (clone info #:text
                                       (append
                                        (.text info)
index 34637ef178d42d33ba11a119b6a6cf15701d91f7..0d275ccfb6fbedee55dca2ecedeeae87b6d184e4 100644 (file)
@@ -97,5 +97,11 @@ test ()
   printf ("baz[1].f.i=%d\n", baz[1].f.i);
   if (baz[1].f.i != 5) return 1;
 
+  bar one = {0};
+  printf ("one.i\n", one.i);
+  if (one.i != 0) return 1;
+  printf ("one.f.i\n", one.f.i);
+  if (one.f.i != 0) return 1;
+
   return 0;
 }