2008-11-07 Fariborz Jahanian Radar 5847976 * decl.c (synth_block_byref_id_object_copy_func): Takes new 'flag' argument and produces the new much simplified API. (synth_block_byref_id_object_dispose_func): Ditto. (new_block_byref_decl): Turn off -fobjc-gc so we don't get bogus warning on field declared as __weak. (init_byref_decl): Takes a new 'flag' argument and passes it down to synth_block_byref_id_object_copy_func and synth_block_byref_id_object_dispose_func. (cp_finish_decl): Calculates the flag for the block variable declaration and passes it down to init_byref_decl. * parser.c (build_block_struct_initlist): Removes call to copy_in_object (not needed). (synth_copy_helper_block_func): Produce the new, simplified API. (synth_destroy_helper_block_func): Ditto. (build_block_byref_decl): Copy over COPYABLE_WEAK_BLOCK flag. 2008-10-31 Fariborz Jahanian Radar 6175959 * parser.c (synth_copy_helper_block_func): Use the new API _Block_object_assign for ObjC object copying. (block_object_dispose): New (synth_destroy_helper_block_func): Call block_object_dispose to use new _Block_object_dispose API for ObjC object release. 2008-10-27 Fariborz Jahanian Radar 6231433 * typeck.c (objc_compare_types, objc_have_common_type): Take an extra argument for better diagnostics. * call.c: Ditto 2010-03-16 Fariborz Jahanian Radar 7760213 * semantics.c (get_final_block_variable): Diagnose access of __block array. 2010-03-12 Fariborz Jahanian Radar 7735196 * cp/parser.c (build_block_struct_initlist): Set BLOCK_USE_STRET flag in block descriptor for blocks which return their aggregate value in memory. 2010-03-05 Fariborz Jahanian Radar 7721728 * semantics.c (get_final_block_variable): Diagnose importation of copied-in variables. 2009-02-11 Fariborz Jahanian Radar 6573923 * decl.c (synth_block_byref_id_object_copy_func, synth_block_byref_id_object_dispose_func): Set BLOCK_BYREF_CALLER flag in call to copy/dispose helper functions. 2009-02-11 Fariborz Jahanian Radar 6545782 * semantics.c (get_final_block_variable): New (finish_id_expression): Call get_final_block_variable. 2008-10-27 Fariborz Jahanian Radar 6302949 * parser.c (objc_cp_parser_at_property): Warn on missing ',' separator for property attribute list. 2008-10-24 Fariborz Jahanian Radar 6305545 * semantics.c (expand_or_defer_fn): Lower nested function of the structors. 2008-10-24 Fariborz Jahanian Radar 5847213 (minor tweak) * parser.c (build_block_descriptor_type): Make descriptor_ptr_type and descriptor_ptr_type_with_copydispose visible to pch. 2008-10-17 Fariborz Jahanian Radar 6289031 * decl.c: Removed all code related to radar 6083129 (byref escapes). 2008-10-15 Fariborz Jahanian Radar 6271728 * parser.c (cp_parser_objc_method_definition_list): Method definition always start with '{', or it is error. 2008-10-14 Fariborz Jahanian Radar 6275956 * semantics.c (finish_this_expr): Reference to "this" in a block must be looked up. 2008-10-10 Fariborz Jahanian Radar 5847213 - New Block ABI * typeck.c (build_block_call): New code gen for block call. * parser.c (build_descriptor_block_decl) New (build_block_struct_type): New block literal type. (build_block_struct_initlist): New block literal initializers. (build_block_literal_tmp): New block literal variable initialization. (synth_copy_helper_block_func): Fixed a minor bug (unrelated to this radar). (build_block_internal_types): Removed. (build_block_descriptor_type): New routine to build build descriptor type. (make_block_pointer_declarator): Unnecessary code is removed. 2008-10-02 Fariborz Jahanian Radar 6246527 * parser.c (cp_parser_block_literal_expr): Call to do the delta on printf attribute. 2008-09-30 Fariborz Jahanian Radar 6230297 * c-parser.c (build_block_struct_initlist): 'trivial' block temporary can be static as well. (build_block_literal_tmp): Accomodate 'trivial' block literal temporary variable as static. 2008-09-30 Fariborz Jahanian Radar 6230297 * parser.c (build_block_struct_initlist): 'trivial' block temporary can be static as well. (build_block_literal_tmp): Accomodate 'trivial' block literal temporary variable as static. 2008-09-30 Fariborz Jahanian Radar 6225809 * parser.c (build_block_byref_decl): Add __block vaiables to intervening blocks. 2008-09-29 Fariborz Jahanian Radar 6154598 tree.c (maybe_dummy_object): Build expression for copied in "this" in the block. 2008-09-26 Fariborz Jahanian Radar 6243400 * parser.c (build_block_struct_type): Mostly rewritten to use C++'s API for building block's main struct so structors for those data members requiring them are synthesized and used. 2008-09-25 Fariborz Jahanian Radar 6244520 * decl.c (new_block_byref_decl): New field added to struct __Block_byref_x. (init_byref_decl): Above field initialized to NULL. 2008-09-25 Fariborz Jahanian Radar 6237713 * parser.c (cp_parser_block_literal_expr): Parse and set attribute on block literals. 2008-09-16 Fariborz Jahanian Radar 6214617 * parser.c (cp_block_requires_copying): New (build_block_struct_type): Set BlockImportsCxxObjects flag. (build_block_struct_initlist): Set BLOCK_HAS_CXX_OBJ if need be. (synth_copy_helper_block_func): Call copy ctor if copied in object has one. (synth_destroy_helper_block_func): Call dtor on cxx object. 2008-09-12 Fariborz Jahanian Radar 6212722 (tweak) * parser.c (build_block_ref_decl): Use decay_conversion. 2008-09-09 Fariborz Jahanian Radar 6169580 * decl.c (synth_block_byref_id_object_copy_func): Pass new flag to finish_function. (synth_block_byref_id_object_): Ditto. (finish_function): Don't pop the nested class when synthesizing block helpers. * semantics.c (finish_id_expression): Added logic to attach copied-in "this" to stand-alone field reference in a block. * parser.c (synth_copy_helper_block_func, synth_destroy_helper_block_func): Pass new flag to finish_function. (cp_parser_block_literal_expr): When block is in non-static member function, need to import "this" as a read-only copied in variable. 2008-09-05 Fariborz Jahanian Radar 6169527 * parser.c (build_block_struct_type): Set CLASSTYPE_AS_BASE. (build_block_internal_types): Ditto. (build_block_struct_initlist): Rewritten. (build_block_literal_tmp): Rewritten. (build_block_ref_decl): Just add copied-in variable to the scope. (declare_block_prologue_local_vars): Rewritten. (declare_block_prologue_local_byref_vars): New (block_build_prologue): Call declare_block_prologue_local_byref_vars for byref variables. 2008-09-03 Fariborz Jahanian Radar 6185344 * typeck.c (check_return_expr): Added extra check for return type checking. * parser.c (cp_parser_direct_declarator): Added extra check for type used as block return type. (cp_parser_block_literal_expr): Parse and handle user provided block return type syntax. 2008-08-28 Fariborz Jahanian Radar 6160536 * parser.c (cp_parser_block_literal_expr): Call build_block_helper_name to get pretty name for block helper function. 2008-08-28 Fariborz Jahanian Radar 6180456 * decl.c (synth_block_byref_id_object_copy_func): Use different API when copying __block object in c language. (synth_block_byref_id_object_dispose_func): Use different API when releasing a __block object in c. * parser.c (synth_copy_helper_block_func): Refactored to call build_block_byref_assign_copy_decl(). 2008-08-27 Fariborz Jahanian Radar 6087117 * typeck.c (convert_arguments): Takes an extra argument for distiguinsing block call to function calls. (build_function_call): Tell convert_arguments if we are calling a block. 2008-08-24 Caroline Tice Radar 6029624 * call.c (objcp_reference_related_p): New * cp-tree.h (objcp_reference_related_p): New decl. 2008-06-05 Fariborz Jahanian Radar 5982990 * parser.c (cp_parser_compound_statement): Take a new argument which is used to call objc_mark_locals_volatile. (cp_parser_primary_expression, cp_parser_statement, etc.): add extra argument in calling cp_parser_compound_statement. (cp_parser_objc_synchronized_statement): Passes flag_objc_sjlj_exceptions as last argument in calling cp_parser_compound_statement. 2008-03-20 Fariborz Jahanian Radar 5802025 * typeck.c (finish_class_member_access_expr): Generate getter call from an OBJC_PROPERTY_REFERENCE_EXPR. 2008-03-19 Fariborz Jahanian Radar 5733674 * decl.c (expand_static_init): Generate write barrier for static initialization in objective-c++ mode. 2008-02-20 Fariborz Jahanian Radar 5732232 - code gen part 2. * cp-lang.c (c_finish_return): Defined these templates to get a clean compile. 2007-08-22 Fariborz Jahanian Radar 4947311 * parser.c (cp_parser_objc_protocol_declaration): Takes attribute list as extra argument and passes it down to objc_declare_protocols/objc_start_protocol. (cp_parser_objc_class_interface): Now receives attribute list as input. (cp_parser_objc_declaration): Parses attribute list and passes it down to cp_parser_objc_class_interface/cp_parser_objc_protocol_declaration. 2007-07-13 Fariborz Jahanian Radar 5277239 * parser.c (cp_parser_objc_reference_expression): New routine to build a property reference expression. (cp_objc_property_reference_prefix): New routine to recognize a property dot syntax. (cp_parser_primary_expression): Build a property reference expression when a property dot-syntax is recognized. (cp_parser_type_name): Exclude property dot-syntax from being recognized as a type name. (cp_parser_class_name): Exclude property dot-syntax from being recognized as a class name. 2007-07-10 Fariborz Jahanian Radar 5285911 * typeck.c (finish_class_member_access_expr): Call objc_build_property_reference_expr instead of objc_build_getter_call. 2007-06-29 Fariborz Jahanian Radar 5276085 * typeck.c (build_modify_expr): Call objc_weak_reference_expr instead of objc_remove_weak_read. * parser.c (cp_parser_cast_expression): Call objc_build_weak_reference_tree instead of objc_generate_weak_read. (cp_parser_cast_expression): Ditto. 2007-05-18 Fariborz Jahanian Radar 5202926 * mangle.c (write_mangled_name): Removed suppression in last patch. 2007-04-20 Fariborz Jahanian Radar 5130983 * c-common.h (enum lvalue_use): New enumerator lv_foreach added. * c-common.c (lvalue_error): Diagnose on lv_foreach. 2007-04-20 Fariborz Jahanian Radar 5130983 * parser.c (cp_parser_parse_foreach_stmt): Parse selector expression as an expression. (objc_foreach_stmt): Issue diagnostic on non-lavlue selector expression. 2007-03-29 Fariborz Jahanian Radar 4947014 - objc atomic property * lex.c (RID_NONATOMIC): Add * parser.c (objc_cp_parser_at_property): Recognize 'nonatomic' as new property attribute. 2007-03-29 Fariborz Jahanian Radar 4564694 * lex.c (RID_AT_PACKAGE): Add * parser.c (cp_lexer_get_preprocessor_token): Parse @package. 2006-12-14 Fariborz Jahanian Radar 4854605 * parser.c (objc_foreach_stmt): Set iterator to nil. 2006-09-01 Fariborz Jahanian Radar 4712269 * typeck.c (build_unary_op): Call objc_build_incr_decr_setter_call for potential ince/decr pre/post expressions involving properties. 2006-07-21 Fariborz Jahanian Radar 4631818 * parser.c (cp_parser_parse_foreach_stmt): New. (cp_parser_iteration_statement): Remove old code. Replace it with call to cp_parser_parse_foreach_stmt. (cp_parser_simple_declaration): Remove old code. (cp_parser_init_declarator): Remove old code. 2006-08-31 Fariborz Jahanian Radar 4697411 * typeck.c (build_class_member_access_expr): Call objc_volatilize_component_ref. 2006-07-18 Fariborz Jahanian Radar 4592503 * class.c (layout_class_type): Check on illegal use of __weak on struct fields. * decl.c (start_decl): Check on illegal use of __weak on variable declarations. 2006-07-14 Fariborz Jahanian Radar 4621020 * lex.c (reswords): Added entry for 'weak' attribute keyword. * parser.c (objc_cp_parser_at_property): Recorgnize 'weak'attribute. 2006-06-26 Fariborz Jahanian Radar 4591909 * lex.c (reswords): New entry for 'dynamic' attribute. * parser.c (objc_cp_parser_at_property): Change to parse new attribute syntax. 2006-05-18 Fariborz Jahanian Radar 4548636 (objc attributes on class) * parser.c (objc_attr_follwed_by_at_keyword): New routine to disambiguate attribute before a type and attribute before an @interface declaration.. (cp_parser_declaration): Handle case of attribute list which can be followed by an @interface. (cp_parser_objc_class_interface): Parse possible attribute list before parsing @interface. (cp_parser_objc_declaration): Recognize 'attribute' as a valid token which can start an @interface declaration. 2006-05-16 Fariborz Jahanian Radar 4547045 * parser.c (objc_foreach_stmt): Fix a thinko. 2006-04-12 Fariborz Jahanian Radar 4507230 * parser.c (objc_foreach_stmt): Check for valid objc objects in foreach header. 2006-04-06 Fariborz Jahanian Radar 4436866 (Missing copies attribute) * lex.c (reswords): New keyword 'copies' added. * parser.c (objc_cp_parser_at_property): Parse 'copies' attribute. 2006-02-15 Fariborz Jahanian Radar 4445586 * semantics.c (begin_do_stmt): DO_STMT nodes take an extra argument to build. 2005-11-08 Fariborz Jahanian Radar 4330422 * typeck.c (comp_ptr_ttypes_real): Remove the hack. un-volatize the artificially 'volatized' type before doing pointer comparison. 2005-08-15 Ziemowit Laski Radar 4093475 * parser.c (cp_parser_objc_interstitial_code): Catch stray '{' and '}' tokens and issue appropriate errors. (cp_parser_objc_method_prototype_list, cp_parser_objc_method_definition_list): Bail out if end-of-file is seen; issue error if trailing '@end' is not seen. 2008-08-06 Fariborz Jahanian Radar 6040305 - work in progress. * parser.c (clean_and_exit): Clean up if inside a function. (cp_parser_block_literal_expr): Set DECL_NO_STATIC_CHAIN if inside a function. 2008-08-05 Fariborz Jahanian Radar 6040305 - work in progress. * decl.c (init_byref_decl): Generate c-style helper functions for compose/dispose helpers. 2008-08-04 Fariborz Jahanian Radar 6040305 - work in progress. * decl.c (synth_block_byref_id_object_copy_func, synth_block_byref_id_object_dispose_func, block_start_struct, block_finish_struct, new_block_byref_decl, init_byref_decl): New routines. (cp_finish_decl): Build the APIed version of a __byref local vriable. * semantics.c (finish_id_expression): Add a __byref variable to the list of such variables for current block. * parser.c (build_component_ref): Fix to make it work. (cp_parser_block_literal_expr): Push/pop language-c, set context of the helper function. (declare_block_prologue_local_vars): Mend tree for the built-in local variables in the helper prologue. 2008-07-30 Fariborz Jahanian Radar 6040305 * call.c (standard_conversion): Allow conversion of 'id' type to a block pointer. 2008-07-30 Fariborz Jahanian Radar 6040305 * typeck.c (build_block_call): New (build_function_call): Call build_block_call for block calls. * call.c (standard_conversion): Remove "void *" to block pointer conversion. 2008-07-29 Fariborz Jahanian Radar 6040305 * call.c (standard_conversion): Allow assignment of "void *" to block pointer object. 2008-07-28 Fariborz Jahanian Radar 6040305 * typeck.c (comptypes): block-pointer types' return type get special treatment. 2008-07-16 Eugene Marinelli Radar 5559195 * decl.c (cxx_maybe_build_cleanup): When considering whether to build a cleanup for a class type, use CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY and CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE instead of TYPE_HAS_NONTRIVIAL_DESTRUCTOR to determine whether it must be output. 2008-07-15 Eugene Marinelli Radar 5559195 * cp-tree.h (struct lang_type_class): Add destructor_triviality_final flag to mark when has_nontrivial_destructor_body and destructor_nontrivial_because_of_base are final. Add accessor for this flag. * parser.c (cp_parser_statement_seq_opt): Use CLASSTYPE_DESTRUCTOR_TRIVIALITY_FINAL to determine if destructor should be checked for being empty, and set it if CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY is changed. 2008-07-10 Eugene Marinelli Radar 5559195 * init.c (push_base_cleanups): Check flags indicating whether destructor of base class has a nontrivial body, has a base destructor that must be called, or is private to determine whether it should be called by the derived class. Set CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE to 1 if it has members that must be deleted. * class.c (check_bases, finish_struct_bits, add_implicitly_declared_members): Set CLASSTYPE_DESTRUCTOR_NONTRIVIAL_BECAUSE_OF_BASE and CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY based on base classes. (check_methods): Set CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY to 1 whenever a user-declared destructor is seen as a conservative assumption. * cp-tree.h (struct lang_type_class): Add has_nontrivial_destructor_body and destructor_nontrivial_because_of_base flags. Decrement remaining dummy bits. Add accessors for these flags. * parser.c (cp_parser_statement_seq_opt): Unmark CLASSTYPE_HAS_NONTRIVIAL_DESTRUCTOR_BODY and then set it again only if a statement is parsed. 2007-05-07 Fariborz Jahanian Radar 4157812 * parser.c (cp_parser_objc_method_keyword_params): Recognize optional method argument attribute. 2007-03-21 Fariborz Jahanian Radar 2848255 * except.c (do_begin_catch): Take a new argument to decide to call objc_begin_catch for objc exceptions. (objcp_build_eh_type_type): New. (do_end_catch): Call objc_end_catch for objc type exceptions. (expand_start_catch_block): Add new argument to do_begin_catch call. (build_throw): Call objc_throw_exception for throwing objc type objects. * cp-tree.h (objc2_valid_objc_catch_type, objcp_build_eh_type_type): New extern decl. * parser.c (cp_parser_objc_try_catch_finally_stateme): Add syntax for @catch(...). 2006-04-26 Fariborz Jahanian Radar 3803157 (method attributes) * parser.c (cp_parser_objc_maybe_attributes): New. (cp_parser_objc_method_keyword_params): Parse attributes at end of method declaration. (cp_parser_objc_method_tail_params_opt): Parse attributes after '...'. (cp_parser_objc_method_signature): Retreive method attribute for the caller. (cp_parser_objc_method_prototype_list): Pass new arg. to cp_parser_objc_method_signature and pass attributes to objc_add_method_declaration. (cp_parser_objc_method_definition_list): Pass new arg. to cp_parser_objc_method_signature and pass attributes to objc_start_method_definition. 2006-03-27 Fariborz Jahanian Radar 4133425 * lex.c (unqualified_name_lookup_error): Issue diagnostic for private 'ivar' access. 2006-02-02 Fariborz Jahanian Radar 4426814 * typeck.c (build_modify_expr): Undo call to objc_read_weak on LHS of the assignment. * parser.c (cp_parser_cast_expression): Central place to add objc_read_weak call on expressions of __weak objects. 2005-12-15 Fariborz Jahanian Radar 4229905 * typeck.c (composite_pointer_type): Call objc_have_common_type when comparing two objective-c pointer types. 2005-10-17 Fariborz Jahanian Radar 4290840 * parser.c (cp_parser_objc_method_keyword_params): Check for valid method parameters and issue error. (cp_parser_objc_method_definition_list): Check for invalid tokens which cannot start a function definition. 2005-08-02 Ziemowit Laski Radar 4185810 * parser.c (cp_parser_compound_statement): Continue parsing even if the initial '{' is missing; an error message is already being produced. (cp_parser_statement_seq_opt): In addition to '}' and end-of-file, a statement sequence may also be terminated by a stray 'else' or '@end'. # APPLE LOCAL begin for-fsf-4_4 3274130 5295549 2007-08-03 Geoffrey Keating Radar 5295549 * parser.c (cp_parser_iteration_statement): Handle attributes. * semantics.c (begin_for_stmt): Put attributes in built tree. (begin_while_stmt): Put attributes in built tree. (begin_do_stmt): Put attributes in built tree. * pt.c (tsubst_expr): Handle attributes for FOR_STMT, WHILE_STMT, DO_STMT. * cp-gimplify.c (gimplify_cp_loop): Handle attributes. (gimplify_for_stmt): Pass attributes to gimplify_cp_loop. (gimplify_while_stmt): Pass attributes to gimplify_cp_loop. (gimplify_do_stmt): Pass attributes to gimplify_cp_loop. * dump.c (cp_dump_tree): Dump attributes for FOR_STMT, WHILE_STMT, DO_STMT. * cp-tree.h (begin_while_stmt): Update prototype. (begin_do_stmt): Likewise. (begin_for_stmt): Likewise. * cp-tree.def (FOR_STMT): Add extra parameter. (WHILE_STMT): Likewise. (DO_STMT): Likewise. * init.c (build_vec_init): Update for change to begin_for_stmt. # APPLE LOCAL end for-fsf-4_4 3274130 5295549