| 2026-11-13 Jason Merrill <jason@redhat.com> | |
| * decl2.cc (c_parse_final_cleanups): Build contract wrappers | |
| after finish_module_processing. | |
| 2026-11-12 Jason Merrill <jason@redhat.com> | |
| * contracts.cc (lookup_std_type): Set TREE_PUBLIC. | |
| (lookup_std_contracts_type): Likewise. | |
| * decl.cc (cxx_init_operator_new_delete_decls): Likewise. | |
| 2026-11-12 Jason Merrill <jason@redhat.com> | |
| PR c++/119497 | |
| * constexpr.cc (check_for_failed_contracts): Add context. | |
| (cxx_eval_constant_expression): Refactor contract handling. | |
| Diagnose now if diagnosing. | |
| (cxx_eval_outermost_constant_expr): Re-evaluate to diagnose | |
| contract violations if otherwise constant. | |
| 2026-11-12 Jason Merrill <jason@redhat.com> | |
| * g++spec.cc (lang_specific_driver): Also set need_experimental | |
| for C++26 and C++29. | |
| 2026-11-12 Jason Merrill <jason@redhat.com> | |
| * call.cc (splice_viable): Strict if -fdiagnostics-all-candidates. | |
| 2026-11-12 Jason Merrill <jason@redhat.com> | |
| PR c++/128532 | |
| PR c++/127516 | |
| * decl.cc (reshape_init_r): Also treat a vector as aggregate. | |
| (reshape_init): The old designated initializer extension | |
| allows designators with brace elision. | |
| 2026-11-11 Matt Turner <mattst88@gmail.com> | |
| PR c/125418 | |
| * decl.cc (duplicate_decls): Call weak_decl_tls_model for a weak | |
| thread-local variable. | |
| 2026-11-10 Arsen Arsenović <aarsenovic@baylibre.com> | |
| * call.cc (strip_top_quals): Use TYPE_UNQUALIFIED instead of 0. | |
| (standard_conversion): Update to use qualifier_set APIs. | |
| * class.cc (build_simple_base_path): Update to use qualifier_set | |
| instead of int. | |
| * cp-objcp-common.h (cp_type_quals_as_set): New. | |
| (LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN): Use the above. | |
| * cp-objcp-common.cc (cp_type_quals_as_set): New. Wraps | |
| cp_type_quals, to converting its cv_qualifier to qualifier_set. | |
| * cp-tree.h (cp_cv_quals): Change to be cv_qualifier. | |
| (build_stub_type): Update to receive cv_qualifier. | |
| (cp_build_qualified_type): Ditto. | |
| (cp_type_quals): Update to return cv_qualifier. | |
| (type_memfn_quals): Ditto. | |
| (cp_apply_type_quals_to_decl): Update to take cv_qualifier. | |
| * decl.cc (get_type_quals): Update to use and return | |
| cv_qualifier. | |
| (cp_finish_decomp): Replace usages of TYPE_QUALS with | |
| cp_type_quals. | |
| (grokdeclarator): Update to use cv_qualifier. | |
| (grokparms): Use TYPE_UNQUALIFIED instead of literal zero. | |
| * error.cc (dump_lambda_function): Update to use qualifier_set | |
| APIs. | |
| * mangle.cc (write_CV_qualifiers_for_type): Ditto. | |
| * method.cc (do_build_copy_constructor): Update to use | |
| cv_qualifier instead of int. | |
| (do_build_copy_assign): Ditto. | |
| (build_stub_type): Update to receive cv_qualifier. | |
| (get_copy_ctor): Update to use cv_qualifier instead of int. | |
| (get_copy_assign): Ditto. | |
| (walk_field_subobs): Update to receive cv_qualifier. | |
| (synthesized_method_base_walk): Ditto. | |
| (synthesized_method_walk): Ditto. | |
| (implicitly_declare_fn): Update to use cv_qualifier. | |
| * module.cc (trees_in::tree_node): Cast read-in qualifiers to | |
| cv_qualifier. | |
| * pt.cc (tsubst): Update to use cv_qualifier instead of int. | |
| (resolve_typename_type): Ditto. | |
| * reflect.cc (type_of): Ditto. | |
| (eval_remove_volatile): Ditto. | |
| (eval_add_const): Ditto. | |
| (eval_add_volatile): Ditto. | |
| (eval_add_cv): Ditto. | |
| (eval_make_signed): Ditto. | |
| * semantics.cc (finish_non_static_data_member): Ditto. | |
| (finish_decltype_type): Ditto. | |
| * tree.cc (c_build_qualified_type): Update to receive | |
| qualifier_set, in line with original. | |
| (cp_build_qualified_type): Update to receive qualifier_set. | |
| (cp_check_qualified_type): Update to receive cv_qualifier. | |
| (cv_unqualified): Update to use cv_qualifier. | |
| (build_cp_fntype_variant): Ditto. | |
| (maybe_dummy_object): Ditto. | |
| * typeck.cc (original_type): Ditto. | |
| (composite_pointer_type_r): Ditto. | |
| (merge_types): Ditto. | |
| (build_class_member_access_expr): Ditto. | |
| (cp_type_quals): Update to return cv_qualifier. | |
| (type_memfn_quals): Ditto. | |
| (cp_apply_type_quals_to_decl): Update to receive cv_qualifier. | |
| (casts_away_constness_r): Use cv_qualifier instead of int for | |
| representing CV-qualification. | |
| 2026-11-10 Waffl3x <waffl3x@baylibre.com> | |
| PR c/122892 | |
| * semantics.cc (finish_omp_allocate): Reject | |
| omp_{cgroup,pteam,thread}_mem_alloc for static vars. | |
| 2026-11-10 Waffl3x <waffl3x@baylibre.com> | |
| * parser.cc (cp_parser_omp_allocate): Add diagnostics, wrap a | |
| location into allocator and alignment clause exprs. | |
| * semantics.cc: Include gcc-rich-location.h. | |
| (finish_omp_allocate): Improve and add diagnostics. | |
| 2026-11-10 Waffl3x <waffl3x@baylibre.com> | |
| * constexpr.cc (cxx_eval_constant_expression) | |
| <case OMP_ALLOCATE>: New. | |
| (potential_constant_expression_1) <case OMP_ALLOCATE>: New. | |
| * cp-tree.def (OMP_ALLOCATE): New tree code. | |
| * cp-tree.h (OMP_ALLOCATE_VARS): Define. | |
| (OMP_ALLOCATE_ALLOCATOR): Define. | |
| (OMP_ALLOCATE_ALIGN): Define. | |
| (finish_omp_allocate): New declaration. | |
| * parser.cc (cp_parser_omp_allocate): Rework, remove sorry, call | |
| finish_omp_allocate. | |
| * pt.cc (tsubst_stmt) <case OMP_ALLOCATE>: New. | |
| * semantics.cc (finish_omp_allocate): New definition. | |
| 2026-11-10 Waffl3x <waffl3x@baylibre.com> | |
| * parser.cc (cp_parser_omp_construct) | |
| <case PRAGMA_OMP_ALLOCATE>: Remove. | |
| (cp_parser_pragma): Add comments. | |
| 2026-11-07 Jakub Jelinek <jakub@redhat.com> | |
| PR middle-end/128111 | |
| * parser.cc (cp_parser_postfix_expression): Handle RID_BUILTIN_CLMULG. | |
| * typeck.cc (build_x_clmulg): New function. | |
| * cp-tree.h (build_x_clmulg): Declare. | |
| * pt.cc (tsubst_expr): Handle IFN_CLMUL. | |
| * mangle.cc (write_expression): Likewise. | |
| * cp-objcp-common.cc (names_builtin_p): Handle RID_BUILTIN_CLMULG. | |
| * cp-gimplify.cc (cp_gimplify_expr): Handle IFN_CLMUL. | |
| * constexpr.cc (cxx_eval_internal_function): Likewise. | |
| (potential_constant_expression_1): Likewise. | |
| 2026-11-03 Giuliano Belinassi <giuliano.belinassi@gmail.com> | |
| * decl.cc (duplicate_decls): Call symtab_node::get_create. | |
| 2026-11-02 Marek Polacek <polacek@redhat.com> | |
| PR c++/127802 | |
| PR c++/125631 | |
| * cp-tree.h (missing_template_diag): Declare. | |
| * parser.cc (missing_template_diag): No longer static. | |
| (cp_parser_splice_expression): Don't call missing_template_diag | |
| here, but call it... | |
| * reflect.cc (check_splice_expr): ...here. Reject (non-function) | |
| templates. When template arguments are present, reject | |
| templates other than function and variable templates. | |
| 2026-11-02 Kito Cheng <kito.cheng@sifive.com> | |
| * decl2.cc (cplus_decl_attributes): Call targetm.insert_attributes | |
| before the late attributes are spliced out of the list. | |
| 2026-10-27 Marek Polacek <polacek@redhat.com> | |
| PR c++/125649 | |
| * constexpr.cc (addr_of_non_const_var): Use heap_var_p. | |
| (non_const_var_error): Likewise. | |
| (cxx_eval_constant_expression): Likewise. | |
| (find_heap_var_refs): Likewise. | |
| (heap_var_p): New. | |
| * cp-tree.h (heap_var_p): Declare. | |
| * pt.cc (invalid_tparm_referent_p): Add heap_var_p to an | |
| assert. | |
| 2026-10-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/127232 | |
| * constexpr.cc (constexpr_global_ctx::in_eval_lifetime_p): New. | |
| (cxx_constexpr_in_eval_lifetime_p): New. | |
| * cp-tree.h (cxx_constexpr_in_eval_lifetime_p): Declare. | |
| * reflect.cc (extract_ref): Check decl_constant_var_p and | |
| cxx_constexpr_in_eval_lifetime_p instead of | |
| is_constant_expression. Use cxx_eval_constant_expression | |
| instead of DECL_INITIAL for references. Adjust the checking | |
| assert. Drop the maybe_get_reference_referent call. Build | |
| a NOP_EXPR around the result. | |
| 2026-10-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/126653 | |
| * cp-tree.h (check_namespace_splice): Declare. | |
| * parser.cc (cp_parser_namespace_alias_definition): Call | |
| check_namespace_splice. | |
| (cp_parser_using_directive): Likewise. Give an error if the | |
| nested-name-specifier, namespace-name, or splice-specifier is | |
| dependent. | |
| * pt.cc (type_dependent_expression_p): Return false for | |
| NAMESPACE_DECL. | |
| * reflect.cc (check_namespace_splice): New. | |
| 2026-10-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/126794 | |
| * pt.cc (tsubst_expr) <case COMPONENT_REF>: Don't call | |
| finish_non_static_data_member on a FIELD_DECL of a COMPONENT_REF | |
| when COMPONENT_REF_SPLICE_P is set. Don't check | |
| dependent_splice_p in an assert. | |
| 2026-10-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/127749 | |
| * reflect.cc (process_metafunction): Add | |
| processing_template_decl_sentinel. | |
| 2026-10-23 Marek Polacek <polacek@redhat.com> | |
| Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126017 | |
| PR c++/127856 | |
| * cxx-pretty-print.cc (cxx_pretty_printer::simple_type_specifier) | |
| <case LANG_TYPE>: Rename to OPAQUE_TYPE. | |
| (cxx_pretty_printer::type_id) <case LANG_TYPE>: Likewise. | |
| * mangle.cc (write_type) <case LANG_TYPE>: Likewise. | |
| * module.cc (trees_out::type_node) <case LANG_TYPE>: Likewise. | |
| (trees_in::tree_node) <case LANG_TYPE>: Likewise. | |
| * name-lookup.cc (name_lookup::adl_type) <case LANG_TYPE>: | |
| Don't check REFLECTION_TYPE_P here. | |
| <case OPAQUE_TYPE>: New. | |
| * reflect.cc (init_reflection): Create an OPAQUE_TYPE node instead | |
| of a LANG_TYPE node. | |
| * tree.cc (type_has_unique_obj_representations) <case LANG_TYPE>: | |
| Rename to OPAQUE_TYPE. | |
| 2026-10-23 Thomas Schwinge <tschwinge@baylibre.com> | |
| PR c++/127559 | |
| * semantics.cc (finish_omp_target_clauses_r): Strip location | |
| wrappers while looking for the base of a lambda object. | |
| 2026-10-22 Nathan Sidwell <nathan@acm.org> | |
| * decl.cc (merge_attribute_bits): Propagate DECL_NO_LIMIT_STACK, | |
| DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT, DECL_IS_NOVOPS. | |
| 2026-10-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127766 | |
| * semantics.cc (finish_trait_expr) | |
| <case CPTK_STRUCTURED_BINDING_SIZE>: Call check_trait_type with kind | |
| 4. | |
| * pt.cc (tsubst_expr) <case TRAIT_EXPR>: Remove special casing of | |
| CPTK_STRUCTURED_BINDING_SIZE. Instead pass complain to | |
| finish_trait_expr. | |
| 2026-10-20 Shubham Nayak <shubhamnayak392reborn@gmail.com> | |
| PR c++/87638 | |
| PR c++/90789 | |
| PR c++/95069 | |
| PR c++/104411 | |
| PR c++/115471 | |
| * lambda.cc (add_capture): Remove redundant | |
| !lvalue_p check on reference captures. | |
| 2026-10-19 Marek Polacek <polacek@redhat.com> | |
| PR c++/126680 | |
| * name-lookup.cc (set_decl_context_in_fn): Check DECL_THIS_EXTERN | |
| instead of DECL_EXTERNAL. | |
| 2026-10-17 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127559 | |
| * semantics.cc (finish_omp_target_clauses_r): Only record | |
| in local_decls VAR_DECLs, PARM_DECLs and RESULT_DECLs. | |
| For TARGET_EXPR with lambda type mark TARGET_EXPR_SLOT in | |
| local_decls too. Never *walk_subtrees = 0; for lambdas. | |
| Don't add arbitrary expressions of lambda type to | |
| lambda_objects_accessed, only VAR_DECLs, PARM_DECLs or | |
| RESULT_DECLs possibly with COMPONENT_REFs or ARRAY_REFs around | |
| those. If it is handled component case, check in local_decls | |
| the base variable rather than whole expression. | |
| 2026-10-16 Jakub Jelinek <jakub@redhat.com> | |
| * mangle.cc (write_name): Change type of the second argument | |
| from const int to const bool, make it defaulted to false. | |
| (write_local_name): Pass true rather than 1 to it. | |
| (write_type_constraint, write_encoding, write_type, | |
| write_class_enum_type, write_reflection, write_template_template_arg, | |
| write_guarded_var_name): Remove ", 0" from callers. | |
| 2026-10-16 Illia Polishchuk <illia.polishchuk@thalesgroup.com> | |
| PR c++/103303 | |
| * cp-tree.h (fixup_type_variants): Add update_align parameter. | |
| * class.cc (fixup_type_variants): Only update alignment if | |
| update_align is true. | |
| (finish_struct_bits): Pass update_align = true. | |
| * module.cc (trees_in::read_class_def): Likewise. | |
| * cp-gimplify.cc (cp_genericize_r) <case INDIRECT_REF>: Use the | |
| alignment of the class as a base for references to a class that | |
| might be a base subobject. | |
| 2026-10-13 Léo Hardt <leom.hardt@inf.ufrgs.br> | |
| * call.cc: Remove unused include directives. | |
| * init.cc: Likewise. | |
| * semantics.cc: Likewise. | |
| 2026-10-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/127780 | |
| * parser.cc (cp_parser_init_statement): Use the location of | |
| 'using' in the C++23 pedwarn. Only consume the ':' if | |
| expect_semicolon_p. | |
| 2026-10-12 Jason Merrill <jason@redhat.com> | |
| PR c++/127787 | |
| PR c++/99000 | |
| * pt.cc (check_explicit_specialization): Don't clobber a redefinable | |
| imported definition. | |
| 2026-10-12 Tobias Burnus <tburnus@baylibre.com> | |
| PR c++/127734 | |
| * decl.cc (omp_declare_variant_finalize_one): Remove early | |
| return when a 'simd' trait exists. | |
| 2026-10-08 Marek Polacek <polacek@redhat.com> | |
| PR c++/127710 | |
| * cvt.cc (force_lvalue): For a TARGET_EXPR, build | |
| (TARGET_EXPR<...>, slot). | |
| 2026-10-07 Jason Merrill <jason@redhat.com> | |
| P1811 | |
| PR c++/99000 | |
| * module.cc (maybe_translate_include): Check | |
| -fmodule-include-translate. | |
| * name-lookup.cc (redefinable_import_p): New. | |
| (pushdecl): Check DECL_IS_UNDECLARED_BUILTIN instead of hidden_p. | |
| (lookup_elaborated_type): Don't special-case cxxabi classes. | |
| (pushtag): Handle pushdecl finding a previous definition. | |
| * decl.cc (merge_default_template_args): Check redefinable_import_p. | |
| (duplicate_decls, grokfndecl, start_enum): Likewise. | |
| (redeclaration_error_message): Likewise. | |
| * parser.cc (cp_parser_skip_to_end_of_balanced_tokens): New. | |
| (cp_parser_skip_function_definition): New. | |
| (cp_parser_skip_base_clause): New. | |
| (cp_parser_enum_specifier): Skip redundant definition. | |
| (cp_parser_class_specifier): Likewise. | |
| (cp_parser_class_head): Likewise. | |
| (cp_parser_function_definition_from_specifiers_and_declarator): | |
| Likewise. | |
| * pt.cc (redeclare_class_template): Adjust. | |
| * cp-tree.h: Adjust. | |
| * name-lookup.h: Adjust. | |
| 2026-10-07 Jason Merrill <jason@redhat.com> | |
| * name-lookup.cc (pushtag): Set TREE_PUBLIC sooner. | |
| * parser.cc (cp_parser_class_head): Set location and final | |
| before 'done' label. | |
| * decl.cc (duplicate_decls): Free duplicate namespace alias. | |
| 2026-10-07 Jakub Jelinek <jakub@redhat.com> | |
| * cp-gimplify.cc (cp_genericize_r): Don't call warn_for_alloc_size | |
| for CALL_FROM_NEW_OR_DELETE_P calls. | |
| 2026-10-07 Tobias Burnus <tburnus@baylibre.com> | |
| PR middle-end/127723 | |
| * parser.cc (cp_parser_omp_clause_simdlen): Handle | |
| simdlen's type and divisor of the scaled modifier. | |
| * pt.cc (tsubst_omp_clauses): Likewise | |
| * semantics.cc (finish_omp_clauses): Likewise; | |
| add comment about safelen vs. simdlen with scaled. | |
| 2026-10-07 Jason Merrill <jason@redhat.com> | |
| PR c++/115806 | |
| * decl.cc (lookup_and_check_tag): Strip using here... | |
| * name-lookup.cc (lookup_elaborated_type): ...not here. | |
| 2026-10-07 Jason Merrill <jason@redhat.com> | |
| PR c++/127627 | |
| * class.cc (add_method): Don't remove a less-explicit function. | |
| 2026-10-06 Marek Polacek <polacek@redhat.com> | |
| PR c++/127707 | |
| * name-lookup.cc (finish_nonmember_using_decl): New bool | |
| parameter. Set USING_DECL_TYPENAME_P if it's true. | |
| * name-lookup.h (finish_nonmember_using_decl): Adjust | |
| declaration. | |
| * parser.cc (finish_using_decl): Pass typename_p to | |
| finish_nonmember_using_decl. | |
| * pt.cc (tsubst_stmt) <case DECL_EXPR>: Pass | |
| USING_DECL_TYPENAME_P to finish_nonmember_using_decl. | |
| 2026-10-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/127344 | |
| * parser.cc (cp_parser_lookup_name): Call make_splice_scope for | |
| dependent_namespace_p. Use the result for make_typename_type | |
| and make_unbound_class_template. | |
| 2026-10-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/127672 | |
| * decl2.cc (constrain_class_visibility): Check OVERLOAD_TYPE_P | |
| before calling decl_anon_ns_mem_p. | |
| 2026-10-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/126654 | |
| * pt.cc (tsubst_stmt) <case DECL_EXPR>: If tsubst returns | |
| error_mark_node, return error_mark_node. Allow NAMESPACE_DECL. | |
| 2026-10-03 Jakub Jelinek <jakub@redhat.com> | |
| P3950R1 | |
| PR c++/125830 | |
| * coroutines.cc: Implement C++29 P3950R1 - return_value & return_void | |
| Are Not Mutually Exclusive paper as DR. | |
| (struct coroutine_info): Remove coro_co_return_error_emitted member. | |
| (coro_promise_type_found_p): Remove diagnostics about both return_void | |
| and return_value successful lookup. | |
| (lookup_promise_method): Add complain argument, pass it down to | |
| lookup_member. | |
| (coro_build_promise_expression): Add complain argument, pass it down | |
| to lookup_promise_method, build_new_method_call and | |
| build_class_member_access_expr. | |
| (get_coroutine_return_void_expr): Pass tf_none to | |
| coro_build_promise_expression. | |
| 2026-10-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127668 | |
| * mangle.cc (write_expression): Handle mangling of | |
| calls to IFN_BSWAP and IFN_BITREVERSE. | |
| 2026-09-30 Marek Polacek <polacek@redhat.com> | |
| PR c++/127349 | |
| * pt.cc (tsubst) <case UNBOUND_CLASS_TEMPLATE>: Handle the case | |
| when the context was substituted into a NAMESPACE_DECL. | |
| 2026-09-29 Jonas Hansen <jhansen@roku.com> | |
| PR tree-optimization/127416 | |
| * typeck2.cc (store_init_value): Move braced_lists_to_strings after | |
| constant folding. | |
| 2026-09-29 Marek Polacek <polacek@redhat.com> | |
| PR c++/127643 | |
| * reflect.cc (class_members_of): Also skip templated clones. | |
| 2026-09-27 Steven Sudit <stevensudit@gmail.com> | |
| PR c++/127218 | |
| * constexpr.cc (cxx_eval_builtin_function_call): Clear STRRET | |
| when the argument it refers to is not replaced by the address of | |
| a STRING_CST, so the folded result is re-based on the original | |
| argument only when that replacement happened. | |
| 2026-09-25 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127385 | |
| * constexpr.cc (cxx_eval_store_expression): Handle the case | |
| of *valp == void_node like if *valp is NULL. | |
| (cxx_eval_store_expression): For CLOBBER_OBJECT_END or above | |
| store *valp = void_node even for aggregate types. | |
| 2026-09-25 Jakub Jelinek <jakub@redhat.com> | |
| P3769R1 | |
| PR c++/125848 | |
| * call.cc (build_op_delete_call_1): Implement C++26 | |
| P3769R1 - Clarification of placement new deallocation. Instead of | |
| calling instantiate_type to select placement deallocation function | |
| iterate over OVERLOAD if any, perform argument deduction for | |
| templates, ignore candidates with different parameter type lists | |
| or unsatisfied constraints and if only one candidate remains, | |
| use it, otherwise don't destruct on throw. Add placement_args | |
| argument, pass it down to build_op_delete_call call and use in | |
| template argument deduction. | |
| (build_op_delete_call): Add placement_args argument and pass it | |
| down to build_op_delete_call_1. | |
| (build_coroutine_op_delete_call): Remove placement argument, pass | |
| down NULL_TREE and NULL to build_op_delete_call_1 as placement and | |
| placement_args. | |
| * cp-tree.h (build_op_delete_call): Add placement_args argument. | |
| (build_coroutine_op_delete_call): Remove placement argument. | |
| * init.cc (build_new_1): Pass down *placement as placement_args | |
| to build_op_delete_call for placement new. | |
| (build_vec_delete_1): Adjust build_op_delete_call callers. | |
| (build_delete): Likewise. Remove {}s around single statement | |
| body. | |
| * coroutines.cc (build_coroutine_frame_delete_expr): Don't pass | |
| placement to build_coroutine_op_delete_call. | |
| * optimize.cc (build_delete_destructor_body): Adjust | |
| build_op_delete_call caller. | |
| 2026-09-23 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127506 | |
| * constexpr.cc (is_within_lifetime): When val is error_mark_node, | |
| return it. | |
| 2026-09-23 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125536 | |
| * pt.cc (unify_array_domain): When adding 1 to parm_max or | |
| arg_max, perform the addition in the type of those trees | |
| rather than unconditionally in int type. | |
| 2026-09-23 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126599 | |
| * error.cc (dump_expr): Print OFFSET_TYPE -1 differently. | |
| 2026-09-22 Chung-Lin Tang <cltang@baylibre.com> | |
| * parser.cc (cp_parser_omp_clause_name): Add "local" case. | |
| (cp_parser_omp_all_clauses): Add PRAGMA_OMP_CLAUSE_LOCAL case. | |
| (handle_omp_declare_target_clause): Handle OMP_CLAUSE_LOCAL. | |
| (OMP_DECLARE_TARGET_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_LOCAL. | |
| * semantics.cc (finish_omp_clauses): Handle OMP_CLAUSE_LOCAL. | |
| Emit error if local clause variable appears in map clause. | |
| 2026-09-22 Joshua Berne <berne@notadragon.com> | |
| PR c++/125459 | |
| * constexpr.cc (constexpr_global_ctx::put_value): Treat | |
| void_list_node as not having been in the map for modifiable | |
| tracking. | |
| 2026-09-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127493 | |
| * reflect.cc (eval_source_location_of): Call maybe_get_first_fn. | |
| 2026-09-21 Jakub Jelinek <jakub@redhat.com> | |
| * cp-objcp-common.cc (names_builtin_p): Return 1 for | |
| RID_BUILTIN_BITREVERSEG and RID_BUILTIN_BSWAPG. | |
| 2026-09-20 Joshua Berne <berne@notadragon.com> | |
| PR c++/127281 | |
| * contracts.cc (maybe_apply_function_contracts): Override | |
| current_retval_sentinel for the artificial block containing | |
| contracts. | |
| 2026-09-20 Joshua Berne <berne@notadragon.com> | |
| PR c++/127295 | |
| * contracts.cc (grok_contract): Identify assertion statements | |
| by keyword and not string comparison. | |
| * parser.cc (cp_parser_contract_assert): Include keyword used | |
| on token in diagnostics. | |
| 2026-09-14 Joshua Berne <berne@notadragon.com> | |
| PR c++/127282 | |
| * constexpr.cc (modifiable_tracker::modifiable_tracker): Save the | |
| current global pointer to the modifiable set. | |
| (modifiable_tracker::~modifiable_tracker): Restore the original | |
| pointer to the modifiable set instead of clearing it. | |
| 2026-09-14 Marek Polacek <polacek@redhat.com> | |
| PR c++/127349 | |
| * pt.cc (lookup_template_class): Print %qE if d1 is not a type. | |
| (tsubst) <case TYPENAME_TYPE>: Do lookup_qualified_name first | |
| before lookup_template_class. Guard qualified_name_lookup_error | |
| with a complain check. Use gcc_checking_assert instead of | |
| gcc_assert. Use identifier_p. Give an error if we didn't get | |
| a type. | |
| 2026-09-14 Marek Polacek <polacek@redhat.com> | |
| PR c++/126970 | |
| * cp-gimplify.cc (immediate_escalating_function_p): Check | |
| !user_provided_p. | |
| 2026-09-13 Iain Sandoe <iain@sandoe.co.uk> | |
| PR c++/126811 | |
| * typeck2.cc (store_init_value): Skip folding CONSTRUCTORs | |
| when handling template decls. | |
| 2026-09-13 Marek Polacek <polacek@redhat.com> | |
| PR c++/125820 | |
| PR c++/124249 | |
| PR c++/124414 | |
| * constexpr.cc (cxx_eval_binary_expression): Check | |
| REFLECTION_TYPE_P instead of REFLECT_EXPR_P. | |
| (check_bit_cast_type): Also detect REFLECTION_TYPE_P. | |
| (cxx_eval_outermost_constant_expr): Delete consteval-only | |
| smuggling detection code. | |
| (potential_constant_expression_1) <case CONVERT_EXPR>: Recurse | |
| with want_rval=false for discarded-value expressions. | |
| * constraint.cc (satisfy_atom): Check require_constant_expression | |
| before calling cxx_constant_value. Set result to error_mark_node | |
| otherwise. | |
| * cp-gimplify.cc (cp_gimplify_expr) <case CALL_EXPR>: Don't call | |
| consteval_only_p and check_out_of_consteval_use. | |
| (wipe_consteval_only_r): Remove. | |
| (cp_fold_immediate_r): Don't detect invalid uses of consteval-only | |
| types here. Set *stmt_p to error_mark_node if the consteval call | |
| was invalid. | |
| <case IF_STMT>: Don't call wipe_consteval_only_r. | |
| (cp_fold_r) <case CONVERT_EXPR>: New, remove discarded-value | |
| expressions. | |
| (cp_genericize_r) <case ADDR_EXPR>: Call check_out_of_consteval_use. | |
| <case BIND_EXPR>: Call rewrite_null_reflection before pruning. | |
| <case REFLECT_EXPR>: Detect invalid uses of consteval-only | |
| expressions. | |
| * cp-objcp-common.cc (cp_common_init_ts): Remove the META_TYPE | |
| marking. | |
| * cp-tree.def (META_TYPE): Remove. | |
| * cp-tree.h (REFLECTION_TYPE_P): Adjust to check if TYPE is | |
| meta_info_type_node. | |
| (rewrite_null_reflection): Declare. | |
| (consteval_only_p): No longer pure. | |
| (check_consteval_only_fn): Remove. | |
| * cvt.cc (convert_to_void): Don't call check_out_of_consteval_use | |
| here. Don't remove discarded-value expressions here. Use a | |
| location when building the CONVERT_EXPR. | |
| * cxx-pretty-print.cc (cxx_pretty_printer::simple_type_specifier) | |
| <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: New. | |
| (cxx_pretty_printer::type_id) <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: New. | |
| * decl.cc (wrapup_namespace_globals): Call | |
| rewrite_null_reflection on each element of statics. | |
| (cp_finish_decl): Don't call check_out_of_consteval_use. Assert | |
| !consteval_only_p. | |
| (grokfndecl): Don't call check_consteval_only_fn. | |
| * decl2.cc (maybe_make_one_only): Don't return early for | |
| consteval_only_p. | |
| (mark_needed): Likewise. | |
| (prune_vars_needing_no_initialization): Don't prune | |
| consteval_only_p variables. | |
| (c_parse_final_cleanups): Call rewrite_null_reflection. | |
| * error.cc (dump_type) <case LANG_TYPE>: Handle | |
| REFLECTION_TYPE_P. | |
| <case META_TYPE>: Remove. | |
| (dump_type_prefix) <case META_TYPE>: Remove. | |
| (dump_type_suffix) <case META_TYPE>: Remove. | |
| (dump_expr): Use REFLECTION_TYPE_P. | |
| * init.cc (perform_member_init): Don't call | |
| check_out_of_consteval_use. | |
| * mangle.cc (write_type) <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: Handle REFLECTION_TYPE_P. | |
| * module.cc (trees_out::type_node) <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: New. | |
| (trees_in::tree_node) <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: New. | |
| * name-lookup.cc (name_lookup::adl_type): Move the | |
| REFLECTION_TYPE_P handling to case LANG_TYPE. | |
| * pt.cc (tsubst) <case META_TYPE>: Remove. | |
| (unify) <case META_TYPE>: Remove. | |
| <case LANG_TYPE>: New. | |
| (instantiate_body): Don't call check_consteval_only_fn. | |
| * reflect.cc (init_reflection): Use LANG_TYPE instead of | |
| META_TYPE for meta_info_type_node. | |
| (null_reflection_p): Also accept the rewritten form. | |
| (rewrite_null_reflection): New. | |
| (consteval_only_p): Rewrite for P4101. | |
| (struct consteval_only_p_walker): Remove. | |
| (consteval_only_value_p): New. | |
| (consteval_only_p_walker::walk): Remove. | |
| (check_out_of_consteval_use_r): Walk INIT_EXPR. Handle EXPR_STMT | |
| specially. | |
| (check_out_of_consteval_use): Remove the special VAR_P handling. | |
| (compare_reflections): Deal with null reflections first. | |
| (check_consteval_only_fn): Remove. | |
| * search.cc (check_final_overrider): Don't check | |
| consteval_only_p. | |
| * semantics.cc (cp_build_bit_cast): Likewise. | |
| * tree.cc (type_has_unique_obj_representations) <case LANG_TYPE>: | |
| New, handle REFLECTION_TYPE_P. | |
| * typeck.cc (cp_build_binary_op): Use REFLECTION_TYPE_P. | |
| (check_return_expr): Don't call check_out_of_consteval_use. | |
| * typeck2.cc (store_init_value): Check that an immediate object | |
| is associated with a constexpr variable. | |
| 2026-09-12 Jakub Jelinek <jakub@redhat.com> | |
| P3598R0 | |
| PR c++/125840 | |
| * reflect.cc: Implement C++26 CWG 3158 - const-ification of Splice | |
| Expressions. | |
| (splice): Remember REFLECT_EXPR_KIND of REFLECT_EXPR. Set refl to | |
| REFLECT_EXPR_HANDLE earlier. For REFLECT_OBJECT wrap decls into | |
| a VCE to differentiate it from corresponding variables. | |
| * pt.cc (tsubst_splice_expr): Call constify_contract_access if | |
| needed. | |
| 2026-09-12 Jakub Jelinek <jakub@redhat.com> | |
| * constexpr.cc (cxx_eval_binary_expression): For POINTER_PLUS_EXPR | |
| with pointer cast in orig_lhs operand evaluate it as if it was | |
| cast of POINTER_PLUS_EXPR with cast operand. | |
| (cxx_eval_constant_expression) <case CONVERT_EXPR>: | |
| Set *non_constant_p and optionally diagnose if a static_cast downcast | |
| results in undefined behavior. | |
| 2026-09-11 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127276 | |
| * pt.cc (tsubst_splice_expr): Call convert_from_reference if not | |
| member access and SPLICE_EXPR is a splice expression. | |
| 2026-09-10 Jakub Jelinek <jakub@redhat.com> | |
| P3726R2 | |
| PR c++/125845 | |
| * cp-tree.h: Implement C++26 P3726R2 - Adjustments to Union Lifetime | |
| Rules. Document some generic flags used in C++ specific way on some | |
| trees in the toplevel comment. | |
| (CONSTRUCTOR_OMITTED_NOT_WITHIN_LIFETIME_P): Define. | |
| (enum cp_built_in_function): Add CP_BUILT_IN_START_LIFETIME. | |
| (reduced_constant_expression_p): Add a bool argument defaulted to | |
| false. | |
| * tree.cc (builtin_valid_in_constant_expr_p): Handle | |
| CP_BUILT_IN_START_LIFETIME. | |
| * decl.cc (cxx_init_decl_processing): Create __builtin_start_lifetime | |
| decl. | |
| * cp-gimplify.cc (cp_gimplify_expr): Handle | |
| CP_BUILT_IN_START_LIFETIME. | |
| * semantics.cc (check_frontend_builtin): New function. | |
| (finish_call_expr): Use it. | |
| * constexpr.cc (is_within_lifetime): New function. | |
| (cxx_eval_is_within_lifetime): Use it. Add fun argument and pass it | |
| to that function. | |
| (cxx_eval_start_lifetime): New function. | |
| (cxx_eval_builtin_function_call): Handle CP_BUILT_IN_START_LIFETIME. | |
| Pass fun to cxx_eval_is_within_lifetime. | |
| (is_std_allocator_allocate): Only return true for | |
| std::allocator<T>::allocate and not for std::allocator<T>::deallocate. | |
| (is_std_allocator_allocate_deallocate): New functions. | |
| (cxx_eval_call_expression): Use is_std_allocator_allocate_deallocate | |
| rather than is_std_allocator_allocate. | |
| (reduced_constant_expression_p): Add union_elemental_subobject | |
| argument and propagate it to recursive calls. If set, ignore for | |
| C++26 holes in array initializers which aren't within lifetime. | |
| (modifying_const_object_p): Change != MODIFY_EXPR test to == INIT_EXPR. | |
| (cxx_eval_store_expression): Handle MODOP_EXPR next to INIT_EXPR and | |
| MODIFY_EXPR, meaning start_lifetime. Don't preevaluate init in that | |
| case, return void_node early if *valp is already non-NULL/void_node | |
| and within lifetime. | |
| (cxx_eval_constant_expression): For std::allocator<T>::allocate | |
| start lifetime of the created array but not of its subobjects. | |
| Use is_std_allocator_allocate_deallocate rather than | |
| is_std_allocator_allocate where appropriate. | |
| (potential_constant_expression_1): Likewise. | |
| 2026-09-09 Léo Hardt <leom.hardt@inf.ufrgs.br> | |
| * mangle.cc (write_expression): don't call | |
| sorry when mangling error caused by previously | |
| seen error. | |
| 2026-09-08 Kael Andrew Alonzo Franco <kaelfandrew@gmail.com> | |
| PR middle-end/126622 | |
| * parser.cc (cp_parser_handle_statement_omp_attributes): Use | |
| build_int_cst (integer_type_node, cst). | |
| (cp_parser_omp_for_loop): Ditto. | |
| (cp_parser_late_parsing_omp_declare_simd): Ditto. | |
| (cp_maybe_parse_omp_decl): Ditto. | |
| (cp_parser_omp_metadirective): Ditto. | |
| * class.cc (finish_struct_1): Ditto. | |
| (build_vtbl_initializer): Ditto. | |
| * rtti.cc (build_headof): Ditto. | |
| (get_tinfo_ptr_dynamic): Ditto. | |
| (ptr_initializer): Ditto. | |
| (ptm_initializer): Ditto. | |
| (get_pseudo_ti_init0): Ditto. | |
| * cp-tree.h (SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT): Ditto. | |
| * decl.cc (cxx_init_decl_processing): Ditto. | |
| 2026-09-08 Jason Merrill <jason@redhat.com> | |
| * cp-gimplify.cc (struct cp_fold_data): Add mce(). | |
| (cp_fold_r): Use it. | |
| 2026-09-08 Jason Merrill <jason@redhat.com> | |
| * pt.cc (instantiate_class_template): Use maybe_push_to_top_level. | |
| 2026-09-08 Lunex <imlunex2011@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/122258 | |
| * decl.cc (grokdeclarator): Extend non-member explicit object | |
| parameter check to include unqualified friends and clear | |
| is_xobj_member_function. | |
| 2026-09-08 Vladislav Semykin <vladislav.semykin@gmail.com> | |
| PR c++/127132 | |
| * cp-tree.h (saved_scope): Save unevaluated_typeid_cutoff. | |
| (cp_unevaluated_typeid_cutoff): Declare. | |
| (cp_unevaluated): Add a defaulted TYPEID_OPERAND parameter; save | |
| and restore the cutoff. | |
| (cp_evaluated): Save, reset, and restore the cutoff. | |
| * parser.cc (cp_unevaluated_typeid_cutoff): Define. | |
| (cp_unevaluated::cp_unevaluated, cp_unevaluated::~cp_unevaluated): | |
| Implement TYPEID_OPERAND cutoff handling. | |
| (cp_parser_postfix_expression): Pass typeid_operand=true for the | |
| typeid probe. | |
| * pt.cc (instantiate_class_template): Save/reset/restore the | |
| cutoff around NSDMI / lambda capture substitution. | |
| (tsubst_expr): Pass typeid_operand=true for TYPEID_EXPR's probe. | |
| * semantics.cc (process_outer_var_ref): Allow lambda capture | |
| through a typeid probe per [expr.prim.lambda.capture]/7; defer | |
| the "not captured" diagnostic to a later, non-probe pass. | |
| * lambda.cc (lambda_expr_this_capture): Same cutoff and deferral | |
| for 'this'. | |
| * constraint.cc (tsubst_constraint_variables): Save/reset/restore | |
| the cutoff with cp_unevaluated_operand. | |
| * name-lookup.cc (push_to_top_level, pop_from_top_level): Same. | |
| (local_state_t): Same. | |
| 2026-09-05 Patrick Palka <ppalka@redhat.com> | |
| PR c++/127207 | |
| * module.cc (trees_out::decl_value): Relax checking assert | |
| to accept IDENTIFIER_NODE as TI_TEMPLATE. | |
| (get_originating_module_decl): Likewise. | |
| 2026-09-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/127109 | |
| * decl.cc (cp_finish_decomp): Add [dcl.struct.bind]/7 reference | |
| to comment. Use get_temp_regvar and pushdecl instead of | |
| get_internal_target_expr and add_stmt. Set DECL_DECOMP_BASE | |
| to NON_LVALUE_EXPR around the temp regvar. | |
| * cp-tree.h (DECL_DECOMP_BASE): Adjust macro comment. | |
| * semantics.cc (maybe_convert_cond, switch_finish_cond): Check for | |
| NON_LVALUE_EXPR rather than TARGET_EXPR and extract its operand | |
| rather than TARGET_EXPR_SLOT. | |
| 2026-09-02 Lunex <imlunex2011@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/114804 | |
| * pt.cc (instantiate_class_template): Push enclosing scope | |
| before base substitution, pop at the end. | |
| 2026-09-02 Jakub Jelinek <jakub@redhat.com> | |
| P2641R4 | |
| * cp-tree.h: Implement C++26 P2641R4 - Checking if a union | |
| alternative is active. | |
| (enum cp_built_in_function): Add CP_BUILT_IN_IS_WITHIN_LIFETIME. | |
| * tree.cc (builtin_valid_in_constant_expr_p): Handle | |
| CP_BUILT_IN_IS_WITHIN_LIFETIME. | |
| * decl.cc (cxx_init_decl_processing): Create decl for | |
| CP_BUILT_IN_IS_WITHIN_LIFETIME. | |
| * semantics.cc (finish_call_expr): Perform semantic checking of | |
| __builtin_is_within_lifetime. | |
| * constexpr.cc (constexpr_global_ctx::get_value): New method. | |
| (eval_and_check_array_index): Add forward declaration. | |
| (cxx_eval_is_within_lifetime): New function. | |
| (cxx_eval_builtin_function_call): Handle | |
| CP_BUILT_IN_IS_WITHIN_LIFETIME. | |
| 2026-08-31 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126922 | |
| * mangle.cc (write_expression): For CONSTRUCTOR skipped | |
| member of std::meta::info type, call write_expression on | |
| get_null_reflection rather than build_zero_cst. | |
| * tree.cc (zero_init_expr_p): If type is std::meta::info, | |
| return true iff t is null reflection. | |
| 2026-08-29 Vincenzo Calabretta <vincenzo.cal.main@gmail.com> | |
| PR c++/127046 | |
| * constexpr.cc (unshare_constructor): Copy RANGE_EXPR indexes. | |
| 2026-08-28 Wang Jinghao <zheng.xianyuwang@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/125645 | |
| * cp-tree.h (PACK_INDEX_PARENTHESIZED_P): Fix incorrect | |
| documentation in usage. | |
| * name-lookup.h (enum scope_kind): Move sk_contract before | |
| sk_function_parms. | |
| * pt.cc (make_pack_expansion): Use local_bindings_p. | |
| 2026-08-28 Wang Jinghao <zheng.xianyuwang@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/125011 | |
| * contracts.cc (rebuild_postconditions): Skip if | |
| processing_template_decl. | |
| 2026-08-28 Wang Jinghao <zheng.xianyuwang@gmail.com> | |
| PR c++/125712 | |
| * pt.cc (regenerate_decl_from_template): Regenerate contracts | |
| from the current code pattern. | |
| 2026-08-27 Wang Jinghao <zheng.xianyuwang@gmail.com> | |
| PR c++/125537 | |
| * pt.cc (tsubst_contract): Keep template processing enabled | |
| only for postconditions with an undeduced result binding. | |
| * contracts.cc (rebuild_postconditions): Only rebuild | |
| undeduced result variable. | |
| * parser.cc (cp_parser_late_contract_condition): Enable | |
| pseudo-template mode only for result bindings whose return | |
| type has not yet been deduced. Do not immediately rebuild | |
| postconditions that have already completed late parsing. | |
| 2026-08-27 Jason Merrill <jason@redhat.com> | |
| PR c++/126828 | |
| PR c++/112632 | |
| * pt.cc (dependent_implicit_conv_p): Remove. | |
| (convert_nontype_argument_maybe_dependent): Rewrite | |
| simple conversion when force_conv. | |
| (tsubst_expr): Use it. | |
| 2026-08-27 Sammy Al Hashemi <sammy@salh.xyz> | |
| * cp-tree.h (class temp_override): Move to c-common.h. | |
| (type_identity_t): Likewise. | |
| (make_temp_override): Likewise. | |
| 2026-08-26 Sebastian Miles <sebastianmiles20@gmail.com> | |
| PR c++/127016 | |
| * call.cc (can_convert_array): Handle a VEC_INIT_EXPR FROM. | |
| 2026-08-26 Odysseas Georgoudis <odygrd@hotmail.com> | |
| PR c++/125343 | |
| * parser.cc (cp_parser_class_specifier): Preserve whether the | |
| class head opened a lambda scope and use it for cleanup. | |
| 2026-08-24 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125822 | |
| * cp-tree.def: Implement C++29 P3822R2 - Conditional noexcept | |
| specifiers in compound requirements. | |
| (COMPOUND_REQ): Use 3 operands rather than 2, adjust comment. | |
| * cp-tree.h (COMPOUND_REQ_NOEXCEPT_P): Remove. | |
| (finish_compound_requirement): Change last argument from bool to | |
| tree. | |
| * parser.cc (cp_parser_compound_requirement): Parse C++29 | |
| conditional noexcept in compound requirement. Pass a tree to | |
| finish_compound_requirement rather than bool. | |
| * constraint.cc (tsubst_compound_requirement): Read noexcept from | |
| TREE_OPERAND (req, 2) rather than COMPOUND_REQ_NOEXCEPT_P (req), | |
| instantiate, convert, evaluate and pass to | |
| finish_compound_requirement. | |
| (finish_compound_requirement): Change last argument from bool to | |
| tree, store it as third operand of COMPOUND_REQ rather than in | |
| COMPOUND_REQ_NOEXCEPT_P flag and call | |
| check_for_bare_parameter_packs on it. | |
| * cxx-pretty-print.cc (pp_cxx_compound_requirement): Print noexcept | |
| with argument if TREE_OPERAND (t, 2) is neither true nor false | |
| constant and check it for printing "noexcept" instead oof | |
| COMPOUND_REQ_NOEXCEPT_P flag. | |
| * mangle.cc (write_requirement): Don't use COMPOUND_REQ_NOEXCEPT_P | |
| flag, instead mangle without N or with N if third operand is false | |
| or true constant and as C <expression> otherwise. | |
| 2026-08-22 Jason Merrill <jason@redhat.com> | |
| PR c++/124888 | |
| * pt.cc (tsubst_expr): Pass type to {get,build}_typeid. | |
| * rtti.cc (build_typeid, get_typeid): Take it. | |
| (type_info_ptr_type): Remove. | |
| (get_tinfo_ptr): Take tinfo_ptr_type instead of voidp. | |
| (get_tinfo_ptr_dynamic): Likewise. | |
| (get_void_tinfo_ptr): Pass const_ptr_type_node. | |
| * cp-tree.h (build_typeid, get_typeid): Adjust. | |
| 2026-08-21 Iain Sandoe <iain@sandoe.co.uk> | |
| * contracts.cc: Replace use of attribute lists to hold | |
| function contract specifiers with tree-vecs. | |
| * contracts.h (CONTRACT_SOURCE_LOCATION_WRAPPER, | |
| CONTRACT_SOURCE_LOCATION, CONTRACT_STATEMENT): Remove. | |
| (finish_contract_specifier): Remove. | |
| (build_contract_specifiers): Use tree-vec for contracts. | |
| (contract_specifiers_concat): Likewise. | |
| * decl.cc (start_decl): Use tree-vec for contracts. | |
| (grokdeclarator): Likewise. | |
| * module.cc (trees_out::fn_parms_init): Likewise. | |
| * parser.cc (cp_parser_late_contracts): Likewise. | |
| (cp_parser_function_contract_specifier_seq): Likewise. | |
| * pt.cc (tsubst_contract_specifier): Likewise. | |
| (tsubst_contract_specifiers): Likewise. | |
| 2026-08-21 Jason Merrill <jason@redhat.com> | |
| * typeck.cc (lookup_destructor): Pass complain to lookup_member. | |
| 2026-08-21 Jason Merrill <jason@redhat.com> | |
| * cp-tree.h (can_convert_eh): Remove declaration. | |
| * except.cc (can_convert_eh): Remove. | |
| (check_handlers_1): Use handler_match_for_exception_type instead. | |
| * cp-lang.cc (LANG_HOOKS_EXCEPTION_MATCHES_TYPE_P): Likewise. | |
| * call.cc (handler_match_for_exception_type): Allow type argument, | |
| fix private base handling. | |
| 2026-08-20 Odysseas Georgoudis <odygrd@hotmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/124983 | |
| * search.cc (lookup_member): Skip access checks for declarations | |
| from dependent scope. | |
| 2026-08-19 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (check_splice_expr): Reject splicing a direct base | |
| class relationship without an object. | |
| 2026-08-19 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126918 | |
| * constexpr.cc (class constexpr_global_ctx): Extend description of | |
| caught_exceptions vector. | |
| (cxx_eval_cxa_builtin_fn): When catching a pointer-to-member and | |
| the current exception is nullptr or pointer-to-member with different | |
| type, create a temporary, initialize it from the exception value and | |
| return address of it. Make sure to free these temporaries at | |
| __cxa_end_catch time. | |
| * call.cc (handler_match_for_exception_type): Allow NULLPTR_TYPE | |
| exception type or different pointer-to-member type even for | |
| TYPE_PTRMEMFUNC_P types, not just TYPE_PTRDATAMEM_P types. | |
| 2026-08-19 Eczbek <eczbek.void@gmail.com> | |
| PR c++/70097 | |
| * decl.cc (grokdeclarator): If rqual is REF_QUAL_NONE, set it to | |
| result of type_memfn_rqual before passing to build_memfn_type. | |
| 2026-08-18 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126867 | |
| * tree.cc (record_has_unique_obj_representations): Use | |
| location_of (const_cast <tree> (t)) rather than | |
| DECL_SOURCE_LOCATION (t). | |
| 2026-08-18 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126752 | |
| * init.cc (build_vec_init): Assert TREE_PURPOSE of the | |
| last *cleanup_flags element is rval rather than iterator. | |
| 2026-08-18 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126093 | |
| * mangle.cc (write_reflection): Call write_unqualified_name on | |
| STRIP_TEMPLATE (arg) rather than just arg. | |
| 2026-08-17 Odysseas Georgoudis <odygrd@hotmail.com> | |
| PR c++/126324 | |
| * constexpr.cc (cxx_eval_thunk_call): Preserve null pointer | |
| results and adjust the result to the thunk's return type. | |
| (cxx_eval_call_expression): Adjust covariant virtual-call results | |
| to the static call type. | |
| 2026-08-14 Patrick Palka <ppalka@redhat.com> | |
| * cp-gimplify.cc (cp_fold_r) <case INIT_EXPR>: Add trial | |
| maybe_constant_init logic like for TARGET_EXPR. | |
| 2026-08-14 Patrick Palka <ppalka@redhat.com> | |
| PR c++/126483 | |
| * typeck2.cc (store_init_value): Check maybe_constexpr_fn | |
| instead of DECL_DECLARED_CONSTEXPR_P of the function scope. | |
| 2026-08-14 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123495 | |
| PR c++/126860 | |
| * cvt.cc (cp_get_fndecl_from_callee): Use fold_non_dependent_expr | |
| instead of maybe_constant_init. | |
| 2026-08-14 Jason Merrill <jason@redhat.com> | |
| PR c++/126754 | |
| * constexpr.cc (cxx_eval_outermost_constant_expr): Don't | |
| wrap in TARGET_EXPR when processing_template_decl. | |
| 2026-08-14 Jason Merrill <jason@redhat.com> | |
| * decl.cc (reshape_single_init): Declare sooner. | |
| (reshape_init_array_1): Use it. | |
| (reshape_init_class): Drop "subclass" case. | |
| (reshape_init_r): d->cur->index always means initializing | |
| an element. | |
| 2026-08-13 Patrick Palka <ppalka@redhat.com> | |
| PR c++/126783 | |
| * module.cc (transfer_defining_module): Call retrofit_lang_decl | |
| instead of assuming the old declaration already has | |
| DECL_LANG_SPECIFIC allocated. | |
| 2026-08-12 Patrick Palka <ppalka@redhat.com> | |
| Bernhard M. Wiedemann <bwiedemann@suse.de> | |
| PR c++/124811 | |
| * decl.cc (typename_hasher::hash): Instead of pointer hashing, | |
| hash TYPE_HASH of context and use iterative_hash_template_arg | |
| to hash fullname. | |
| 2026-08-12 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (init_reflection): Also initialize TYPE_UNSIGNED, | |
| TYPE_PRECISION, TYPE_MODE and TYPE_ALIGN of meta_info_type_node. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125541 | |
| * mangle.cc (write_reflection): Mangle empty anonymous union/struct | |
| data members as "da" rather than "dm" and use index of such a data | |
| member instead of name. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125680 | |
| * mangle.cc (write_reflection): For type aliases use maybe_write_module | |
| and write_source_name instead of write_unqualified_name. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125647 | |
| * class.cc (finish_struct): Reject std::initializer_list template | |
| with bases. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125601 | |
| * pt.cc (finish_expansion_stmt): If break; was seen in any of the | |
| expansion stmt bodies, wrap all the bodies in an artificial | |
| do ... while (0); stmt. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125591 | |
| * pt.cc (tsubst_pack_expansion): Don't require | |
| retrieve_local_specialization on structured binding to | |
| always return structured binding, instead handle if it returns | |
| ARGUMENT_PACK_SELECT. | |
| 2026-08-06 Jakub Jelinek <jakub@redhat.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/125989 | |
| * parser.cc: Implement C++29 P2287R6 - Designated-initializers for | |
| Base Classes. | |
| (cp_parser_initializer_list): For C++29, allow non-designated clauses | |
| followed by designated ones, provided designators are identifiers. | |
| For C++20-26, allow that as a pedwarned about extension but use the | |
| C++20 wording in that case. | |
| * decl.cc (reshape_init_class): Diagnose non-designated clause not | |
| appertaining to base class followed by designated clause for C++ >= 20. | |
| For C++29, if get_class_binding for designator is unsuccessful, use | |
| lookup_member afterwards and handle the case where the lookup succeeds | |
| for some member of a base class through recursive reshape_init_class. | |
| 2026-08-05 Tobias Burnus <tburnus@baylibre.com> | |
| * parser.cc (cp_parser_postfix_expression, | |
| cp_parser_postfix_open_square_expression, | |
| cp_parser_skip_up_to_closing_square_bracket, | |
| cp_parser_omp_var_list_no_open): Handle OpenMP/OpenACC array | |
| sections that are lexed since C++26 as CPP_OPEN_SPLICE and | |
| CPP_CLOSE_SPLICE. | |
| 2026-08-05 Iain Sandoe <iain@sandoe.co.uk> | |
| * cp-objcp-common.cc: Remove claim to support clang modules. | |
| 2026-08-04 Egas Ribeiro <egas.g.ribeiro@gmail.com> | |
| PR analyzer/119697 | |
| * except.cc (can_convert_eh): Make non-static. | |
| * cp-tree.h (can_convert_eh): Declare. | |
| * cp-lang.cc (LANG_HOOKS_EH_MAY_CATCH_P): Define as | |
| can_convert_eh. | |
| 2026-08-03 EienMiku <121539739@qq.com> | |
| * reflect.cc (get_reflection): Add missing "to" in diagnostic. | |
| 2026-08-03 Jason Merrill <jason@redhat.com> | |
| PR c++/126606 | |
| PR c++/126481 | |
| * parser.cc (cp_parser_early_parsing_nsdmi): Check | |
| MAYBE_CLASS_TYPE_P instead of {}. | |
| 2026-08-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/124794 | |
| * cp-tree.h (baselink_for_fns): Adjust declaration. | |
| * parser.cc (cp_parser_reflect_expression): Adjust the call to | |
| baselink_for_fns. | |
| * reflect.cc (splice): Call baselink_for_fns. | |
| * semantics.cc (baselink_for_fns): Add a bool parameter. If | |
| it's true, ignore currently_open_derived_class. | |
| 2026-08-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/126546 | |
| * reflect.cc (get_reflection): Check PACK_INDEX_EXPR instead of | |
| PACK_INDEX_P. | |
| 2026-08-01 Jakub Jelinek <jakub@redhat.com> | |
| * constexpr.cc (class constexpr_global_ctx): Rename metafns_called | |
| to state_dependent, expand comment about constexpr EH. | |
| (constexpr_global_ctx::constexpr_global_ctx ()): Rename | |
| metafns_called to state_dependent. | |
| (cxx_eval_cxa_builtin_fn): Likewise. | |
| (cxx_eval_call_expression): Likewise. | |
| 2026-07-31 Jason Merrill <jason@redhat.com> | |
| PR c++/126481 | |
| * parser.cc (cp_parser_early_parsing_nsdmi): Also defer {}. | |
| 2026-07-31 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | |
| PR c++/124806 | |
| * module.cc (elf_out::began): New data member. | |
| (elf_out::begin): Set it after successful initialization. | |
| (elf_out::end): Do not finalize output that never began. | |
| 2026-07-31 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126508 | |
| * constexpr.cc (cxx_eval_cxa_builtin_fn): Avoid caching | |
| calls which rethrow or call __builtin_uncaught_exceptions | |
| or __builtin_current_exception. | |
| 2026-07-31 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126420 | |
| PR c++/126423 | |
| * typeck.cc (check_return_expr): If in_expansion_stmt, goto | |
| dependent before even setting current_function_returns_value. | |
| * pt.cc (tsubst_stmt): Temporarily set in_expansion_stmt around | |
| partial instantiation of expansion statement body. | |
| 2026-07-31 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126343 | |
| * error.cc (dump_type) <case NULLPTR_TYPE>: Call | |
| pp_c_type_qualifier_list. | |
| (dump_type) <case META_TYPE>: Likewise. | |
| (dump_expr) <case REFLECT_EXPR>: For REFLECT_EXPR on | |
| non-typedef META_TYPE or NULLPTR_TYPE print | |
| decltype(^^int) or decltype(nullptr). | |
| 2026-07-31 Patrick Palka <ppalka@redhat.com> | |
| PR c++/126406 | |
| PR c++/119343 | |
| * pt.cc (resolve_nondeduced_context): Revert r16-5967 change. | |
| 2026-07-30 Marek Polacek <polacek@redhat.com> | |
| PR c++/126335 | |
| * typeck2.cc (split_nonconstant_init): Assert that DECL_INITIAL | |
| is initially null. Don't clear DECL_INITIAL if build_vec_init | |
| set it. Only clear TREE_READONLY if CODE has side-effects. | |
| 2026-07-30 Jason Merrill <jason@redhat.com> | |
| PR c++/126209 | |
| * module.cc (depset::hash::add_namespace_entities): Don't | |
| force out anonymous namespaces. | |
| 2026-07-27 Jason Merrill <jason@redhat.com> | |
| PR c++/126310 | |
| * call.cc (standard_conversion): Don't build a mixed METHOD_TYPE if | |
| it isn't needed. | |
| 2026-07-26 Jason Merrill <jason@redhat.com> | |
| PR c++/96645 | |
| * parser.cc (cp_parser_early_parsing_nsdmi): New. | |
| (cp_parser_member_declaration): Call it. | |
| 2026-07-26 Odysseas Georgoudis <odygrd@hotmail.com> | |
| PR c++/126323 | |
| * parser.cc (cp_parser_pragma): Reject GCC loop pragmas outside | |
| statement contexts. | |
| 2026-07-25 Patrick Palka <ppalka@redhat.com> | |
| PR c++/126280 | |
| * pt.cc (mark_template_arguments_used): Split out loop into ... | |
| (mark_template_arguments_used_1): ... here. Recurse into | |
| argument packs. | |
| 2026-07-25 Kael Andrew Alonzo Franco <kaelfandrew@gmail.com> | |
| PR middle-end/125507 | |
| * cp-tree.h (struct lang_decl_base): Remove ENUM_BITFIELD. | |
| (struct lang_decl_fn): Ditto. | |
| (struct cp_declarator): Ditto. | |
| * name-lookup.h (struct cp_binding_level): Ditto. | |
| 2026-07-24 Tobias Burnus <tburnus@baylibre.com> | |
| * pt.cc (tsubst_omp_clauses): Add OMP_CLAUSE_DEVICE_TYPE | |
| to switch statement. | |
| 2026-07-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/112908 | |
| * method.cc (build_prvalue_trait_object): New. | |
| (ref_xes_from_temporary): Use build_prvalue_trait_object. | |
| Use deferring_access_check_sentinel and cp_unevaluated. Don't | |
| call force_rvalue or rvalue. | |
| * semantics.cc (finish_trait_expr) | |
| <case CPTK_REF_CONSTRUCTS_FROM_TEMPORARY>: Actually check | |
| completeness. | |
| 2026-07-23 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126354 | |
| * constexpr.cc (cxx_eval_call_expression): Diagnose return from | |
| [[noreturn]] function. | |
| 2026-07-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/126215 | |
| * constexpr.cc (lookup_placeholder): Do unshare_expr. | |
| 2026-07-23 Jakub Jelinek <jakub@redhat.com> | |
| * typeck2.cc: Implement part of CWG3130 - Naming function members of | |
| anonymous unions. | |
| (abstract_virtuals_error): Diagnose trying to create | |
| an object with anonymous union or struct type. | |
| * semantics.cc (finish_compound_literal): Call abstract_virtuals_error. | |
| (finish_member_declaration): Diagnose named members with anonymous | |
| union or struct type. | |
| * decl.cc (xref_basetypes): Diagnose anonymous structs as bases. | |
| 2026-07-23 Thomas Schwinge <tschwinge@baylibre.com> | |
| PR c++/119102 | |
| * module.cc (module_state): Update comment for 'SE_BITS' change. | |
| 2026-07-20 Ville Voutilainen <ville.voutilainen@gmail.com> | |
| PR c++/125904 | |
| * contracts.cc (build_contract_check): Set TREE_SIDE_EFFECTS. | |
| 2026-07-17 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125833 | |
| * cp-tree.h: Implement C++29 P3424R2 - Deallocation Functions with | |
| Throwing Exception Specification Are Ill-formed. | |
| (maybe_diagnose_deallocation_noexcept_false): Declare. | |
| * decl.cc (maybe_diagnose_deallocation_noexcept_false): New function. | |
| (grokfndecl): Call it. | |
| * pt.cc (maybe_instantiate_noexcept): Likewise. | |
| * parser.cc (cp_parser_class_specifier): Likewise. | |
| 2026-07-15 Tobias Burnus <tburnus@baylibre.com> | |
| PR c/122748 | |
| * parser.cc (cp_parser_omp_clause_uses_allocators): Mark | |
| trait var as read to avoid 'unused but set' warning. | |
| 2026-07-15 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/120635 | |
| * parser.cc (cp_parser_std_attribute): Add | |
| canonicalize_attr_ns_name lambda and use it instead of | |
| canonicalize_attr_name for namespaces. Emit a warning | |
| on __clang__::. | |
| (cp_parser_std_attribute_spec): Emit a warning on | |
| using __clang__:. | |
| 2026-07-14 Jakub Jelinek <jakub@redhat.com> | |
| * decl.cc (grokfndecl): If raises is NULL_TREE for C++11 | |
| deallocation function, use noexcept_true_spec instead. | |
| 2026-07-13 Yuxuan Chen <i@yuxuan.ch> | |
| PR c++/125066 | |
| * decl.cc (store_parm_decls): Do not register trivial_abi parameter | |
| cleanups for cloned functions. | |
| 2026-07-13 Vladislav Semykin <vladislav.semykin@gmail.com> | |
| PR c++/126207 | |
| * cp-tree.h (typeid_evaluated_p): Add nonnull out-parameter. | |
| * rtti.cc (typeid_evaluated_p): Likewise; avoid calling | |
| resolves_to_fixed_type_p twice. | |
| (build_typeid): Adjust. | |
| 2026-07-13 Yuxuan Chen <i@yuxuan.ch> | |
| PR c++/125064 | |
| * tree.cc (validate_trivial_abi_attribute): Remove a rejected | |
| trivial_abi attribute from all variants. | |
| 2026-07-13 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | |
| PR driver/124058 | |
| * decl.cc (maybe_prepare_return_this): Use OPT_Wuse_after_free_. | |
| 2026-07-13 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/120635 | |
| * tree.cc (cxx_gnu_attributes): Add "no_specializations" entry. | |
| (cxx_clang_attributes): Likewise. | |
| (handle_no_specializations_attribute, | |
| handle_gnu_no_specializations_attribute): New functions. | |
| * decl2.cc (is_late_template_attribute): Return false for | |
| "no_specializations" attribute, even on dependent types. Don't | |
| differentiate between the completely unknown and dependent | |
| cases, for the 5 template attributes return always false, for | |
| others true if dependent type and false otherwise. | |
| * parser.cc (cp_parser_std_attribute): Use | |
| uneval_string_attr even for clang::no_specializations attribute. | |
| * pt.cc: Include "escaped_string.h". | |
| (maybe_diagnose_no_specializations): New function. | |
| (maybe_process_partial_specialization): Use it. | |
| (check_explicit_specialization): Likewise. | |
| 2026-07-13 Marek Polacek <polacek@redhat.com> | |
| PR c++/126066 | |
| * constraint.cc (tsubst_requires_expr): Use | |
| REQUIRES_EXPR_LOCATION. | |
| (satisfaction_cache::get): Use cp_expr_location. | |
| (satisfaction_cache::save): Likewise. | |
| (finish_requires_expr): Use make_node and set REQUIRES_EXPR_*. | |
| * cp-objcp-common.cc (cp_tree_size): Handle REQUIRES_EXPR. | |
| (cp_common_init_ts): Change REQUIRES_EXPR from MARK_TS_EXP to | |
| MARK_TS_TYPED. | |
| * cp-tree.def (REQUIRES_EXPR): Make it tcc_exceptional with no | |
| operands. | |
| * cp-tree.h (struct tree_requires_expr): New. | |
| (REQUIRES_EXPR_PARMS): Adjust. | |
| (REQUIRES_EXPR_REQS): Likewise. | |
| (REQUIRES_EXPR_EXTRA_ARGS): Likewise. | |
| (REQUIRES_EXPR_LOCATION): New. | |
| (enum cp_tree_node_structure_enum): Add TS_CP_REQUIRES_EXPR. | |
| (union lang_tree_node): Add tree_requires_expr. | |
| (cp_expr_location): Handle REQUIRES_EXPR. | |
| * cxx-pretty-print.cc (pp_cxx_requires_expr): Use | |
| REQUIRES_EXPR_REQS. | |
| * decl.cc (cp_tree_node_structure): Handle REQUIRES_EXPR. | |
| * error.cc (print_requires_expression_info): Use | |
| REQUIRES_EXPR_PARMS. | |
| * mangle.cc (write_tparms_constraints): Use cp_expr_location. | |
| * module.cc (trees_out::core_vals): Handle REQUIRES_EXPR | |
| specially. | |
| (trees_in::core_vals): Likewise. | |
| * pt.cc (iterative_hash_template_arg): Handle REQUIRES_EXPR. | |
| * tree.cc (strip_typedefs_expr): Likewise. | |
| (cp_tree_equal): Likewise. | |
| 2026-07-13 Joyee Cheung <joyee@igalia.com> | |
| PR c++/96496 | |
| * cvt.cc (ocp_convert): For an enumeration type with a fixed | |
| underlying type, convert the operand to that type first, as | |
| specified by [expr.static.cast]/8. Update the comment quoting | |
| [expr.static.cast]/8. | |
| 2026-07-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | |
| * module.cc (EOPNOTSUPP): Provide fallback. | |
| (elf_out::create_mapping) [HAVE_POSIX_FALLOCATE]: Allow for | |
| EOPNOTSUPP result. | |
| 2026-07-10 Arsen Arsenović <aarsenovic@baylibre.com> | |
| * cp-tree.h (temp_override): In provided-value constructor, | |
| don't deduce based on provided value. | |
| 2026-07-07 Egas Ribeiro <egas.g.ribeiro@gmail.com> | |
| * except.cc (can_convert_eh): Handle a nullptr_t exception | |
| caught by a pointer or pointer-to-member handler. | |
| 2026-07-07 Vladislav Semykin <vladislav.semykin@gmail.com> | |
| PR c++/125886 | |
| PR c++/116385 | |
| PR c++/68604 | |
| * parser.cc (cp_parser_postfix_expression): Two-pass typeid parse. | |
| * pt.cc (tsubst_expr): Same for TYPEID_EXPR. | |
| * rtti.cc (typeid_evaluated_p, build_typeid): Shared predicate. | |
| * cp-tree.h: Declare typeid_evaluated_p. | |
| 2026-07-06 Marek Polacek <polacek@redhat.com> | |
| PR c++/125901 | |
| * cp-tree.h (finish_trait_expr): Adjust declaration. | |
| * reflect.cc (eval_constant_of): Adjust the call to | |
| eval_is_array_type. | |
| (eval_reflect_object): Adjust the call to eval_is_object_type. | |
| (eval_type_trait): Emit a diagnostic when finish_trait_expr | |
| returns error_mark_node and set *non_constant_p. Adjust the | |
| call to eval_type_trait. | |
| (eval_is_array_type): Adjust the call to eval_type_trait. | |
| (eval_is_pointer_type): Likewise. | |
| (eval_is_member_object_pointer_type): Likewise. | |
| (eval_is_member_function_pointer_type): Likewise. | |
| (eval_is_enum_type): Likewise. | |
| (eval_is_union_type): Likewise. | |
| (eval_is_class_type): Likewise. | |
| (eval_is_reference_type): Likewise. | |
| (eval_is_member_pointer_type): Likewise. | |
| (eval_is_object_type): Likewise. | |
| (eval_is_trivially_copyable_type): Use eval_type_trait. | |
| (eval_is_standard_layout_type): Likewise. | |
| (eval_is_empty_type): Adjust the call to eval_type_trait. | |
| (eval_is_polymorphic_type): Likewise. | |
| (eval_is_abstract_type): Use eval_type_trait. | |
| (eval_is_final_type): Adjust the call to eval_type_trait. | |
| (eval_is_aggregate_type): Use eval_type_trait. | |
| (eval_is_structural_type): Adjust the call to eval_type_trait. | |
| (eval_is_bounded_array_type): Likewise. | |
| (eval_is_constructible_type): Use eval_type_trait. | |
| (eval_is_default_constructible_type): Likewise. | |
| (eval_is_copy_constructible_type): Likewise. | |
| (eval_is_move_constructible_type): Likewise. | |
| (eval_is_assignable_type): Adjust the call to eval_type_trait. | |
| (eval_is_copy_assignable_type): Use eval_type_trait. | |
| (eval_is_move_assignable_type): Use eval_type_trait. | |
| (eval_is_destructible_type): Adjust the call to eval_type_trait. | |
| (eval_is_trivially_constructible_type): Use eval_type_trait. | |
| (eval_is_trivially_default_constructible_type): Likewise. | |
| (eval_is_trivially_copy_constructible_type): Likewise. | |
| (eval_is_trivially_move_constructible_type): Likewise. | |
| (eval_is_trivially_assignable_type): Adjust the call to | |
| eval_type_trait. | |
| (eval_is_trivially_copy_assignable_type): Use eval_type_trait. | |
| (eval_is_trivially_move_assignable_type): Likewise. | |
| (eval_is_trivially_destructible_type): Adjust the call to | |
| eval_type_trait. | |
| (eval_is_nothrow_constructible_type): Use eval_type_trait. | |
| (eval_is_nothrow_default_constructible_type): Likewise. | |
| (eval_is_nothrow_copy_constructible_type): Likewise. | |
| (eval_is_nothrow_move_constructible_type): Likewise. | |
| (eval_is_nothrow_assignable_type): Adjust the call to | |
| eval_type_trait. | |
| (eval_is_nothrow_copy_assignable_type): Use eval_type_trait. | |
| (eval_is_nothrow_move_assignable_type): Likewise. | |
| (eval_is_nothrow_destructible_type): Adjust the call to | |
| eval_type_trait. | |
| (eval_is_implicit_lifetime_type): Use eval_type_trait. | |
| (eval_has_virtual_destructor): Likewise. | |
| (eval_has_unique_object_representations): Likewise. | |
| (eval_reference_constructs_from_temporary): Adjust the call to | |
| eval_type_trait. | |
| (eval_reference_converts_from_temporary): Likewise. | |
| (eval_extent): Adjust the call to eval_is_bounded_array_type. | |
| Check != boolean_true_node rather than == boolean_false_node when | |
| checking eval_is_bounded_array_type. | |
| (eval_is_same_type): Adjust the call to eval_type_trait. | |
| (eval_is_base_of_type): Likewise. | |
| (eval_is_virtual_base_of_type): Likewise. | |
| (eval_is_convertible_type): Likewise. | |
| (eval_is_nothrow_convertible_type): Likewise. | |
| (eval_is_layout_compatible_type): Likewise. | |
| (eval_is_pointer_interconvertible_base_of_type): Likewise. | |
| (eval_is_invocable_type): Use eval_type_trait. | |
| (eval_is_nothrow_invocable_type): Likewise. | |
| (eval_data_member_spec): Adjust the calls to eval_is_array_type | |
| and eval_is_object_type. Check != boolean_true_node rather than | |
| == boolean_false_node when checking eval_is_object_type. | |
| (eval_extract): Adjust the call to eval_is_reference_type. | |
| (process_metafunction): Adjust the calls to various | |
| metafunctions. | |
| * semantics.cc (check_trait_type): Remove a default argument. | |
| Add a complain parameter. If not emitting error messages, always | |
| return false for incomplete types. | |
| (finish_trait_expr): Add a complain parameter. Use it. Call | |
| complete_type_or_maybe_complain instead of | |
| complete_type_or_else. | |
| 2026-07-06 Jason Merrill <jason@redhat.com> | |
| PR c++/126031 | |
| PR c++/121552 | |
| * decl.cc (maybe_diagnose_non_c_class_typedef_for_linkage): Handle | |
| incomplete type. | |
| 2026-07-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126057 | |
| * decl.cc (cp_finish_decomp): Set assembler name to | |
| <decomp> during error recovery whenever TREE_STATIC | |
| rather than just DECL_NAMESPACE_SCOPE_P. | |
| * pt.cc (tsubst_stmt): If tsubst_decomp_names fails, | |
| set assembler name to <decomp>. | |
| 2026-07-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125826 | |
| * method.cc: Implement C++29 P2953R5 - Adding restrictions to | |
| defaulted assignment operator functions. | |
| (maybe_delete_defaulted_fn): For C++29, error instead of | |
| deleting always, with the exception of F1 having parmtype | |
| const C & and F2 having implicit_parmtype C & and no other | |
| non-permitted changes. Move checks whether defaulted fn | |
| should be deleted or ill-formed at all from defaulted_late_check | |
| to this function. Also error for C++29 if | |
| FUNCTION_RVALUE_QUALIFIED. | |
| (defaulted_late_check): Call maybe_delete_defaulted_fn | |
| unconditionally. | |
| 2026-07-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126036 | |
| * reflect.cc (get_range_elts): Avoid calling finish_compound_literal | |
| when processing_template_decl, instead set *non_constant_p and | |
| return NULL_TREE. | |
| (process_metafunction): Likewise. | |
| 2026-07-02 Marek Polacek <polacek@redhat.com> | |
| PR c++/125819 | |
| * reflect.cc (namespace_members_of): Skip | |
| DECL_IS_UNDECLARED_BUILTIN decls. | |
| 2026-07-01 Jason Merrill <jason@redhat.com> | |
| PR c++/124584 | |
| * decl.cc (cp_finish_decl): Use get_temp_regvar for decomp guards. | |
| 2026-07-01 Jason Merrill <jason@redhat.com> | |
| PR c++/121094 | |
| PR c++/117259 | |
| * coroutines.cc (replace_proxy): Handle TARGET_EXPR from. | |
| (flatten_await_stmt): Pass it. | |
| 2026-06-30 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/126007 | |
| * tree.cc (eligible_special_member_function_p): New function. | |
| (implicit_lifetime_type_p): Use true instead of 1 in function comment. | |
| Add some further comments. Use eligible_special_member_function_p | |
| instead of !DECL_DELETED_FN. | |
| 2026-06-29 Georg-Johann Lay <avr@gjlay.de> | |
| * mangle.cc (mangle_ctor_vtbl_for_type): Fix production in comment. | |
| 2026-06-28 Kevin Stefanov <kevinstefanov15@gmail.com> | |
| PR middle-end/125274 | |
| * call.cc (conversion): Likewise. | |
| * cp-tree.h (saved_scope): Likewise. | |
| (language_function): Likewise. | |
| (cp_decl_specifier_seq): Likewise. | |
| (cp_declarator): Likewise. | |
| * name-lookup.h (cp_binding_level): Likewise. | |
| 2026-06-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/125900 | |
| * reflect.cc (check_out_of_consteval_use_r): Don't walk | |
| SPLICE_EXPR. | |
| 2026-06-25 Marek Polacek <polacek@redhat.com> | |
| PR c++/125922 | |
| * parser.cc (cp_parser_reflect_expression): Temporarily set | |
| parser->type_definition_forbidden_message. | |
| 2026-06-25 Richard Biener <rguenther@suse.de> | |
| * module.cc (trees_out::decl_value): Adjust for enum class | |
| tree_code. | |
| 2026-06-24 Marek Polacek <polacek@redhat.com> | |
| PR c++/125939 | |
| * cp-tree.h (build_const_lref): Declare. | |
| * method.cc (build_stub_type): Pass tf_ignore_bad_quals to | |
| cp_build_qualified_type. | |
| * reflect.cc (build_const_lref): New. | |
| (get_range_elts): Use it. | |
| (eval_is_copy_constructible_type): Likewise. | |
| (eval_is_copy_assignable_type): Likewise. | |
| (eval_is_trivially_copy_assignable_type): Likewise. | |
| (eval_is_nothrow_copy_constructible_type): Likewise. | |
| (eval_is_nothrow_copy_assignable_type): Likewise. | |
| * tree.cc (trivially_copy_constructible_p): Likewise. | |
| (handle_annotation_attribute): Likewise. | |
| 2026-06-24 Paul-Antoine Arras <parras@baylibre.com> | |
| * semantics.cc (finish_omp_barrier): Push GOMP_BARRIER_EXPLICIT | |
| onto the argument vector. | |
| 2026-06-23 Jason Merrill <jason@redhat.com> | |
| PR c++/125334 | |
| * module.cc (depset::hash::find_dependencies): Don't add_dependency | |
| dependent ADL functions. | |
| 2026-06-23 Jason Merrill <jason@redhat.com> | |
| PR c++/125768 | |
| * module.cc (trees_out::decl_node): When not streaming, | |
| recurse into DECL_ORIGINAL_TYPE of an imported typedef. | |
| 2026-06-23 Kwok Cheung Yeung <kcyeung@baylibre.com> | |
| Sandra Loosemore <sloosemore@baylibre.com> | |
| * parser.cc (cp_parser_omp_iterators): Use iterator constructors | |
| and macros for accessing iterator elements. | |
| (cp_parser_omp_clause_affinity): Likewise. | |
| (cp_parser_omp_clause_depend): Likewise. | |
| (cp_parser_omp_clause_from_to): Likewise. | |
| (cp_parser_omp_clause_map): Likewise. | |
| * pt.cc (tsubst_omp_clause_decl): Likewise. | |
| * semantics.cc (cp_omp_finish_iterators): Likewise. | |
| 2026-06-23 Jason Merrill <jason@redhat.com> | |
| PR c++/125745 | |
| * cp-ubsan.cc (cp_ubsan_instrument_vptr): Use build_vfield_ref. | |
| 2026-06-22 Marek Polacek <polacek@redhat.com> | |
| PR c++/125697 | |
| * cp-tree.h (trivially_copy_constructible_p): Declare. | |
| * parser.cc (warn_for_range_copy): Use it. | |
| * reflect.cc (eval_is_trivially_copy_constructible_type): Use it. | |
| * tree.cc (trivially_copy_constructible_p): New. | |
| 2026-06-22 Marek Polacek <polacek@redhat.com> | |
| PR c++/125889 | |
| * reflect.cc (class_members_of): Also append LAMBDA_FUNCTION_P | |
| from the implicitly_declared vector. | |
| 2026-06-22 Georg-Johann Lay <avr@gjlay.de> | |
| * call.cc: Remove -*- C++ -*- tags for Emacs. | |
| * class.cc: Same. | |
| * constexpr.cc: Same. | |
| * decl.cc: Same. | |
| * init.cc: Same. | |
| * mangle.cc: Same. | |
| * mapper-resolver.cc: Same. | |
| * parser.cc: Same. | |
| * pt.cc: Same. | |
| 2026-06-21 Jason Merrill <jason@redhat.com> | |
| PR c++/125408 | |
| * expr.cc (mark_use): Fix condition for changing rvalue to lvalue. | |
| 2026-06-21 Jason Merrill <jason@redhat.com> | |
| PR c++/125408 | |
| * tree.cc (cp_walk_subtrees): Walk into the DECL_ORIGINAL_TYPE of a | |
| typedef DECL_EXPR. | |
| 2026-06-18 Marek Polacek <polacek@redhat.com> | |
| * decl.cc (check_initializer): Don't call | |
| build_aggr_init_full_exprs for {} of an aggregate. | |
| 2026-06-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/125764 | |
| * reflect.cc (eval_can_substitute): Don't call | |
| convert_from_reference on types. | |
| 2026-06-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/125759 | |
| * reflect.cc (get_reflection): Do STRIP_REFERENCE_REF. | |
| 2026-06-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/125492 | |
| * reflect.cc (eval_size_of): Add a separate throw_exception for | |
| function types. | |
| 2026-06-17 Wang Jinghao <zheng.xianyuwang@gmail.com> | |
| * reflect.cc (eval_is_explicit_object_parameter): Call | |
| maybe_update_function_parm before checking the parameter | |
| against DECL_ARGUMENTS. | |
| 2026-06-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/125613 | |
| * pt.cc (check_explicit_specialization): Detect mismatches in | |
| exception specifications in explicit instantiations. | |
| 2026-06-17 H.J. Lu <hjl.tools@gmail.com> | |
| PR c++/125851 | |
| * name-lookup.cc (get_cxx_dialect_name): Handle cxx29. | |
| 2026-06-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/125770 | |
| * decl2.cc (mark_used): Check complain & tf_error before giving | |
| an error. | |
| 2026-06-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/125539 | |
| * cvt.cc (ocp_convert): In a template, always call | |
| perform_implicit_conversion. Pass flags to | |
| perform_implicit_conversion_flags. | |
| * decl.cc (check_initializer): Remove a call to | |
| build_implicit_conv_flags. | |
| 2026-06-12 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125674 | |
| * pt.cc (tsubst_decl): Diagnose bit-field widths | |
| with invalid type. | |
| 2026-06-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c/125694 | |
| * typeck.cc (build_x_bswapg_bitreverseg ): If arg is error_operand_p, | |
| return error_mark_node. | |
| 2026-06-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/91155 | |
| * decl.cc (cp_make_fname_decl): Use cpp_translate_string instead of | |
| cpp_interpret_string, don't prefix name strname.text with " and suffix | |
| with " and NUL. | |
| 2026-06-10 Marek Polacek <polacek@redhat.com> | |
| PR c++/125498 | |
| * mangle.cc (write_reflection): Use DECL_PARM_INDEX for | |
| computing the parameter index. | |
| 2026-06-09 Marek Polacek <polacek@redhat.com> | |
| PR c++/121287 | |
| PR c++/125212 | |
| PR c++/105667 | |
| PR c++/121597 | |
| PR c++/110961 | |
| * cp-tree.h (TYPE_DECL_OPAQUE_ALIAS_P): Define. | |
| (any_lambdas_p): Declare. | |
| * decl.cc (grokdeclarator): Set TYPE_DECL_OPAQUE_ALIAS_P. | |
| * pt.cc (dependent_opaque_alias_p): Refine to check | |
| TYPE_DECL_OPAQUE_ALIAS_P. | |
| (tsubst_decl) <case TYPE_DECL>: Set TYPE_DECL_OPAQUE_ALIAS_P. | |
| (any_lambdas_p): New, factored out of... | |
| (regenerate_decl_from_template): ...this. Call it. | |
| 2026-06-08 Jakub Jelinek <jakub@redhat.com> | |
| * call.cc (build_op_delete_call_1): Add missing auto_diagnostic_group | |
| sentinel. Formatting fix. | |
| (complain_about_access): Add missing auto_diagnostic_group sentinels. | |
| (convert_like_internal): Likewise. | |
| (build_over_call): Likewise. | |
| (maybe_warn_class_memaccess): Likewise. | |
| * constexpr.cc (maybe_warn_about_constant_value): Likewise. | |
| (cxx_eval_outermost_constant_expr): Likewise. | |
| * contracts.cc (check_param_in_postcondition): Likewise. | |
| (check_postconditions_in_redecl): Likewise. Formatting fixes. | |
| * decl.cc (identify_goto): Add missing auto_diagnostic_group | |
| sentinels. | |
| (omp_declare_variant_finalize_one): Likewise. | |
| * method.cc (walk_field_subobs): Likewise. | |
| * semantics.cc (finish_omp_clauses): Likewise. | |
| * tree.cc (validate_trivial_abi_attribute): Likewise. | |
| * typeck2.cc (digest_init_r): Likewise. | |
| 2026-06-05 Sandra Loosemore <sloosemore@baylibre.com> | |
| * semantics.cc (cxx_omp_map_array_section): Allow ARRAY_TYPE | |
| expressions, not just pointers. | |
| 2026-06-05 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125334 | |
| * module.cc (depset::hash::add_dependent_adl_entities): | |
| Disable when inside a header unit. | |
| 2026-06-05 Patrick Palka <ppalka@redhat.com> | |
| * module.cc (dep_adl_info::args): Initializer to nullptr | |
| instead of immediately allocating. | |
| (depset::hash::add_dependent_adl_entities): Exit early | |
| for non-type-dependent calls and operator expressions. | |
| Only allocate dep_adl_info::args if we're not exiting early. | |
| Correct all-type-dependent args test. | |
| * name-lookup.cc (name_lookup::preserve_state): Replace | |
| propagation of tentative flag with assert that it's not | |
| set. | |
| 2026-06-05 Marek Polacek <polacek@redhat.com> | |
| * pt.cc (check_explicit_inst_of_var_template): Add | |
| auto_diagnostic_group. | |
| 2026-06-05 Jakub Jelinek <jakub@redhat.com> | |
| PR c/122731 | |
| * parser.cc (cp_parser_postfix_expression): Parse | |
| __builtin_bswapg and __builtin_bitreverseg. | |
| * typeck.cc (build_x_bswapg_bitreverseg): New function. | |
| * cp-tree.h (build_x_bswapg_bitreverseg): Declare. | |
| * pt.cc (tsubst_expr): Handle IFN_BSWAP and IFN_BITREVERSE. | |
| * constexpr.cc (cxx_eval_internal_function): Likewise. | |
| (potential_constant_expression_1): Likewise. | |
| * cp-gimplify.cc (cp_gimplify_expr): Likewise. | |
| 2026-06-04 Marek Polacek <polacek@redhat.com> | |
| PR c++/125575 | |
| PR c++/98524 | |
| * pt.cc (check_explicit_inst_of_var_template): New. | |
| (check_explicit_specialization): Use it. | |
| 2026-06-03 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125378 | |
| * tree.cc (build_min_non_dep_op_overload): Handle comparison | |
| operator expressions rewritten from a <=> that contain an | |
| integer promotion. | |
| 2026-06-03 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125490 | |
| * parser.cc (cp_parser_constraint_expression): Pass | |
| no_toplevel_fold_p=false instead of =true to | |
| cp_parser_binary_expression. | |
| 2026-06-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/107124 | |
| * cp-tree.h: Adjust comments to mention | |
| maybe_build_nontype_implicit_conv instead of | |
| maybe_convert_nontype_argument. | |
| * pt.cc (maybe_convert_nontype_argument): Rename to... | |
| (maybe_build_nontype_implicit_conv): ...this. | |
| (convert_nontype_argument_maybe_dependent): New, factored | |
| out of... | |
| (convert_template_argument): ...here. | |
| (unify) <case TEMPLATE_PARM_INDEX>: Call | |
| convert_nontype_argument_maybe_dependent and return unify_invalid | |
| if it failed. Don't call strip_typedefs_expr. | |
| 2026-06-03 Jason Merrill <jason@redhat.com> | |
| PR c++/124794 | |
| * parser.cc (cp_parser_splice_specifier): Use TYPE_BINFO (scope) | |
| for not-derived case. | |
| * search.cc (build_baselink): Assert that binfos aren't null. | |
| 2026-06-03 feedable <feedabl3@gmail.com> | |
| PR c++/124794 | |
| PR c++/125069 | |
| * parser.cc (cp_parser_splice_specifier): Do not strip BASELINKs. | |
| (cp_parser_splice_expression): Add parsing for member function | |
| template specializations without the "template" keyword. | |
| * pt.cc (tsubst_splice_expr): Handle TEMPLATE_ID_EXPR where the | |
| template part is a SPLICE_EXPR. | |
| (tsubst_expr): Defer to tsubst_splice_expr when the template part of | |
| TEMPLATE_ID_EXPR is a SPLICE_EXPR. | |
| * reflect.cc (check_splice_expr): Add handling for BASELINKs. | |
| 2026-06-02 H.J. Lu <hjl.tools@gmail.com> | |
| PR c/121911 | |
| * decl.cc (cxx_init_decl_processing ): Declare stack protection | |
| guard after calling c_common_nodes_and_builtins. | |
| 2026-06-02 Peter Damianov <peter0x44@disroot.org> | |
| * class.cc (dump_vtable_entry): New function. | |
| (dump_array): Use it. | |
| (dump_class_hierarchy_r): Drop redundant literal 0x from | |
| HOST_WIDE_INT_PRINT_HEX formatting. | |
| (dump_vtable): Likewise. | |
| 2026-06-01 Joe Natter <johannes.natter@outlook.at> | |
| PR c++/125422 | |
| * init.cc (build_new_1): Avoid building a null-check | |
| COND_EXPR when rval == data_addr. | |
| 2026-06-01 yxj-github-437 <2457369732@qq.com> | |
| * module.cc (module_state_config::get_dialect): Add reflection | |
| dialect. | |
| 2026-06-01 Eczbek <eczbek.void@gmail.com> | |
| PR c++/125317 | |
| * parser.cc (cp_parser_requirement_body): Set | |
| parser->greater_than_is_operator_p. | |
| 2026-05-30 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125123 | |
| * parser.cc (cp_build_range_for_decls): If range_temp or begin | |
| are static, set DECL_IGNORED_P on it. | |
| * pt.cc (finish_expansion_stmt): Similarly for iter. | |
| * decl.cc (cp_finish_decl): Call determine_local_discriminator | |
| etc. also for DECL_ARTIFICIAL TREE_STATIC vars. | |
| 2026-05-30 Dhruv Chawla <dhruvc@nvidia.com> | |
| * call.cc (involves_qualification_conversion_p): Fix typos. | |
| (build_user_type_conversion_1): Likewise. | |
| (complain_about_access): Likewise. | |
| (maybe_warn_class_memaccess): Likewise. | |
| * class.cc (inherit_targ_abi_tags): Likewise. | |
| (warn_hidden): Likewise. | |
| (maybe_add_class_template_decl_list): Likewise. | |
| (check_bases_and_members): Likewise. | |
| (dfs_accumulate_vtbl_inits): Likewise. | |
| * constexpr.cc (cx_check_missing_mem_inits): Likewise. | |
| (cxx_eval_call_expression): Likewise. | |
| (modifying_const_object_error): Likewise. | |
| (cxx_replaceable_global_alloc_fn): Likewise. | |
| * contracts.cc (copy_contracts_list): Likewise. | |
| (check_redecl_contract): Likewise. | |
| (update_late_contract): Likewise. | |
| (get_precondition_function): Likewise. | |
| * coroutines.cc (cp_coroutine_transform::build_ramp_function): Likewise. | |
| * cp-tree.def (DISJ_CONSTR): Likewise. | |
| * cp-tree.h (struct lang_decl_base): Likewise. | |
| (SCOPE_DEPTH): Likewise. | |
| (set_anon_aggr_type_field): Likewise. | |
| (struct cp_decl_specifier_seq): Likewise. | |
| * decl.cc (reshape_init_array_1): Likewise. | |
| (omp_declare_variant_finalize): Likewise. | |
| (grokdeclarator): Likewise. | |
| (copy_type_enum): Likewise. | |
| * decl2.cc (struct priority_map_traits): Likewise. | |
| (determine_visibility): Likewise. | |
| (constrain_class_visibility): Likewise. | |
| (one_static_initialization_or_destruction): Likewise. | |
| * g++spec.cc (lang_specific_driver): Likewise. | |
| * init.cc (constant_value_1): Likewise. | |
| (build_new): Likewise. | |
| * mangle.cc (write_unqualified_name): Likewise. | |
| * method.cc (inherited_ctor_binfo): Likewise. | |
| (synthesized_method_walk): Likewise. | |
| * module.cc (GTY): Likewise. | |
| (trees_out::lang_decl_bools): Likewise. | |
| (trees_out::core_vals): Likewise. | |
| (trees_in::core_vals): Likewise. | |
| (trees_in::install_implicit_member): Likewise. | |
| (trees_in::odr_duplicate): Likewise. | |
| (instantiating_tu_local_entity): Likewise. | |
| (sort_cluster): Likewise. | |
| (module_state::write_define): Likewise. | |
| (module_state::write_begin): Likewise. | |
| (declare_module): Likewise. | |
| (init_modules): Likewise. | |
| * name-lookup.cc (name_lookup::ambiguous): Likewise. | |
| (pushdecl): Likewise. | |
| (suggest_alternatives_for_1): Likewise. | |
| (maybe_add_fuzzy_decl): Likewise. | |
| * name-lookup.h (INHERITED_VALUE_BINDING_P): Likewise. | |
| (HIDDEN_TYPE_BINDING_P): Likewise. | |
| (BINDING_VECTOR_GLOBAL_DUPS_P): Likewise. | |
| * operators.def: Likewise. | |
| * parser.cc (cp_lexer_new_main): Likewise. | |
| (get_cast_suggestion): Likewise. | |
| (cp_parser_expression): Likewise. | |
| (cp_parser_simple_type_specifier): Likewise. | |
| (cp_parser_noexcept_specification_opt): Likewise. | |
| (cp_parser_lookup_name): Likewise. | |
| (class_decl_loc_t::diag_mismatched_tags): Likewise. | |
| (cp_parser_cache_defarg): Likewise. | |
| (cp_parser_objc_statement): Likewise. | |
| (cp_parser_omp_loop_nest): Likewise. | |
| (cp_parser_omp_taskloop): Likewise. | |
| (cp_parser_objc_at_property_declaration): Likewise. | |
| * parser.h (struct cp_unparsed_functions_entry): Likewise. | |
| * pt.cc (tsubst_friend_class): Likewise. | |
| (use_pack_expansion_extra_args_p): Likewise. | |
| (tsubst_unary_left_fold): Likewise. | |
| (tsubst_unary_right_fold): Likewise. | |
| (filter_memfn_lookup): Likewise. | |
| * semantics.cc (maybe_convert_cond): Likewise. | |
| (finish_switch_cond): Likewise. | |
| (cp_finish_omp_clause_doacross_sink): Likewise. | |
| (finish_omp_target_clauses_r): Likewise. | |
| * tree.cc (build_cplus_new): Likewise. | |
| (apply_identity_attributes): Likewise. | |
| * vtable-class-hierarchy.cc (vtv_compute_class_hierarchy_transitive_closure): Likewise. | |
| (vtv_generate_init_routine): Likewise. | |
| 2026-05-29 Jakub Jelinek <jakub@redhat.com> | |
| * init.cc (build_value_init_noctor): Zero initialize anonymous | |
| union/struct subobjects. Formatting fix. | |
| 2026-05-28 Marek Polacek <polacek@redhat.com> | |
| PR c++/125454 | |
| * typeck.cc (cp_build_array_ref): Don't recurse for array[array]. | |
| 2026-05-27 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125412 | |
| * reflect.cc (process_metafunction): If ht is error_operand_p, | |
| set *non_constant_p and return NULL_TREE. | |
| 2026-05-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/125423 | |
| * pt.cc (tsubst_expr) <case REFLECT_EXPR>: Don't tsubst | |
| REFLECT_BASEs. | |
| 2026-05-23 Jason Merrill <jason@redhat.com> | |
| PR c++/125135 | |
| * pt.cc (check_non_deducible_conversions): Handle LOOKUP_DEFAULTED. | |
| 2026-05-22 Julian Brown <julian@codesourcery.com> | |
| Tobias Burnus <tburnus@baylibre.com> | |
| * parser.cc (cp_parser_omp_clause_from_to): Add parsing for | |
| mapper modifier. | |
| (cp_parser_omp_target_update): Instantiate mappers. | |
| 2026-05-22 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/119059 | |
| * method.cc: Implement C++26 P3074R7 - trivial unions (was | |
| std::uninitialized<T>) (except the sentence removed again in P3726R2) | |
| and proposed resolution of CWG3189 - Implicitly deleted destructors | |
| for union-like classes. | |
| (walk_field_subobs): Don't do default_init_uninitialized_part checks | |
| for variant members. Don't check subobject ctor/dtor for variant | |
| members for ctor/inheriting ctor or when subobject doesn't have member | |
| initializer for dtor and it is either the dtor_from_ctor case or | |
| the current class doesn't have user provided ctors. | |
| * class.cc (check_field_decl): Don't or in | |
| TYPE_HAS_NONTRIVIAL_DESTRUCTOR or TYPE_HAS_DEFAULT_CONSTRUCTOR of | |
| variant subobjects for C++26. | |
| 2026-05-21 Marek Polacek <polacek@redhat.com> | |
| PR c++/125330 | |
| * parser.cc (cp_parser_parameter_declaration_list): Also | |
| pushdecl when parameter->default_argument is this_identifier. | |
| 2026-05-21 Jason Merrill <jason@redhat.com> | |
| * constexpr.cc (init_subob_ctx): Check is_empty_field. | |
| 2026-05-21 Jason Merrill <jason@redhat.com> | |
| PR c++/125384 | |
| PR c++/113563 | |
| * lambda.cc (build_capture_proxy): 'this' capture proxy is const. | |
| 2026-05-21 Marek Polacek <polacek@redhat.com> | |
| PR c++/125284 | |
| PR c++/125333 | |
| * pt.cc (tsubst_decl) <case USING_DECL>: Copy targs before | |
| modifying them. | |
| 2026-05-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125376 | |
| * coroutines.cc (register_local_var_uses): Ignore DECL_NAME for | |
| name independent decls. | |
| 2026-05-19 Marek Polacek <polacek@redhat.com> | |
| PR c++/123536 | |
| * cp-tree.h (process_outer_var_ref): Remove a parameter's name. | |
| * expr.cc (mark_use): Return if mark_rvalue_use returns | |
| error_mark_node. | |
| * semantics.cc (process_outer_var_ref): Return decl when it is | |
| instantiation-dependent. | |
| 2026-05-19 Marek Polacek <polacek@redhat.com> | |
| PR c++/125336 | |
| * constexpr.cc (cxx_eval_bare_aggregate): Don't call | |
| get_or_insert_ctor_field when there is no CONSTRUCTOR. Assert | |
| is_empty_class. | |
| 2026-05-19 Paul-Antoine Arras <parras@baylibre.com> | |
| Chung-Lin Tang <cltang@baylibre.com> | |
| Sandra Loosemore <sloosemore@baylibre.com> | |
| * semantics.cc (finish_omp_clauses): Likewise. | |
| 2026-05-18 Marek Polacek <polacek@redhat.com> | |
| * constexpr.cc (cxx_eval_bare_aggregate): Remove dead code. | |
| 2026-05-15 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125081 | |
| * typeck.cc (cp_build_binary_op): Emit -Wconstant-logical-operand | |
| warnings. | |
| 2026-05-15 Jason Merrill <jason@redhat.com> | |
| PR c++/125315 | |
| * constexpr.cc (init_subob_ctx): Allow both ctor and object | |
| to be null for an empty subobject. | |
| 2026-05-14 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124628 | |
| * reflect.cc (resolve_type_of_reflected_decl): New. | |
| (get_reflection): Call resolve_type_of_reflected_decl instead | |
| of mark_used. | |
| (has_type): Call resolve_type_of_reflected_decl before | |
| checking for an undeduced auto. | |
| (eval_can_substitute): Likewise. Also look through BASELINK. | |
| (members_of_representable): Call resolve_type_of_reflected_decl | |
| before checking for an undeduced auto. | |
| 2026-05-14 Tobias Burnus <tburnus@baylibre.com> | |
| * semantics.cc (cp_check_omp_declare_mapper): Change what | |
| argument is expected; check that the struct var is used by at | |
| least one map war. Print sorry when compiling with -std=c++98. | |
| * pt.cc (tsubst_stmt, tsubst_expr): Call it. | |
| * parser.cc (cp_parser_omp_declare_mapper): Update call. | |
| 2026-05-13 Marek Polacek <polacek@redhat.com> | |
| PR c++/125280 | |
| * reflect.cc (consteval_only_p): Don't complete_type. | |
| (consteval_only_p_walker::walk): Return false for | |
| error_mark_node. | |
| 2026-05-13 chzn@mail.ustc.edu.cn <chzn@mail.ustc.edu.cn> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/123609 | |
| * parser.cc (cp_parser_class_head): Re-parse attributes | |
| that caused a tentative parsing failure. | |
| 2026-05-12 Jason Merrill <jason@redhat.com> | |
| PR c++/100903 | |
| * call.cc (build_over_call): Avoid -Wzero-as-null-pointer-constant | |
| if the warning is disabled around the called function. | |
| 2026-05-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/50479 | |
| PR c++/62244 | |
| * parser.cc (cp_parser_parameter_declaration_list): Move the | |
| grokdeclarator call and setting DECL_SOURCE_LOCATION to... | |
| (cp_parser_parameter_declaration): ...here. New tree parameter. | |
| Set it. Call pushdecl for a named decl with a default argument. | |
| 2026-05-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/125208 | |
| * reflect.cc (compare_reflections): Use == when comparing two | |
| aliases. | |
| * tree.cc (cp_tree_equal) <case REFLECT_EXPR>: Use | |
| compare_reflections. | |
| 2026-05-11 Jason Merrill <jason@redhat.com> | |
| * reflect.cc (null_reflection_p): New. | |
| (splice): Use it. | |
| * error.cc (dump_expr): Use it. | |
| * cp-tree.h (null_reflection_p): Declare. | |
| 2026-05-11 Marek Polacek <polacek@redhat.com> | |
| * decl2.cc (decl_defined_p): Also return true if DECL_INITIAL | |
| and !DECL_IN_AGGR_P is true for a VAR_DECL. | |
| 2026-05-09 Patrick Palka <ppalka@redhat.com> | |
| PR c++/121500 | |
| * cp-gimplify.cc (cp_genericize_r): Unconditionally walk | |
| DECL_VALUE_EXPR. | |
| 2026-05-08 Marek Polacek <polacek@redhat.com> | |
| PR c++/115181 | |
| PR c++/125043 | |
| PR c++/124979 | |
| * pt.cc (invalid_tparm_referent_p): Allow DECL_IGNORED_P in an | |
| assert. | |
| 2026-05-07 Marek Polacek <polacek@redhat.com> | |
| PR c++/124770 | |
| * decl.cc (wrapup_namespace_globals): Give the odr-used | |
| inline variable error only when !DECL_INITIAL. | |
| 2026-05-07 Marek Polacek <polacek@redhat.com> | |
| PR c++/125206 | |
| * tree.cc (strip_typedefs_expr) <case REFLECT_EXPR>: Always | |
| return instead of recursing. | |
| 2026-05-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125007 | |
| * cp-tree.h (maybe_update_function_parm): Declare. | |
| * reflect.cc (maybe_update_function_parm): No longer static. | |
| * error.cc (dump_expr) <case REFLECT_EXPR>: Improve printing | |
| of various reflections. | |
| 2026-05-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125184 | |
| * reflect.cc (check_out_of_consteval_use_r): Don't walk children of | |
| USING_STMTs. | |
| 2026-05-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124347 | |
| * constexpr.cc (cxx_eval_builtin_function_call): For | |
| mce_true strip nops in first argument of BUILT_IN*_OBJECT_SIZE | |
| if the inner expression is ADDR_EXPR. | |
| 2026-05-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/125111 | |
| * reflect.cc (extract_ref): Throw instead of trying to build | |
| arrays of functions, methods or arrays with NULL TYPE_DOMAIN. | |
| 2026-05-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124991 | |
| * cp-tree.h (struct lang_type): Document typeinfo_var member. | |
| (get_classtype_typeinfo_var): New inline function. | |
| (CLASSTYPE_TYPEINFO_VAR): Use it. | |
| (set_classtype_typeinfo_var): New inline function. | |
| (SET_CLASSTYPE_TYPEINFO_VAR): Define. | |
| (get_anon_aggr_type_field): New inline function. | |
| (ANON_AGGR_TYPE_FIELD): Use it. | |
| (set_anon_aggr_type_field): New inline function. | |
| (SET_ANON_AGGR_TYPE_FIELD): Define. | |
| * decl.cc (fixup_anonymous_aggr): Use SET_ANON_AGGR_TYPE_FIELD | |
| instead of ANON_AGGR_TYPE_FIELD. | |
| * module.cc (trees_in::read_class_def): Use | |
| SET_CLASSTYPE_TYPEINFO_VAR instead of setting | |
| CLASSTYPE_TYPEINFO_VAR and do it even for ANON_AGGR_TYPE_P | |
| types. Use SET_ANON_AGGR_TYPE_FIELD instead of setting | |
| ANON_AGGR_TYPE_FIELD. | |
| * rtti.cc (get_tinfo_decl_direct): Use SET_CLASSTYPE_TYPEINFO_VAR | |
| instead of setting CLASSTYPE_TYPEINFO_VAR. | |
| * semantics.cc (finish_member_declaration): Use | |
| SET_ANON_AGGR_TYPE_FIELD instead of setting ANON_AGGR_TYPE_FIELD. | |
| 2026-05-06 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125179 | |
| * reflect.cc: (consteval_only_type_r): Remove this cp_walk_tree | |
| callback and replace with ... | |
| (consteval_only_walker): ... this recursive memoized | |
| implementation. | |
| (consteval_only_p): Define in terms of consteval_only_walker. | |
| 2026-05-05 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124957 | |
| * class.cc (check_tag): Set ABI_TAG_INHERITED on the TREE_LIST | |
| of an inherited tag. Adjust after ABI_TAG_IMPLICIT renaming. | |
| * cp-tree.h (ABI_TAG_IMPLICIT): Rename to ... | |
| (ABI_TAG_NOT_MANGLED): ... this. | |
| (equal_abi_tags): Adjust forward declaration. | |
| * mangle.cc (write_unqualified_name): Adjust equal_abi_tags call. | |
| (sorted_abi_tags): New ignore_inherited_p parameter, for ignoring | |
| ABI_TAG_INHERITED tags. Adjust after ABI_TAG_INHERITED renaming. | |
| (write_abi_tags): Adjust sorted_abi_tags call. | |
| (equal_abi_tags): New ignore_inherited_p parameter. Pass it to | |
| sorted_abi_tags. | |
| * module.cc (trees_in::check_abi_tags): Pass | |
| ignore_inherited_p=true to equal_abi_tags iff there's a | |
| mangled-ness mismatch. | |
| 2026-05-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | |
| * module.cc (elf_out::create_mapping) [MAPPED_WRITING] | |
| (elf_out::create_mapping) [HAVE_POSIX_FALLOCATE]: Allow for | |
| ENOTSUP return from posix_fallocate. | |
| 2026-05-04 Andrew Pinski <andrew.pinski@oss.qualcomm.com> | |
| PR c++/65271 | |
| * parser.cc (cp_parser_class_specifier): Accept &&. | |
| 2026-05-04 yxj-github-437 <2457369732@qq.com> | |
| * constexpr.cc (cxx_eval_constant_expression): Do not cache | |
| result with contract violation. | |
| 2026-05-04 chzn@mail.ustc.edu.cn <chzn@mail.ustc.edu.cn> | |
| PR c++/124241 | |
| * search.cc (accessible_p): Call type_context_for_name_lookup | |
| for otype if it's anonymous union. | |
| 2026-05-03 Andrew Pinski <andrew.pinski@oss.qualcomm.com> | |
| PR c++/119567 | |
| * error.cc (dump_expr): Treat EXACT_DIV_EXPR the same as FLOOR_DIV_EXPR. | |
| 2026-05-01 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125115 | |
| * module.cc (trees_in::is_matching_decl): Turn e_type into a | |
| reference and use it instead of TREE_TYPE (e_inner). Always | |
| use build_exception_variant to propagate an already-instantiated | |
| noexcept. | |
| 2026-05-01 Marek Polacek <polacek@redhat.com> | |
| PR c++/125096 | |
| * pt.cc (tsubst_splice_scope): Don't return early for | |
| dependent_splice_p. Propagate cv-qualifiers from the | |
| SPLICE_SCOPE to the result. | |
| * reflect.cc (valid_splice_scope_p): Accept SPLICE_SCOPE. | |
| 2026-04-29 Patrick Palka <ppalka@redhat.com> | |
| PR c++/125035 | |
| * module.cc (merge_key): Add iobj_p and xobj_p bits. | |
| (trees_out::key_mergeable) <case MK_named>: Set and stream | |
| merge_key's iobj_p and xobj_p bits. | |
| (check_mergeable_decl) <case FUNCTION_DECL>: Compare merge_key's | |
| iobj_p and xobj_p bits with that of the given function. | |
| (trees_in::key_mergeable): Stream merge_key's iobj_p and xobj_p | |
| bits. | |
| 2026-04-29 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124582 | |
| PR c++/123810 | |
| * module.cc (check_mergeable_decl) <case TYPE_DECL>: Handle | |
| merging a typedef to an unnamed type with the -freflection | |
| representation. | |
| 2026-04-29 Julian Brown <julian@codesourcery.com> | |
| * parser.cc (cp_parser_omp_target_data): Instantiate mappers for 'omp | |
| target data'. | |
| (cp_parser_omp_target_enter_data): Instantiate mappers for 'omp target | |
| enter data'. | |
| (cp_parser_omp_target_exit_data): Instantiate mappers for 'omp target | |
| exit data'. | |
| (cp_parser_omp_target): Add c_omp_region_type argument to | |
| c_omp_instantiate_mappers call. | |
| * pt.cc (tsubst_omp_clauses): Instantiate mappers for OMP regions other | |
| than just C_ORT_OMP_TARGET. | |
| (tsubst_expr): Update call to tsubst_omp_clauses for OMP_TARGET_UPDATE, | |
| OMP_TARGET_ENTER_DATA, OMP_TARGET_EXIT_DATA stanza. | |
| * semantics.cc (cxx_omp_map_array_section): Avoid calling | |
| build_array_ref for non-array/non-pointer bases (error reported | |
| already). | |
| 2026-04-29 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (compare_reflection): For REFLECT_BASE use lhs == rhs rather | |
| than cp_tree_equal. | |
| 2026-04-28 Marek Polacek <polacek@redhat.com> | |
| PR c++/124756 | |
| * reflect.cc (get_reflection): Give an error when taking the | |
| reflection of a block-scope extern. | |
| 2026-04-28 Marek Polacek <polacek@redhat.com> | |
| * error.cc (inform_tree_category): Also print concept and alias | |
| template. | |
| * pt.cc (tsubst_splice_scope): Reword the diagnostic messages. | |
| Call inform_tree_category. | |
| 2026-04-28 Jason Merrill <jason@redhat.com> | |
| PR c++/125022 | |
| * decl.cc (store_parm_decls): Only do trivial_abi stuff when | |
| !processing_template_decl. | |
| 2026-04-27 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124978 | |
| PR c++/115314 | |
| * semantics.cc (finish_decltype_type): Check REFERENCE_REF_P | |
| instead of INDIRECT_REF_P before stripping implicit dereferences. | |
| 2026-04-27 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124953 | |
| * module.cc (trees_in::tree_node) <tt_nttp_var>: Push the result | |
| of get_template_parm_object to post_load_decls. | |
| (post_load_processing): Call cp_finish_decl on any not yet | |
| completed NTTP objects. | |
| * pt.cc (get_template_parm_object): Don't call cp_finish_decl | |
| when !check_init. | |
| 2026-04-27 Jason Merrill <jason@redhat.com> | |
| PR c++/124910 | |
| DR 2658 | |
| * constexpr.cc (reduced_constant_expression_p): Allow a union | |
| with no active member. | |
| 2026-04-23 Patrick Palka <ppalka@redhat.com> | |
| * module.cc (trees_out::core_vals) <case PTRMEM_CST>: | |
| Stream PTRMEM_CST_LOCATION. | |
| <case TRAIT_EXPR>: Stream TRAIT_EXPR_LOCATION. | |
| (trees_in::core_vals): As in trees_out::core_vals. | |
| 2026-04-23 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124981 | |
| * module.cc (trees_in::core_vals) <case PTRMEM_CST>: Use RTU | |
| instead of RT to stream PTRMEM_CST_MEMBER. | |
| 2026-04-23 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (lookup_annotation): Declare. | |
| * decl.cc (grokfndecl): Use lookup_annotation. | |
| (grokdeclarator): Likewise. | |
| * name-lookup.cc (push_local_extern_decl_alias): Likewise. | |
| * parser.cc (cp_parser_decomposition_declaration): Likewise. | |
| * reflect.cc (eval_annotations_of): Likewise. | |
| * tree.cc (lookup_annotation): New. | |
| 2026-04-23 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (enum linkage_kind): Add lk_module. | |
| * module.cc (check_module_decl_linkage): Use DECL_EXTERNAL_LINKAGE_P. | |
| * name-lookup.cc (check_can_export_using_decl): Don't check for | |
| attachment. | |
| * parser.cc (cp_parser_template_argument): Check that linkage isn't | |
| lk_module. | |
| * reflect.cc (eval_has_module_linkage): Check lk_module. | |
| (eval_has_external_linkage): Use DECL_EXTERNAL_LINKAGE_P. | |
| * tree.cc (decl_linkage): Return lk_module if appropriate. | |
| 2026-04-23 Marek Polacek <polacek@redhat.com> | |
| DR 2229 | |
| PR c++/123935 | |
| * decl2.cc (grokbitfield): Add pedwarn for cv-qualified unnamed | |
| bit-fields. | |
| 2026-04-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/124989 | |
| * pt.cc (tsubst_splice_expr): Turn off access checking for the | |
| build_offset_ref call. | |
| 2026-04-23 Ben Wu <soggysocks206@gmail.com> | |
| PR c++/118374 | |
| PR c++/41127 | |
| * parser.cc (cp_parser_enum_specifier): Parse definitely | |
| before cp_parser_type_specifier_seq. | |
| 2026-04-23 Yuxuan Chen <i@yuxuan.ch> | |
| PR c++/107187 | |
| * cp-tree.h (has_trivial_abi_attribute): New function. | |
| (validate_trivial_abi_attribute): Declare. | |
| (classtype_has_non_deleted_copy_or_move_ctor): Declare. | |
| (cxx_clang_attribute_table): Declare. | |
| * tree.cc (handle_trivial_abi_attribute): New function. | |
| (handle_gnu_trivial_abi_attribute): New function. | |
| (classtype_has_trivial_abi): New function. | |
| (validate_trivial_abi_attribute): New function. | |
| (cxx_gnu_attributes): Add trivial_abi entry. | |
| (cxx_clang_attributes): New table for [[clang::trivial_abi]]. | |
| * class.cc (finish_struct_bits): Skip BLKmode for types with | |
| trivial_abi attribute. | |
| (classtype_has_non_deleted_copy_or_move_ctor): New function. | |
| (finish_struct_1): Call validate_trivial_abi_attribute before | |
| finish_struct_bits. | |
| * cp-objcp-common.h (cp_objcp_attribute_table): Register | |
| cxx_clang_attribute_table. | |
| * decl.cc (store_parm_decls): Register cleanups for trivial_abi | |
| parameters. | |
| 2026-04-23 Jason Merrill <jason@redhat.com> | |
| PR c++/124973 | |
| * cp-gimplify.cc (cp_fold_r): Fix typo. | |
| 2026-04-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/124926 | |
| * pt.cc (tsubst_qualified_id): Rename name_lookup_p parameter to | |
| reflecting_p. Check !reflecting_p instead of name_lookup_p. Do | |
| not give the "instantiation yields a type" error when reflecting_p | |
| is true. | |
| (tsubst_expr) <case REFLECT_EXPR>: Adjust the call to | |
| tsubst_qualified_id. | |
| 2026-04-22 Jason Merrill <jason@redhat.com> | |
| PR c++/124973 | |
| PR c++/120502 | |
| PR c++/120005 | |
| * cp-gimplify.cc (cp_fold_r) <case TARGET_EXPR>: Only | |
| do optimization folding when ff_genericize. | |
| (cp_fold) <case CALL_EXPR>: Don't do | |
| optimization folding when ff_only_non_odr. | |
| 2026-04-21 Jason Merrill <jason@redhat.com> | |
| PR c++/123879 | |
| * module.cc (maybe_translate_include): Use lrealpath in check | |
| whether we're including something in the same directory. | |
| 2026-04-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124944 | |
| * parser.cc (cp_parser_mem_initializer_id): Parse | |
| splice-type-specifier. | |
| 2026-04-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124927 | |
| * pt.cc (finish_expansion_stmt): Compute types for force_target_expr | |
| from b and e before extracting TARGET_EXPR_INITIAL from it. | |
| 2026-04-20 Jason Merrill <jason@redhat.com> | |
| PR c++/124910 | |
| * constexpr.cc (cxx_eval_store_expression): Ending the | |
| lifetime of the active member means no active member. | |
| 2026-04-20 Marek Polacek <polacek@redhat.com> | |
| PR c++/124706 | |
| * parser.cc (cp_parser_splice_type_specifier): For ctad_template_p | |
| call make_template_placeholder. | |
| * pt.cc (tsubst_splice_scope): Likewise. | |
| 2026-04-20 Iain Sandoe <iain@sandoe.co.uk> | |
| PR c++/124648 | |
| * contracts.cc (maybe_apply_function_contracts): Nest pre and | |
| post conditions inside the outer bind expression of a lambda | |
| with captures. | |
| 2026-04-20 Marek Polacek <polacek@redhat.com> | |
| PR c++/124855 | |
| * reflect.cc (consteval_only_p): Return false if the type is | |
| dependent. | |
| 2026-04-17 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (reflection_function_template_p): Change the | |
| parameter to const_tree. | |
| * reflect.cc (valid_splice_for_member_access_p): Use | |
| reflection_function_template_p. | |
| (reflection_function_template_p): Check DECL_FUNCTION_TEMPLATE_P | |
| instead of really_overloaded_fn. Unwrap BASELINKs and OVERLOADs. | |
| Adjust the parameter type. | |
| 2026-04-17 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (splice): Detect a null reflection. | |
| 2026-04-17 Jakub Jelinek <jakub@redhat.com> | |
| * lex.cc (cxx_init): Don't call cpp_warn on contract_assert, | |
| instead call it on pre and post. | |
| 2026-04-17 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123783 | |
| * reflect.cc (splice): Reject splicing of function parameters. | |
| 2026-04-17 Jason Merrill <jason@redhat.com> | |
| PR c++/124632 | |
| * constexpr.cc (cxx_eval_call_expression): Unshare bindings | |
| sooner. | |
| 2026-04-16 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (dump_data_member_spec): Temporarily ignore | |
| -Wformat and -Wformat-diag warnings. | |
| 2026-04-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/124614 | |
| * cp-tree.h (valid_splice_for_member_access_p): Declare. | |
| (dump_data_member_spec): Declare. | |
| * error.cc (dump_expr) <case REFLECT_EXPR>: Print a data member | |
| description. | |
| * parser.cc (cp_parser_splice_expression): Use | |
| valid_splice_for_member_access_p. | |
| * pt.cc (tsubst_splice_expr): Likewise. | |
| * reflect.cc (dump_data_member_spec): New. | |
| (eval_display_string_of): Use it. | |
| (valid_splice_for_member_access_p): New. | |
| (check_splice_expr): Check that we got | |
| valid_splice_for_member_access_p for a member access. | |
| * typeck.cc (finish_class_member_access_expr): Use | |
| valid_splice_for_member_access_p. | |
| 2026-04-16 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124120 | |
| * pt.cc (finish_expansion_stmt): Give iter variable an artificial | |
| name. | |
| 2026-04-16 Egas Ribeiro <egas.g.ribeiro@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/123346 | |
| * constexpr.cc (init_subob_ctx): Do initialize new_ctx.ctor | |
| for an empty union member. | |
| 2026-04-16 Iain Sandoe <iains.gcc@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/124648 | |
| * cp-tree.h (DECL_CONTRACT_CAPTURE_P): New. | |
| * parser.cc (cp_parser_lambda_body): Scan the captures for | |
| ones were only added in contract assertion scopes. Issue | |
| errors for those found. | |
| * semantics.cc (process_outer_var_ref): Mark implicit | |
| captures that occur in contract assertion scopes. Clear | |
| the mark if the entity is subsequently captured 'normally'. | |
| (set_contract_capture_flag): New. | |
| 2026-04-16 Iain Sandoe <iains.gcc@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| * contracts.cc (view_as_const): Check for const-qualified | |
| class pointer before wrapping it. | |
| * parser.cc (cp_parser_late_contract_condition): Use revised | |
| handling of const-ification of class pointers. | |
| (cp_parser_contract_assert): Likewise. | |
| (cp_parser_function_contract_specifier): Likewise. | |
| 2026-04-15 Marek Polacek <polacek@redhat.com> | |
| PR c++/120338 | |
| * decl.cc (cp_finish_decl): Set DECL_INITIAL to error_mark_node | |
| instead of NULL_TREE for deleted main. | |
| 2026-04-15 Marek Polacek <polacek@redhat.com> | |
| PR c++/123783 | |
| * lambda.cc (add_capture): When trying to capture something in | |
| an instantiation of generic lambda, give an error instead of an ICE. | |
| 2026-04-15 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124824 | |
| * decl.cc (cp_finish_decl): Sink !consteval_only_p check to | |
| only guard the varpool_node::get_create call. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124755 | |
| * constexpr.cc (cxx_eval_constant_expression): If TARGET_EXPR_INITIAL | |
| throws and !is_complex and type is neither aggregate nor vector, | |
| call ctx->global->put_value (slot, NULL) before returning. | |
| 2026-04-15 Jason Merrill <jason@redhat.com> | |
| PR c++/117133 | |
| PR c++/124768 | |
| PR c++/124773 | |
| * mangle.cc (unmangled_name_p): Don't mangle internal extern "C" | |
| variables. | |
| 2026-04-15 Jason Merrill <jason@redhat.com> | |
| PR c++/121643 | |
| PR c++/123975 | |
| * coroutines.cc (build_co_await): Pass rvalue to await_suspend. | |
| (expand_one_await_expression): Fix await_suspend surgery. | |
| 2026-04-15 Jason Merrill <jason@redhat.com> | |
| PR c++/121961 | |
| * coroutines.cc (build_actor_fn): Move the delete label before | |
| the refcount handling. | |
| (cp_coroutine_transform::build_ramp_function): Decrement refcount | |
| after destroying gro. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| * pt.cc (finish_expansion_stmt): Implement CWG3149 - Rvalues in | |
| destructuring expansion statements. For esk_destructuring, if | |
| expansion_init is not lvalue_p, wrap init into a static_cast | |
| to decltype of destruct_decls[i]. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| * mangle.cc (write_reflection): Adjust grammar for type alias | |
| reflections. Don't use write_prefix on arg, instead | |
| write_prefix its mangling context, write_unqualified_name of | |
| the alias, optionally write_template_args, append underscore | |
| and write_type the original type. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124862 | |
| * decl.cc (cp_decomp_size): If btype is different from type, | |
| check if it is accessible. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124850 | |
| * typeck.cc (cxx_mark_addressable): For DECL_ANON_UNION_VAR_P vars | |
| also mark their DECL_VALUE_EXPR. | |
| 2026-04-15 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (adjust_array_elt): New function. | |
| (get_range_elts): Implement LWG4483 - Multidimensional arrays are not | |
| supported by meta::reflect_constant_array and related functions. | |
| Handle ARRAY_TYPE valuet. Don't unshare_expr in the class valuet case, | |
| get_template_param_object will unshare. | |
| 2026-04-14 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124544 | |
| * tree.cc (strip_typedefs_expr) <case REFLECT_EXPR>: Don't | |
| recurse into a type operand. | |
| (cp_tree_equal) <case REFLECT_EXPR>: For a reflection of an | |
| alias, also compare TYPE_NAMEs directly. | |
| 2026-04-14 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (reflection_function_template_p): Declare. | |
| * parser.cc (cp_parser_splice_expression): Use | |
| reflection_function_template_p instead of really_overloaded_fn. | |
| * reflect.cc (check_splice_expr): Likewise. | |
| (reflection_function_template_p): New. | |
| 2026-04-13 Marek Polacek <polacek@redhat.com> | |
| PR c++/123237 | |
| PR c++/124771 | |
| PR c++/124842 | |
| * mangle.cc (write_splice): New. | |
| (write_prefix): Call write_splice for SPLICE_SCOPE. | |
| (write_type): Likewise. | |
| (write_expression): Call write_splice for dependent_splice_p. | |
| (write_reflection): Handle the "tt" and "de" prefixes. | |
| * reflect.cc (reflection_mangle_prefix): For | |
| DECL_TEMPLATE_TEMPLATE_PARM_P, use the prefix "tt". For | |
| dependent reflections, use "de". | |
| 2026-04-13 Marek Polacek <polacek@redhat.com> | |
| PR c++/124835 | |
| * parser.cc (cp_parser_decltype_expr): Check that [: :] is | |
| followed by a close paren before declaring it an unparenthesized | |
| splice-expression. | |
| 2026-04-13 Jason Merrill <jason@redhat.com> | |
| PR c++/103901 | |
| PR c++/123566 | |
| * pt.cc (push_template_decl): Sorry on local class in lambda in | |
| template parm list. | |
| 2026-04-13 Jason Merrill <jason@redhat.com> | |
| PR c++/122632 | |
| * pt.cc (tsubst_exception_specification): Add cp_unevaluated. | |
| 2026-04-13 Jason Merrill <jason@redhat.com> | |
| PR c++/122884 | |
| * pt.cc (reconstruct_lambda_capture_pack): New. | |
| (tsubst_pack_expansion): Use it. | |
| (tsubst_decl): Handle capture proxy. | |
| (tsubst): Handle lambda closure. | |
| (tsubst_expr): Handle closure field. | |
| (tsubst_lambda_expr): Copy closure location. | |
| * constraint.cc (satisfy_declaration_constraints): Set up | |
| local_specializations for a lambda. | |
| 2026-04-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124831 | |
| * reflect.cc (namespace_members_of): Append reflection of anon unions | |
| when we see it first time as CP_DECL_CONTEXT of some CONST_DECL in | |
| the namespace. | |
| 2026-04-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124792 | |
| * pt.cc (get_template_parm_object): Call unshare_expr_without_location | |
| on expr if check_init. | |
| 2026-04-09 Marek Polacek <polacek@redhat.com> | |
| PR c++/123998 | |
| * cp-tree.h (SPLICE_EXPR_TEMPLATE_P): Define. | |
| (SET_SPLICE_EXPR_TEMPLATE_P): Define. | |
| (SPLICE_EXPR_TARGS_P): Define. | |
| (SET_SPLICE_EXPR_TARGS_P): Define. | |
| (check_splice_expr): Adjust. | |
| * parser.cc (cp_parser_splice_expression): Do | |
| SET_SPLICE_EXPR_TEMPLATE_P and SET_SPLICE_EXPR_TARGS_P. Adjust | |
| the call to check_splice_expr. Move the template_p checking into | |
| check_splice_expr. | |
| * pt.cc (tsubst_splice_expr): Do SET_SPLICE_EXPR_TEMPLATE_P and | |
| SET_SPLICE_EXPR_TARGS_P. Adjust the call to check_splice_expr. | |
| * reflect.cc (eval_constant_of): Adjust the call to | |
| check_splice_expr. | |
| (check_splice_expr): Two new bool parameters. Add the template_p | |
| checking from cp_parser_splice_expression. Allow | |
| variable_template_p in the assert. Add a check for | |
| DECL_TYPE_TEMPLATE_P. | |
| 2026-04-09 Dhruv Chawla <dhruvc@nvidia.com> | |
| * Make-lang.in (create_fdas_for_cc1plus): Use $(AFDO_PROFILER) when | |
| passing --profiler to create_gcov. Ensure that perf.data contains | |
| profile for cc1plus. Make the console output more useful. | |
| 2026-04-08 Marek Polacek <polacek@redhat.com> | |
| Boris Staletic <boris.staletic@protonmail.com> | |
| PR c++/123726 | |
| * reflect.cc (check_splice_expr): Detect accessing a class template | |
| or alias template with . or ->. | |
| * typeck.cc (finish_class_member_access_expr): Check if the scope of | |
| the spliced entity in a member access expression is of a class type. | |
| Allow variable_template_p for context_for_name_lookup. | |
| 2026-04-08 Marek Polacek <polacek@redhat.com> | |
| PR c++/124457 | |
| * parser.cc (cp_parser_reflect_expression): Check is_auto here | |
| instead of... | |
| * reflect.cc (get_reflection): ...here. | |
| 2026-04-08 Marek Polacek <polacek@redhat.com> | |
| Boris Staletic <boris.staletic@protonmail.com> | |
| PR c++/124177 | |
| * tree.cc (handle_annotation_attribute): Decay annotation | |
| values. Turn if !type_dependent_expression_p into an assert. | |
| 2026-04-08 Yang Kun <yangkun@disroot.org> | |
| * pt.cc (tsubst_expr): Use gcc_unreachable, not gcc_assert. | |
| * parser.cc (cp_parser_template_id): Likewise. | |
| * reflect.cc (eval_template_of): Likewise. | |
| 2026-04-08 Yang Kun <yangkun@disroot.org> | |
| * reflect.cc (eval_current_function): Add missing return. | |
| (eval_current_class): Likewise. | |
| 2026-04-08 Yang Kun <yangkun@disroot.org> | |
| * reflect.cc (eval_display_string_of): Fix copy-paste error in exception | |
| messages. | |
| 2026-04-08 Jakub Jelinek <jakub@redhat.com> | |
| * parser.cc (cp_parser_omp_loop_nest): Write orig_declv, not incrv. | |
| 2026-04-08 Yang Kun <yangkun@disroot.org> | |
| * parser.cc (cp_parser_omp_clause_proc_bind): Fix error message | |
| (cp_parser_omp_clause_device_type): Likewise. | |
| 2026-04-08 Marek Polacek <polacek@redhat.com> | |
| PR c++/124617 | |
| * parser.cc (cp_parser_reflect_expression): Call baselink_for_fns. | |
| 2026-04-08 Jakub Jelinek <jakub@redhat.com> | |
| * constraint.cc (diagnose_trait_expr): Remove CPTK_IS_CONSTEVAL_ONLY | |
| handling. | |
| * metafns.gperf (enum metafn_code): Remove | |
| METAFN_IS_CONSTEVAL_ONLY_TYPE. | |
| (is_consteval_only_type): Remove. | |
| * semantics.cc (trait_expr_value, finish_trait_expr): Remove | |
| CPTK_IS_CONSTEVAL_ONLY handling. | |
| * cp-trait.def (__builtin_is_consteval_only): Remove. | |
| * metafns.h: Regenerate. | |
| * reflect.cc (eval_is_consteval_only_type): Remove. | |
| (process_metafunction): Don't handle METAFN_IS_CONSTEVAL_ONLY_TYPE. | |
| 2026-04-08 Jakub Jelinek <jakub@redhat.com> | |
| * decl.cc (cp_finish_decomp): Implement CWG3135 - constexpr structured | |
| bindings with prvalues from tuples (as a DR). Don't call | |
| cp_build_reference_type if init is prvalue. | |
| 2026-04-07 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123700 | |
| * pt.cc (dependent_opaque_alias_p): Return true for a | |
| template-id typedef with a lambda targ. | |
| 2026-04-07 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123529 | |
| PR c++/98930 | |
| * pt.cc (has_value_dependent_address): Correct context | |
| dependence check for a static local variable. | |
| 2026-04-07 Jakub Jelinek <jakub@redhat.com> | |
| * cp-tree.h: Implement C++26 CWG3140 - Allowing expansion over | |
| non-constant std::array. | |
| (cp_build_range_for_decls): Change last argument from bool to tree. | |
| (build_range_temp): Likewise and default it to NULL_TREE rather than | |
| false. | |
| * parser.cc (build_range_temp): Remove expansion_stmt_p | |
| argument, add expansion_stmt_decl. Don't call cp_build_qualified_type | |
| if expansion_stmt_decl was not declared constexpr. | |
| (cp_build_range_for_decls): Remove expansion_stmt_p argument, add | |
| expansion_stmt_decl. Pass expansion_stmt_decl to build_range_temp. | |
| Don't set TREE_STATIC, TREE_PUBLIC, DECL_COMMON, DECL_INTERFACE_KNOWN, | |
| DECL_DECLARED_CONSTEXPR_P and TREE_READONLY on range_temp if | |
| expansion_stmt_decl was not declared constexpr. Don't call | |
| cp_build_qualified_type on begin type nor set TREE_STATIC etc. on begin | |
| if expansion_stmt_decl was not declared constexpr. If | |
| expansion_stmt_decl is non-NULL, don't build end at all, instead pass | |
| begin_expr and end_expr in end_p[0] and end_p[1] to the caller. | |
| (cp_convert_range_for): Adjust cp_build_range_for_decls caller. | |
| * pt.cc (finish_expansion_stmt): Likewise. Use begin_expr and end_expr | |
| instead of begin and end variables from cp_build_range_for_decls, | |
| make them non-constant and avoid spurious -Wunused-result/nodiscard | |
| diagnostics. | |
| 2026-04-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124487 | |
| * mangle.cc (write_type) <case PACK_INDEX_TYPE>: Handle even | |
| the case of partially substituted pack. | |
| (write_expression): Similarly for PACK_INDEX_EXPR. | |
| 2026-04-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124790 | |
| * reflect.cc (get_reflection): When reflecting VAR_DECL or PARM_DECL, | |
| call mark_exp_read on it. | |
| 2026-04-06 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR libstdc++/124268 | |
| * module.cc (instantiating_tu_local_entity): Use pedwarn instead | |
| of warning. | |
| (depset::hash::add_binding_entity): Don't skip exported | |
| using-decls as TU-local entities. | |
| (depset::hash::finalize_dependencies): Don't attempt to complain | |
| again about using-decls referencing TU-local entities. | |
| * name-lookup.cc (check_can_export_using_decl): Demote the error | |
| to a warning for using-decls of GMF vars or functions. | |
| 2026-04-06 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124735 | |
| * module.cc (trees_in::is_matching_decl): Handle importing | |
| undeduced auto when existing is already deduced. | |
| 2026-04-06 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124781 | |
| * module.cc (set_originating_module): Add a function comment, | |
| only set attachment/exporting for entities with non-NULL | |
| DECL_CONTEXT. | |
| (check_module_decl_linkage): Use decl_anon_ns_mem_p instead of | |
| decl_internal_context_p. | |
| 2026-04-06 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124785 | |
| * module.cc (trees_in::is_matching_decl): Narrow condition for | |
| when noexcept propagation occurs; assert that we don't propagate | |
| noexcept-specs for TEMPLATE_DECLs. | |
| 2026-04-06 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/118630 | |
| * module.cc (depset::hash::add_dependency): Correct entry point | |
| corection for recursive clusters. | |
| 2026-04-06 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124488 | |
| * parser.cc (cp_parser_expansion_statement): Set | |
| DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P, DECL_DEPENDENT_INIT_P and | |
| if maybe constant non-reference TREE_CONSTANT on range_decl. | |
| * pt.cc (tsubst_stmt) <case TEMPLATE_FOR_STMT>: Set | |
| DECL_DEPENDENT_INIT_P on decl. | |
| 2026-04-06 Jakub Jelinek <jakub@redhat.com> | |
| * decl.cc (grokfndecl): For -freflection mark annotations of | |
| PARM_DECLs in a function definition. | |
| * reflect.cc (eval_annotations_of): Allow annotations_of on | |
| function parameters. For r which is a PARM_DECL without REFLECT_PARM, | |
| filter out annotations not marked by grokfndecl. | |
| (reflection_mangle_prefix): Preserve the grokfndecl marking of | |
| annotations during mangling. | |
| 2026-04-06 Eczbek <eczbek.void@gmail.com> | |
| PR c++/123087 | |
| * typeck.cc (cp_build_unary_op): For TRUTH_NOT_EXPR, replace | |
| call to perform_implicit_conversion with call to | |
| contextual_conv_bool. | |
| 2026-04-05 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124689 | |
| * metafns.gperf (enum metafn_kind): Add | |
| METAFN_KIND_BOOL_INFO_REFLECTION_RANGE. | |
| (can_substitute): Use METAFN_KIND_BOOL_INFO_REFLECTION_RANGE | |
| instead of METAFN_KIND_INFO_INFO_REFLECTION_RANGE. | |
| (METAFN_KIND_ARG): Add MINFO argument. | |
| (METAFN_KIND_RET): Define. | |
| * reflect.cc (is_std_meta_class): New function. | |
| (get_info): Add LOC argument, diagnose invalid argument type instead | |
| of failing assertion. | |
| (check_metafn_arg_type): New function. | |
| (check_metafn_return_type): New function. | |
| (process_metafunction): Diagnose clearly invalid return | |
| or argument types. Use rettype variable instead of TREE_TYPE (call). | |
| * metafns.h: Regenerate. | |
| 2026-04-04 Roger Sayle <roger@nextmovesoftware.com> | |
| PR c++/124573 | |
| * decl.cc (finish_enum_value_list): Defend against a DECL_INITIAL | |
| being NULL during error recovery. | |
| 2026-04-04 Jakub Jelinek <jakub@redhat.com> | |
| * parser.cc (cp_parser_expansion_statement): Temporarily set | |
| in_expansion_stmt to true around cp_parser_simple_declaration | |
| for range_decl. | |
| (cp_parser_decomposition_declaration): Don't reject structured binding | |
| packs if in_expansion_stmt is set. | |
| 2026-04-04 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124487 | |
| * mangle.cc (write_type) <case PACK_INDEX_TYPE>: Handle pack index | |
| mangling unless (for now) PACK_INDEX_PACK is a TREE_VEC. | |
| (write_expression): Handle PACK_INDEX_EXPR. | |
| 2026-04-04 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124198 | |
| * parser.cc (cp_parser_pack_index): If index is not type dependent, | |
| call build_converted_constant_expr on it. Return error_mark_node | |
| if index is error_operand_p. | |
| * pt.cc (tsubst_pack_index): Likewise. | |
| 2026-04-03 Alexandre Oliva <oliva@adacore.com> | |
| * coroutines.cc (cp_coroutine_transform::build_ramp_function): | |
| Zero-initialize refcount. | |
| 2026-04-03 Jakub Jelinek <jakub@redhat.com> | |
| * cp-trait.def (__builtin_is_structural): New trait. | |
| * semantics.cc (trait_expr_value): Handle CPTK_IS_STRUCTURAL. | |
| (finish_trait_expr): Likewise. | |
| * constraint.cc (diagnose_trait_expr): Likewise. | |
| * metafns.gperf (enum metafn_code): Add METAFN_IS_STRUCTURAL_TYPE. | |
| (is_structural_type): New metafn. | |
| * metafns.h: Regenerate. | |
| * reflect.cc (eval_is_structural_type): New function. | |
| (process_metafunction): Handle METAFN_IS_STRUCTURAL_TYPE. | |
| 2026-04-03 Jakub Jelinek <jakub@redhat.com> | |
| * cp-tree.h (enum cp_built_in_function): Add | |
| CP_BUILT_IN_CURRENT_EXCEPTION and CP_BUILT_IN_UNCAUGHT_EXCEPTIONS. | |
| * tree.cc (builtin_valid_in_constant_expr_p): Handle | |
| those. | |
| * decl.cc (cxx_init_decl_processing): Build | |
| decls for CP_BUILT_IN_CURRENT_EXCEPTION and | |
| CP_BUILT_IN_UNCAUGHT_EXCEPTIONS. | |
| (require_deduced_type): Deduce CP_BUILT_IN_CURRENT_EXCEPTION | |
| return type. | |
| * cp-gimplify.cc (cp_gimplify_expr): Handle | |
| CP_BUILT_IN_CURRENT_EXCEPTION and CP_BUILT_IN_UNCAUGHT_EXCEPTIONS. | |
| * constexpr.cc (enum cxa_builtin): Remove STD_UNCAUGHT_EXCEPTIONS | |
| and STD_CURRENT_EXCEPTION, add BUILTIN_UNCAUGHT_EXCEPTIONS and | |
| BUILTIN_CURRENT_EXCEPTION, renumber some enumerators. | |
| (cxx_cxa_builtin_fn_p): Don't check for std::uncaught_exceptions | |
| nor std::current_exception. | |
| (cxx_eval_cxa_builtin_fn): Handle BUILTIN_UNCAUGHT_EXCEPTIONS | |
| and BUILTIN_CURRENT_EXCEPTION instead of STD_UNCAUGHT_EXCEPTIONS | |
| and STD_CURRENT_EXCEPTION. | |
| (cxx_eval_builtin_function_call): Handle | |
| CP_BUILT_IN_CURRENT_EXCEPTION and CP_BUILT_IN_UNCAUGHT_EXCEPTIONS. | |
| Do just one fndecl_builtin_p check for BUILT_IN_FRONTEND and | |
| switch on DECL_FE_FUNCTION_CODE. | |
| 2026-04-03 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (eval_data_member_spec): Implement C++26 LWG4517 | |
| - data_member_spec should throw for cv-qualified unnamed bit-fields. | |
| 2026-04-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124531 | |
| * init.cc (build_vec_init): Call braced_lists_to_strings for | |
| array CONSTRUCTORs. Handle RAW_DATA_CST and handle RANGE_EXPR | |
| correctly. | |
| 2026-04-02 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124477 | |
| * module.cc (trees_in::read_function_def): Set DECL_ARGUMENTS if | |
| installing and otherwise missing. | |
| 2026-04-02 Marek Polacek <polacek@redhat.com> | |
| PR c++/124646 | |
| PR c++/124645 | |
| * call.cc (set_up_extended_ref_temp): Move setting DECL_EXTERNAL | |
| to the !at_function_scope_p block. | |
| 2026-04-01 Jakub Jelinek <jakub@redhat.com> | |
| * name-lookup.cc (push_local_extern_decl_alias): Diagnose annotations | |
| on local externs and their arguments. | |
| * decl.cc (grokdeclarator): Diagnose annotations on non-defining | |
| friends and their arguments. | |
| 2026-04-01 Jakub Jelinek <jakub@redhat.com> | |
| * mangle.cc (write_reflection): Change ^^:: mangling in grammar | |
| from LDmngE to LDmgsE. | |
| * reflect.cc (reflection_mangle_prefix): Set prefix to "gs" rather | |
| than "ng" for global_namespace. | |
| 2026-03-31 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (reflect_current_scope): Use decl_namespace_list->last () | |
| in preference to current_namespace. | |
| 2026-03-31 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (get_range_elts): If N is negative, just use the tree | |
| as object to extract range from instead of finding Nth argument | |
| of a call. | |
| (eval_is_bit_field, eval_type_of, eval_size_of, eval_alignment_of, | |
| eval_bit_size_of, eval_has_identifier, eval_identifier_of): Adjust | |
| function comments from P3795R2. | |
| (eval_display_string_of): Handle annotations in | |
| REFLECT_DATA_MEMBER_SPEC. | |
| (eval_annotations_of): Adjust function comments from P3795R2. | |
| (eval_data_member_spec): Likewise. Read and diagnose annotations. | |
| (eval_define_aggregate): Adjust function comments from P3795R2. | |
| Create annotations. | |
| (compare_reflections): Compare REFLECT_DATA_MEMBER_SPEC annotations. | |
| * mangle.cc (write_reflection): Mangle REFLECT_DATA_MEMBER_SPEC | |
| annotations. | |
| 2026-03-31 Jakub Jelinek <jakub@redhat.com> | |
| * metafns.gperf (enum metafn_code): Add METAFN_CURRENT_FUNCTION, | |
| METAFN_CURRENT_CLASS and METAFN_CURRENT_NAMESPACE. | |
| (enum metafn_kind): Add METAFN_KIND_INFO_VOID. | |
| (current_function, current_class, current_namespace): New | |
| metafunctions. | |
| * pt.cc (value_dependent_expression_p): Make current_function(), | |
| current_class() and current_namespace() calls dependent if they | |
| are inside of template. | |
| * reflect.cc (reflect_current_scope, eval_current_function, | |
| eval_current_class, eval_current_namespace): New functions. | |
| (eval_access_context_current): Use reflect_current_scope. | |
| (process_metafunction): Handle METAFN_CURRENT_FUNCTION, | |
| METAFN_CURRENT_CLASS and METAFN_CURRENT_NAMESPACE. | |
| * metafns.h: Regenerate. | |
| 2026-03-31 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (eval_data_member_spec): Add anonymous enums for | |
| fields in std::meta::data_member_options and | |
| std::meta::data_member_options::_Name and use them instead of | |
| hardcoded constants. | |
| 2026-03-31 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_offset_of): Update comment. | |
| 2026-03-31 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (eval_data_member_spec): Fix up check for diagnostics | |
| when reverse conversion fails. | |
| 2026-03-30 Jakub Jelinek <jakub@redhat.com> | |
| * metafns.gperf (enum metafn_code): Remove | |
| METAFN_HAS_ELLIPSIS_PARAMETER, add METAFN_IS_VARARG_FUNCTION. | |
| (has_ellipsis_parameter): Remove. | |
| (is_vararg_function): Add. | |
| * reflect.cc (eval_has_ellipsis_parameter): Rename to ... | |
| (eval_is_vararg_function): ... this. Adjust function comment. | |
| (process_metafunction): Handle METAFN_IS_VARARG_FUNCTION | |
| instead of METAFN_HAS_ELLIPSIS_PARAMETER. | |
| * metafns.h: Regenerate. | |
| 2026-03-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/123613 | |
| * reflect.cc (get_reflection): Call mark_used. | |
| (eval_can_substitute): Don't resolve_nondeduced_context here. | |
| (eval_substitute): Call lookup_and_finish_template_variable instead | |
| of lookup_template_variable and finish_template_variable. | |
| 2026-03-21 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/122786 | |
| * module.cc (trees_in::decl_value): Set section name from | |
| attribute. | |
| 2026-03-21 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124483 | |
| * module.cc (trees_in::fn_parms_init): Set TREE_USED and | |
| DECL_READ_P for parameters deliberately marked unused. | |
| 2026-03-20 Marek Polacek <polacek@redhat.com> | |
| PR c++/124575 | |
| * call.cc (set_up_extended_ref_temp): If var is consteval-only, | |
| mark it DECL_EXTERNAL. | |
| 2026-03-19 Jason Merrill <jason@redhat.com> | |
| * constexpr.cc (build_constexpr_constructor_member_initializers): | |
| Handle TRY_FINALLY_EXPR. | |
| (potential_constant_expression_1): Handle EH_ELSE_EXPR. | |
| (check_for_failed_contracts): Handle non-MCE case. | |
| (cxx_eval_outermost_constant_expr): Call it sooner. | |
| 2026-03-18 Dhruv Chawla <dhruvc@nvidia.com> | |
| * Make-lang.in (cc1plus.fda): Add `--print-autofdo-gcov-version` to | |
| profile_merger invocation. | |
| (create_fdas_for_cc1plus): Add `--print-autofdo-gcov-version` to | |
| create_gcov invocations. | |
| 2026-03-18 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124474 | |
| * reflect.cc (check_out_of_consteval_use_r): Don't walk subtrees | |
| of RETURN_EXPR on cdtor_returns_this targets in cdtors. | |
| 2026-03-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/124493 | |
| * error.cc (inform_tree_category): Handle variable templates. | |
| 2026-03-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/124472 | |
| * parser.cc (cp_parser_reflection_name): Move the | |
| cp_preserve_using_decl overriding below, before | |
| cp_parser_lookup_name_simple. | |
| 2026-03-17 Marek Polacek <polacek@redhat.com> | |
| PR c++/124493 | |
| * pt.cc (tsubst) <case TEMPLATE_ID_EXPR>: Check that templ is | |
| either DECL_TYPE_TEMPLATE_P or DECL_TEMPLATE_TEMPLATE_PARM_P. | |
| 2026-03-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/124496 | |
| * parser.cc (cp_parser_splice_specifier): Use NULL_TREE instead of | |
| NULL. | |
| (cp_parser_splice_expression): Don't assert seen_error() when not | |
| committed to tentative parse. | |
| 2026-03-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/123618 | |
| * tree.cc (handle_annotation_attribute): Reject annotations on void | |
| parameters. | |
| 2026-03-16 Andrew Pinski <andrew.pinski@oss.qualcomm.com> | |
| PR c++/124307 | |
| * parser.cc (cp_parser_base_specifier): Check for | |
| error mark like checking for non-nullness on the | |
| attribute. | |
| 2026-03-16 Marek Polacek <polacek@redhat.com> | |
| PR c++/124489 | |
| * error.cc (dump_type) <case NULLPTR_TYPE>: Use pp_cxx_ws_string | |
| instead of pp_string. | |
| <case META_TYPE>: Likewise. | |
| 2026-03-16 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/120039 | |
| PR c++/122559 | |
| * pt.cc (tsubst_expr) <case VAR_DECL>: Don't call lookup_name on | |
| DECL_NAME (t) if it is NULL_TREE. | |
| 2026-03-14 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124399 | |
| * decl.cc (grokdeclarator): If both *attrlist and | |
| declarator->std_attributes list contain annotations, chainon | |
| declarator->std_attributes to tail of copy_list (*attrlist) | |
| rather than *attrlist to tail of declarator->std_attributes. | |
| 2026-03-14 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124485 | |
| * cp-tree.h (lazy_load_pendings): Declare new overload. | |
| * module.cc (lazy_load_pendings): Define it. | |
| * name-lookup.cc (lookup_elaborated_type): Load pending entities | |
| with given name before doing namespace-scope lookup. | |
| (pushtag): Remove no-longer-needed pending load. | |
| 2026-03-14 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124456 | |
| * pt.cc (tsubst_pack_expansion): For structured binding pack | |
| with type dependent pack set arg_pack to NULL_TREE. | |
| 2026-03-14 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124478 | |
| * cp-tree.h (lazily_declare_fn): Make return type void. | |
| * method.cc (is_lazy_special_member): New function. | |
| (implicitly_declare_fn): Bail early if we lazy loaded the member | |
| we're trying to declare. | |
| (lazily_declare_fn): Likewise. | |
| 2026-03-13 Jakub Jelinek <jakub@redhat.com> | |
| * Make-lang.in (check-c++-all): Also test c++26. | |
| 2026-03-13 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124388 | |
| * reflect.cc (eval_display_string_of): Only print <unnmamed bit-field> | |
| for DECL_UNNAMED_BIT_FIELD, for anon union print <anonymous union>, | |
| otherwise print <unnamed member>. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| Thomas Berger <loki+gcc@loki.codes> | |
| PR c++/124200 | |
| * name-lookup.h (walk_namespace_bindings): Declare. | |
| * name-lookup.cc (walk_namespace_bindings): New function. | |
| * reflect.cc (namespace_members_of): Use it. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124309 | |
| * module.cc (enum module_directness): Fix inconsistent | |
| capitalisation. | |
| (module_state::read_imports): Reparent module locations newly | |
| seen as direct via partition. | |
| 2026-03-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/124440 | |
| * parser.cc (cp_parser_postfix_dot_deref_expression): Pass | |
| parser->scope to adjust_result_of_qualified_name_lookup even | |
| when splice_p. Assign the result of | |
| adjust_result_of_qualified_name_lookup to name. | |
| * pt.cc (tsubst_expr): Call adjust_result_of_qualified_name_lookup | |
| for BASELINKs in splice-expressions. | |
| * search.cc (adjust_result_of_qualified_name_lookup): Return early | |
| if decl is not a BASELINK. If qualifying_scope is null, use decl's | |
| binfo. Set BASELINK_QUALIFIED_P only if qualifying_scope wasn't | |
| null. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124459 | |
| * module.cc (module_state::read_initial): Move | |
| read_diagnostic_classification after read_macro_maps. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124311 | |
| * module.cc (trees_in::key_mergeable): Check DECL_DEFAULTED_FN | |
| instead of DECL_ARTIFICIAL. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| * decl.cc (start_decl): Check module_may_redeclare for members. | |
| (grokfndecl): Likewise. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| * semantics.cc (begin_class_definition): Move | |
| module_may_redeclare check to... | |
| * parser.cc (cp_parser_class_head): ...here. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124390 | |
| * module.cc (depset::hash::add_binding_entity): Don't create | |
| bindings for hidden friends. | |
| 2026-03-12 Jakub Jelinek <jakub@redhat.com> | |
| * reflect.cc (check_out_of_consteval_use_r): Don't walk BLOCK | |
| subtrees. | |
| 2026-03-12 Jakub Jelinek <jakub@redhat.com> | |
| * parser.cc (cp_parser_omp_taskwait): Set TREE_TYPE of OMP_TASK | |
| to void_type_node rather than void_node. | |
| (cp_parser_omp_dispatch): Likewise. | |
| 2026-03-12 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124425 | |
| * reflect.cc (get_range_elts): Handle proxy iterators. Call | |
| fold_build_cleanup_point_expr on both deref and inc. | |
| 2026-03-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/124431 | |
| * module.cc (trees_in::key_mergeable): Allow merging members of | |
| template specialisations. | |
| 2026-03-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/124397 | |
| * pt.cc (tsubst_lambda_expr): Don't override complain when emitting | |
| diagnostics. | |
| 2026-03-11 Marek Polacek <polacek@redhat.com> | |
| PR c++/120285 | |
| * init.cc (build_vec_init): Only build up a CONSTRUCTOR for | |
| arrays, otherwise use a TREE_LIST like prior to r15-3933. | |
| 2026-03-11 Marek Polacek <polacek@redhat.com> | |
| PR c++/124331 | |
| * pt.cc (tsubst_qualified_id): New name_lookup_p parameter. Don't | |
| call adjust_result_of_qualified_name_lookup and | |
| finish_qualified_id_expr if name_lookup_p is false. | |
| (tsubst_expr) <case REFLECT_EXPR>: Handle SCOPE_REF specially by | |
| calling tsubst_qualified_id with name_lookup_p=false. | |
| 2026-03-11 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124417 | |
| * reflect.cc (get_meta_exception_object): Add CTX argument. For | |
| !flag_exceptions emit error unless ctx->quiet, set *non_constant_p | |
| to true and return NULL_TREE instead of throwing an exception. | |
| (throw_exception): Adjust get_meta_exception_object caller. | |
| 2026-03-11 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124404 | |
| * constexpr.cc (cxx_eval_constexpr_diag): Call convert_from_reference | |
| on arguments. | |
| 2026-03-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124399 | |
| * reflect.cc (compare_reflections): For REFLECT_ANNOTATION, compare | |
| TREE_VALUE of lhs and rhs instead of lhs and rhs. | |
| 2026-03-10 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124399 | |
| * reflect.cc (eval_annotations_of): Call complete_type on r if it | |
| is a type. | |
| 2026-03-07 Jason Merrill <jason@redhat.com> | |
| <mtxn@duck.com> | |
| PR c++/123622 | |
| * module.cc (preprocess_module): Check deps.missing_files. | |
| 2026-03-06 Patrick Palka <ppalka@redhat.com> | |
| PR c++/124297 | |
| * mangle.cc (write_template_param_decl) <case PARM_DECL>: | |
| Strip fold-expression before calling write_type_constraint. | |
| 2026-03-05 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124145 | |
| * constexpr.cc (cxx_eval_constant_expression) <case TARGET_EXPR>: Move | |
| ctx->save_expr->safe_push (slot) call before if (*jump_target) test. | |
| Use TARGET_EXPR_INITIAL instead of TREE_OPERAND. | |
| 2026-03-05 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123810 | |
| * cp-tree.h (TYPE_DECL_FOR_LINKAGE_PURPOSES_P): Define. | |
| (TYPE_DECL_WAS_UNNAMED): Likewise. | |
| (TYPE_WAS_UNNAMED): Also check TYPE_DECL_WAS_UNNAMED. | |
| * decl.cc (start_decl): Use TYPE_DECL_FOR_LINKAGE_PURPOSES_P. | |
| (maybe_diagnose_non_c_class_typedef_for_l): If t == type, use | |
| DECL_SOURCE_LOCATION (orig) instead of | |
| DECL_SOURCE_LOCATION (TYPE_NAME (t)). | |
| (name_unnamed_type): Set TYPE_DECL_FOR_LINKAGE_PURPOSES_P | |
| on decl. For -freflection don't change TYPE_NAME from | |
| orig to decl, but instead change DECL_NAME (orig) to | |
| DECL_NAME (decl) and set TYPE_DECL_FOR_LINKAGE_PURPOSES_P on | |
| orig too. | |
| * decl2.cc (grokfield): Use TYPE_DECL_FOR_LINKAGE_PURPOSES_P. | |
| * name-lookup.cc (fields_linear_search): Ignore | |
| TYPE_DECL_WAS_UNNAMED decls. | |
| (count_class_fields): Likewise. | |
| (member_vec_append_class_fields): Likewise. | |
| (pop_local_binding): Likewise. | |
| * reflect.cc (namespace_members_of): For TYPE_DECL with | |
| TYPE_DECL_FOR_LINKAGE_PURPOSES_P set also append | |
| reflection of strip_typedefs (m). | |
| * class.cc (find_flexarrays): Handle TYPE_DECLs with | |
| TYPE_DECL_WAS_UNNAMED like the ones with IDENTIFIER_ANON_P | |
| name. | |
| 2026-03-04 Marek Polacek <polacek@redhat.com> | |
| PR c++/124368 | |
| * reflect.cc (eval_extent): Convert the result to size_type_node. | |
| 2026-03-04 Marek Polacek <polacek@redhat.com> | |
| PR c++/124229 | |
| * pt.cc (in_expansion_stmt_p): New. | |
| (tsubst): When reusing typedefs, do retrieve_local_specialization also | |
| when in_expansion_stmt_p is true. | |
| 2026-03-04 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123866 | |
| * reflect.cc (eval_annotations_of): For type aliases look for | |
| annotations in DECL_ATTRIBUTES (TYPE_NAME (r)). | |
| 2026-03-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124306 | |
| * pt.cc (regenerate_decl_from_template): Mark the old PARM_DECLs | |
| replaced with tsubst_decl result with OLD_PARM_DECL_P flag. | |
| 2026-03-03 Marek Polacek <polacek@redhat.com> | |
| PR c++/124324 | |
| * reflect.cc (eval_substitute): Call resolve_nondeduced_context. | |
| 2026-03-03 Patrick Palka <ppalka@redhat.com> | |
| * constraint.cc (struct sat_entry): New data member inst_entry. | |
| (satisfaction_cache::satisfaction_cache): Initialize inst_entry. | |
| (satisfaction_cache::get): Use it to prefer printing the | |
| instantiated atom in case of constraint recursion. | |
| (satisfy_atom): Set inst_entry of the first cache entry to point | |
| to the second entry. | |
| 2026-03-03 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123665 | |
| PR c++/123408 | |
| * pt.cc (build_extra_args): If TREE_STATIC was set on the | |
| arguments, keep it set. | |
| (add_extra_args): Set TREE_STATIC on the resulting arguments | |
| when substituting templated arguments into a full set of | |
| deferred arguments. | |
| (tsubst_lambda_expr): Always defer templated substitution if | |
| LAMBDA_EXPR_EXTRA_ARGS was set. | |
| 2026-03-01 Nathaniel Shead <nathanieloshead@gmail.com> | |
| * constexpr.cc (diagnose_failing_condition): Also decompose | |
| comparisons of reflections. | |
| 2026-03-01 Marek Polacek <polacek@redhat.com> | |
| PR c++/123143 | |
| * pt.cc (tsubst_expr) <case COMPONENT_REF>: Check identifier_p | |
| before doing lookup for a template function. | |
| 2026-03-01 Marek Polacek <polacek@redhat.com> | |
| PR c++/123608 | |
| * cp-tree.h (unevaluated_p): Include REFLECT_EXPR. | |
| * reflect.cc (check_out_of_consteval_use_r): Don't give up early | |
| on REFLECT_EXPR_P. | |
| 2026-02-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/124204 | |
| * reflect.cc (eval_can_substitute): Call convert_from_reference. | |
| 2026-02-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/123662 | |
| PR c++/123611 | |
| * cvt.cc (convert_to_void): Only call check_out_of_consteval_use | |
| when stmts_are_full_exprs_p. | |
| 2026-02-26 Marek Polacek <polacek@redhat.com> | |
| Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124215 | |
| * reflect.cc (class_members_of): Use TYPE_MAIN_VARIANT of R. | |
| 2026-02-25 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (check_out_of_consteval_use_r): Walk BIND_EXPR_BODY. | |
| For IF_STMT_CONSTEVAL_P, only walk the ELSE_CLAUSE. For | |
| IF_STMT_CONSTEXPR_P, only walk the THEN_ and ELSE_CLAUSE. | |
| 2026-02-25 Marek Polacek <polacek@redhat.com> | |
| PR c++/124227 | |
| * reflect.cc (consteval_only_p): Handle TREE_VEC. | |
| 2026-02-24 Marek Polacek <polacek@redhat.com> | |
| * parser.cc (cp_parser_base_specifier): Use the same error for | |
| a typename in a base-specifier outside of templates and inside. | |
| 2026-02-23 Marek Polacek <polacek@redhat.com> | |
| * parser.cc (cp_parser_splice_expression): For dependent splices return | |
| earlier. Refactor. For address_p, build an OFFSET_REF. Don't pass | |
| context to finish_id_expression. | |
| * semantics.cc (finish_id_expression_1): Adjust an assert to also check | |
| flag_reflection. | |
| 2026-02-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/124150 | |
| * reflect.cc (eval_substitute): Add an OVERLOAD around | |
| a DECL_FUNCTION_TEMPLATE_P. | |
| 2026-02-23 Marek Polacek <polacek@redhat.com> | |
| PR c++/123641 | |
| * name-lookup.cc: Move STAT_* and MAYBE_STAT_* macros from here to... | |
| * name-lookup.h: ...here. | |
| * reflect.cc (namespace_members_of): Use them. Skip STAT_TYPE_HIDDEN_P. | |
| 2026-02-22 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124173 | |
| * pt.cc (convert_nontype_argument): For C++11/C++14 handle | |
| NULLPTR_TYPE_P non-type arguments like TYPE_PTR_P. | |
| 2026-02-22 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124184 | |
| * parser.cc (cp_perform_range_for_lookup): If tf_error is | |
| missing, call finish_call_expr after perform_koenig_lookup | |
| calls immediately with tf_any_viable instead of twice, once | |
| with tf_none and then with tf_any_viable. | |
| * pt.cc (finish_expansion_stmt): Remove unneeded parens. | |
| 2026-02-22 Valentyn Yukhymenko <valentin.yukhymenko@gmail.com> | |
| PR c++/123642 | |
| * typeck.cc (finish_class_member_access_expr): Change context lookup | |
| to handle anon union members. | |
| 2026-02-19 Marek Polacek <polacek@redhat.com> | |
| * metafns.gperf: Define METAFN_KIND_ARG. | |
| * metafns.h: Regenerate. | |
| * reflect.cc (process_metafunction): Use METAFN_KIND_ARG. | |
| 2026-02-19 Jakub Jelinek <jakub@redhat.com> | |
| * pt.cc (convert_nontype_argument): Clarify return value in function | |
| comment. | |
| 2026-02-19 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124070 | |
| * pt.cc (convert_nontype_argument): For NULLPTR_TYPE_P case | |
| if expr is not integer_zerop and is not val_dep_p try harder, | |
| for complain & tf_error use cxx_constant_value and return NULL_TREE | |
| for error_mark_node, without tf_error return NULL_TREE. Similarly | |
| for REFLECTION_TYPE_P case if expr is not REFLECT_EXPR and is not | |
| val_dep_p try harder like for NULLPTR_TYPE_P. | |
| 2026-02-19 Jakub Jelinek <jakub@redhat.com> | |
| * cp-tree.h: Implement proposed CWG 3123 resolution. | |
| (enum tsubst_flags): Add tf_any_viable enumerator. Indent all | |
| comments the same. | |
| * call.cc (perform_overload_resolution): For tf_any_viable | |
| return the first candidate instead of doing tourney. Filter out | |
| tf_any_viable flag from add_candidates call. | |
| (build_new_function_call): For tf_any_viable return void_node | |
| if any viable candidates are found rather than build_over_call. | |
| Filter out tf_any_viable flag from resolve_args call. | |
| * parser.cc (cp_perform_range_for_lookup): Pass COMPLAIN to | |
| cp_range_for_member_function calls. If not tf_error, for | |
| successful ADL if one or both of finish_call_expr calls returns | |
| error_mark_node, retry with tf_any_viable. If both begin and | |
| end expressions have a viable candidate or when member lookup | |
| found both begin and end members, return NULL_TREE rather than | |
| error_mark_node even when both *begin and *end are error_mark_node. | |
| (cp_range_for_member_function): Add COMPLAIN argument, pass it | |
| down to finish_class_member_access_expr and finish_call_expr. | |
| * pt.cc (finish_expansion_stmt): Use esk_iterating if | |
| cp_perform_range_for_lookup returned something other than | |
| error_mark_node or if both begin_expr and end_expr are not | |
| error_mark_node. | |
| * semantics.cc (finish_call_expr): Filter out tf_any_viable | |
| flag from all uses of complain except one build_new_function_call | |
| call for the is_overloaded_fn case. | |
| 2026-02-18 Marek Polacek <polacek@redhat.com> | |
| PR c++/124096 | |
| * semantics.cc (cp_build_bit_cast): Check that neither argument is | |
| consteval-only. | |
| 2026-02-17 Patrick Palka <ppalka@redhat.com> | |
| PR c++/121822 | |
| * cvt.cc (convert_to_void): Don't evaluate a concept-id | |
| in an unevaluated context. | |
| 2026-02-17 Patrick Palka <ppalka@redhat.com> | |
| PR c++/122318 | |
| PR c++/101670 | |
| * pt.cc (unify) <default>: Accept LAMBDA_EXPR. | |
| 2026-02-17 Jakub Jelinek <jakub@redhat.com> | |
| * cp-tree.h (enum cp_built_in_function): Add | |
| CP_BUILT_IN_CONSTEXPR_DIAG. | |
| (cexpr_str::cexpr_str): Add new default ctor. | |
| (cexpr_str::type_check): Add optional allow_char8_t arg. | |
| (cexpr_str::extract): Add optional ctx, non_constant_p, overflow_p | |
| and jump_target arguments. | |
| * cp-gimplify.cc (cp_gimplify_expr): Throw away | |
| __builtin_constexpr_diag calls after gimplification of | |
| their arguments. | |
| * decl.cc (cxx_init_decl_processing): Create __builtin_constexpr_diag | |
| FE builtin decl. | |
| * constexpr.cc (call_stack, call_stack_tick, last_cx_error_tick): | |
| Moved earlier. | |
| (cxx_eval_constexpr_diag): New function. | |
| (cxx_eval_builtin_function_call): Handle __builtin_constexpr_diag | |
| calls. | |
| * tree.cc (builtin_valid_in_constant_expr_p): Return true for | |
| CP_BUILT_IN_CONSTEXPR_DIAG. | |
| * semantics.cc (cexpr_str::type_check): Add allow_char8_t argument, | |
| if true, allow data to return const char8_t *. | |
| (cexpr_str::extract): Add ctx, non_constant_p, overflow_p and | |
| jump_target arguments, if they are non-NULL, evalute expressions | |
| in that context rather than using cxx_constant_value and translate | |
| back to SOURCE_CHARSET even if message_data or message_sz are NULL. | |
| 2026-02-17 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/120685 | |
| * typeck2.cc (build_functional_cast_1): For C++23 auto(x) | |
| without tf_warning or tf_error return error_mark_node instead of | |
| emitting pedwarn and handling it. | |
| * semantics.cc (finish_compound_literal): Similarly for C++26 | |
| auto{x}. | |
| 2026-02-17 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123612 | |
| * cp-tree.h (DECL_HAS_DEFAULT_ARGUMENT_P): Define. | |
| * decl.cc (merge_decl_arguments): For -freflection and | |
| extern_alias set DECL_HAS_DEFAULT_ARGUMENT_P (oldarg) | |
| if newdecl has a default argument for that parameter, | |
| otherwise propagate the flag. | |
| * reflect.cc (get_reflection): For DECL_LOCAL_DECL_P | |
| use its DECL_LOCAL_DECL_ALIAS. | |
| (eval_has_default_argument): Return boolean_true_node | |
| also if DECL_HAS_DEFAULT_ARGUMENT_P flag is set. | |
| 2026-02-17 David Malcolm <dmalcolm@redhat.com> | |
| PR diagnostics/122001 | |
| * error.cc (auto_context_line::auto_context_line): Initialize | |
| m_nesting_level and m_location_printed. Update the condition | |
| for printing location in ctor to also do it at top-level | |
| nesting level. Record into m_location_printed if we did | |
| print the location. | |
| (auto_context_line::~auto_context_line): Don't call print_location | |
| if we already printed it in the ctor. | |
| (auto_context_line::m_nesting_level): New field. | |
| (auto_context_line::m_location_printed): New field. | |
| 2026-02-15 Patrick Palka <ppalka@redhat.com> | |
| PR c++/121500 | |
| * cp-gimplify.cc (cp_genericize_r): Walk DECL_VALUE_EXPR within | |
| an xobj lambda. | |
| 2026-02-13 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (inform_tree_category): Declare. | |
| * error.cc (inform_tree_category): New. | |
| * parser.cc (cp_parser_splice_specifier): Use OVL_FIRST when checking | |
| for TEMPLATE_DECL. | |
| (cp_parser_splice_type_specifier): Reword an error message. Call | |
| inform_tree_category. | |
| (cp_parser_splice_expression): Check check_splice_expr earlier. Reword | |
| error messages. Call inform_tree_category. Turn an error into an | |
| assert. Use missing_template_diag instead of giving an error about | |
| a missing 'template' keyword. | |
| (cp_parser_splice_scope_specifier): Reword an error message. Call | |
| inform_tree_category. | |
| (missing_template_diag): Forward declare. Drop "enum" in a parameter. | |
| * reflect.cc (check_splice_expr): Reword error messages. Call | |
| inform_tree_category. | |
| 2026-02-13 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/124012 | |
| * reflect.cc (check_out_of_consteval_use_r): New function. | |
| (check_out_of_consteval_use): Use it instead of lambda. Don't ignore | |
| constexpr/constinit vars in the walker and walk DECL_VALUE_EXPR of | |
| vars which have it. Ignore expr equal to constexpr VAR_DECL. In | |
| diagnostics only complain about missing constexpr on VAR_DECLs without | |
| that flag and never suggest constinit. Remove constinit traces from | |
| function comment. | |
| 2026-02-13 Dhruv Chawla <dhruvc@nvidia.com> | |
| * Make-lang.in (cc1plus.fda): Likewise. | |
| 2026-02-12 Patrick Palka <ppalka@redhat.com> | |
| * constraint.cc (finish_shorthand_constraint): Add is_non_type | |
| parameter. Handle constrained auto NTTPs. | |
| * cp-tree.h (copy_template_args): Declare. | |
| (expand_template_argument_pack): Declare. | |
| (finish_shorthand_constraint): Adjust declaration. | |
| * mangle.cc (write_template_param_decl): Obtain constraints of | |
| an auto NTTP through TEMPLATE_PARM_CONSTRAINTS instead of | |
| PLACEHOLDER_TYPE_CONSTRAINTS. | |
| * parser.cc (cp_parser_constrained_type_template_parm): Inline | |
| into its only caller and remove. | |
| (cp_parser_constrained_non_type_template_parm): Likewise. | |
| (finish_constrained_parameter): Simplify after the above. Replace | |
| the type of an ordinary constrained auto NTTP with a | |
| non-constrained one and set TEMPLATE_PARM_CONSTRAINTS for it. | |
| (cp_parser_template_parameter): Dispatch to | |
| finish_constrained_parameter for a constrained auto NTTP. | |
| * pt.cc (process_template_parm): Pass is_non_type to | |
| finish_shorthand_constraint. Use TEMPLATE_PARM_CONSTRAINTS | |
| instead of TREE_TYPE for clarity. | |
| (expand_template_argument_pack): Remove forward declaration. | |
| (copy_template_args): Likewise. | |
| (make_constrained_placeholder_type): Return the type not the | |
| TYPE_NAME for consistency with make_auto_1 etc. | |
| (do_auto_deduction): Assert we no longer see simple constrained | |
| autos during coercion/deduction. | |
| 2026-02-12 Patrick Palka <ppalka@redhat.com> | |
| * cp-gimplify.cc (cp_gimplify_expr) <case CALL_EXPR>: Adjust | |
| r16-7487 comment. | |
| 2026-02-12 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123989 | |
| * cp-gimplify.cc (cp_gimplify_expr) <case CALL_EXPR>: Evaluate | |
| the object argument of an xobj memfn call first too. | |
| 2026-02-12 Marek Polacek <polacek@redhat.com> | |
| PR c++/124045 | |
| * parser.cc (cp_parser_parse_and_diagnose_invalid_type_name): Also | |
| abort the tentative parse when id is error_mark_node. | |
| (cp_parser_simple_declaration): Set CP_PARSER_FLAGS_TYPENAME_OPTIONAL | |
| when in a namespace scope. | |
| (cp_parser_single_declaration): Use cp_parser_flags instead of int. | |
| 2026-02-12 Patrick Palka <ppalka@redhat.com> | |
| PR c++/98939 | |
| PR libstdc++/119745 | |
| * class.cc (object_parms_correspond): Allow differing | |
| FUNCTION_REF_QUALIFIED in C++20. | |
| 2026-02-11 Boris Staletic <boris.staletic@protonmail.com> | |
| PR c++/123660 | |
| PR c++/123661 | |
| * pt.cc (tsubst_splice_expr): Handle pointers to non-static members | |
| from splice expressions | |
| 2026-02-10 Marek Polacek <polacek@redhat.com> | |
| * parser.cc (struct saved_token_sentinel): Save input_location. | |
| (saved_token_sentinel::rollback): Restore input_location. | |
| (cp_parser_splice_spec_is_nns_p): Use saved_token_sentinel. Refactor. | |
| 2026-02-10 Patrick Palka <ppalka@redhat.com> | |
| PR c++/122621 | |
| * pt.cc (tsubst_pack_expansion): Use tf_partial instead of | |
| tf_none, except when substituting outer (non-dependent) template | |
| arguments. | |
| 2026-02-09 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123984 | |
| * reflect.cc (eval_define_aggregate): Set TYPE_BEING_DEFINED on type | |
| after pushclass, call build_self_reference, remove assertion that | |
| TYPE_FIELDS (type) is NULL and instead set fields to | |
| TYPE_FIELDS (type). | |
| 2026-02-09 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123889 | |
| * constexpr.cc (explain_invalid_constexpr_fn): Diagnose | |
| NULL or error_mark_node massaged on non-constructor. | |
| 2026-02-08 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/123738 | |
| * module.cc (preprocess_module): Complain for any non-imported | |
| module declaration in a module purview. | |
| 2026-02-08 Marek Polacek <polacek@redhat.com> | |
| PR c++/123823 | |
| PR c++/123640 | |
| * parser.cc (cp_parser_splice_specifier): New typename_p parameter. | |
| Use cp_parser_nth_token_starts_template_argument_list_p instead of | |
| checking CPP_LESS. Check for typename/template/TEMPLATE_DECL before | |
| parsing a template-id. | |
| (cp_parser_splice_type_specifier): Adjust the call to | |
| cp_parser_splice_specifier. | |
| (cp_parser_splice_expression): Don't detect unparenthesized splice | |
| expressions here. Adjust the call to cp_parser_splice_specifier. | |
| (cp_parser_splice_scope_specifier): Adjust the call to | |
| cp_parser_splice_specifier. | |
| (cp_parser_skip_entire_splice_expr): New, broken out of... | |
| (cp_parser_splice_spec_is_nns_p): ...this. | |
| (cp_parser_template_id): Call pop_deferring_access_checks. | |
| (cp_parser_template_argument): Detect unparenthesized splice | |
| expressions here. | |
| 2026-02-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123659 | |
| * tree.cc (cp_walk_subtrees): Handle SPLICE_SCOPE. | |
| 2026-02-07 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123752 | |
| * pt.cc (tsubst_splice_expr): Return error_mark_node if | |
| splice returned it. | |
| 2026-02-06 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | |
| PR middle-end/123892 | |
| * call.cc: Replace CONST_CAST with const_cast<>. | |
| * parser.cc: Likewise. | |
| 2026-02-06 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | |
| PR middle-end/123892 | |
| * call.cc: Replace CONST_CAST_TREE with const_cast<tree>. | |
| * constraint.cc: Likewise. | |
| * cp-lang.cc: Likewise. | |
| * cp-tree.h: Likewise. | |
| * cp-objcp-common.cc: Likewise. | |
| * decl.cc: Likewise. | |
| * init.cc: Likewise. | |
| * pt.cc: Likewise. | |
| * reflect.cc: Likewise. | |
| * tree.cc: Likewise. | |
| * typeck.cc: Likewise. | |
| * typeck2.cc: Likewise. | |
| 2026-02-05 Michal Jires <mjires@suse.cz> | |
| PR testsuite/123559 | |
| * decl.cc (wrapup_namespace_globals): Check and suppress OPT_Wunused. | |
| * semantics.cc (finish_asm_stmt): Suppress OPT_Wunused. | |
| 2026-02-05 Marek Polacek <polacek@redhat.com> | |
| PR c++/123934 | |
| * reflect.cc (type_of): For FUNCTION_DECLs, use static_fn_type. | |
| 2026-02-05 Patrick Palka <ppalka@redhat.com> | |
| PR c++/122169 | |
| * pt.cc (tsubst_pack_index): Propagate cv-qualifiers of | |
| PACK_INDEX_TYPE. | |
| 2026-02-05 Jakub Jelinek <jakub@redhat.com> | |
| Revert: | |
| 2026-02-05 Jakub Jelinek <jakub@redhat.com> | |
| PR c/101312 | |
| * cp-tree.h (cxx_build_lang_qualified_type): Declare. | |
| * cp-objcp-common.h (LANG_HOOKS_COPY_LANG_QUALIFIERS): Remove. | |
| (LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE): Define. | |
| * tree.cc (cxx_build_lang_qualified_type): New function. | |
| 2026-02-04 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123913 | |
| PR c++/123964 | |
| * reflect.cc (eval_parameters_of): Fix up handling of function | |
| types. | |
| 2026-02-04 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123611 | |
| * pt.cc (finish_expansion_stmt): Temporarily enable | |
| in_immediate_context () for the iterating expansion stmt N | |
| computation. | |
| 2026-02-03 Marek Polacek <polacek@redhat.com> | |
| * constexpr.cc (is_std_allocator): Don't check for __new_allocator. | |
| (is_std_allocator_allocate): Make static. | |
| * cp-tree.h (is_std_allocator_allocate): Remove declaration. | |
| * reflect.cc (check_out_of_consteval_use): Don't call | |
| is_std_allocator_allocate. | |
| (check_consteval_only_fn): Likewise. | |
| 2026-02-03 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (compare_reflections): Handle comparing annotations | |
| and types specially, use cp_tree_equal for the rest. | |
| * tree.cc (cp_tree_equal) <case NAMESPACE_DECL>: New. | |
| 2026-02-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123920 | |
| * reflect.cc (eval_data_member_spec): Break out of the loop | |
| if value is integer_zerop even in the field | |
| && TREE_CODE (field) != RANGE_EXPR case and use a single | |
| test for integer_zerop (value) in the whole loop. | |
| 2026-02-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123918 | |
| * semantics.cc (cexpr_str::extract): Bypass cpp_translate_string | |
| for len == 0. | |
| 2026-02-02 Marek Polacek <polacek@redhat.com> | |
| Boris Staletic <boris.staletic@protonmail.com> | |
| PR c++/123695 | |
| * reflect.cc (eval_object_of): Check type before TYPE_REF_P. | |
| 2026-02-02 Marek Polacek <polacek@redhat.com> | |
| PR c++/123614 | |
| * cvt.cc (cp_fold_convert): Avoid wrapping a REFLECT_EXPR in NOP_EXPR. | |
| 2026-02-01 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/121832 | |
| * parser.cc (cp_parser_explicit_template_declaration): Check for | |
| null. | |
| 2026-01-31 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/123557 | |
| PR c++/123738 | |
| * cp-gimplify.cc (cp_fold_maybe_rvalue): Call | |
| cp_fold_non_odr_use_1 before recursing cp_fold. | |
| (cp_fold): Pass op0 to cp_fold_non_odr_use_1 when folding a | |
| reference. Reapply set_target_expr_eliding on the initializing | |
| expression of an INIT_EXPR. | |
| 2026-01-31 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123825 | |
| * cp-tree.h (merge_decl_arguments): Declare. | |
| * decl.cc (duplicate_decls): Outline DECL_ARGUMENTS handling | |
| into ... | |
| (merge_decl_arguments): ... new function. | |
| * name-lookup.cc (push_local_extern_decl_alias): Call | |
| merge_decl_arguments. Don't copy just the first PARM_DECL when | |
| creating a new alias FUNCTION_DECL. | |
| 2026-01-31 Jason Merrill <jason@redhat.com> | |
| Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/122785 | |
| * decl.cc (maybe_commonize_var): Don't check consteval_only_p. | |
| (make_rtl_for_nonlocal_decl): Undo make_decl_one_only for | |
| consteval-only variables. | |
| 2026-01-30 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123845 | |
| PR libstdc++/114865 | |
| * constexpr.cc (build_data_member_initialization): Remove | |
| C++11-specific recognition of MODIFY_EXPR. | |
| (check_constexpr_ctor_body): Relax error diagnostic to a | |
| pedwarn and don't clear DECL_DECLARED_CONSTEXPR_P upon | |
| error. Return true if complaining. | |
| 2026-01-30 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_define_aggregate): Also give an error when | |
| TYPE_BEING_DEFINED is true for the first argument. Remove code | |
| that did the same. | |
| 2026-01-30 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_can_substitute): Check undeduced_auto_decl after | |
| resolve_nondeduced_context_or_error. | |
| 2026-01-29 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_has_template_arguments): Return immediately after | |
| checking alias_template_specialization_p. | |
| 2026-01-29 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_type_trait): Assert that finish_trait_expr didn't | |
| return error_mark_node. | |
| 2026-01-29 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (class_members_of): Adjust comment. | |
| (splice): Give an error if the expression doesn't evaluate to | |
| a REFLECT_EXPR_P. | |
| 2026-01-29 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123866 | |
| * reflect.cc (eval_annotations_of): Use maybe_get_first_fn. | |
| 2026-01-29 Jakub Jelinek <jakub@redhat.com> | |
| * cp-tree.h (build_range_temp): Implement CWG3131 - Value | |
| categories and types for the range in iterable expansion statements. | |
| Add bool argument defaulted to false. | |
| * parser.cc (build_range_temp): Add expansion_stmt_p argument, | |
| if true build const decltype(auto) __for_range = range_expr instead of | |
| auto &&__for_range = range_expr. | |
| (cp_build_range_for_decls): For expansion stmts build __for_range as | |
| static constexpr decltype(auto) __for_range = (range_expr); | |
| rather than static constexpr auto &&__for_range = range_expr;. | |
| 2026-01-28 Andrew Pinski <andrew.pinski@oss.qualcomm.com> | |
| PR c++/102846 | |
| PR c/102846 | |
| * name-lookup.cc (lookup_name_fuzzy): Lookup function-like macro and | |
| notify of misuse there. | |
| 2026-01-28 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/102613 | |
| * parser.cc: Implement C++23 P2246R1 - Character encoding of | |
| diagnostic text. | |
| (cp_parser_parenthesized_expression_list): For std attribute | |
| argument where the first argument is CPP_STRING, ensure the | |
| string is not translated. | |
| * semantics.cc: Include c-family/c-pragma.h. | |
| (cexpr_str::extract): Use cpp_translate_string to translate | |
| string from ordinary literal encoding to SOURCE_CHARSET. | |
| 2026-01-28 Jakub Jelinek <jakub@redhat.com> | |
| * pt.cc (finish_expansion_stmt): Implement part of CWG3044. | |
| Add to begin decltype(begin - begin){i} with std::ptrdiff_t | |
| i instead of just i. | |
| 2026-01-28 Jakub Jelinek <jakub@redhat.com> | |
| PR c/101312 | |
| * cp-tree.h (cxx_build_lang_qualified_type): Declare. | |
| * cp-objcp-common.h (LANG_HOOKS_COPY_LANG_QUALIFIERS): Remove. | |
| (LANG_HOOKS_BUILD_LANG_QUALIFIED_TYPE): Define. | |
| * tree.cc (cxx_build_lang_qualified_type): New function. | |
| 2026-01-28 Alex Yesmanchyk <aliaksandr.yesmanchyk@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/38612 | |
| * typeck2.cc (build_m_component_ref): Improve class mismatch | |
| diagnostic. | |
| 2026-01-28 vspefs <vspefs@protonmail.com> | |
| * module.cc (trees_out::type_node): Add case for SPLICE_SCOPE. | |
| (trees_in::tree_node): Add case for SPLICE_SCOPE. | |
| 2026-01-28 Lucas Chollet <lucas.chollet@free.fr> | |
| Jason Merrill <jason@redhat.com> | |
| PR c++/114450 | |
| * lambda.cc (generic_lambda_fn_p): Handle null argument. | |
| * semantics.cc (finish_id_expression_1): Check for generic lambda. | |
| 2026-01-28 Johannes Altmanninger <aclopte@gmail.com> | |
| Jason Merrill <jason@redhat.com> | |
| * typeck.cc (cp_build_array_ref): Suppress unused-value | |
| warning for implicit comma expression. | |
| 2026-01-28 Nina Ranns <dinka.ranns@gmail.com> | |
| Iain Sandoe <iain@sandoe.co.uk> | |
| Ville Voutilainen <ville.voutilainen@gmail.com> | |
| * call.cc (build_cxx_call): Where enabled, wrap calls to | |
| functions with contract specifiers. | |
| * contracts.cc (enum contract_match_kind): Move to contracts | |
| header. | |
| (build_contract_condition_function): Copy caller-side wrapper | |
| state. | |
| (set_contract_wrapper_function, get_contract_wrapper_function, | |
| get_orig_func_for_wrapper, contracts_fixup_cdtorname, | |
| build_contract_wrapper_function, | |
| get_or_create_contract_wrapper_function): New. | |
| (start_function_contracts): Handle caller-side wrappers. | |
| (maybe_apply_function_contracts): Likewise. | |
| (copy_and_remap_contracts): Likewise. | |
| (should_contract_wrap_call, maybe_contract_wrap_call, | |
| define_contract_wrapper_func, emit_contract_wrapper_func): New. | |
| (finish_function_contracts): Handle caller-side wrappers. | |
| (get_src_loc_impl_ptr): Likewise. | |
| * contracts.h (DECL_IS_WRAPPER_FN_P): New. | |
| (enum contract_match_kind): Moved from contracts.cc. | |
| (copy_and_remap_contracts): Allow selection on the specific | |
| contract kind. | |
| (maybe_contract_wrap_call, emit_contract_wrapper_func): New. | |
| (set_decl_contracts): Delete dead code. | |
| * cp-tree.h (struct lang_decl_fn): Add wrapper function bit. | |
| (DECL_CONTRACT_WRAPPER): New. | |
| * decl2.cc (c_parse_final_cleanups): Emit wrappers. | |
| 2026-01-28 Nina Ranns <dinka.ranns@gmail.com> | |
| Iain Sandoe <iain@sandoe.co.uk> | |
| Ville Voutilainen <ville.voutilainen@gmail.com> | |
| * contracts.cc (handle_contracts_p): Check that we are | |
| handling an original function, not an outlined check. | |
| (set_precondition_function, set_postcondition_function, | |
| get_orig_for_outlined, contracts_fixup_name, | |
| build_contract_condition_function, | |
| build_precondition_function, build_postcondition_function, | |
| build_contract_function_decls): New. | |
| (start_function_contracts): Update for the case that we | |
| outline the contract checks. | |
| (build_arg_list, build_thunk_like_call, | |
| add_pre_condition_fn_call, | |
| get_postcondition_result_parameter, | |
| add_post_condition_fn_call): New. | |
| (apply_preconditions): Allow outlined checks. | |
| (apply_postconditions): Likewise. | |
| (get_precondition_function, get_postcondition_function, | |
| set_contract_functions, remap_and_emit_conditions, | |
| finish_function_contracts): New. | |
| (get_src_loc_impl_ptr): Handle outlined checks. | |
| (build_contract_check): Likewise. | |
| * contracts.h (DECL_PRE_FN, DECL_POST_FN, | |
| DECL_IS_PRE_FN_P, DECL_IS_POST_FN_P, | |
| get_precondition_function, get_postcondition_function, | |
| get_orig_for_outlined, finish_function_contracts, | |
| set_contract_functions): New. | |
| * cp-tree.h (enum lang_contract_helper): New. | |
| (struct lang_decl_fn): Add contract helper enum. | |
| (CONTRACT_HELPER): New. | |
| (mangle_decl_string): New. | |
| * decl.cc (finish_function): Emit outlined checks when | |
| in use. | |
| * module.cc (trees_out::fn_parms_init): Stream pre and post | |
| outlined checks. | |
| (trees_in::fn_parms_init): Reload pre and post outlined checks. | |
| (check_mergeable_decl): Handle pre and post outlined functions. | |
| (module_state_config::get_dialect): Add contracts dialect. | |
| 2026-01-28 Nina Ranns <dinka.ranns@gmail.com> | |
| Iain Sandoe <iain@sandoe.co.uk> | |
| * contracts.cc (view_as_const, constify_contract_access, | |
| set_parm_used_in_post, check_param_in_postcondition, | |
| parm_used_in_post_p, check_postconditions_in_redecl): New. | |
| (check_redecl_contract): Handle constification. | |
| * contracts.h (constify_contract_access, view_as_const, | |
| contract_const_wrapper_p, strip_contract_const_wrapper): New. | |
| * cp-tree.h: Update tree flag usage comment. | |
| * lambda.cc (build_capture_proxy): Handle constification. | |
| * parser.cc (cp_parser_late_contract_condition, cp_parser_contract_assert, | |
| cp_parser_function_contract_specifier): Likewise. | |
| * pt.cc (tsubst_function_decl, tsubst_expr): Likewise. | |
| * semantics.cc (finish_id_expression_1, finish_decltype_type): Likewise. | |
| 2026-01-28 Nina Ranns <dinka.ranns@gmail.com> | |
| Iain Sandoe <iain@sandoe.co.uk> | |
| * contracts.cc (__tu_terminate_wrapper): New. | |
| (build_terminate_wrapper): New. | |
| (declare_terminate_wrapper): New. | |
| (maybe_emit_violation_handler_wrappers): Build a no-ipa wrapper | |
| for terminating contract violations if required. | |
| 2026-01-28 Iain Sandoe <iain@sandoe.co.uk> | |
| Nina Ranns <dinka.ranns@gmail.com> | |
| Ville Voutilainen <ville.voutilainen@gmail.com> | |
| * class.cc (check_for_override): Diagnose attemtps to add contracts to | |
| virtual functions. | |
| * constexpr.cc (cxx_eval_builtin_function_call): Handle | |
| observable_checkpoints emitted for contracts. | |
| (cxx_eval_constant_expression): Check we do not see contract assertions | |
| here... | |
| (potential_constant_expression_1): ... but that we do here. | |
| * contracts.cc: Implement base C++26 P2600R14 contracts. | |
| * contracts.h: Likewise. | |
| * cp-gimplify.cc (cp_genericize_r): Lower contract assertions to control | |
| flow and calls (where required) to the violation handler. | |
| (fold_builtin_source_location): Use revised source_location impl. | |
| constructor. | |
| (build_source_location_impl): Split out the core of the constructor of | |
| source_location so that it can be re-used from the contracts code. | |
| * cp-tree.def (ASSERTION_STMT, PRECONDITION_STMT, | |
| POSTCONDITION_STMT): Revise to allow space for specifying a semantic, | |
| an assertion kind, and (where required) a source location. | |
| * cp-tree.h (enum cp_tree_index, builtin_contract_violation_type): Add | |
| the contract violation object type. | |
| (struct saved_scope): Add a contracts class pointer. | |
| (processing_postcondition, contract_class_ptr): New. | |
| (struct cp_declarator): Add contract_specifiers. | |
| (build_call_a_1): New. | |
| (build_source_location_impl): New. | |
| * decl.cc (duplicate_decls): Check function contract specifiers on | |
| redeclarations. Handle contract specifiers on instantiations. | |
| (cxx_init_decl_processing): Initialise the terminate function since | |
| this can be called from contracts even when exception processing is | |
| disabled. Build the contract violation object layout. | |
| (start_decl): Handle checking contract postcondition identifiers. | |
| (grokfndecl): Handle function contract specifiers. | |
| (grokdeclarator): Likewise. | |
| (start_preparsed_function): Start function contracts where needed. | |
| (finish_function): Emit contract specifier AST corresponding to the | |
| checked contracts. | |
| * decl2.cc (c_parse_final_cleanups): Emit helpers for contract | |
| violation handler calls. | |
| * lex.cc (cxx_init): Add keyword warning for contract_assert. | |
| * parser.cc (make_call_declarator): Add contract specifiers. | |
| (unparsed_contracts): New. | |
| (cp_parser_lambda_introducer): Allow contract specifier lambdas to have | |
| a capture default. | |
| (cp_parser_lambda_declarator_opt): Parse function contract specifiers. | |
| (make_dummy_lambda_op): Account for contract specifiers in declarator. | |
| (cp_parser_lambda_body): We have to ensure that deferred contracts are | |
| parsed before we finish the lambda. | |
| (cp_parser_statement): Handle contract_assert and diagnostics for | |
| misplaced pre and post conditions. | |
| (attr_chainon): Make this defensive against being passed a missing | |
| attribute list. | |
| (cp_parser_using_directive): Use attr_chainon instead of chainon. | |
| (contract_attribute_p): New. | |
| (cp_parser_init_declarator): Handle contract specifier names in | |
| attributes. | |
| (cp_parser_direct_declarator): Rename attrs to std_attrs for these. | |
| (cp_parser_type_specifier_seq): Allow for function contract specifiers. | |
| (cp_parser_class_specifier): Handle deferred parsing for function | |
| contract specifiers | |
| (cp_next_tokens_can_be_contract_attribute_p): True if this can be | |
| a function contract specifier (which appear in the same position | |
| as the attribute variant). | |
| (cp_next_tokens_can_be_std_attribute_p): Allow for contracts. | |
| (cp_nth_tokens_can_be_std_attribute_p): Likewise. | |
| (cp_next_tokens_can_be_attribute_p): Likewise. | |
| (cp_parser_late_contract_condition, cp_parser_late_contracts, | |
| cp_parser_contract_assert, cp_parser_function_contract_specifier, | |
| cp_parser_function_contract_specifier_seq): New. | |
| (cp_parser_skip_std_attribute_spec_seq): Handle contracts case. | |
| (cp_parser_skip_attributes_opt): Likewise. | |
| (cp_parser_save_default_args): Handle unparsed contract specs. | |
| * pt.cc (check_explicit_specialization): Handle removing contract | |
| specifiers from instances. | |
| (tsubst_contract, tsubst_contract_attribute, | |
| tsubst_contract_attributes): New. | |
| (tsubst_function_decl): Set contract specs. on substituted func. | |
| (tsubst_stmt): Handle contract_assert. | |
| (tsubst_expr): Allow for uses of postcondition uses of parm names. | |
| (regenerate_decl_from_template): Handle function contract specs. | |
| * semantics.cc (set_one_cleanup_loc): Add a location to | |
| postcondition specifiers. | |
| (finish_non_static_data_member): Diagnose bad uses of members | |
| in contract specifiers. | |
| (finish_this_expr): Diagnose invalid use of this in contract | |
| specifiers. | |
| (process_outer_var_ref): Allow use of params in contract specs. | |
| (finish_id_expression_1): Likewise. | |
| (apply_deduced_return_type): Maybe update postconditions when | |
| the return type is changed. | |
| * tree.cc (cp_tree_equal): Handle special cases when comparing | |
| contracts. | |
| 2026-01-28 Iain Sandoe <iain@sandoe.co.uk> | |
| * cp-tree.h (processing_contract_condition): New. | |
| * name-lookup.cc (cp_binding_level_descriptor): Add contract scope. | |
| (begin_scope): Likewise. | |
| * name-lookup.h (enum scope_kind): Add sk_contract. | |
| 2026-01-28 Iain Sandoe <iain@sandoe.co.uk> | |
| Nina Ranns <dinka.ranns@gmail.com> | |
| * contracts.cc: Remove all C++2a contracts code. | |
| * contracts.h: Likewise. | |
| * coroutines.cc (coro_build_actor_or_destroy_function): Remove | |
| unused contracts references. | |
| * cp-gimplify.cc (cp_genericize_r): Remove C++2a contracts | |
| implementation. | |
| * cp-objcp-common.cc (cp_handle_option): Likewise. | |
| * cp-tree.h: Remove C++2a contracts code. | |
| * decl.cc: Likewise. | |
| * decl2.cc: Likewise. | |
| * mangle.cc: Likewise. | |
| * module.cc: Likewise. | |
| * parser.cc: Likewise. | |
| * pt.cc: Likewise. | |
| * search.cc: Likewise. | |
| * semantics.cc: Likewise. | |
| * tree.cc: Likewise. | |
| * constexpr.cc: Likewise. | |
| 2026-01-27 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/122609 | |
| PR c++/101140 | |
| * cp-tree.h (visible_from_instantiation_origination): Declare. | |
| * module.cc: (orig_decl_for_instantiation): New function. | |
| (path_of_instantiation): Use it. | |
| (visible_from_instantiation_origination): New function. | |
| * name-lookup.cc (name_lookup::search_namespace_only): Also find | |
| names visible at the point the instantiation originated. | |
| 2026-01-27 Jakub Jelinek <jakub@redhat.com> | |
| * cp-gimplify.cc (immediate_escalating_function_p): Implement | |
| CWG3153 - Immediate-escalating defaulted comparison. Don't check | |
| special_memfn_p for sfk_none for DECL_DEFAULTED_FNs. | |
| * decl.cc (grokfndecl): Similarly for initialized == SD_DEFAULTED | |
| fns. | |
| 2026-01-27 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123404 | |
| * decl.cc (grokfndecl): Replace bool deletedp argument with | |
| int initialized. Test initialized == SD_DELETED instead of deletedp. | |
| Don't call check_consteval_only_fn for defaulted special member fns. | |
| (grokdeclarator): Pass initialized rather than | |
| initialized == SD_DELETED to grokfndecl. | |
| 2026-01-27 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123578 | |
| * tree.cc (cxx_printable_name_internal): Call lang_decl_name before | |
| finding the slot to cache it in and repeat search in the cache | |
| after the call. | |
| 2026-01-27 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123676 | |
| * pt.cc (tsubst_pack_expansion): Relax unsubsituted_packs | |
| assert to allow !processing_template_decl when args is | |
| NULL_TREE. | |
| 2026-01-27 Patrick Palka <ppalka@redhat.com> | |
| PR c++/122494 | |
| PR c++/123814 | |
| * constexpr.cc (cxx_eval_outermost_constant_expr): Clear | |
| uid_sensitive_constexpr_evaluation_value when mce_true. | |
| 2026-01-26 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (check_splice_expr): Check if process_outer_var_ref | |
| returned a capture, and give an error if so. | |
| 2026-01-26 Marek Polacek <polacek@redhat.com> | |
| * parser.cc (cp_parser_type_specifier): Adjust comment. | |
| (cp_parser_type_id_1): Simplify setting of type_alias_p. | |
| Use nullptr instead of NULL. | |
| 2026-01-26 Marek Polacek <polacek@redhat.com> | |
| PR c++/123620 | |
| * reflect.cc (can_extract_member_or_function_p): Also check | |
| fnptr_conv_p. | |
| (extract_member_or_function): Call perform_implicit_conversion. | |
| 2026-01-26 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/123663 | |
| PR c++/123354 | |
| * name-lookup.cc (struct local_state_t): New flag has_cfun. | |
| (local_state_t::save_and_clear): Set has_cfun, call | |
| push_function_context iff there's a cfun to save. | |
| (local_state_t::restore): call pop_function_context if | |
| has_cfun is set. | |
| (maybe_push_to_top_level): Delegte push_function_context to | |
| local_state_t::save_and_clear. | |
| (maybe_pop_from_top_level): Delegate pop_function_context to | |
| local_state_t::restore. | |
| 2026-01-25 Iain Sandoe <iain@sandoe.co.uk> | |
| * cp-gimplify.cc (cp_genericize_r): Do not mark STATEMENT_LISTs | |
| as visited. | |
| 2026-01-24 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123737 | |
| * parser.cc (cp_parser_expression): Don't handle CPP_EMBED just | |
| as the last byte in it if expression has or might have overloaded | |
| type. In that case call build_x_compound_expr for each byte | |
| in CPP_EMBED separately. | |
| 2026-01-24 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123667 | |
| * semantics.cc (finish_decltype_type): Allow a structured binding | |
| for ptds.saved to have DECL_HAS_VALUE_EXPR_P cleared, if it is | |
| not within current_function_decl, but in that case assert that | |
| lookup_decomp_type succeeded. | |
| 2026-01-24 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123684 | |
| * name-lookup.cc (handle_namespace_attrs): Only handle visibility and | |
| abi_tag attributes in the gnu namespace and deprecated attribute in | |
| the standard or gnu namespaces. | |
| 2026-01-23 Marek Polacek <polacek@redhat.com> | |
| * tree.cc (handle_annotation_attribute): Use build_stub_type. | |
| 2026-01-23 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123597 | |
| * parser.cc (substitute_in_tree_walker, substitute_in_tree): Don't | |
| consider BIND_EXPRs with !BIND_EXPR_VARS redundant if | |
| processing_template_decl. | |
| 2026-01-22 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (class_members_of): Update a comment to mention | |
| finish_member_declaration. | |
| 2026-01-22 Marek Polacek <polacek@redhat.com> | |
| Jason Merrill <jason@redhat.com> | |
| * reflect.cc (type_linkage_name): Rename to... | |
| (reflection_type_linkage_name): ...this. | |
| (eval_has_internal_linkage): Call reflection_type_linkage_name instead | |
| of type_linkage_name. | |
| (eval_has_module_linkage): Likewise. | |
| (eval_has_external_linkage): Likewise. | |
| (eval_has_c_language_linkage): Likewise. | |
| (eval_has_linkage): Likewise. | |
| 2026-01-22 Marek Polacek <polacek@redhat.com> | |
| * class.cc (user_provided_p): Return false for a deleted | |
| namespace-scope function. | |
| * reflect.cc (eval_is_user_provided): Don't check | |
| DECL_NAMESPACE_SCOPE_P or DECL_DELETED_FN. | |
| 2026-01-21 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (maybe_get_first_fn): Declare. | |
| * reflect.cc (maybe_get_reflection_fndecl): Remove. | |
| (eval_is_function): Call maybe_get_first_fn instead of | |
| maybe_get_reflection_fndecl. | |
| (eval_is_function_template): Likewise. | |
| (eval_is_class_member): Likewise. | |
| (eval_is_expected_access): Likewise. | |
| (eval_is_virtual): Likewise. | |
| (eval_is_pure_virtual): Likewise. | |
| (eval_is_override): Likewise. | |
| (eval_is_namespace_member): Likewise. | |
| (eval_is_static_member): Likewise. | |
| (eval_is_deleted): Likewise. | |
| (eval_is_defaulted): Likewise. | |
| (eval_is_user_provided): Likewise. | |
| (eval_is_user_declared): Likewise. | |
| (eval_is_explicit): Likewise. | |
| (eval_has_internal_linkage): Likewise. | |
| (eval_has_module_linkage): Likewise. | |
| (eval_has_external_linkage): Likewise. | |
| (eval_has_c_language_linkage): Likewise. | |
| (eval_has_linkage): Likewise. | |
| (eval_is_operator_function): Likewise. | |
| (eval_is_destructor): Likewise. | |
| (eval_is_conversion_function_template): Likewise. | |
| (eval_is_operator_function_template): Likewise. | |
| (eval_is_constructor_template): Likewise. | |
| (eval_operator_of): Likewise. | |
| (eval_is_noexcept): Likewise. | |
| (eval_has_parent): Likewise. | |
| (eval_parent_of): Likewise. | |
| (eval_parameters_of): Likewise. | |
| (eval_has_identifier): Likewise. | |
| (eval_identifier_of): Likewise. | |
| (eval_is_final): Likewise. | |
| (eval_is_accessible): Likewise. | |
| (compare_reflections): Likewise. | |
| (reflection_mangle_prefix): Likewise. | |
| * tree.cc (maybe_get_fns): Use NULL_TREE instead of NULL. | |
| (maybe_get_first_fn): New. | |
| 2026-01-21 Marek Polacek <polacek@redhat.com> | |
| * mangle.cc (is_std_substitution): Return false for any _DECL except | |
| TYPE_DECL and DECL_CLASS_TEMPLATE_P. Verify that we don't return false | |
| for something that used to yield true. Use NULL_TREE instead of NULL. | |
| 2026-01-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123692 | |
| * class.cc (build_base_path): Don't call resolves_to_fixed_type_p if | |
| uneval. | |
| 2026-01-21 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123677 | |
| * constexpr.cc (cxx_eval_store_expression): Only clear | |
| CONSTRUCTOR_ELTS (*valp) if *valp is CONSTRUCTOR. | |
| 2026-01-20 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123601 | |
| * tree.cc (build_min_non_dep_op_overload): Relax | |
| COMPARISON_CLASS_P assert to accept SPACESHIP_EXPR too. | |
| 2026-01-20 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (get_range_elts): Add comment for TARGET_EXPR stripping. | |
| (get_vector_of_info_elts): Likewise. | |
| 2026-01-20 Marek Polacek <polacek@redhat.com> | |
| * decl2.cc (min_vis_expr_r): For _DECLs with no linkage refer to the | |
| linkage of the containing entity that does have a name with linkage. | |
| 2026-01-19 Jakub Jelinek <jakub@redhat.com> | |
| * metafns.gperf: Add "" as second operand of 2 static_asserts. | |
| * metafns.h: Regenerate. | |
| 2026-01-18 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (get_reflection): Adjust the error message for the | |
| is_capture_proxy check. | |
| 2026-01-18 Marek Polacek <polacek@redhat.com> | |
| * cp-tree.h (direct_base_parent): Rename to... | |
| (direct_base_derived): ...this. | |
| * decl2.cc (min_vis_expr_r): Call direct_base_derived instead of | |
| direct_base_parent. | |
| * pt.cc (iterative_hash_template_arg): Likewise. | |
| * reflect.cc (direct_base_parent_binfo): Rename to... | |
| (direct_base_derived_binfo): ...this. | |
| (direct_base_parent): Rename to... | |
| (direct_base_derived): ...this. | |
| (eval_is_expected_access): Call direct_base_derived_binfo instead | |
| of direct_base_parent_binfo. | |
| (eval_source_location_of): Call direct_base_derived instead of | |
| direct_base_parent. | |
| (eval_parent_of): Likewise. | |
| (eval_offset_of): Likewise. | |
| (eval_display_string_of): Likewise. | |
| (eval_annotations_of): Call direct_base_derived_binfo instead | |
| of direct_base_parent_binfo. | |
| (eval_is_accessible): Call direct_base_derived instead of | |
| direct_base_parent. | |
| 2026-01-18 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (check_splice_expr): Use context_for_name_lookup. | |
| 2026-01-18 Simon Martin <simon@nasilyan.com> | |
| PR c++/122391 | |
| * tree.cc (decl_linkage): Return lk_none for TYPE_DECLs with | |
| erroneous type. | |
| 2026-01-17 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/123627 | |
| * class.cc (finish_struct): Maybe key function-local types. | |
| * module.cc (trees_out::get_merge_kind): Choose whether to use | |
| MK_local_type or MK_keyed for a local type based on if the | |
| immediate context's definition will be streamed. | |
| (trees_in::key_mergeable): Allow key decls on FUNCTION_DECL. | |
| (adjust_key_scope): New function. | |
| (maybe_key_decl): Handle key decls on FUNCTION_DECL; check that | |
| we only key a given decl to a context at most once. | |
| (get_keyed_decl_scope): Support non-lambda decls. | |
| 2026-01-16 Marek Polacek <polacek@redhat.com> | |
| * reflect.cc (eval_variable_of): Update comment. | |
| 2026-01-16 Jakub Jelinek <jakub@redhat.com> | |
| Peter Damianov <peter0x44@disroot.org> | |
| PR c/123437 | |
| * typeck.cc (cp_build_binary_op): Don't use RDIV_EXPR | |
| resultcode if both types are integral, _BitInt or | |
| newly VECTOR_TYPE of ENUMERAL_TYPE. | |
| 2026-01-15 Marek Polacek <polacek@redhat.com> | |
| Jakub Jelinek <jakub@redhat.com> | |
| PR c++/120775 | |
| PR c++/123081 | |
| PR c++/122634 | |
| * Make-lang.in: Add cp/reflect.o. Add a rule for cp/metafns.h. | |
| * config-lang.in: Add reflect.cc. | |
| * constexpr.cc (constexpr_global_ctx): Add consteval_block and | |
| metafns_called members. Initialize them. | |
| (cxx_constexpr_quiet_p): New. | |
| (cxx_constexpr_manifestly_const_eval): New. | |
| (cxx_constexpr_caller): New. | |
| (cxx_constexpr_consteval_block): New. | |
| (enum value_cat): Move into cp-tree.h. | |
| (cxx_eval_constant_expression): Move the declaration into cp-tree.h. | |
| No longer static. Handle REFLECT_EXPR. Handle conversion of | |
| a reflection to the meta::info type. | |
| (cxx_eval_cxa_builtin_fn): Override current_function_decl. | |
| (cxx_eval_builtin_function_call): Handle __builtin_is_string_literal. | |
| (is_std_allocator): Also check __new_allocator. | |
| (is_std_allocator_allocate): No longer static. | |
| (cxa_allocate_and_throw_exception): New. | |
| (cxx_eval_call_expression): Handle metafunctions. Maybe set | |
| metafns_called. | |
| (reduced_constant_expression_p): Handle REFLECT_EXPR. | |
| (cxx_eval_binary_expression): Use compare_reflections for comparing | |
| reflections. | |
| (find_immediate_fndecl): Don't walk REFLECT_EXPR_P. | |
| (cxx_eval_outermost_constant_expr): Set global_ctx.consteval_block. | |
| Detect consteval-only smuggling. | |
| (potential_constant_expression_1): Return true for REFLECT_EXPR | |
| and SPLICE_EXPR. | |
| * constraint.cc (diagnose_trait_expr): Add CPTK_IS_CONSTEVAL_ONLY case. | |
| * cp-gimplify.cc (immediate_escalating_function_p): No longer static. | |
| (promote_function_to_consteval): Likewise. | |
| (cp_gimplify_expr) <case CALL_EXPR>: Detect any surviving consteval-only | |
| expressions. | |
| <case CP_BUILT_IN_IS_STRING_LITERAL>: Handle. | |
| (wipe_consteval_only_r): New. | |
| (cp_fold_immediate_r): Detect invalid uses of consteval-only types. | |
| Clear consteval-only DECL_EXPRs. | |
| (cp_genericize_r): Wipe consteval-only vars from BIND_EXPR_VARS and | |
| BLOCK_VARS. | |
| * cp-objcp-common.cc (cp_common_init_ts): Mark META_TYPE, SPLICE_SCOPE, | |
| SPLICE_EXPR, and REFLECT_EXPR. | |
| * cp-trait.def (IS_CONSTEVAL_ONLY): New trait. | |
| * cp-tree.def (REFLECT_EXPR, META_TYPE, SPLICE_EXPR, SPLICE_SCOPE): New | |
| trees. | |
| * cp-tree.h (enum cp_tree_index): Add CPTI_ANNOTATION_IDENTIFIER, | |
| CPTI_STD_META, and CPTI_META_INFO_TYPE. | |
| (std_meta_node): Define. | |
| (meta_info_type_node): Define. | |
| (annotation_identifier): Define. | |
| (REFLECTION_TYPE_P): Define. | |
| (REFLECT_EXPR_P): Define. | |
| (REFLECT_EXPR_HANDLE): Define. | |
| (enum reflect_kind): New. | |
| (REFLECT_EXPR_KIND): Define. | |
| (SET_REFLECT_EXPR_KIND): Define. | |
| (SPLICE_EXPR_EXPRESSION_P): Define. | |
| (SET_SPLICE_EXPR_EXPRESSION_P): Define. | |
| (SPLICE_EXPR_MEMBER_ACCESS_P): Define. | |
| (SET_SPLICE_EXPR_MEMBER_ACCESS_P): Define. | |
| (SPLICE_EXPR_ADDRESS_P): Define. | |
| (SET_SPLICE_EXPR_ADDRESS_P): Define. | |
| (SPLICE_SCOPE_EXPR): Define. | |
| (SPLICE_SCOPE_TYPE_P): Define. | |
| (WILDCARD_TYPE_P): Include SPLICE_SCOPE. | |
| (COMPONENT_REF_SPLICE_P): Define. | |
| (SCALAR_TYPE_P): Include REFLECTION_TYPE_P. | |
| (ENUM_BEING_DEFINED_P): Define. | |
| (OLD_PARM_DECL_P): Define. | |
| (MULTIPLE_NAMES_PARM_P): Define. | |
| (cp_preserve_using_decl): Declare. | |
| (DEF_OPERATOR, DEF_ASSN_OPERATOR): Include META. | |
| (struct ovl_op_info_t): Add meta_name member. | |
| (enum cp_built_in_function): Add CP_BUILT_IN_IS_STRING_LITERAL. | |
| (build_stub_type): Declare. | |
| (current_function_decl_without_access_scope): Declare. | |
| (dependent_namespace_p): Declare. | |
| (convert_reflect_constant_arg): Declare. | |
| (finish_base_specifier): Adjust declaration. | |
| (parsing_lambda_declarator): Declare. | |
| (fold_builtin_is_string_literal): Declare. | |
| (annotation_p): Declare. | |
| (finish_class_member_access_expr): Adjust declaration. | |
| (immediate_escalating_function_p): Declare. | |
| (promote_function_to_consteval): Declare. | |
| (is_std_allocator_allocate): Declare. | |
| (cxa_allocate_and_throw_exception): Declare. | |
| (enum value_cat): Define. | |
| (cxx_eval_constant_expression): Declare. | |
| (cxx_constexpr_quiet_p): Declare. | |
| (cxx_constexpr_manifestly_const_eval): Declare. | |
| (cxx_constexpr_caller): Declare. | |
| (cxx_constexpr_consteval_block): Declare. | |
| (init_reflection): Declare. | |
| (metafunction_p): Declare. | |
| (direct_base_parent): Declare. | |
| (process_metafunction): Declare. | |
| (get_reflection): Declare. | |
| (get_null_reflection): Declare. | |
| (splice): Declare. | |
| (check_out_of_consteval_use): Declare. | |
| (consteval_only_p): Declare. | |
| (compare_reflections): Declare. | |
| (valid_splice_type_p): Declare. | |
| (valid_splice_scope_p): Declare. | |
| (check_splice_expr): Declare. | |
| (make_splice_scope): Declare. | |
| (dependent_splice_p): Declare. | |
| (reflection_mangle_prefix): Declare. | |
| (check_consteval_only_fn): Declare. | |
| * cvt.cc (convert_to_void): Call check_out_of_consteval_use. | |
| * cxx-pretty-print.cc (cxx_pretty_printer::unary_expression): New | |
| REFLECT_EXPR case. | |
| (cxx_pretty_printer::expression): Likewise. | |
| (cxx_pretty_printer::simple_type_specifier): New META_TYPE case. | |
| (cxx_pretty_printer::type_id): Likewise. | |
| * decl.cc (duplicate_decls): Merge parameter names for Reflection. | |
| Maybe set OLD_PARM_DECL_P. | |
| (initialize_predefined_identifiers): Add "annotation ". | |
| (cxx_init_decl_processing): Add __builtin_is_string_literal. Call | |
| init_reflection. | |
| (maybe_commonize_var): Do nothing for consteval_only_p. | |
| (check_initializer): Default-initialize std::meta::info. | |
| (make_rtl_for_nonlocal_decl): For consteval_only_p vars, set | |
| DECL_EXTERNAL and return early. | |
| (cp_finish_decl): Call check_out_of_consteval_use. Don't go | |
| creating a varpool node for consteval_only_p. | |
| (get_tuple_size): Check the instantiation instead of the type. | |
| (grokfndecl): Call check_consteval_only_fn. | |
| (xref_basetypes): Stitch annotations onto BINFO_BASE_ACCESSES. | |
| (finish_enum_value_list): Clear ENUM_BEING_DEFINED_P. | |
| * decl2.cc (is_late_template_attribute): Handle all annotations as | |
| late. | |
| (cp_check_const_attributes): Don't handle annotations here. | |
| (maybe_make_one_only): Do nothing for consteval_only_p. | |
| (mark_needed): Likewise. | |
| (min_vis_expr_r): Handle reflections. | |
| (prune_vars_needing_no_initialization): Skip consteval_only_p. | |
| (no_linkage_error): Return early for metafunctions. | |
| (c_parse_final_cleanups): Don't write out consteval_only_p vars. Avoid | |
| complaining about metafunctions. | |
| * error.cc (dump_type): New cases for CONST_DECL, META_TYPE, and | |
| SPLICE_SCOPE. | |
| (dump_type_prefix): New cases for META_TYPE and SPLICE_SCOPE. | |
| (dump_type_suffix): Likewise. | |
| (dump_decl): Dump SPLICE_EXPR. | |
| (dump_expr): Dump REFLECT_EXPR and SPLICE_EXPR. | |
| * init.cc (build_zero_init_1): Build a null reflection value. | |
| (perform_member_init): Call check_out_of_consteval_use. | |
| * lex.cc (DEF_OPERATOR, OPERATOR_TRANSITION): Update defines. | |
| * mangle.cc (write_type): Mangle META_TYPE. | |
| (write_expression): Handle REFLECT_EXPR. | |
| (write_reflection): New. | |
| (write_template_arg_literal): New REFLECT_EXPR case. | |
| (write_template_arg): Handle REFLECT_EXPR. | |
| * method.cc (build_stub_type): No longer static. | |
| * module.cc (trees_out::type_node): Handle META_TYPE. | |
| (trees_in::tree_node): Likewise. | |
| * name-lookup.cc (name_lookup::adl_type): std::meta is an associated | |
| namespace of std::meta::info. | |
| (strip_using_decl): Don't strip when cp_preserve_using_decl. | |
| (handle_namespace_attrs): Handle annotations. | |
| (do_namespace_alias): Handle SPLICE_EXPR. | |
| (lookup_qualified_name): When cp_preserve_using_decl, don't do | |
| OVL_FUNCTION. | |
| (finish_using_directive): Detect annotations on using directive. | |
| * operators.def: Update for META_NAME. | |
| * parser.cc: New cp_preserve_using_decl global. | |
| (enum required_token): Add RT_CLOSE_SPLICE. | |
| (get_required_cpp_ttype): Return CPP_CLOSE_SPLICE for RT_CLOSE_SPLICE. | |
| (cp_parser_next_tokens_start_splice_type_spec_p): New. | |
| (cp_parser_next_tokens_can_start_splice_scope_spec_p): New. | |
| (cp_parser_splice_specifier): New. | |
| (cp_parser_splice_type_specifier): New. | |
| (cp_parser_splice_expression): New. | |
| (cp_parser_splice_scope_specifier): New. | |
| (cp_parser_splice_spec_is_nns_p): New. | |
| (cp_parser_nth_token_starts_splice_without_nns_p): New. | |
| (cp_parser_primary_expression): Handle CPP_OPEN_SPLICE. Give an | |
| error for ^^ outside reflection. | |
| (cp_parser_unqualified_id): Allow r.~typename [:R:]. | |
| (cp_parser_nested_name_specifier_opt): Cope with splice-scope-specifier. | |
| (cp_parser_qualifying_entity): Parse splice-scope-specifier. | |
| (cp_parser_postfix_expression): Deal with [: :] after a typename. | |
| (cp_parser_postfix_dot_deref_expression): Parse & handle splices | |
| in a class member access. Pass splice_p to | |
| finish_class_member_access_expr. | |
| (cp_parser_reflection_name): New. | |
| (cp_parser_reflect_expression): New. | |
| (cp_parser_unary_expression): Parse reflect-expression. | |
| (cp_parser_declaration): Parse splice-scope-specifier. | |
| (cp_parser_decomposition_declaration): Detect annotations on structured | |
| bindings. | |
| (cp_parser_decltype_expr): Parse splice-expression. | |
| (cp_parser_template_id): New parsed_templ argument. If it's nonnull, | |
| don't parse the template name. Turn an assert into a condition. | |
| (cp_parser_type_specifier): Handle typename [: :]. | |
| (cp_parser_simple_type_specifier): Parse splice-type-specifier. | |
| (cp_parser_enum_specifier): Set ENUM_BEING_DEFINED_P. | |
| (cp_parser_namespace_alias_definition): Parse splice-specifier. | |
| (cp_parser_using_directive): Likewise. | |
| (cp_parser_type_id_1): New bool * parameter to distinguish between | |
| types and type aliases. Set it. | |
| (cp_parser_type_id): Adjust the call to cp_parser_type_id_1. | |
| (cp_parser_template_type_arg): Likewise. | |
| (cp_parser_trailing_type_id): Likewise. | |
| (cp_parser_base_specifier): Handle annotations. Maybe give an error | |
| for splice-scope-specifier. Parse splice-type-specifier. Pass | |
| annotations to finish_base_specifier. | |
| (cp_parser_annotation): New. | |
| (cp_parser_std_attribute_list): Detect mixing annotations and attributes | |
| in the same list. | |
| (cp_parser_annotation_list): New. | |
| (cp_parser_std_attribute_spec): Parse annotations. | |
| (cp_parser_skip_balanced_tokens): Also handle CPP_OPEN_SPLICE | |
| and CPP_CLOSE_SPLICE. | |
| (cp_parser_type_requirement): Parse splice-type-specifier. | |
| (cp_parser_lookup_name): Also consider dependent namespaces. Don't | |
| call check_accessibility_of_qualified_id for USING_DECLs. | |
| (cp_parser_required_error): Handle RT_CLOSE_SPLICE. | |
| * pt.cc (current_function_decl_without_access_scope): New. | |
| (verify_unstripped_args_1): REFLECT_EXPR_P is OK. | |
| (iterative_hash_template_arg): Handle REFLECT_EXPR. | |
| (convert_nontype_argument): Maybe give an error for REFLECTION_TYPE_P. | |
| (for_each_template_parm_r): Handle SPLICE_SCOPE. | |
| (instantiate_class_template): Handle annotations. | |
| (tsubst_pack_index): Make static. | |
| (tsubst_decl): Handle NAMESPACE_DECL. | |
| (tsubst_splice_scope): New. | |
| (tsubst_splice_expr): New. | |
| (tsubst): Don't return early for NAMESPACE_DECL. New META_TYPE case. | |
| Handle a splice-specifier that expanded into a NAMESPACE_DECL. Handle | |
| SPLICE_SCOPE, SPLICE_EXPR, and TEMPLATE_ID_EXPR. | |
| (tsubst_scope): Also accept NAMESPACE_DECL. | |
| (tsubst_qualified_id): Check dependent_namespace_p. | |
| (tsubst_lambda_expr): Set LAMBDA_EXPR_CONSTEVAL_BLOCK_P. | |
| (tsubst_expr): Allow dependent_splice_p in an assert. Check | |
| COMPONENT_REF_SPLICE_P and pass it to finish_class_member_access_expr. | |
| <case NAMESPACE_DECL>: Remove. | |
| New REFLECT_EXPR and SPLICE_EXPR cases. | |
| (unify): Handle META_TYPE. | |
| (instantiate_body): Call check_consteval_only_fn. | |
| (tsubst_enum): Set ENUM_BEING_DEFINED_P. | |
| (dependent_type_p_r): A splice-scope-specifier is dependent. | |
| (dependent_namespace_p): New. | |
| (value_dependent_expression_p): Handle REFLECT_EXPR. Also handle | |
| [meta.reflection.access.context]/8. | |
| (type_dependent_expression_p): REFLECT_EXPR_P is not type-dependent. | |
| (convert_reflect_constant_arg): New. | |
| * search.cc (check_final_overrider): Adjust for CWG 3117. | |
| * semantics.cc (finish_base_specifier): Handle annotations. | |
| (parsing_lambda_declarator): No longer static. | |
| (finish_id_expression_1): Check dependent_namespace_p. | |
| (fold_builtin_is_string_literal): New. | |
| (trait_expr_value): Handle CPTK_IS_CONSTEVAL_ONLY. | |
| (finish_trait_expr): Likewise. | |
| * tree.cc (handle_annotation_attribute): New. | |
| (builtin_valid_in_constant_expr_p): Return true for | |
| CP_BUILT_IN_IS_STRING_LITERAL. | |
| (cp_tree_equal): Handle comparing REFLECT_EXPRs. | |
| (internal_attributes): Add "annotation ". | |
| (annotation_p): New. | |
| * typeck.cc (finish_class_member_access_expr): New splice_p argument. | |
| Handle dependent splices. Implement splicing a base class subobject. | |
| Handle class member access using a splice-expression. | |
| (cp_build_binary_op): Handle comparing std::meta::infos. | |
| (check_return_expr): Call check_out_of_consteval_use. | |
| * metafns.gperf: New file. | |
| * metafns.h: New file. | |
| * reflect.cc: New file. | |
| 2026-01-14 David Malcolm <dmalcolm@redhat.com> | |
| * call.cc (get_fndecl_argument_location): Use DECL_SOURCE_LOCATION | |
| for "this". | |
| * cp-tree.h (class candidate_context): New. | |
| (print_candidates): Add optional candidate_context param. | |
| * decl2.cc: Include "gcc-rich-location.h" and | |
| "tree-pretty-print-markup.h". | |
| (struct fndecl_signature): New. | |
| (class parm_rich_location): New. | |
| (class fndecl_comparison): New. | |
| (class decl_mismatch_context): New. | |
| (check_classfn): For the "no declaration matches" case, pass an | |
| instance of a custom candidate_context subclass to | |
| print_candidates, using fndecl_comparison to report on close | |
| matches. | |
| * pt.cc (print_candidates): Add optional candidate_context param. | |
| Use it if provided to potentially emit per-candidate notes. | |
| 2026-01-14 David Malcolm <dmalcolm@redhat.com> | |
| * call.cc (print_z_candidates): Move inform_n call into a new | |
| inform_num_candidates function. | |
| * class.cc (check_methods): Pass location to call to | |
| print_candidates. | |
| (resolve_address_of_overloaded_function): Likewise. | |
| * cp-tree.h (print_candidates): Add location_t param. | |
| (inform_num_candidates): New decl. | |
| * decl.cc (make_typename_type): Pass location to call to | |
| print_candidates. | |
| (reshape_init_class): Likewise. | |
| (lookup_and_check_tag): Likewise. | |
| * decl2.cc (check_classfn): Likewise. | |
| * error.cc (qualified_name_lookup_error): Likewise. | |
| * init.cc (build_new_1): Likewise. | |
| * name-lookup.cc (lookup_using_decl): Likewise. | |
| (set_decl_namespace): Likewise. | |
| (push_namespace): Likewise. | |
| * parser.cc (cp_parser_nested_name_specifier_opt): Likewise. | |
| (cp_parser_lookup_name): Likewise. | |
| * pt.cc (print_candidates_1): Drop, converting the looping part | |
| into... | |
| (flatten_candidates): ...this new function. | |
| (inform_num_candidates): New function. | |
| (print_candidates): Use flatten_candidates to build an auto_vec | |
| of candidates, and use this to print them here, rather than in | |
| print_candidates_1. Eliminate the dynamic allocation of spaces | |
| for a prefix in favor of printing "candidate %i" when there is | |
| more than one candidate. Add "error_loc" param and pass it to | |
| inform_num_candidates to show a heading, and add nesting levels | |
| for it and for the candidate notes. | |
| (determine_specialization): Pass location to calls to | |
| print_candidates. | |
| * search.cc (lookup_member): Likewise. | |
| * semantics.cc (finish_id_expression_1): Likewise. | |
| 2026-01-14 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123551 | |
| * constexpr.cc (potential_constant_expression_1) <case GOTO_EXPR>: | |
| Only test DECL_ARTIFICIAL on LABEL_DECLs. | |
| 2026-01-13 Nathaniel Shead <nathanieloshead@gmail.com> | |
| * coroutines.cc (create_coroutine_info_table): New function. | |
| (get_or_insert_coroutine_info): Mark static. | |
| (ensure_coro_initialized): Likewise; use | |
| create_coroutine_info_table. | |
| (coro_promise_type_found_p): Set DECL_CONTEXT for proxies. | |
| (coro_set_ramp_function): New function. | |
| (coro_set_transform_functions): New function. | |
| (coro_build_actor_or_destroy_function): Use | |
| coro_set_ramp_function, mark as DECL_COROUTINE_P. | |
| * cp-tree.h (coro_set_transform_functions): Declare. | |
| (coro_set_ramp_function): Declare. | |
| * module.cc (struct merge_key): New field coro_disc. | |
| (dumper::impl::nested_name): Distinguish coroutine transform | |
| functions. | |
| (get_coroutine_discriminator): New function. | |
| (trees_out::key_mergeable): Stream coroutine discriminator. | |
| (check_mergeable_decl): Adjust comment, check for matching | |
| coroutine discriminator. | |
| (trees_in::key_mergeable): Read coroutine discriminator. | |
| (has_definition): Override for coroutine transform functions. | |
| (trees_out::write_function_def): Stream linked ramp, actor, and | |
| destroy functions for coroutines. | |
| (trees_in::read_function_def): Read them. | |
| (module_state::read_cluster): Set cfun->coroutine_component. | |
| 2026-01-13 Nathaniel Shead <nathanieloshead@gmail.com> | |
| * module.cc (trees_out::lang_decl_bools): Update list of flags. | |
| (trees_in::lang_decl_bools): Likewise. | |
| 2026-01-12 Patrick Palka <ppalka@redhat.com> | |
| PR c++/123189 | |
| * name-lookup.cc (binding_to_template_parms_of_scope_p): | |
| Gracefully handle TEMPLATE_INFO whose TI_TEMPLATE is a TREE_LIST. | |
| * pt.cc (maybe_begin_member_template_processing): For a friend | |
| template specialization consider its class context instead. | |
| 2026-01-12 Jason Merrill <jason@redhat.com> | |
| PR libstdc++/123326 | |
| * cp-tree.h (DECL_NONGNU_INLINE_P): New. | |
| * decl.cc (duplicate_decls, start_decl): Check it. | |
| * decl2.cc (vague_linkage_p, import_export_class): Likewise. | |
| (vtables_uniquely_emitted, import_export_decl): Likewise. | |
| * class.cc (determine_key_method): Check it instead of | |
| lookup_attribute. | |
| 2026-01-12 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/115163 | |
| * call.cc (implicit_conversion_error): Add flags argument, call | |
| maybe_show_nonconverting_candidate. | |
| (build_converted_constant_expr_internal): Pass flags to | |
| implicit_conversion_error. | |
| (perform_implicit_conversion_flags): Likewise. | |
| * cvt.cc (ocp_convert): Call maybe_show_nonconverting_candidate | |
| on conversion error. | |
| 2026-01-12 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123526 | |
| * method.cc: Include attribs.h. | |
| (implicitly_declare_fn): Remove gnu::gnu_inline attribute. | |
| 2026-01-09 Jakub Jelinek <jakub@redhat.com> | |
| * gen-cxxapi-file.py: Update copyright year. Separate | |
| parts of Copyright word with {:s} so that it doesn't get matched | |
| by update-copyright.py. | |
| 2026-01-09 Nathaniel Shead <nathanieloshead@gmail.com> | |
| PR c++/123393 | |
| * name-lookup.cc (make_namespace_finish): Pass from_import to | |
| add_using_namespace. | |
| 2026-01-07 Tobias Burnus <tburnus@baylibre.com> | |
| * parser.cc (OMP_GROUPPRIVATE_CLAUSE_MASK, | |
| cp_parser_omp_groupprivate): New. | |
| (cp_parser_pragma): Call it. | |
| (cp_maybe_parse_omp_decl): Uncomment PRAGMA_OMP_GROUPPRIVATE | |
| check. | |
| 2026-01-03 Jakub Jelinek <jakub@redhat.com> | |
| PR libstdc++/123326 | |
| * class.cc (determine_key_method): Allow virtual inline/constexpr | |
| non-pure virtual methods with gnu::gnu_inline attribute to be key | |
| methods. | |
| 2026-01-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123347 | |
| * constexpr.cc (potential_constant_expression_1): Check for | |
| CLASS_TYPE_P before using TYPE_POLYMORPHIC_P on TREE_TYPE (e). | |
| 2026-01-03 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123331 | |
| * constexpr.cc (cxx_eval_vec_init_1): Don't build INIT_EXPR if | |
| eltinit is erroneous. | |
| 2026-01-02 Jakub Jelinek <jakub@redhat.com> | |
| PR c++/123277 | |
| * decl2.cc (is_late_template_attribute): Return false also for | |
| [[maybe_unused]] attribute on TYPE_DECLs to dependent types. | |
| Copyright (C) 2026 Free Software Foundation, Inc. | |
| Copying and distribution of this file, with or without modification, | |
| are permitted in any medium without royalty provided the copyright | |
| notice and this notice are preserved. |