fix size of arrays
[m6w6/ext-psi] / src / types / decl_arg.c
index 0423c9728fb4ab6355bb821a2a23f4e55b5323b3..b4acdb1c2b7aabd688057d3eeec6920d505e1035 100644 (file)
@@ -179,13 +179,9 @@ size_t psi_decl_arg_get_size(struct psi_decl_arg *darg)
        size_t size;
        struct psi_decl_type *real = psi_decl_type_get_real(darg->type);
 
-       if (darg->var->array_size) {
-               if (darg->var->pointer_level > 1) {
-                       size = psi_t_size(PSI_T_POINTER) * darg->var->array_size;
-               } else {
-                       size = psi_t_size(real->type) * darg->var->array_size;
-               }
-       } else if (darg->var->pointer_level) {
+       if (darg->var->array_size && darg->var->pointer_level > 1) {
+               size = psi_t_size(PSI_T_POINTER) * darg->var->array_size;
+       } else if (!darg->var->array_size && darg->var->pointer_level) {
                size = psi_t_size(PSI_T_POINTER);
        } else {
                switch (real->type) {
@@ -200,6 +196,10 @@ size_t psi_decl_arg_get_size(struct psi_decl_arg *darg)
                        size = psi_t_size(real->type);
                        break;
                }
+
+               if (darg->var->array_size) {
+                       size *= darg->var->array_size;
+               }
        }
 
        return size;