objc-act.c (build_constructor): Cast initializer values to the proper field types.

* objc/objc-act.c (build_constructor): Cast initializer values
        to the proper field types.

From-SVN: r47884
This commit is contained in:
Richard Henderson 2001-12-11 10:07:01 -08:00 committed by Richard Henderson
parent 50cc5dd29b
commit ff1c8a1a18
2 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2001-12-11 Richard Henderson <rth@redhat.com>
* objc/objc-act.c (build_constructor): Cast initializer values
to the proper field types.
2001-12-11 Jakub Jelinek <jakub@redhat.com>
* unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling.

View File

@ -1371,8 +1371,27 @@ static tree
build_constructor (type, elts)
tree type, elts;
{
tree constructor = build (CONSTRUCTOR, type, NULL_TREE, elts);
tree constructor, f, e;
/* ??? Most of the places that we build constructors, we don't fill in
the type of integers properly. Convert them all en masse. */
if (TREE_CODE (type) == ARRAY_TYPE)
{
f = TREE_TYPE (type);
if (TREE_CODE (f) == POINTER_TYPE || TREE_CODE (f) == INTEGER_TYPE)
for (e = elts; e ; e = TREE_CHAIN (e))
TREE_VALUE (e) = convert (f, TREE_VALUE (e));
}
else
{
f = TYPE_FIELDS (type);
for (e = elts; e ; e = TREE_CHAIN (e), f = TREE_CHAIN (f))
if (TREE_CODE (TREE_TYPE (f)) == POINTER_TYPE
|| TREE_CODE (TREE_TYPE (f)) == INTEGER_TYPE)
TREE_VALUE (e) = convert (TREE_TYPE (f), TREE_VALUE (e));
}
constructor = build (CONSTRUCTOR, type, NULL_TREE, elts);
TREE_CONSTANT (constructor) = 1;
TREE_STATIC (constructor) = 1;
TREE_READONLY (constructor) = 1;