Commit 8593e0b6 by Jakub Jelinek Committed by Jakub Jelinek

tree-object-size.c (addr_object_size): Instead of checking for non-NULL…

tree-object-size.c (addr_object_size): Instead of checking for non-NULL TREE_CHAIN of the FIELD_DECL check that there...

	* tree-object-size.c (addr_object_size): Instead of checking
	for non-NULL TREE_CHAIN of the FIELD_DECL check that there
	are no FIELD_DECLs following it.

	* g++.dg/ext/builtin-object-size1.C: New test.
	* g++.dg/ext/builtin-object-size2.C: New test.

From-SVN: r148851
parent 7309083f
2009-06-23 Jakub Jelinek <jakub@redhat.com>
* tree-object-size.c (addr_object_size): Instead of checking
for non-NULL TREE_CHAIN of the FIELD_DECL check that there
are no FIELD_DECLs following it.
2009-06-23 Andreas Krebbel <krebbel1@de.ibm.com>
* tree-ssa-math-opts.c (find_bswap): Increase the search depth in
......
2009-06-23 Jakub Jelinek <jakub@redhat.com>
* g++.dg/ext/builtin-object-size1.C: New test.
* g++.dg/ext/builtin-object-size2.C: New test.
2009-06-23 Andreas Krebbel <krebbel1@de.ibm.com>
* gcc.dg/optimize-bswapsi-1.c: Add new bswap implementation.
......
......@@ -257,27 +257,39 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
v = NULL_TREE;
break;
case COMPONENT_REF:
if ((TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
== RECORD_TYPE
&& TREE_CHAIN (TREE_OPERAND (v, 1)))
|| TREE_CODE (TREE_TYPE (v)) != ARRAY_TYPE)
v = NULL_TREE;
else
if (TREE_CODE (TREE_TYPE (v)) != ARRAY_TYPE)
{
v = NULL_TREE;
break;
}
if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
== RECORD_TYPE)
{
if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
== RECORD_TYPE)
v = TREE_OPERAND (v, 0);
while (v && v != pt_var && TREE_CODE (v) == COMPONENT_REF)
if (TREE_CODE (TREE_TYPE (v)) != UNION_TYPE
&& TREE_CODE (TREE_TYPE (v)) != QUAL_UNION_TYPE)
tree fld_chain = TREE_CHAIN (TREE_OPERAND (v, 1));
for (; fld_chain; fld_chain = TREE_CHAIN (fld_chain))
if (TREE_CODE (fld_chain) == FIELD_DECL)
break;
if (fld_chain)
{
v = NULL_TREE;
break;
else
v = TREE_OPERAND (v, 0);
if (v && v != pt_var)
v = NULL_TREE;
else
v = pt_var;
}
}
if (TREE_CODE (TREE_TYPE (TREE_OPERAND (v, 0)))
== RECORD_TYPE)
v = TREE_OPERAND (v, 0);
while (v && v != pt_var && TREE_CODE (v) == COMPONENT_REF)
if (TREE_CODE (TREE_TYPE (v)) != UNION_TYPE
&& TREE_CODE (TREE_TYPE (v)) != QUAL_UNION_TYPE)
break;
else
v = TREE_OPERAND (v, 0);
if (v && v != pt_var)
v = NULL_TREE;
else
v = pt_var;
break;
default:
v = pt_var;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment