X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftype.c;h=32880488ccf0ab1bdc0479d8db2fd243f0813be4;hb=d2dc2564b47d9c113d7e6e598574e9733627fcca;hp=9a933dc066989a40a963e2c650eeb8b8b14743f6;hpb=6ac253f762d463c9444bbb392fc8cdb480127895;p=libfirm diff --git a/ir/tr/type.c b/ir/tr/type.c index 9a933dc06..32880488c 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -361,7 +361,7 @@ int get_type_alignment_bits(ir_type *tp) { void set_type_alignment_bits(ir_type *tp, int align) { assert(tp && tp->kind == k_type); - assert((align & (align - 1)) == 0 && "type alignment not power of two"); + assert((align == -1 || (align & (align - 1)) == 0) && "type alignment not power of two"); /* Methods don't have an alignment. */ if (tp->type_op != type_method) { tp->align = align; @@ -370,7 +370,11 @@ set_type_alignment_bits(ir_type *tp, int align) { void set_type_alignment_bytes(ir_type *tp, int align) { - set_type_alignment_bits(tp, 8*align); + if (align == -1) { + set_type_alignment_bits(tp, -1); + } else { + set_type_alignment_bits(tp, 8*align); + } } /* Returns a human readable string for the enum entry. */ @@ -1515,6 +1519,7 @@ void free_array_attrs (ir_type *array) { assert(array && (array->type_op == type_array)); free(array->attr.aa.lower_bound); free(array->attr.aa.upper_bound); + free(array->attr.aa.order); } /* manipulate private fields of array ir_type */