blob: ece4b4bfefbe1395c0088b2bd5d4ceeaf1e62f69 [file]
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.