From d33b1894273444eda8d87d9f54acdeb21ba37ce6 Mon Sep 17 00:00:00 2001 From: herman ten brugge Date: Mon, 27 Dec 2021 11:39:52 +0100 Subject: [PATCH] Fix vla bug This fixes a vla bug. Probably more fixes are needed. Add testcode for bug. --- tccgen.c | 2 +- tests/tcctest.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/tccgen.c b/tccgen.c index e0b5fd6f..67e205b2 100644 --- a/tccgen.c +++ b/tccgen.c @@ -3494,7 +3494,7 @@ redo: gen_cast_s(VT_INT); #endif type1 = vtop[-1].type; - if (vtop[-1].type.t & VT_VLA) + if (vtop[-1].type.ref->type.t & VT_VLA) vla_runtime_pointed_size(&vtop[-1].type); else { u = pointed_size(&vtop[-1].type); diff --git a/tests/tcctest.c b/tests/tcctest.c index a4bb212a..be31f829 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -2915,7 +2915,6 @@ typedef int constant_negative_array_size_as_compile_time_assertion_idiom[(1 ? 2 void c99_vla_test_1(int size1, int size2) { -#if defined __i386__ || defined __x86_64__ int size = size1 * size2; int tab1[size][2], tab2[10][2]; void *tab1_ptr, *tab2_ptr, *bad_ptr; @@ -2961,12 +2960,39 @@ void c99_vla_test_1(int size1, int size2) printf("PASSED PASSED PASSED PASSED PASSED PASSED PASSED PASSED "); } printf("\n"); -#endif +} + +void c99_vla_test_2(int d, int h, int w) +{ + int x, y, z; + int (*arr)[h][w] = malloc(sizeof(int) * d*h*w); + int c = 1; + + printf("Test C99 VLA 6 (pointer)\n"); + + for (z=0; z