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://m...@repo.or.cz/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: tinycc-devel-bounces+alexander.egorenkov=samtec...@nongnu.org [mailto:tinycc-devel-bounces+alexander.egorenkov=samtec...@nongnu.org] Im Auftrag von Alexander Egorenkov Gesendet: Montag, 2. Februar 2009 12:21 An: tinycc-devel@nongnu.org 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 Tinycc-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/tinycc-devel _______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/tinycc-devel
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/tinycc-devel