diff options
Diffstat (limited to 'gcc/objc')
-rw-r--r-- | gcc/objc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/objc/objc-runtime-shared-support.c | 52 |
2 files changed, 31 insertions, 27 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 053e4d4..27bb060 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,9 @@ +2017-07-20 Nathan Sidwell <nathan@acm.org> + + Remove TYPE_METHODS. + * objc-runtime-shared-support.c (build_ivar_list_initializer): + Don't presume first item is a FIELD_DECL. + 2017-07-19 Nathan Sidwell <nathan@acm.org> * objc-act.h (CLASS_NST_METHODS, CLASS_CLS_METHODS): Use diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c index 5ead870..53303e4 100644 --- a/gcc/objc/objc-runtime-shared-support.c +++ b/gcc/objc/objc-runtime-shared-support.c @@ -528,34 +528,32 @@ build_ivar_list_initializer (tree type, tree field_decl) { vec<constructor_elt, va_gc> *inits = NULL; - do - { - vec<constructor_elt, va_gc> *ivar = NULL; - tree id; - - /* Set name. */ - if (DECL_NAME (field_decl)) - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, - add_objc_string (DECL_NAME (field_decl), - meth_var_names)); - else - /* Unnamed bit-field ivar (yuck). */ - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, build_int_cst (NULL_TREE, 0)); - - /* Set type. */ - id = add_objc_string (encode_field_decl (field_decl), - meth_var_types); - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id); - - /* Set offset. */ - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl)); - CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, - objc_build_constructor (type, ivar)); - do - field_decl = DECL_CHAIN (field_decl); - while (field_decl && TREE_CODE (field_decl) != FIELD_DECL); + for (; field_decl; field_decl = DECL_CHAIN (field_decl)) + if (TREE_CODE (field_decl) == FIELD_DECL) + { + vec<constructor_elt, va_gc> *ivar = NULL; + tree id; + + /* Set name. */ + if (DECL_NAME (field_decl)) + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, + add_objc_string (DECL_NAME (field_decl), + meth_var_names)); + else + /* Unnamed bit-field ivar (yuck). */ + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, + build_int_cst (NULL_TREE, 0)); + + /* Set type. */ + id = add_objc_string (encode_field_decl (field_decl), + meth_var_types); + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id); + + /* Set offset. */ + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl)); + CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, + objc_build_constructor (type, ivar)); } - while (field_decl); return objc_build_constructor (build_array_type (type, 0), inits); } |