diff options
Diffstat (limited to 'gcc/objc')
-rw-r--r-- | gcc/objc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/objc/objc-act.h | 8 | ||||
-rw-r--r-- | gcc/objc/objc-runtime-shared-support.c | 52 |
3 files changed, 40 insertions, 31 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 0c6f3fcd8ae..27bb0600626 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,14 @@ +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 + TYPE_{MIN,MAX}_VALUE_RAW. + 2017-05-16 Sylvestre Ledru <sylvestre@debian.org> * objc-runtime-shared-support.c (build_module_descriptor): diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h index 05ee968036b..92efd9ee45f 100644 --- a/gcc/objc/objc-act.h +++ b/gcc/objc/objc-act.h @@ -179,8 +179,8 @@ enum objc_property_assign_semantics { #define CLASS_SUPER_NAME(CLASS) (TYPE_CONTEXT (CLASS)) #define CLASS_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 0) #define CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 1) -#define CLASS_NST_METHODS(CLASS) (TYPE_MINVAL (CLASS)) -#define CLASS_CLS_METHODS(CLASS) (TYPE_MAXVAL (CLASS)) +#define CLASS_NST_METHODS(CLASS) (TYPE_MIN_VALUE_RAW (CLASS)) +#define CLASS_CLS_METHODS(CLASS) (TYPE_MAX_VALUE_RAW (CLASS)) #define CLASS_STATIC_TEMPLATE(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 2) #define CLASS_CATEGORY_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 3) #define CLASS_PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 4) @@ -189,8 +189,8 @@ enum objc_property_assign_semantics { #define PROTOCOL_NAME(CLASS) (TYPE_NAME (CLASS)) #define PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 0) -#define PROTOCOL_NST_METHODS(CLASS) (TYPE_MINVAL (CLASS)) -#define PROTOCOL_CLS_METHODS(CLASS) (TYPE_MAXVAL (CLASS)) +#define PROTOCOL_NST_METHODS(CLASS) (TYPE_MIN_VALUE_RAW (CLASS)) +#define PROTOCOL_CLS_METHODS(CLASS) (TYPE_MAX_VALUE_RAW (CLASS)) #define PROTOCOL_FORWARD_DECL(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 1) #define PROTOCOL_DEFINED(CLASS) TREE_USED (CLASS) #define PROTOCOL_OPTIONAL_CLS_METHODS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 2) diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c index 5ead87078c6..53303e47d20 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); } |