projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
full struct typedefs
[m6w6/ext-psi]
/
src
/
context_validate.c
diff --git
a/src/context_validate.c
b/src/context_validate.c
index 66b2a77f0b3a7ee2dcb2a6f0d49b7f0781ef1da8..6a89d6ec9bc2fbadedb8b9f2f957b07b87e93908 100644
(file)
--- a/
src/context_validate.c
+++ b/
src/context_validate.c
@@
-222,6
+222,7
@@
static inline int validate_decl_struct(PSI_Data *data, decl_struct *s) {
}
} else {
token_t t;
}
} else {
token_t t;
+ size_t size, align;
if (darg->var->pointer_level && (!darg->var->array_size || darg->var->pointer_level == 1)) {
t = PSI_T_POINTER;
if (darg->var->pointer_level && (!darg->var->array_size || darg->var->pointer_level == 1)) {
t = PSI_T_POINTER;
@@
-229,17
+230,21
@@
static inline int validate_decl_struct(PSI_Data *data, decl_struct *s) {
t = real_decl_type(darg->type)->type;
}
t = real_decl_type(darg->type)->type;
}
+ size = psi_t_size(t) * (darg->var->array_size ?: 1);
+
if (i) {
decl_arg *last = s->args->args[i-1];
if (i) {
decl_arg *last = s->args->args[i-1];
- darg->layout = init_decl_struct_layout(
- psi_t_align(t, last->layout->pos + last->layout->len),
- psi_t_size(t) * darg->var->array_size);
+
+ align = psi_t_align(t, last->layout->pos + last->layout->len);
} else {
} else {
-
darg->layout = init_decl_struct_layout(0, psi_t_size(t))
;
+
align = 0
;
}
}
+
+ darg->layout = init_decl_struct_layout(align, size);
}
if (s->size < darg->layout->pos + darg->layout->len) {
s->size = darg->layout->pos + darg->layout->len;
}
if (s->size < darg->layout->pos + darg->layout->len) {
s->size = darg->layout->pos + darg->layout->len;
+ /* FIXME: align struct */
}
}
}
}