| 2018-08-20 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r263669. |
| |
| Merge trunk r263667. |
| |
| Merge trunk r263658. |
| |
| 2018-08-17 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r263622. |
| |
| Merge trunk r263618. |
| |
| 2018-08-16 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r263587. |
| |
| 2018-08-15 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r263558. |
| |
| libcpp/ |
| * incude/cpplib.h (NODE_...): Reenumerate. |
| (enum node_type): NT_VOID may be assert. |
| (struct _cpp_hashnode_value): Add assert field. |
| (cpp_user_macro_p): Don't check for assert here. |
| * directives.c (find_answer): Rename to ... |
| (find_assert): ... here. Adjust. |
| (undefine_macros): Zap value.assert. |
| (_cpp_test_assertion, do_assert, do_unassert): Adjust. |
| |
| 2018-08-08 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/c-family/ |
| c-ppoutput.c (dump_macro): No need to check for assert here. |
| libcpp/ |
| * include/cpplib.h (cpp_user_macro_p): Check non-assertness here. |
| (cpp_fun_like_macro_p): Make inline. |
| * macro.c (enter_macro_context): Use it directly. |
| (cpp_fun_like_macro_p): Remove definition here. |
| * pch.c (save_macros): Not need to check assertness here. |
| |
| Merge trunk r263434. |
| |
| Fold cpp-id-data.h into cpplib.h |
| libcpp/ |
| * internal.h: Include cpplib.h, not cpp-id-data.h. |
| (uchar, UC): From cpp-id-data.h. |
| * include/cpplib.h (cpp_macro_kind, cpp_macro): From cpp-id-data.h. |
| * include.cpp-id-data.h: Delete. |
| * Makefile.in (TAGS_SOURCES): Drop cpp-id-data.h. |
| gcc/ |
| * Makefile.in (CPP_ID_DATA_H): Delete. |
| (CPP_INTERNAL_H): Drop CPP_ID_DATA_H. |
| (GT_FILES): Replace CPP_ID_DATA_H with CPPLIB_H. |
| * cppbuiltin.c: Include cpplib.h instead of cpp-id-data.h. |
| gcc/c-family |
| * c-ada-spec.c: Don't include cpp-id-data.h. |
| * c-cppbuiltin.h: Likewise. |
| |
| libcpp/ |
| * include/cpplib.h (enum node_type): Rename to NT_USER_MACR, |
| NT_BUILTIN_MACRO. |
| (CPP_HASNODE_VALUE_IDX): Delete. |
| (union _cpp_hashnode_value): Adjust. |
| (struct cpp_hashnode): Likewise. |
| (cpp_macro_p, cpp_user_macro_p, cpp_builtin_macro_p): New. |
| * internal.h (_cpp_mark_macro_used): Use cpp_user_macro_p. |
| * directives.c (do_undef, do_pragma_poison, do_ifdef, do_ifndef) |
| (cpp_pop_definition): Use cpp_macro_p and friends. |
| (doassert): Adjust. |
| * expr.c (parse_defined): Use cpp_macro_p. |
| * files.c (should_stack_file): Likewise. |
| * identifiers.c (cpp_defined): Likewise. |
| * init.c (cpp_init_special_builtins): Adjust. |
| * lex.c (is_macro): Use cpp_macro_p. |
| * macro.c (cpp_warn_if_unused_macro, enter_macro_context) |
| (warn_of_redefinition, _cpp_create_definition): Use cpp_macro_p |
| and friends. |
| (_cpp_notify_macro_use): Adjust. |
| (cpp_macro_p): Delete old definition. |
| (cp_fun_like_macro_p): Use cpp_user_macro_p. |
| (cpp_macro_definition): Likewise. |
| * pch.c (write_macdef, count_defs, write_defs, save_macros): Adjust. |
| * traditional.c (fun_loke_macro, maybe_start_funlike) |
| (_cpp_scan_out_logical_line, push_replacement_text): Use |
| cpp_macro_p and friends. |
| gcc/c-family/ |
| * c-ada-spec.c (count_ada_macro, store_ada_macro): Use cpp_user_macro_p. |
| * c-ppoutput.c (cb_used_define, dump_macro): Likewise. |
| * c-spellcheck.cc (should_suggest_as_macro_p): Likewise. |
| gcc/ |
| * config/powerpcspe/powerpcspe-c.c (rs6000_macro_to_expand): Adjust. |
| * config/rs6000/rs6000-c.c (rs6000_macro_to_expand): Adjust. |
| gcc/cp/ |
| * name-lookup.c (lookup_name_fuzzy): Use cpp_user_macro_p. |
| gcc/fortran/ |
| * cpp.c (dump_macro): Use cpp_user_macro_p. |
| |
| libcpp/ |
| * internal.h (_cpp_notify_macro_use): Declare. |
| (_cpp_maybe_notify_macro_use): Define. |
| (_cpp_do_lazy_macro, _cpp_maybe_lazy_macro): Delete. |
| * directives.c (do_ifdef, do_ifndef): Call |
| _cpp_maybe_notify_macro_use. |
| * expr.c (parse_defined): Likewise. |
| * macro.c (enter_macro_context): Use _cpp_maybe_notify_macro_use. |
| (warn_of_redefinition): Do lazy definition explicitly. |
| (_cpp_notify_macro_use): Define. |
| (_cpp_do_lazy_macro): Delete. |
| |
| Move NODE_BUILTIN to NT_BUILTIN. |
| gcc/c-family/ |
| * c-ppoutput.c (cb_used_define): Use cpp_macro_p. |
| gcc/cp/ |
| * name-lookup.c (lookup_name_fuzzy): Use cpp_macro_p. |
| libcpp/ |
| * directives.c (do_undef): Adjust macro detection. |
| (undefine_macros): Adjust. |
| (do_pragma_poison, do_ifndef, do_ifdef, cpp_pop_definition): |
| Adjust. |
| * expr.c (parse_defined): Adjust. |
| * files.c (should_stack_file): Adjust. |
| * identifiers.c (cpp_defined): Adjust. |
| * include/cpplib.h (NODE_BUILTIN): Delete. |
| (enum node_type): Add NT_BUILTIN. |
| (CPP_HASHNODE_VALUE_IDX): Adjust. |
| * init.c (cpp_init_special_builtins): Adjust. |
| * internal.h (_cpp_mark_macro, _cpp_maybe_lazy_macro): Adjust. |
| * lex.c (is_macro): Adjust. |
| * macro.c (struct macro_arg_saved_data): Add type field. |
| (_cpp_warn_if_unused_macro): Adjust. |
| (enter_macro_context, cpp_get_token_1, warn_of_redefinition) |
| (_cpp_free_defintion, _cpp_safe_parameter) |
| (_cpp_unsave_parameters, _cpp_create_definition): Adjust. |
| (cpp_macro_p): Adjust. |
| * pch.c (write_macdef, count_defs, write_defs, cpp_validate_state) |
| (save_macros): Adjust. |
| * traditional.c (fun_like_macro, maybe_start_funlike) |
| (_cpp_scan_out_logical_line, push_replacement_text): Adjust. |
| |
| 2018-08-07 Nathan Sidwell <nathan@acm.org> |
| |
| Move NODE_MACRO_ARG to NT_MACRO_ARG. |
| libcpp/ |
| * include/libcpp.h (NODE_MACRO_ARG): Delete. |
| (enum node_type): Add NT_MACRO_ARG. |
| (CPP_HSHNODE_VALUE_IDX): Adjust. |
| * macro.c (_cpp_save_parameter, _cpp_unsave_parameter): Adjust. |
| (lex_expansion_token): Likewise. |
| * traditional.c (_cpp_scan_out_logical_line): Likewise. |
| |
| 2018-08-06 Nathan Sidwell <nathan@acm.org> |
| |
| Macro laziness now a property of cpp_macro. |
| libcpp/ |
| * include/cpp-id-data.h (cpp_macro): Add lazy field. |
| * include/libcpp.h (struct cpp_callbacks): Rename and retype |
| user_builtin_macro to user_lazy_macro. |
| (cpp_define_lazily): Adjust, |
| (cpp_define_lazy): Delete. |
| (enum cpp_builtin_type): Remove BT_FIRST_USER, BT_LAST_USER. |
| * internal.h (_cpp_do_lazy_macro): Declare. |
| (_cpp_maybe_lazy_macro): Inline fn. |
| * macro.c (enter_macro_context, warn_of_redefinition): Use |
| _cpp_maybe_lazy_macro. |
| (_cpp_new_macro): Initialize lazy field. |
| (cpp_define_lazily): Adjust. |
| (_cpp_do_lazy_macro): Define. |
| (cpp_macro_definition): Simplify. |
| * pch.c (write_macrodef, save_macros): Likewise. |
| * directives.c (do_ifdef, do_ifndef): Use _cpp_maybe_lazy_macro. |
| * expr.c (parse_defined): Likewise. |
| gcc/c-family/ |
| * c-cppbuiltin.c (lazy_hex_fp_value): Adjust for API changes. |
| (builtin_define_with_hex_fp_valye): Likewise. |
| |
| Merge trunk r263332. |
| |
| 2018-08-03 Nathan Sidwell <nathan@acm.org> |
| |
| An API for lazy builtin macros. |
| libcpp/ |
| * include/libcpp.h (struct cpp_callbacks): Adjust |
| user_builtin_macro callback. |
| (cpp_define_lazily, cpp_define_lazy): Declare. |
| * macro.c (enter_macro_context, warn_of_redefinition): Adjust. |
| (cpp_define_lazily, cpp_define_lazy): Define. |
| (cpp_macro_definition): Adjust. |
| * pch.c (write_macrdef, save_macros): Likewise. |
| * directives.c (do_ifdef, do_ifndef): Adjust. |
| * expr.c (parse_defined): Likewise. |
| gcc/c-family/ |
| * c-cppbuiltin.c (lazy_hex_fp_value): Adjust for API changes. |
| (builtin_define_with_hex_fp_valye): Likewise. |
| |
| 2018-08-02 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * include/cpplib.h (enum node_type): Remove NT_ASSERTION. |
| (NTV_NONE): Delete. |
| (CPP_HASHNODE_VALUE_IDX): Adjust. |
| * macro.c (_cpp_free_definition): Zap macro pointer. |
| (_cpp_create_definition): Move _cpp_free_definition call. |
| * directives.c (find_answer): Initialize result. |
| (_cpp_test_assertion): Check macro pointer. |
| (do_assert): Likewise. |
| (do_unassert): Don't node type. |
| * pch.c (write_macdef, count_Defs, write_defs) |
| (save_macros): Adjust fo loss of NT_ASSERTION. |
| |
| Asserts are now macro variants |
| libcpp/ |
| * directives.c (parse_answer, parse_assertion, find_answer): Use |
| cpp_macro, not struct answer. |
| (do_assert, do_unassert): Adjust. |
| * include/cpp-id-data.h (struct answer): Delete. |
| * include/cpplib.h (NTV_ANSWER): Delete. |
| (CPP_HASNODE_VALUE_IDX): Adjust. |
| (_cpp_hashnode_value): Remove answer. |
| (cpp_macro_p): Make outline ... |
| * macro.c (cpp_macro_p): ... here. |
| |
| Assert body is back as trailing array |
| libcpp/ |
| * include/cpp-id-data.h (struct answer): Make body a trailing array |
| pointer. |
| * directives.c (parse_answer, parse_assertion, find_answer): |
| Return whole answer struct. |
| (_cpp_test_assertion, do_assert, do_unassert): Adjust. |
| |
| 2018-08-01 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * internal.h (_cpp_construct_macro): Rename to ... |
| (_cpp_new_macro): ... here. Kill old declaration. |
| * macro.c (_cpp_construct_macro): Rename to ... |
| (_cpp_new_macro): ... here. Kill old definition. |
| (create_iso_definition): Adjust. |
| * traditional.c (_cpp_create_trad_definition): Adjust. |
| |
| Macro tokens are trailing array |
| libcpp/ |
| * include/cpp-id-data.h (cpp_macro): Move tokens to trailing array. |
| * internal.h (_cpp_construct_macro): Declare. |
| * macro.c (lex_expansion): Return macro pointer, adjust. |
| (macro_real_token_count): Count backwards. |
| (replace_args): Use pointer equality, not orderedness. |
| (create_iso_definition): Adjust for trailing token array. |
| (_cpp_construct_macro): New, broken out of ... |
| (_cpp_new_macro): ... here. Call it. |
| (cpp_macro_definition): Constify token pointer. |
| gcc/c-family/ |
| * c-ada-spec.c (macro_length): Constify token pointer. |
| (dump_ada_macros): Likewise. |
| |
| 2018-07-17 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * macro.c (create_iso_definition): Create macro after saving |
| parms. |
| * traditional.c (_cpp_create_trad_definition): Likewise. |
| |
| 2018-07-16 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * internal.h (_cpp_reserve_room): New inline. |
| (_cpp_commit_buff): Declare. |
| * lex.c (_cpp_commit_buff): Implement. |
| * directives.c (parse_answer): Use them. |
| * macro.c (alloc_expansion_token): Fold ito ... |
| (lex_expansion_token): ... here. |
| (_cpp_save_parameter): Use _cpp_reserve_room. |
| (create_iso_definition): Use _cpp_reserve_room, _cpp_commit_buff). |
| |
| 2018-07-13 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * macro.c (parse_params): Re implement state machine. |
| (create_iso_definition): Adjust first token peeking. |
| * traditional.c (save_replacement_text): No need to set macro kind |
| here. |
| gcc/testsuite/ |
| * gcc.dg/cpp/macsyntx.c: Update errors. |
| * gcc.dg/cpp/macsyntx2.c: Update errors. |
| |
| libcpp/ |
| * internal.h (_cpp_new_macro): Declare. |
| (_cpp_unsave_parameters): Declare. |
| (_cpp_create_trad_definition): Return cpp_macro. |
| * macro.c (_cpp_unsave_parameters): New. |
| (parse_params): Take nparm & varadic ptr parms, not macro. |
| (create_iso_definition): Return cpp_macro. Adjust throughout. |
| (_cpp_new_macro): New. |
| (_cpp_create_definition): Adjust. |
| * traditional.c (scan_parameters): Take nparm ptr, not macro. |
| (_cpp_create_trad_definition): Return cpp_macro, adjust. |
| |
| libcpp/ |
| * internal.h (_cpp_save_parameter): Take parm no, not macro. |
| * macro,c (_cpp_save_parameter): Adjust. Invert sense of return value. |
| (parse_params): Adjust. |
| * traditional.c (scan_parameters): Likewise. |
| |
| 2018-07-12 Nathan Sidwell <nathan@acm.org> |
| |
| assert body is indirect. |
| libcpp/ |
| * include/cpp-id-data.h (struct answer): Make body an external |
| pointer. |
| * directives.c (parse_answer, parse_assertion, find_answer): Use |
| separate base-ptr/len tuple for body. |
| (_cpp_test_assertion, do_assert, do_unassert): Adjust. |
| |
| 2018-07-11 Nathan Sidwell <nathan@acm.org> |
| |
| Add cmk_assert structures |
| libcpp/ |
| * include/cpp-id-data.h (enum cpp_macro_kind): Add cmk_assert. |
| (struct cpp_macro): Place parms in union. |
| * macro.c (warn_of_redefinition): Adjust param field access. |
| (create_iso_definiton, _cpp_create_definition): Likewise. |
| (check_trad_stringification, cpp_macro_definition): Likewise. |
| * traditional.c (_cpp_replacement_text_len): Likewise. |
| (_cpp_copy_replacement_text, _cpp_create_trad_definition): Likewise. |
| gcc/c-family/ |
| * c-ada-spec.c (macro_length, dump_ada_macros): Adjust param field |
| access. |
| |
| Add cpp_macro_kind |
| libcpp/ |
| * include/cpp-id-data.h (enum cpp_macro_kind): New. |
| (struct cpp_macro): Replace traditional with kind. Adjust GTY. |
| * macro.c (create_iso_definition): Set kind. |
| * traditional.c (push_replacement_text): Assert trad. |
| (save_replacement_text): Set kind. |
| |
| Store include-from as a location, not line-map index. |
| libcpp/ |
| * include/line-map.h (line_map_ordinary): Replace included_from |
| index with included_at source_location. |
| (ORDINARY_MAP_INCLUDER_FILE_INDEX, LAST_SOURCE_LINE_LOCATION) |
| (LAST_SOURCE_LINE, LAST_SOURCE_COLUMN): Delete. |
| (INCUDED_FROM): Delete. |
| (INCLUDED_AT, linemap_included_at): New. |
| (MAIN_FILE_P): Adjust. |
| * directives.c (do_linemarker): Use linemap_included_at. |
| * line-map.c (include_at_map): New. |
| (line_check_files_exited): Use it. |
| (LAST_SOURCE_LINE_LOCATION): New (moved from header). |
| (linemap_add, linemap_dump, linemap_dump_location): Adjust. |
| gcc/ |
| * diagnostic.c (diagnostic_report_current_module): Use |
| linemap_included_at. Adjust line & col discovery. |
| gcc/c-family/ |
| * c-common.c (try_to_locate_new_include_insertion_point): Use |
| linemap_included_at. |
| * c-lex.c (fe_file_change): Use INCLUDED_AT. |
| * c-ppoutput.c (pp_file_change): Likewise. |
| gcc/fortran/ |
| * cpp.c (cb_file_change): Adjust for line map inclusion changes. |
| |
| 2018-07-09 Nathan Sidwell <nathan@acm.org> |
| |
| libcpp/ |
| * include/line-map.h (enum lc_reason): Reformat comments. |
| gcc/ |
| * diagnostic.c (diagnostic_report_current_module): Reroll loop. |
| use array for prefix strings. |
| |
| Default allocator |
| libcpp/ |
| * include/line-map.h (line_maps): Document default allocator. |
| * line-map.c (linemap_init): Set default allocator. |
| (new_linemap): No need to set default here. Simplify data flow. |
| |
| 2018-07-06 Nathan Sidwell <nathan@acm.org> |
| |
| Hide NT_MACRO |
| libcpp/ |
| * include/cpplib.h (cpp_macro_p): New. |
| * macro.c (cpp_fun_like_macro_p): Use it. |
| gcc/c-family/ |
| * c-ada-spec.c (count_ada_macro, store_ada_macro): Use |
| cpp_macro_p. |
| * c-ppoutput.c (dump_macro): Likewise. |
| * c-spellcheck.cc (should_suggest_as_macro_p): Likewise. |
| gcc/ |
| * config/rs6000/rs6000-c.c (rs6000_macro_to_expand): Use cpp_macro_p. |
| * config/powerpcspe/powerpcspe-c.c (rs6000_macro_to_expand): Likewise. |
| gcc/fortran/ |
| * cpp.c (dump_macro): Use cpp_macro_p. |
| |
| Merge trunk r262473. |
| |
| Merge trunk r260623. |
| |
| 2017-11-03 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r254369. |
| |
| 2017-11-01 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r254314. |
| |
| Merge trunk r254279. |
| |
| 2017-10-31 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r254263. |
| |
| Merge trunk r254243. |
| |
| 2017-10-30 Nathan Sidwell <nathan@acm.org> |
| |
| Operator code compaction part 12. |
| gcc/cp/ |
| * cp-tree.h (CPTI_CONV_OP_IDENTIFIER): Restore. |
| (conv_op_identifier): Revert. |
| * decl.c (initialize_predefined_identifiers): Restore. |
| (grok_op_properties): Detect conversion operators. |
| * decl2.c (mark_used): Dectect lambda conversion properly. |
| * lambda.c (maybe_add_lambda_conv_op): Not an overloaded fn. |
| * lex.c (init_operators): No need to deal with TYPE_EXPR. |
| |
| Merge trunk r254231. |
| |
| Operator code compaction part 11. |
| gcc/cp/ |
| * cp-tree.h (lang_decl_fn): Move spare bits to end. |
| (ovl_op_flags): Adjust names. |
| * decl.c (grokdeclarator): Use OVL_OP_FLAG_ALLOC. |
| (grok_op_properties): Adjust ellipsis and arg scanning. |
| * lex.c (init_operators): Adjust assert. |
| * operators.def: Adjust new & delete flags. |
| * pt.c (push_template_decl_real): Use OVL_OP_FLAG_ALLOC. |
| * typeck.c (check_return_expr): Likewise. |
| |
| Operator code compaction part 10. |
| gcc/cp/ |
| * cp-tree.h (ovl_op_flags): Adjust. |
| (ovl_op_alternate): Declare. |
| * decl.c (grokdeclarator): Adjust NEW/DEL selection. |
| (grok_op_properties): Move warnings to end. Don't multiply check |
| specific tree codes. |
| * lex.c (ovl_op_alternate): Define. |
| (init_operators): Initialize it. |
| * operators.def: Adjust new/delete. |
| * pt.c (push_template_decl_real): Likewise. |
| * typeck.c (check_return_expr): Likewise. |
| gcc/testsuite/ |
| * g++.dg/other/operator2.C: Adjust diagnostic. |
| * g++.old-deja/g++.jason/operator.C: Likewise. |
| |
| 2017-10-27 Nathan Sidwell <nathan@acm.org> |
| |
| Operator code compaction part 9. |
| gcc/cp/ |
| * cp-tree.h (lang_decl_fn): Replace operator_code with smaller |
| ovl_op_code field. |
| (DECL_OVERLOADED_OPERATOR_CODE, SET_OVERLOADED_OPERATOR_CODE): Delete. |
| (DECL_OVERLOADED_OPERATOR_CODE_RAW): New. |
| (DECL_OVERLOADED_OPERATOR_IS): Adjust. |
| * decl.c (duplicate_decls): Open code operator copying. |
| (builtin_function_1): Don't set operator code. |
| (build_library_fn): Adjust operator code setting. |
| (grok_op_properties): Likewise. |
| * lambda.c (maybe_add_lambda_conv_op): Likewise. |
| * method.c (implicitly_declare_fn): Likewise. |
| * mangle.c (write_unqualified_name): Adjust operator name |
| accessor. |
| libcc1/ |
| * libcp1plugin.cc (plugin_build_decl): Adjust. |
| |
| Operator code compaction part 8. |
| gcc/cp/ |
| * cp-tree.h (CPTI_CONV_OP_IDENTIFIER): Delete. |
| (conv_op_identifier): Map into ovl_op_info array. |
| (enum cp_identifier_kind): Swap cik_conv_op & |
| cik_reserved_for_udlit. |
| (IDENTIFIER_CONV_OP_P): Adjust. |
| * decl.c (initialize_predefined_identifiers): Drop conv_op. |
| (grok_op_properties): Use IDENTIFIER_OVL_OP_INFO for all ops. |
| * lex.c (get_identifier_kind_name): Adjust. |
| (init_operators): Special case TYPE_EXPR. |
| * operators.def: Add TYPE_EXPR. Casts are mangling only. |
| |
| Operator code compaction part 7. |
| gcc/cp/ |
| * cp-tree.h (cp_identifier_kind): Swap cik_assign_op & |
| cik_reserved_for_udlit. |
| (IDENTIFIER_OVL_OP_P, IDENTIFIER_ASSIGN_OP_P, |
| IDENTIFIER_CONV_OP_P, IDENTIFIER_OVL_OP_INFO): Update. |
| * decl.c (ambi_op_p, unary_op_p): Delete. |
| (grok_op_properties): Reimplement operator lookup. |
| * lex.c (get_identifier_kind_name): Adjust. |
| * mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP_INFO. |
| * operators.def (COMPONENT_REF): Is unary. |
| |
| Operator code compaction part 6. |
| gcc/cp/ |
| (enum cp_operator_kind): Delete cik_newdel_op. |
| (IDENTIFIER_NEWDEL_OP_P): Delete. |
| (IDENTIFIER_OVL_OP_P): New. |
| (enum ovl_op_flags): New. |
| (struct ovl_op_info_t): Delete kind, reorder. |
| (IDENTIFIER_OVL_OP_INFO, IDENTIFIER_OVL_OP_FLAGS): New. |
| * decl.c (grokdeclarator): Use IDENTIFIER_OVL_OP_FLAGS. |
| * lex.c (ovl_op_info): Adjust initialization. |
| (get_identifier_kind_name): Lose new-del-op. |
| (set_operator_ident): Return identifier. Don't set kind. |
| (init_operators): Set kind here. Set IDENTIFIER_CP_INDEX. |
| * mangle.c (write_unqualified_id): Pick first operator. |
| * operators.def: Adjust. |
| * pt.c (push_template_decl_real): Use IDENTIFIER_OVL_OP_FLAGS. |
| * typeck.c (check_return_expr): Likewise. |
| |
| Operator code compaction part 5. |
| gcc/cp/ |
| * cp-tree.h (ovl_op_code): Rename from overloaded_operator_code. |
| (ovl_op_info_t, ovl_op_info, ovl_op_mapping): Rename from |
| ooc_$FOO. |
| (operator_name_info_t, operator_name_info, |
| assignment_operator_name_info): Delete. |
| * *.c: Update all uses. |
| |
| Merge trunk r254141. |
| |
| Operator code compaction part 4. |
| gcc/cp/ |
| * cp-tree.h (cp_assignment_operator_id): Delete. |
| (assign_op_identifier, call_op_identifier): New. |
| * call.c (build_op_call_1): Use call_op_identifier. |
| (has_trivial_copy_assign_p): Use assign_op_identifier. |
| (build_special_member_call): Likewise. |
| * class.c (dfs_declare_virt_assop_and_dtor, |
| classtype_has_move_assign_or_move_ctor_p): Likewise. |
| * decl.c (grok_special_member_properties): Likewise. |
| * lambda.c (lambda_function): Use call_op_identifier. |
| * method.c (do_build_copy_assign): Use assign_op_identifier. |
| (get_copy_assign, synthesized_method_walk, |
| implicitly_declare_fn): Likewise. |
| * parser.c (cp_parser_lambda_declarator_opt): Use call_op_identifier. |
| * semantics.c (classtype_has_nothrow_assign_or_copy_p): Use |
| assign_op_identifier. |
| * typeck.c (check_return_expr): Likewise. |
| |
| 2017-10-26 Nathan Sidwell <nathan@acm.org> |
| |
| Operator code compaction part 3. |
| gcc/cp |
| * cp-tree.h (cp_operator_id): Delete. |
| (ovl_op_identifier): Define. |
| (OOC_INFO): Define. |
| * call.c (build_op_call_1): Use ovl_op_identifier. |
| (op_error): Use OOC_INFO. |
| (build_conditional_expr_1): Use ovl_op_identifier. |
| (build_new_op_1): Likewise. |
| (build_op_delete_call): Likewise. |
| * class.c (type_requires_array_cookie): Likewise. |
| * decl.c (push_cp_library_fn): Likewise. |
| * decl2.c (maybe_warn_sized_delete): Likewise. |
| * error.c (dump_expr): Use OOC_INFO. |
| (parm_to_string): Use ovl_op_identifier. |
| * init.c (build_new_1): Likewise. |
| * lambda.c (lambda_function): Likewise. |
| * lex.c (unqualified_name_lookup_error): Don't check ERROR_MARK. |
| * mangle.c (write_unqualified_name): Use OOC_INFO. |
| (write_expression): Likewise. |
| * method.c (synthesized_method_walk): Use ovl_op_identifier. |
| * parser.c (cp_parser_lambda_declarator_opt): Likewise. |
| (cp_parser_operator): Likewise. |
| (cp_parser_omp_clause_reduction): Likewise. |
| * semantics.c (omp_reduction_id): Likewise. |
| * typeck.c (cxx_sizeof_or_alignof_type): Use OOC_INFO. |
| libcc1/ |
| * libcp1plugin.cc (plugin_build_decl): Use ovl_op_identifier. |
| (plugin_build_dependent_expr): Likewise. |
| |
| Operator code compaction part 2. |
| gcc/cp/ |
| * cp-tree.h (IDENTIFIER_CP_INDEX): New. |
| * call.c (op_error): Use ooc_info. |
| (build_new_op_1): Likewise. |
| (build_op_delete_call): Likewise. |
| * error.c (assop_to_string): Delete. |
| (op_to_string): Add assop arg. Use ooc_info. |
| (dump_expr): Use ooc_info. |
| (cp_printer): Adjust. |
| * mangle.c (write_unqualified_name): Use ooc_info. |
| * typeck.c (cxx_sizeof_or_alignof_type): Likewise. |
| |
| 2017-10-25 Nathan Sidwell <nathan@acm.org> |
| |
| Operator code compaction part 1. |
| gcc/cp/ |
| * cp-tree.h (enum overloaded_operator_codes): New. |
| (struct ooc_info_t): New. |
| (OOC_OPERATORS, OOC_ASSIGNMENTS): New. |
| (ooc_info, ooc_mapping): Declare. |
| * decl.c (grok_op_properties): Use ooc_info. |
| * lex.c (ooc_info, ooc_mapping): Define. |
| (set_operator_ident): New. |
| (init_operators): Initialize ooc_info, ooc_mapping. |
| * mangle.c (write_unqualified_id): Use ooc_info. |
| (write_expression): Use ooc_mapping and ooc_info. |
| * operators.def: Conditionally define DEF_ASSN_OPERATOR. Move |
| assignment ops later. Invoke OPERATOR_TRANSITION. |
| |
| Merge trunk r254084. |
| |
| Kill IDENTIFIER_LABEL_VALUE. |
| gcc/cp/ |
| * cp-tree.h (lang_identifier): Delete label_value slot. |
| (IDENTIFIER_LABEL_VALUE, SET_IDENTIFIER_LABEL_VALUE): Delete. |
| (struct named_label_hasher): Rename to ... |
| (struct named_label_hash): ... here. Reimplement. |
| (struct language_function): Adjust x_named_labels. |
| (lookup_label): Declare here too. |
| * decl.c (struct named_label_entry): Add name and outer slots. |
| (pop_label): Rename to ... |
| (check_label_used): ... here. Don't pop. |
| (note_label, sort_labels): Delete. |
| (pop_labels, pop_local_label): Reimplement. |
| (poplevel): Pop local labels as any other decl. Remove |
| shadowed_labels handling. |
| (named_label_hash::hash, named_label_hash::equal): New. |
| (make_label_decl): Absorb into ... |
| (lookup_label_1): ... here. Add making_local_p arg, reimplement. |
| (lookup_label, declare_local_label): Adjust. |
| (identify_goto, check_previous_goto, check_goto): Adjust. |
| (check_omp_return, define_label_1, define_label): Adjust. |
| * lex.c (make_conv_op_name): Don't clear IDENTIFIER_LABEL_VALUE. |
| * name-lookup.h (struct cp_label_binding): Delete. |
| (struct cp_binding_level): Delete shadowed_labels slot. |
| * ptree.c (cxx_print_identifier): Don't print identifier binding. |
| |
| 2017-10-20 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * class.c (layout_class_type): Cleanup as-base creation, determine |
| mode here. |
| (finish_struct_1): ... not here. |
| |
| 2017-10-19 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * cp-tree.h (LAMBDA_FUNCTION_P): Use |
| DECL_OVERLOADED_OPERATOR_IS. |
| (DECL_OVERLOADED_OPERATOR_P): Just be a predicate. |
| (DECL_VERLOADED_OPERATOR_IS): New. |
| (DECL_OVERLOADED_OPERAT_CODE): New. |
| * call.c (add_function_candidate): Use |
| DECL_OVERLOADED_OPERATOR_IS. |
| (build_op_call_1, build_over_call): Likewise. |
| * decl.c (duplicate_decls): Adjust DECL_OVERLOADED_OPERATOR_P, |
| USE_DECL_OVERLOADED_OPERATOR_CODE. |
| (start_preparsed_function): Use DECL_OVERLOADED_OPERATOR_IS. |
| * decl2.c (mark_used): Likwise. |
| * dump.c (dump_op): Delete. |
| (cp_dump_tree): Don't call it. |
| * mangle.c (wite_unqualified_name): Use |
| DECL_OVERLOADED_OPERATOR_CODE. |
| * method.c (synthesize_method): Use DECL_OVERLOADED_OPERATOR_IS. |
| (defaultable_fn_check): LIkewise. |
| * tree.c (special_function_p): Likewise. |
| * typeck.c (check_return_expr): Use IDENTIFIER_NEWDEL_OP_P. |
| |
| gcc/cp/ |
| * lex.c (get_identifier_kind_name): Fix names. |
| (init_operators): Nuke extraneous operators. |
| * operators.def (DEF_OPERATOR): Fix documentation. |
| (DEF_ASSN_OPERATOR): Lose ARITY. |
| (DEF_SIMPLE_OPERATOR, DEF_ASSN_OPERATOR): Undef at end. |
| |
| 2017-10-17 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253836. |
| |
| gcc/cp/ |
| * name-lookup.c (get_member_vec_index): New. Broken out of ... |
| (member_vec_binary_search): ... here. Use it. |
| (member_vec_linear_search): Delete. |
| (fields_linear_search, get_class_binding_direct): Adjust. |
| (get_member_slot): Use get_member_vec_index, reorganize. |
| |
| 2017-10-13 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253733 |
| |
| gcc/ |
| * tree.c (tree_code_size): Reformat. Punt to lang hook for unknown |
| TYPE nodes. |
| gcc/cp/ |
| * cp-objcp-common.c (cp_tree_size): Reformat. Adjust returns size |
| of TYPE nodes. |
| * cp-tree.h (PACK_EXPANSION_PATTERN): Correct formatting. |
| gcc/objc/ |
| * objc-act.c (objc_common_tree_size): Return size of TYPE nodes. |
| |
| Merge trunk r253723. |
| |
| 2017-10-11 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253649. |
| |
| gcc/ |
| * incpath.h (enum incpath_e): Name enum, prefix values. |
| (add_path, add_cpp_dir_path, get_added_cpp_dirs): Use incpath_e type. |
| * incpath.c (heads, tails): Use INC_MAX. |
| (add_env_var_paths, add_standard_paths): Use incpath_e type. |
| (merge_include_chains, split_quote_chain, |
| register_include_chains): Update incpath_e names. |
| (add_cpp_dir_path, add_path, get_added_cpp_dirs): Use incpath_e type. |
| * config/darwin-c.c (add_system_framework_path): Update incpath_e |
| names. |
| (add_framework_path, darwin_register_objc_includes ): Likewise. |
| * config/vms/vms-c.c (vms_c_register_includes): Likewise. |
| |
| gcc/fortran/ |
| * cpp.c (gfc_cpp_add_include_path): Update incpath_e names. |
| (gfc_cpp_add_include_path_after): Likewise. |
| |
| gcc/c-family/ |
| * c-opts.c (add_prefixed_path): Change chain to incpath_e type. |
| (c_common_handle_option): Update incpath_e names. |
| |
| Merge trunk r253623 |
| |
| 2017-10-10 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253619. |
| |
| 2017-10-06 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253485. |
| |
| gcc/cp/ |
| * cp-tree.h (struct default_hash_traits <lang_identifier *>): |
| Delete specialization. |
| |
| 2017-10-05 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * name-lookup.c (extern_c_fns): Use hash_table<named_decl_hash>. |
| (check_extern_c_conflict, c_linkage_bindings): Adjust. |
| |
| gcc/cp/ |
| * cp-tree.h (struct named_decl_hash): New. |
| (lang_decl_ns): Change type of bindings field. |
| * lex.c (maybe_add_lang_decl_raw): Adjust. |
| * name-lookup.c (find_namespace_slot): Adjust. |
| |
| gcc/cp/ |
| * decl2.c (struct mangled_decl_hash): New. |
| (mangled_decls): Use a hash_table, not map. |
| (generate_mangled_alias, record_mangling): Adjust. |
| gcc/ |
| * tree.h (DECL_ASSEBLER_NAME_RAW): New. |
| (DECL_ASSEBLER_NAME_SET_P, SET_DECL_ASSEMBLER_NAME): Use it. |
| |
| gcc/cp/ |
| * name-lookup.c (set_global_binding): No need for stat_hack. |
| |
| Merge trunk r253446. |
| |
| gcc/cp/ |
| Kill IDENTIFIER_GLOBAL_VALUE, SET_IDENTIFIER_GLOBAL_VALUE |
| * cp-tree.h (IDENTIFIER_GLOBAL_VALUE, |
| SET_IDENTIFIER_GLOBAL_VALUE): Delete. |
| * name-lookup.h (set_global_binding): Remove NAME parm. |
| (get_global_binding): New inline fn. |
| * name-lookup.c (identifier_global_value): Use get_global_binding. |
| (set_global_binding): Adjust arg name. |
| * class.c (build_ctor_vtbl_group, build_vtbl_initializer): Adjust. |
| * decl.c (record_builtin_type, expand_static_init, |
| grokdeclarator): Adjust. |
| * decl2.c (get_guard, get_local_tls_init_fn, get_tls_init_fn, |
| get_tls_wrapper_fn, maybe_warn_sized_delete): Adjust. |
| * except.c (declare_library_fn, build_throw): Adjust. |
| * init.c (throw_bad_array_length): Adjust. |
| * rtti.c (throw_bad_cast, throw_bad_typeid, get_tinfo_decl): Adjust. |
| |
| 2017-10-04 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r253413. |
| |
| gcc/cp/ |
| * cp-tree.h (SET_IDENTIFIER_GLOBAL_VALUE): Drop NAME arg. |
| * decl.c (record_builtin_type): Adjust SET_IDENTIFIER_GLOBAL_VALUE. |
| * decl2.c (get_local_tls_init_fn, get_tls_init_fn): Likewise. |
| * name-lookup.c (set_global_binding): Drop NAME arg. |
| * name-lookup.h (set_global_binding): Drop NAME arg. |
| |
| gcc/cp/ |
| * decl.c (record_builtin_type): Reimplement. Push decls with |
| matching name. |
| |
| gcc/cp/ |
| * cp-tree.h (record_mangling): Adjust arg types. |
| * decl2.c (mangled_decls): New hash_map. |
| (generate_mangling_alias): Use mangled_decls, not |
| IDENTFIFIER_GLOBAL_VALUE. |
| (decl_implicit_alias_p): Delete. |
| (record_mangling): Use mangled_decls, not |
| IDENTIFIER_GLOBAL_VALUE. Diagnose conflict here. |
| * mangle.c (mangle_decl): Adjust record_mangling call. Don't |
| diagnose here. |
| * name-lookup.c (set_global_binding): Remove temporary hack. |
| gcc/testsuite/ |
| * g++.dg/abi/mangle41.C: Adjust diags. |
| libcc1/ |
| * libcp1plugin.cc (supplement_binding): Don't call |
| maybe_remove_implicit_alias. |
| |
| 2017-10-03 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * cp-tree.h (record_mangling): Declare. |
| (maybe_remove_implicit_alias): Delete. |
| * mangle.c (maybe_remove_implicit_alias): Delete. |
| (mangle_decl): Use record_mangling. |
| (decl_implicit_alias_p): Move to ... |
| * decl2.c (decl_implicit_alias_p): ... here. |
| (record_mangling): New. |
| * name-lookup.c (supplement_binding_1): Delete implicit_alias |
| handling. |
| (set_global_binding): Allow zapping a slot, for now. |
| |
| 2017-09-13 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r252087. |
| |
| 2017-09-06 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r251808. |
| |
| Merge trunk r251780. |
| |
| 2017-09-05 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r251721. |
| |
| gcc/cp/ |
| * cp-tree.h (DECL_TEMPLATE_CONV_FN_P): Delete. |
| * pt.c (push_template_decl_real): Don't set it. |
| |
| gcc/cp/ |
| * cp-tree.h (DECL_CONV_FN_P): No need to check DECL_NAME nullness. |
| (DECL_CONV_FN_TYPE): FN must be a conv op. |
| |
| gcc/cp/ |
| * class.c (add_method): Move conv_op marker handling to ... |
| * name-lookup.c (find_method_slot): ... here. |
| |
| gcc/cp/ |
| * name-lookup.h (get_class_binding_direct, get_class_binding): |
| Merge want_type and restricted args. |
| * name-lookup.c (get_class_binding_direct): Merge want_type and |
| restricted args. Adjust. |
| (get_class_binding): Adjust for argument merge. |
| * decl.c (reshape_init_class): Adjust get_class_binding call. |
| * search.c (lookup_field_r): Adjust get_class_binding call. |
| |
| Kill CLASSTYPE_SORTED_FIELDS |
| gcc/cp/ |
| * cp-tree.h (struct lang_type): Delete sorted_fields. |
| (CLASSTYPE_SORTED_FIELDS): Delete. |
| gcc/c-family/ |
| * c-common.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp, resort_sorted_fields): Move ... |
| * c-common.h (field_decl_cmp, resort_sorted_fields): ... and ... |
| (struct sorted_fields_type): ... and to ... |
| gcc/c/ |
| * c-decl.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp, resort_sorted_fields): Here and ... |
| * c-lang.h (struct sorted_fields_type): here.. |
| |
| Merge TYPE_FIELDS to METHOD_VEC |
| gcc/cp/ |
| * name-lookup.c (method_vec_binary_search, |
| method_vec_linear_search): New. Broken out of ... |
| (legacy_fn_member_lookup): ... here. Delete. |
| (fields_linear_search): New. Broken out of ... |
| (legacy_nonfn_member_lookup): ... here. Delete. |
| (find_method_slot): Call set_class_bindings if adding method_vec |
| to completed class. |
| (get_class_binding_direct): Use new searching functions. |
| (method-name_cmp): Order identically named decls. |
| (resort_method_name_cmp): Adjust. |
| (sorted_fields_type_new): Delete. |
| (count_fields): Rename to ... |
| (count_class_fields): ... here. Take RECORD_TYPE and adjust. |
| (add_fields_to_record_type): Rename to ... |
| (method_vec_append_class_fields): ... here. Take RECORD_TYPE and |
| adjust. |
| (add_enum_fields_to_record_type): Rename to ... |
| (method_vec_append_enum_values): ... here. Adjust. |
| (method_vec_dedup): New. |
| (set_class_bindings): Reimplement. |
| (insert_late_enum_def_bindings): Reimplement. |
| * name-lookup.h (lookup_field_1, lookup_fnfields_slot, |
| lookup_fnfields_slot_nolazy): Delete. |
| (get_class_binding_direct, get_class_binding, find_method_slot): Move. |
| (set_class_bindings): Add EXTRA parm. |
| * class.c (warn_hidden): Cope with non-functions. |
| * decl.c (cxx_init_decl_processing): Make conv-op marker function |
| not so bogusly typed. |
| |
| 2017-09-01 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r251609. |
| |
| gcc/cp/ |
| * class.c (warn_hidden): Clean up. |
| (clone_constructors_and_destructors): No need to check METHOD_VEC. |
| (type_has_user_provided_constructor): Likewise. |
| (type_has_user_provided_or_explicit_constructor): Likewise. |
| (classtype_has_move_assign_or_move_ctor_p): Likewise. |
| (finish_struct): Adjust comment. |
| |
| gcc/cp/ |
| * cp-tree.h (resort_type_method_vec): Move declaration to ... |
| * name-lookup.h (resort_type_method_vec): ... here. |
| * class.c (finish_struct_1, finish_struct): Adjust |
| set_class_bindings call. Don't call finish_struct_methods. |
| (resort_data, method_name_cmp, resort_method_name_cmp, |
| resort_type_method_vec, finish_struct_methods): Move to ... |
| * name-lookup.c (resort_data, method_name_cmp, |
| resort_method_name_cmp, resort_type_method_vec): ... here. |
| (set_class_bindings): Lose fields arg. Swallow finish_struct_methods. |
| |
| Merge trunk r251592. |
| |
| gcc/cp/ |
| * class.c (finish_struct): Also call set_class_bindings in |
| template case. |
| |
| 2017-08-31 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * class.c (finish_struct_1): Move finish_struct_methods and |
| set_class_bindings to just after layout. |
| (finish_struct): Process using_decls before setting template |
| pseudo-size. Call finish_struct_methods immediately after. |
| |
| gcc/cp/ |
| * class.c (finish_struct_methods): Don't warn about private bases |
| here. |
| (finish_struct_1): Move set_class_bindings as late as possible. |
| (finish_struct): Warn about overly private bases after completing |
| the type. |
| |
| gcc/cp/ |
| * class.c (finish_struct_methods): Move DECL_IN_AGGR_P frobbing to |
| finish_struct_1. |
| (check_bases_and_members): Move finish_struct_methods to ... |
| (finish_struct_1): ... here. Frob DECL_IN_AGGR_P. |
| (unreverse_member_declarations): Remove unneeded if. |
| * method.c (lazily_declare_fn): Adjust comment. |
| * pt.c (do_class_deduction): No need to check CLASSTYPE_METHOD_VEC. |
| * tree.c (type_has_nontrivial_copy_init): Likewise. |
| |
| gcc/cp/ |
| * class.c (add_method): Use find_method_slot. |
| * name-lookup.h (find_method_slot): Declare. |
| * name-lookup.c (legacy_fn_member_lookup): Allow NULL slot in |
| incomplete type. |
| (find_method_slot): Use. |
| * decl.c (grok_special_member_properties): Check conv-op here. |
| |
| Restore get_class_binding name. |
| gcc/cp/ |
| * name-lookup.c (get_class_value, get_class_value_direct): Rename |
| to ... |
| (get_class_binding, get_class_binding_direct): ... here. |
| * name-lookup.h (get_class_value, get_class_value_direct): Rename |
| to ... |
| (get_class_binding, get_class_binding_direct): ... here. |
| * call.c (builduser_type_conersion_1): Rename calls. |
| (has_trivial_copy_assign_p, has_trvial_copy_p): Likewise. |
| * class.c (vbase_has_user_provided_move_assign, |
| classtype_has_move_assign_or_move_ctor_p, type_build_ctor_call, |
| type_build_dtor_call): Likewise. |
| * cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Likewise. |
| * decl.c (reshape_init_class, register_dtor_fn): Likewise. |
| * decl2.c (check_classfn): Likewise. |
| * pt.c (retrieve_specialization, |
| check_explicit_specialization): Likewise. |
| * search.c (lookup_field_r, look_for_overrides_here, |
| lookup_conversions_r): Likewise. |
| * semantics.c (classtype_has_nothrow_assign_or_copy_p): Likewise. |
| |
| gcc/cp/ |
| * name-lookup.c (insert_late_enum_def_bindings): Swap args. |
| * decl.c (finish_enum_value_list): Adjust |
| insert_late_enum_def_bindings call. |
| |
| Restore lang_type::sorted_fields |
| gcc/c/ |
| * c-decl.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp, resort_sorted_fields): Moved back to ... |
| * c-lang.h (struct sorted_fields_type): ... |
| gcc/c-family |
| * c-common.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp, resort_sorted_fields): ... here ... |
| * c-common.h (field_decl_cmp, resort_sorted_fields): ... here ... |
| (struct sorted_fields_type): ... here. |
| gcc/cp/ |
| * cp-tree.h (struct lang_type): Restore sorted_fields. |
| (CLASSTYPE_SORTED_FIELDS): Restore. |
| (CLASSTYPE_BINDINGS): Delete. |
| * decl.c (finish_enum_value_list): Adjust |
| insert_late_enum_def_bindings call. |
| * name-lookup.c (legacy_nonfn_member_lookup): Restore binary |
| search. |
| (get_class_value_direct): Remove binding table code. |
| (sorted_fields_type_new, count_fields, |
| add_fields_to_record_type, add_enum_fields_to_record_type): Restore. |
| (add_class_member, add_class_members): Delete. |
| (set_class_bindings, insert_late_enum_def_bindings): Adjust. |
| |
| Merge trunk r251560. |
| |
| 2017-08-29 Nathan Sidwell <nathan@acm.org> |
| |
| Anonymous namespace has NULL name |
| gcc/cp/ |
| * cp-tree.h (default_hash_traits <lang_identifier *>): Permit |
| NULL. |
| * name-lookup.c (do_pushdecl): Push NULL-named namespace. |
| (do_push_nested_namespace): Adjust. |
| (push_namespace): Push anonymous namespace as NULL name. |
| |
| 2017-08-28 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r251385. |
| |
| gcc/cp/ |
| * name-lookup.c (do_class_using_decl): Simplify. |
| |
| 2017-08-25 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * name-lookup.h (lookup_class_member): Delete. |
| * name-lookup.c (lookup_class_member): Merge into ... |
| (get_class_value): ... here. |
| (legacy_nonfn_member_lookup): Don't call it. |
| |
| Merge trunk r251351. |
| |
| 2017-08-24 Nathan Sidwell <nathan@acm.org> |
| |
| Rename get_class_binding -> get_class_value |
| * name-lookup.c (get_class_binding, get_class_binding_direct): Rename |
| to ... |
| (get_class_value, get_class_value_direct): ... here. |
| * name-lookup.h (get_class_binding, get_class_binding_direct): Rename |
| to ... |
| (get_class_value, get_class_value_direct): ... here. |
| * call.c (builduser_type_conersion_1): Rename calls. |
| (has_trivial_copy_assign_p, has_trvial_copy_p): Likewise. |
| * class.c (vbase_has_user_provided_move_assign, |
| classtype_has_move_assign_or_move_ctor_p, type_build_ctor_call, |
| type_build_dtor_call): Likewise. |
| * cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Likewise. |
| * decl.c (reshape_init_class, register_dtor_fn): Likewise. |
| * decl2.c (check_classfn): Likewise. |
| * pt.c (retrieve_specialization, |
| check_explicit_specialization): Likewise. |
| * searh.c (lookup_field_r, look_for_overrides_here, |
| lookup_conversions_r): Likewise. |
| * semantics.c (classtype_has_nothrow_assign_or_copy_p): Likewise. |
| |
| 2017-08-23 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * name-lookup.c (extract_conversion_operator, |
| legacy_fn_member_lookup, legacy_nonfn_member_lookup, |
| get_class_binding_direct, get_class_binding, lookup_class_member, |
| add_class_member, add_class_members, set_class_bindings, |
| insert_late_enum_def_bindings): Move earlier to match trunk. |
| |
| Merge trunk r251313. |
| |
| gcc/cp/ |
| * name-lookup.h (get_class_binding_direct, get_class_binding): Add |
| temporary restricted parm. |
| * name-lookup.c (get_class_binding_direct): Replace fn_only with |
| restricted. |
| (get_class_binding): Adjust. |
| * decl.c (reshape_init_class): get_class_binding is differently |
| restricted. |
| * search.c (lookup_field_r): get_class_binding is not restricted. |
| gcc/testsuite/ |
| * g++.dg/cpp0x/decltype9.C: Revert, not ready yet. |
| |
| gcc/cp/ |
| * semantics.c (finish_member_declaration): Move USING_DECL check. |
| Always set lang_cplusplus. Commonize decl linking. |
| |
| 2017-08-22 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * name-lookup.c (legacy_fn_member_lookup): Move conv_op processing |
| to get_class_binding_direct. |
| (legacy_nonfn_member_lookup): Move asserts to |
| get_class_binding_direct. |
| (get_class_binding_direct): Abosorb asserts and conv_op processing. |
| |
| gcc/cp/ |
| * cp-tree.h (print_search_statistics, |
| reinit_search_statistics): Delete. |
| * tree.c (cxx_print_statistics): Don't print search stats. |
| * search.c (n_fields_searched, n_calls_lookup_field, |
| n_calls_lookup_field_1, n_calls_lookup_fnfields, |
| n_calls_lookup_fnfields_1, n_calls_get_base_type, |
| n_outer_fields_searched, n_contexts_saved): Delete. |
| (lookup_member): Delete stats. |
| (print_search_statistics, reinit_search_statistics): Delete. |
| |
| Merge trunk r251283. |
| |
| gcc/cp/ |
| * cp-tree.h (lookup_field_1, lookup_fnfields_slot_nolazy): Delete. |
| * name-lookup.h (lookup_all_conversions): Delete. |
| * decl2.c (check_classfn): Lookup conversions directly. |
| * pt.c (check_explicit_specialization): Likewise. |
| * search.c (lookup_conversion_operator, |
| lookup_fnfields_slot_nolazy, lookup_field_1): Move to ... |
| * name-lookup.c (extract_conversion_operator, |
| legacy_fn_member_lookup, legacy_nonfn_member_lookup): ... here. |
| Make static. |
| (get_class_binding_direct): Adjust. |
| (lookup_all_conversions): Delete. |
| |
| gcc/cp/ |
| * cp-tree.h (lookup_fnfields_slot): Delete. |
| * search.c (lookup_fnfields_slot): Delete. |
| (look_for_overrides_here): Use get_class_binding. |
| * call.c (build_user_type_conversion_1): Likewise. |
| (has_trivial_copy_assign_p, has_trivial_copy_p): Likewise. |
| * class.c (get_basefndecls, type_build_ctor_call, |
| type_build_dtor_call): Likewise. |
| * decl.c (register_dtor_fn): Likewise. |
| * decl2.c (check_classfn): Likewise. |
| * pt.c (retrieve_specialization, |
| check_explicit_specialization): Likewise. |
| * semantics.c (classtype_has_nothrow_assign_or_copy_p): Likewise. |
| |
| gcc/cp/ |
| * name-lookup.h (get_class_binding_direct): Declare. |
| (get_class_binding): Adjust. |
| * name-lookup.c (get_class_binding_direct): New. |
| (get_class_binding): Adjust. |
| * cp-tree.h (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Use |
| get_class_binding_direct. |
| * class.c (vbase_has_user_provided_move_assign): Likewise. |
| (classtype_has_move_assign_or_move_ctor_p): Likewise. |
| * decl2.c (check_classfn): Skip non-functions. |
| * search.c (lookup_fnfields_slot): Forward to get_class_binding. |
| (lookup_conversions_r): Use get_class_binding_direct. |
| gcc/testsuite/ |
| * g++.dg/cpp0x/decltype9.C: Adjust messages. |
| |
| 2017-08-21 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * decl.c (reshape_init_class): Use get_class_binding. |
| * name-lookup.c (get_class_binding): New. |
| * name-lookup.h (get_class_binding): Declare. |
| * search.c (lookup_field_r): Use get_class_binding. |
| |
| gcc/cp/ |
| * search.c (lookup_field_r): Remove obsolete code for type-named |
| field in PoD. |
| |
| Merge trunk r251241. |
| |
| gcc/cp/ |
| * search.c (lookup_field_1) : Assert TYPE is a class. Assert |
| vfield is not special. |
| (lookup_field_fuzzy_info::fuzzy_lookup_fnfields): Delete. |
| (lookup_field_fuzzy_r): Adjust. |
| |
| 2017-08-17 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r251159. |
| |
| 2017-07-27 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * cp-tree.h (maybe_version_functions): Declare. |
| * decl.c (maybe_version_functions): New. Broken out of ... |
| (decls_match): ... here. Call it. |
| * class.c (add_method): Add asserts, use maybe_version_functions. |
| |
| Add conversion marker fn. |
| gcc/cp/ |
| * cp-tree.h (CPTI_CONV_OP_MARKER, conv_op_marker): New. |
| * decl.c (initialize_predefined_identifiers): conv_op is conv_op. |
| (cxx_init_decl_processing): Create conv_op_marker. |
| * class.c (add_method): Compare identifiers. Insert |
| conv_op_marker for conv op overloads. |
| (method_name_cmp, resort_method_name): Compare identifiers. |
| * lex.c (make_conv_op_name): No need to set identifier kind. |
| * search.c (lookup_fnfields_slot_nolazy): Compare identifiers, |
| deal with conv_op_marker. |
| |
| 2017-07-21 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r250440. |
| |
| Merge trunk r250437. |
| |
| gcc/ |
| * dbxout.c: Restore from trunk. |
| |
| Merge trunk r250426. |
| |
| Conv ops are regular METHODVEC fns. |
| gcc/cp/ |
| * cp-tree.h (CLASSTYPE_FIRST_CONVERSION_SLOT): Delete. |
| * class (add-method): Treat conv ops as regular fns. |
| (resort_type_method_vec, finish_struct_methods, warn_hidden) No |
| need to skip conversion ops. |
| * decl.c (initialize_predefined_identifiers): Naked |
| conv_op_identifier is not a conv op. |
| * lex.c (make_conv_op_name): Set identifier kind. |
| * name-lookup.c (lookup_all_conversions): Use |
| lookup_fnfields_slot_nolazy. |
| * search.c (lookup_conversion_operator): Process passed in |
| overload set. |
| (lookup_fnfields_slot_nolazy): Don't skip conversion ops. Process |
| conversions after lookup. |
| (lookup_conversions_r): Use lookup_fnfields_slot_nolazy. |
| |
| 2017-07-20 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r250413. |
| |
| Method vec sorted by identifier pointer (not conv ops) |
| gcc/cp/ |
| * class.c (add_method): Use IDENTIFIER_POINTER. |
| (method_name_cmp, resort_method_name_cmp): Likewise. DECL_NAME can |
| never be NULL. |
| * search.c (lookup_fnfields_slot_nolazy): Use IDENTIFIER_POINTER. |
| |
| Conv op names all same. |
| gcc/cp/ |
| * cp-tree.h (CPTI_CONV_OP_IDENTIFIER): New. |
| (conv_op_identifier): New. |
| * decl.c (initialize_predefined_identifiers): Add it. |
| * lex.c (make_conv_op_name): Names are not in the symbol table. |
| |
| All conv ops on one slot. |
| gcc/cp/ |
| * class.c (add_method): Put conversion ops on a single slot. |
| * name-lookup.c (lookup_all_conversions): Only examine single |
| slot. |
| * search.c (lookup_conversion_operator): Examine single slot in |
| detail to pull out requested conversions. |
| (lookup_conversions_r): Lose tmp/non-tmpl distinction. All ops on |
| one slot. |
| (lookup_conversions): Likewise. |
| |
| gcc/cp/ |
| * call.c (add_candidates): Move decls to initialization. Don't |
| use !!. |
| |
| Merge trunk r250380. |
| |
| 2017-07-19 Nathan Sidwell <nathan@acm.org> |
| |
| Merge trunk r250344. |
| |
| 2017-07-18 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/cp/ |
| * search.c (lookup_conversion_operator): Return overloads not |
| index. |
| (lookup_fnfields_idx_nolazy): Absorb into ... |
| (lookup_fnfields_slot_nolazy): ... this. |
| (lookup_fnfields_1): Absorb into ... |
| (lookup_fnfields_slot): ... this. |
| |
| Merge trunk r250313. |
| |
| Rename TYPE_{MIN,MAX}VAL to TYPE_{MIN,MAX}VAL_RAW. |
| gcc/c/ |
| * c-parser.c (c_parser_array_notation): Use TYPE_{MIN,MAX}_VALUE. |
| gcc/c-family/ |
| * c-warn.c (warn_for_memset): Use TYPE_{MIN,MAX}_VALUE. |
| gcc/cp/ |
| * cp-array-notation.c (build_array_notation_ref): Use |
| TYPE_{MIN,MAX}_VALUE. |
| * cp-tree.h (PACK_EXPANSION_PARAMETER_PACKS, |
| PACK_EXPANSION_EXTRA_ARGS): Use TYPE_{MIN,MAX}VAL_RAW. |
| fortran/ |
| * trans.c (gfc_build_array_ref): Use TYPE_{MIN,MAX}_VALUE. |
| lto/ |
| * lto.c (mentions_vars_p_type): Use TYPE_{MIN,MAX}VAL_RAW. |
| (compare_tree_sccs_1): Likewise. Don't check BINFO directly. |
| (lto_fixup_prevailing_decls): Use TYPE_{MIN,MAX}VAL_RAW. |
| gcc/ |
| * tree.h (TYPE_MINVAL, TYPE_MAXVAL): Rename to ... |
| (TYPE_MINVAL_RAW, TYPE_MAXVAL_RAW): ... these. |
| * lto-streamer-out.c (DFS::DFS_write_tree_body): Use |
| TYPE_{MIN,MAX}VAL_RAW. Don't process BINFO directly. |
| (hash_tree): Likewise. |
| * tree-parloops.c (try_transform_to_exit_first_loop_alt): Use |
| TYPE_MAX_VALUE. |
| * tree-streamer-in.c (lto_input_ts_type_non_common_tree_pointers): |
| Use TYPE_{MIN,MAX}VAL_RAW. Don't process BINFO directly. |
| * tree-streamer-out.c (write_ts_type_non_common_tree_pointers): |
| Likewise. |
| * tree.c (free_lang_data_in_type): Use switch, cleanup. |
| (find_decls_types_r): Use TYPE_{MIN,MAX}VAL_RAW. Don't process |
| BINFO directly. |
| (verify_type): Use TYPE_{MIN,MAX}VAL_RAW. Move BINFO checking |
| into RECORD check. |
| objc/ |
| * objc-act.h (CLASS_NST_METHODS, CLASS_CLS_METHODS): Use |
| TYPE_{MIN,MAX}VAL_RAW. |
| |
| 2017-07-17 Nathan Sidwell <nathan@acm.org> |
| |
| Remove special ctor/dtor slots |
| gcc/cp/ |
| * cp-tree.h (CLASSTYPE_CONSTRUCTOR_SLOT, |
| CLASSTYPE_DESTRUCTOR_SLOT): Delete. |
| (CLASSTYPE_FIRST_CONVERSION_SLOT): Set to zero. |
| * class.c (add_method): cdtors do not have specia slots. |
| * search.c (lookup_fnfields_idx_nolazy): Likewise. |
| (look_for_overrides_here): Use lookup_fnfields_slot. |
| |
| Replace lang_type::sorted_fields with lang_type::bindings. |
| (from c++modules branch) |
| gcc/cp/ |
| * cp-tree.h (struct lang_type): Replace sorted_fields with |
| bindings map. |
| (CLASSTYPE_CONSTRUCTORS, CLASSTYPE_DESTRUCTOR): Use |
| lookup_fnfields_slot_nolazy. |
| (CLASSTYPE_SORTED_FIELDS): Replace with ... |
| (CLASSTYPE_BINDINGS): ... this. |
| (type_has_user_declared_move_constructor, |
| type_has_user_declared_move_assign): Delete, replace with: |
| (classtype_has_user_move_assign_or_ctor_p): ... this. |
| (insert_late_enum_def_into_classtype_sorted_fields): Delete. |
| (lookup_all_conversions): Delete. |
| * decl.c (finish_enum_value_list): Use |
| insert_late_enum_def_bindings. |
| * method.c (maybe_explain_implicit_delete): Use |
| classtype_has_user_move_assign_or_ctor_p. |
| (lazily_declare_fn): Likewise. |
| * class.c (maybe_warn_about_overly_private_class): Ignore |
| copy/move ctors. |
| (type_has_user_declared_move_constructor, |
| type_has_user_declared_move_assign): Delete, replace with: |
| (classtype_has_user_move_assign_or_ctor_p): ... this. |
| (count_fields, add_fields_to_record_type, |
| add_enum_fields_to_record_type, sorted_fields_type_new, |
| create_classtype_sorted_fields, |
| insert_late_enum_def_into_classtype_sorted_fields): Move to ... |
| * name-lookup.c: ... here. |
| (add_class_member, add_class_members, set_class_bindings): New. |
| (lookup_class_member): New. Broken out of ... |
| * search.c (lookup_field_1): ... here. Call it. |
| (lookup_fnfields_idx_nolazy): Look directly at method_vec. |
| (lookup_fnfields_slot_nolazy): Don't complete the type. |
| (lookup_all_conversions): Move to name-lookup.c |
| * semantics.c (classtype_has_nothrow_assign_or_copy_p): Use |
| lookup_fnfields_slot always. |
| * tree.c (type_has_nontrivial_copy_init): Use |
| classtype_has_user_move_assign_or_ctor_p. |
| * name-lookup.h (lookup_class_member, |
| set_class_bindings, insert_late_enum_def_binsings, |
| lookup_all_conversions): Declare. |
| * pt.c (check_explicit_specialization): Use lookup_fnfields_slot. |
| * ptree.c (cxx_print_type): Delete sorted-fields. |
| gcc/c-family/ |
| * c-common.h (field_decl_cmp, resort_sorted_fields): Delete. |
| (struct sorted_fields_type): Move to c-lang.h. |
| * c-common.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp): Move to c-decl.c. |
| * c-ada-spec.c (decl_sloc): Ignore builtin fields. |
| gcc/c/ |
| * c-decl.c (field_decl_cmp, resort_data, |
| resort_field_decl_cmp): Moved from c-common.c |
| * c-lang.h (struct sorted_fields_type): Moved from c-common.h. |
| |
| 2017-07-12 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/ |
| * tree-core.h (struct tree_type_non_common): Rename binfo to |
| lang_1. |
| * tree.h (TYPE_BINFO): Move to maxval field. |
| (TYPE_LANG_SLOT_1): Allow any type. |
| gcc/lto/ |
| * lto.c (mentions_vars_p_type, lto_fixup_prevailing_decls): Use |
| TYPE_LANG_SLOT_1, not binfo. |
| |
| 2017-07-11 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/ |
| * tree.h (TYPE_METHODS): Delete. |
| * tree.c (free_lang_data_in_type): Stitch out member functions and |
| templates from TYPE_FIELDS. |
| (build_distinct_type_copy, verify_type_variant, |
| verify_type): Member fns are on TYPE_FIELDS. |
| * tree-dump.c (dequeue_and_dump): No TYPE_METHODS. |
| * tree-pretty-print.c (dump_generic_node): Likewise. |
| * dbxout.c (dbxout_type_fields): Member fns are on TYPE_FIELDS. |
| (dbxout_type_method_1, dbxout_type_methods): Delete. |
| (dbxout_type_fn_member): New, constructed from previous. |
| (dbxout_type): No TYPE_METHODS scan. |
| * dwarf2out.c (gen_member_die): Member fns are on TYPE_FIELDS. |
| * function.c (use_register_for_decl): Always ignore register for |
| class types when not optimizing. |
| * ipa-devirt.c (odr_types_equivalent_p): Delete TYPE_METHODS scan. |
| gcc/c-family/ |
| * c-ada-spec.c (is_tagged_type, has_nontrivial_methods, |
| dump_ada_template, print_ada_methods, |
| print_ada_declaration): Member fns are on TYPE_FIELDS. |
| gcc/cp/ |
| * class.c (maybe_warn_about_overly_private_class, |
| finish_struct_methods, one_inheriting_sig, count_fields, |
| add_fields_to_record_type, check_field_decls, check_methods, |
| clone_function_decl, set_method_tm_attributes, |
| finalize_literal_type_property, check_bases_and_members, |
| create_vtable_ptr, determine_key_method, |
| unreverse_member_declarations, finish_struct, |
| add_vcall_offset_vtbl_entries_1): Member fns are on TYPE_FIELDS. |
| * decl.c (fixup_anonymous_aggr): Likewise. |
| * decl2.c (reset_type_linkage_2): Likewise. |
| * method.c (after_nsdmi_defaulted_late_checks, |
| lazily_declare_fn): Likewise. |
| * optimize.c (maybe_thunk_body, maybe_clone_body): Likewise. |
| * pt.c (instantiate_class_template_1, tsubst_expr, |
| do_type_instantiation, instantiate_pending_templates): Likewise. |
| * search.c (lookup_field_1): Likewise. |
| * semantics.c (finish_member_declaration, |
| finish_omp_declare_simd_methods): Likewise. |
| gcc/objc/ |
| * objc-runtime-shared-support.c (build_ivar_list_initializer): |
| Don't presume first item is a FIELD_DECL. |
| libcc1/ |
| * libcp1plugin.cc (plugin_build_decl): Member fns are on TYPE_FIELDS. |
| gcc/testsuite/ |
| * g++.dg/ext/anon-struct6.C: Adjust diag. |
| * g++.old-deja/g++.other/anon4.C: Adjust diag. |
| |
| gcc/cp/ |
| * decl2.c (mark_used): Reformat. |
| * pt.c (instantiate_class_member): Delete. |
| |
| 2017-07-05 Nathan Sidwell <nathan@acm.org> |
| |
| gcc/ |
| * tree.h (TYPE_METHODS): Delete. |
| * tree.c (free_lang_data_in_type): Stitch out member functions and |
| templates from TYPE_FIELDS. |
| (build_distinct_type_copy, verify_type_variant, |
| verify_type): Member fns are on TYPE_FIELDS. |
| * tree-dump.c (dequeue_and_dump): No TYPE_METHODS. |
| * tree-pretty-print.c (dump_generic_node): Likewise. |
| * dbxout.c (dbxout_type_fields): Member fns are on TYPE_FIELDS. |
| (dbxout_type_method_1, dbxout_type_methods): Delete. |
| (dbxout_type_fn_member): New, constructed from previous. |
| (dbxout_type): No TYPE_METHODS scan. |
| * dwarf2out.c (gen_member_die): Member fns are on TYPE_FIELDS. |
| * function.c (use_register_for_decl): Always ignore register for |
| class types when not optimizing. |
| * ipa-devirt.c (odr_types_equivalent_p): Delete TYPE_METHODS scan. |
| gcc/c-family/ |
| * c-ada-spec.c (is_tagged_type, has_nontrivial_methods, |
| dump_ada_template, print_ada_methods, |
| print_ada_declaration): Member fns are on TYPE_FIELDS. |
| gcc/cp/ |
| * class.c (maybe_warn_about_overly_private_class, |
| finish_struct_methods, one_inheriting_sig, count_fields, |
| add_fields_to_record_type, check_field_decls, check_methods, |
| clone_function_decl, set_method_tm_attributes, |
| finalize_literal_type_property, check_bases_and_members, |
| create_vtable_ptr, determine_key_method, |
| unreverse_member_declarations, finish_struct, |
| add_vcall_offset_vtbl_entries_1): Member fns are on TYPE_FIELDS. |
| * decl.c (fixup_anonymous_aggr): Likewise. |
| * decl2.c (reset_type_linkage_2): Likewise. |
| * method.c (after_nsdmi_defaulted_late_checks, |
| lazily_declare_fn): Likewise. |
| * optimize.c (maybe_thunk_body, maybe_clone_body): Likewise. |
| * pt.c (instantiate_class_template_1, tsubst_expr, |
| do_type_instantiation, instantiate_pending_templates): Likewise. |
| * search.c (lookup_field_1): Likewise. |
| * semantics.c (finish_member_declaration, |
| finish_omp_declare_simd_methods): Likewise. |
| libcc1/ |
| * libcp1plugin.cc (plugin_build_decl): Member fns are on TYPE_FIELDS. |
| gcc/testsuite/ |
| * g++.dg/ext/anon-struct6.C: Adjust diag. |
| * g++.old-deja/g++.other/anon4.C: Adjust diag. |
| |
| gcc/cp/ |
| * decl2.c (mark_used): Reformat. |
| * pt.c (instantiate_class_member): Delete. |
| |
| Branch creation from trunk:250000 |
| Use this Changelog for all branch changes, including merges. |
| |
| Local Variables: |
| mode: change-log |
| change-log-default-name: "ChangeLog.name-lookup" |
| End: |