- case COMPONENT_REF:
- {
- tree field;
-
- /* If we're not dereferencing something, then the access
- must be ok. */
- if (TREE_CODE (TREE_OPERAND (t, 0)) != INDIRECT_REF)
- return;
-
- field = TREE_OPERAND (t, 1);
-
- /* If we're looking at a bit field, then we can't take its address
- with ADDR_EXPR -- lang_hooks.mark_addressable will error. Do
- things the hard way with PLUS. */
- if (DECL_BIT_FIELD_TYPE (field))
- {
- if (TREE_CODE (DECL_SIZE_UNIT (field)) == INTEGER_CST)
- size = DECL_SIZE_UNIT (field);
-
- addr = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
- addr = fold_convert (ptr_type_node, addr);
- addr = fold (build (PLUS_EXPR, ptr_type_node,
- addr, fold_convert (ptr_type_node,
- byte_position (field))));
- }
- else
- {
- ptr_type = build_pointer_type (type);
- addr = build1 (ADDR_EXPR, ptr_type, t);
- }
- }
- break;
-