aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc
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 /gcc/objc
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
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/objc-act.c21
1 files changed, 20 insertions, 1 deletions
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;