projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- use unsigned instead of int where appropriate
[libfirm]
/
ir
/
tr
/
type.c
diff --git
a/ir/tr/type.c
b/ir/tr/type.c
index
c69d24f
..
ef77299
100644
(file)
--- a/
ir/tr/type.c
+++ b/
ir/tr/type.c
@@
-796,6
+796,7
@@
void free_class_attrs(ir_type *clss) {
void add_class_member(ir_type *clss, ir_entity *member) {
assert(clss && (clss->type_op == type_class));
assert(clss != get_entity_type(member) && "recursive type");
void add_class_member(ir_type *clss, ir_entity *member) {
assert(clss && (clss->type_op == type_class));
assert(clss != get_entity_type(member) && "recursive type");
+ assert(get_type_state(clss) != layout_fixed);
ARR_APP1 (ir_entity *, clss->attr.ca.members, member);
}
ARR_APP1 (ir_entity *, clss->attr.ca.members, member);
}
@@
-1091,6
+1092,7
@@
void add_struct_member(ir_type *strct, ir_entity *member) {
assert(strct && (strct->type_op == type_struct));
assert(get_type_tpop(get_entity_type(member)) != type_method);
assert(strct != get_entity_type(member) && "recursive type");
assert(strct && (strct->type_op == type_struct));
assert(get_type_tpop(get_entity_type(member)) != type_method);
assert(strct != get_entity_type(member) && "recursive type");
+ assert(get_type_state(strct) != layout_fixed);
ARR_APP1 (ir_entity *, strct->attr.sa.members, member);
}
ARR_APP1 (ir_entity *, strct->attr.sa.members, member);
}
@@
-1533,6
+1535,7
@@
int get_union_n_members(const ir_type *uni) {
void add_union_member(ir_type *uni, ir_entity *member) {
assert(uni && (uni->type_op == type_union));
assert(uni != get_entity_type(member) && "recursive type");
void add_union_member(ir_type *uni, ir_entity *member) {
assert(uni && (uni->type_op == type_union));
assert(uni != get_entity_type(member) && "recursive type");
+ assert(get_type_state(uni) != layout_fixed);
ARR_APP1(ir_entity *, uni->attr.ua.members, member);
}
ARR_APP1(ir_entity *, uni->attr.ua.members, member);
}
@@
-2075,9
+2078,10
@@
ir_type *clone_frame_type(ir_type *type) {
res = new_type_frame(type->name);
for (i = 0, n = get_class_n_members(type); i < n; ++i) {
res = new_type_frame(type->name);
for (i = 0, n = get_class_n_members(type); i < n; ++i) {
- ir_entity *ent = get_class_member(type, i);
-
- (void)copy_entity_own(ent, res);
+ ir_entity *ent = get_class_member(type, i);
+ ir_entity *nent = copy_entity_own(ent, res);
+ set_entity_link(ent, nent);
+ set_entity_link(nent, ent);
}
return res;
}
}
return res;
}
@@
-2121,6
+2125,7
@@
ir_entity *frame_alloc_area(ir_type *frame_type, int size, unsigned alignment, i
assert(is_frame_type(frame_type));
assert(get_type_state(frame_type) == layout_fixed);
assert(get_type_alignment_bytes(frame_type) > 0);
assert(is_frame_type(frame_type));
assert(get_type_state(frame_type) == layout_fixed);
assert(get_type_alignment_bytes(frame_type) > 0);
+ set_type_state(frame_type, layout_undefined);
if (! a_byte)
a_byte = new_type_primitive(new_id_from_chars("byte", 4), mode_Bu);
if (! a_byte)
a_byte = new_type_primitive(new_id_from_chars("byte", 4), mode_Bu);
@@
-2159,5
+2164,7
@@
ir_entity *frame_alloc_area(ir_type *frame_type, int size, unsigned alignment, i
/* mark this entity as compiler generated */
set_entity_compiler_generated(area, 1);
/* mark this entity as compiler generated */
set_entity_compiler_generated(area, 1);
+
+ set_type_state(frame_type, layout_fixed);
return area;
}
return area;
}