aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-12-11 10:07:01 -0800
committerRichard Henderson <rth@gcc.gnu.org>2001-12-11 10:07:01 -0800
commitff1c8a1a182c62516c88784b532df367edd1f45b (patch)
treeb4e402b9bf496cdba08d71d0c4c767f612105bf1
parent50cc5dd29b71f5fcbe10cb424177ecc4d72e95d7 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/objc/objc-act.c21
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;