X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=inline;f=type.c;h=da737e50492a98a359bffd8de5ea81bd589635e7;hb=22dabd638cc982416589af0073382fcb4197f72f;hp=6a121d811167222ea8b3d0429915e4c370362c81;hpb=f012e3a442e6f19a3c66ebcdd60944e738f238f0;p=cparser diff --git a/type.c b/type.c index 6a121d8..da737e5 100644 --- a/type.c +++ b/type.c @@ -1114,7 +1114,7 @@ unsigned get_type_size(type_t *type) layout_struct_type(&type->compound); return type->compound.compound->size; case TYPE_FUNCTION: - return 0; /* non-const (but "address-const") */ + return 1; /* strange GNU extensions: sizeof(function) == 1 */ case TYPE_REFERENCE: case TYPE_POINTER: return pointer_properties.size; @@ -1504,6 +1504,7 @@ void layout_struct_type(compound_type_t *type) return; if (type->compound->layouted) return; + compound->layouted = true; il_size_t offset = 0; il_alignment_t alignment = compound->alignment; @@ -1561,7 +1562,6 @@ next: compound->size = offset; compound->alignment = alignment; - compound->layouted = true; } void layout_union_type(compound_type_t *type) @@ -1571,6 +1571,9 @@ void layout_union_type(compound_type_t *type) compound_t *compound = type->compound; if (! compound->complete) return; + if (compound->layouted) + return; + compound->layouted = true; il_size_t size = 0; il_alignment_t alignment = compound->alignment;