mescc: Tinycc support: ((unsigned char*)str)[i].
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 4 Aug 2017 09:40:04 +0000 (11:40 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 4 Aug 2017 09:40:04 +0000 (11:40 +0200)
* module/language/c99/compiler.mes (expr->accu*): Consider size of
  expr array deref.
* scaffold/tests/7d-cast-char.c: Test it.

module/language/c99/compiler.mes
scaffold/tests/7d-cast-char.c

index c633ad362c9258c60726d42a4ddc77a804ca20b7..0928f46908bea4cb5f7e89d57a759fcfc47a405c 100644 (file)
 
       ((array-ref ,index ,array)
        (let* ((info ((expr->accu info) index))
-              (size 4) ;; FIXME
+              (ptr (expr->pointer info array))
+              (size (if (= ptr 1) (expr->size info array)
+                        4))
               (info (append-text info (wrap-as (append (i386:accu->base)
                                                        (if (eq? size 1) '()
                                                            (append
index 063045ff0dbf76e6323f4518ae39d4bfab310334..8aaf5a631dd8f3dbb9497a30e430a2a8872ff7c1 100644 (file)
@@ -29,5 +29,10 @@ test ()
   int i = ((unsigned char *)s)[0];
   if (i != 'i') return 2;
 
+  c = s[1];
+  if (c != 'n') return 3;
+  i = ((unsigned char *)s)[1];
+  if (i != 'n') return 3;
+
   return 0;
 }