/* These functions allow a front-end to perform a manual layout of a RECORD_TYPE. (For instance, if the placement of subsequent fields depends on the placement of fields so far.) Begin by calling start_record_layout. Then, call place_field for each of the fields. Then, call finish_record_layout. See layout_type for the default way in which these functions are used. */ typedef struct record_layout_info_s { /* The RECORD_TYPE that we are laying out. */ tree t; /* The offset into the record so far, in bytes, not including bits in BITPOS. */ tree offset; /* The last known alignment of SIZE. */ unsigned int offset_align; /* The bit position within the last OFFSET_ALIGN bits, in bits. */ tree bitpos; /* The alignment of the record so far, in bits. */ unsigned int record_align; /* The alignment of the record so far, ignoring #pragma pack and __attribute__ ((packed)), in bits. */ unsigned int unpacked_align; /* The previous field laid out. */ tree prev_field; /* The static variables (i.e., class variables, as opposed to instance variables) encountered in T. */ vec<tree, va_gc> *pending_statics; /* Bits remaining in the current alignment group */ int remaining_in_alignment; /* True if we've seen a packed field that didn't have normal alignment anyway. */ int packed_maybe_necessary; } *record_layout_info;
GCC主要数据结构之record_layout_info_s
最新推荐文章于 2022-02-11 11:06:01 发布