tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: AW: [Tinycc-devel] Memory allocation and initialization of arrays wi


From: grischka
Subject: Re: AW: [Tinycc-devel] Memory allocation and initialization of arrays withdimension % 2 = 0
Date: Mon, 02 Feb 2009 15:02:44 +0100
User-agent: Thunderbird 1.5.0.10 (Windows/20070221)

Alexander Egorenkov wrote:


Here is the correct patch.


Thanks.

If you happen to have GIT around please feel free to push your
patch on our "mob" branch:

        git push ssh://address@hidden/srv/git/tinycc.git mypatch:mob

--- grischka


---------------------------------------------------------------------------
--- tcc.c.old   Mon Feb  2 11:18:15 2009
+++ tcc.c.new   Mon Feb  2 11:22:31 2009
@@ -6130,8 +6130,15 @@
         return s->c;
     } else if (bt == VT_PTR) {
         if (type->t & VT_ARRAY) {
+            int ts;
+
             s = type->ref;
-            return type_size(&s->type, a) * s->c;
+            ts = type_size(&s->type, a);
+
+            if (ts < 0 && s->c < 0)
+                ts = -ts;
+
+            return ts * s->c;
         } else {
             *a = PTR_SIZE;
             return PTR_SIZE;
-----------------------------------------------------------------------------

Alex.

Regards.

-----Ursprüngliche Nachricht-----
Von: address@hidden [mailto:address@hidden Im Auftrag von Alexander Egorenkov
Gesendet: Montag, 2. Februar 2009 12:21
An: address@hidden
Betreff: [Tinycc-devel] Memory allocation and initialization of arrays 
withdimension % 2 = 0


Hi TCC developers,

i think, found a bug with memory allocation and initialization of arrays with 
dimensions 2, 4, 6 etc.

Example (x86, linux, tinycc 0.9.24):
----------------------------------------------------
#include <stdio.h>

int main(int argc, char **argv)
{
        int a[] = { 1, 2, 3, 4 };
        int b[][] = { { 5, 6 }, { 7 , 8 } };

        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);

        return 0;
}

----------------------------------------------------

Output:
----------------------------------------------------
5 6 7 4
----------------------------------------------------

The problem is in the function tcc.c:type_size.


I could solve the problem by appling the following patch:
----------------------------------------------------
--- tcc.c.old   Mon Feb  2 11:18:15 2009
+++ tcc.c.new   Mon Feb  2 11:19:00 2009
@@ -6130,8 +6130,15 @@
         return s->c;
     } else if (bt == VT_PTR) {
         if (type->t & VT_ARRAY) {
+            int ts;
+
             s = type->ref;
-            return type_size(&s->type, a) * s->c;
+            ts = type_size(&s->type, a) * s->c;
+
+            if (ts < 0 && s->c < 0)
+                ts = -ts;
+
+            return ts * s->c;
         } else {
             *a = PTR_SIZE;
             return PTR_SIZE;
----------------------------------------------------

Alex.

Regards.




_______________________________________________
Tinycc-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/tinycc-devel


_______________________________________________
Tinycc-devel mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/tinycc-devel






reply via email to

[Prev in Thread] Current Thread [Next in Thread]