void field_DECL_QUALIFIER(tree t) { if (DECL_QUALIFIER(t)) { //TODO:fprintf( code_outputfile,"DECL_QUALIFIER\n");// tree //,DECL_QUALIFIER(t) } }
static void write_ts_field_decl_tree_pointers (struct output_block *ob, tree expr, bool ref_p) { stream_write_tree (ob, DECL_FIELD_OFFSET (expr), ref_p); stream_write_tree (ob, DECL_BIT_FIELD_TYPE (expr), ref_p); stream_write_tree (ob, DECL_QUALIFIER (expr), ref_p); stream_write_tree (ob, DECL_FIELD_BIT_OFFSET (expr), ref_p); stream_write_tree (ob, DECL_FCONTEXT (expr), ref_p); streamer_write_chain (ob, TREE_CHAIN (expr), ref_p); }
/// HandleUnion - Handle a UNION_TYPE or QUAL_UNION_TYPE tree. void DefaultABI::HandleUnion(tree type, std::vector<const Type*> &ScalarElts) { if (TYPE_TRANSPARENT_UNION(type)) { tree Field = TYPE_FIELDS(type); assert(Field && "Transparent union must have some elements!"); while (TREE_CODE(Field) != FIELD_DECL) { Field = TREE_CHAIN(Field); assert(Field && "Transparent union must have some elements!"); } HandleArgument(TREE_TYPE(Field), ScalarElts); } else { // Unions pass the largest element. unsigned MaxSize = 0; tree MaxElt = 0; for (tree Field = TYPE_FIELDS(type); Field; Field = TREE_CHAIN(Field)) { if (TREE_CODE(Field) == FIELD_DECL) { // Skip fields that are known not to be present. if (TREE_CODE(type) == QUAL_UNION_TYPE && integer_zerop(DECL_QUALIFIER(Field))) continue; tree SizeTree = TYPE_SIZE(TREE_TYPE(Field)); unsigned Size = ((unsigned)TREE_INT_CST_LOW(SizeTree)+7)/8; if (Size > MaxSize) { MaxSize = Size; MaxElt = Field; } // Skip remaining fields if this one is known to be present. if (TREE_CODE(type) == QUAL_UNION_TYPE && integer_onep(DECL_QUALIFIER(Field))) break; } } if (MaxElt) HandleArgument(TREE_TYPE(MaxElt), ScalarElts); } }