diff options
author | Richard Henderson <rth@redhat.com> | 2001-12-11 10:07:01 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-12-11 10:07:01 -0800 |
commit | ff1c8a1a182c62516c88784b532df367edd1f45b (patch) | |
tree | b4e402b9bf496cdba08d71d0c4c767f612105bf1 | |
parent | 50cc5dd29b71f5fcbe10cb424177ecc4d72e95d7 (diff) | |
download | gcc-ff1c8a1a182c62516c88784b532df367edd1f45b.zip gcc-ff1c8a1a182c62516c88784b532df367edd1f45b.tar.gz gcc-ff1c8a1a182c62516c88784b532df367edd1f45b.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 21 |
2 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4fe21250..b5c0251 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index a04f631..bf770e9 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -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; |