size_t align;
if (darg->var->pointer_level
- && (!darg->var->array_size || darg->var->pointer_level > 2)) {
+ && (!darg->var->array_size || darg->var->pointer_level > 1)) {
align = psi_t_alignment(PSI_T_POINTER);
} else {
align = psi_decl_type_get_align(darg->type);
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 > 2) {
- size = psi_t_size(PSI_T_POINTER) * darg->var->array_size;
- } else {
- size = psi_t_size(real->type) * darg->var->array_size;
- }
+ 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->pointer_level) {
size = psi_t_size(PSI_T_POINTER);
} else {
size = psi_t_size(real->type);
break;
}
+
+ if (darg->var->array_size) {
+ size *= darg->var->array_size;
+ }
}
return size;