lto-streamer-in.c (input_gimple_stmt): Fixup FIELD_DECL operands in COMPONENT_REFs.
2009-10-17 Richard Guenther <rguenther@suse.de> * lto-streamer-in.c (input_gimple_stmt): Fixup FIELD_DECL operands in COMPONENT_REFs. From-SVN: r152937
This commit is contained in:
parent
d622b427fa
commit
57e4ba8488
|
@ -1,3 +1,8 @@
|
|||
2009-10-17 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* lto-streamer-in.c (input_gimple_stmt): Fixup FIELD_DECL
|
||||
operands in COMPONENT_REFs.
|
||||
|
||||
2009-10-17 Anatoly Sokolov <aesok@post.ru>
|
||||
|
||||
* targhooks.c (default_libcall_value): Don't use LIBCALL_VALUE macro
|
||||
|
|
|
@ -1061,6 +1061,36 @@ input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in,
|
|||
{
|
||||
tree op = lto_input_tree (ib, data_in);
|
||||
gimple_set_op (stmt, i, op);
|
||||
|
||||
/* Fixup FIELD_DECLs. */
|
||||
while (op && handled_component_p (op))
|
||||
{
|
||||
if (TREE_CODE (op) == COMPONENT_REF)
|
||||
{
|
||||
tree field, type, tem;
|
||||
field = TREE_OPERAND (op, 1);
|
||||
type = DECL_CONTEXT (field);
|
||||
for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
|
||||
{
|
||||
if (tem == field
|
||||
|| (TREE_TYPE (tem) == TREE_TYPE (field)
|
||||
&& (DECL_FIELD_OFFSET (tem)
|
||||
== DECL_FIELD_OFFSET (field))
|
||||
&& (DECL_FIELD_BIT_OFFSET (tem)
|
||||
== DECL_FIELD_BIT_OFFSET (field))
|
||||
&& (DECL_OFFSET_ALIGN (tem)
|
||||
== DECL_OFFSET_ALIGN (field))))
|
||||
break;
|
||||
}
|
||||
/* In case of type mismatches across units we can fail
|
||||
to unify some types and thus not find a proper
|
||||
field-decl here. Just do nothing in this case. */
|
||||
if (tem != NULL_TREE)
|
||||
TREE_OPERAND (op, 1) = tem;
|
||||
}
|
||||
|
||||
op = TREE_OPERAND (op, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue