aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog110
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/c/ChangeLog11
-rw-r--r--gcc/c/c-typeck.cc20
-rw-r--r--gcc/cobol/ChangeLog179
-rw-r--r--gcc/config/i386/i386.cc82
-rw-r--r--gcc/cp/ChangeLog19
-rw-r--r--gcc/simplify-rtx.cc4
-rw-r--r--gcc/testsuite/ChangeLog56
-rw-r--r--gcc/testsuite/gcc.dg/cpp/embed-18.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr120057-1.c18
-rw-r--r--gcc/testsuite/gcc.dg/pr120057-2.c11
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr120059-1.c17
13 files changed, 528 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 137e388..afa194e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,113 @@
+2025-05-02 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR rtl-optimization/120059
+ * simplify-rtx.cc (simplify_with_subreg_not): Check the result
+ of simplify_gen_subreg.
+
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+ Andrew MacLeod <amacleod@redhat.com>
+
+ PR c/117023
+ * gimple-range-infer.cc (gimple_infer_range::gimple_infer_range):
+ For nonnull_if_nonzero attribute check also arg2 range if it doesn't
+ include zero and in that case call add_nonzero too.
+
+2025-05-02 Jeff Law <jlaw@ventanamicro.com>
+
+ Revert:
+ 2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com>
+
+ * config/mips/mips.cc (mips_option_override): Error out for
+ -mmicromips -mmsa.
+
+2025-05-02 Jan Hubicka <hubicka@ucw.cz>
+
+ PR target/119900
+ * config/i386/i386.cc (ix86_can_change_mode_class): Add TODO
+ comment.
+ (ix86_rtx_costs): Make VEC_SELECT equivalent to SUBREG cost 1.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/120012
+ * doc/invoke.texi: Document C++20 aggregate fix.
+ * common.opt: Likewise.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/60336
+ * config/i386/i386.cc (ix86_warn_parameter_passing_abi):
+ If no target, check the current TU.
+
+2025-05-02 Richard Biener <rguenther@suse.de>
+
+ * config/arc/arc.cc (TARGET_LRA_P): Remove define.
+ * config/gcn/gcn.cc (TARGET_LRA_P): Likewise.
+
+2025-05-02 Filip Kastl <fkastl@suse.cz>
+
+ PR middle-end/117091
+ * tree-switch-conversion.cc (switch_decision_tree::analyze_switch_statement):
+ Remove warning about using different algorithms.
+
+2025-05-02 Filip Kastl <fkastl@suse.cz>
+
+ * tree-switch-conversion.cc (bit_test_cluster::find_bit_tests):
+ Modify the dynamic programming algorithm to take is_beneficial()
+ into account earlier. To do this efficiently, copy some logic
+ from is_beneficial() here. Add detailed comments about how the
+ DP algorithm works.
+ (bit_test_cluster::can_be_handled): Check that the cluster range
+ is >, not >= BITS_IN_WORD. Remove the
+ "vec<cluster *> &, unsigned, unsigned" overloaded variant since
+ we no longer need it.
+ (bit_test_cluster::is_beneficial): Add a comment that this
+ function is closely tied to m_max_case_bit_tests. Remove the
+ "vec<cluster *> &, unsigned, unsigned" overloaded variant since
+ we no longer need it.
+ * tree-switch-conversion.h: Remove the vec overloaded variants
+ of bit_test_cluster::is_beneficial and
+ bit_test_cluster::can_be_handled.
+
+2025-05-02 Filip Kastl <fkastl@suse.cz>
+
+ PR middle-end/117091
+ * tree-switch-conversion.cc (bit_test_cluster::find_bit_tests_fast):
+ Remove function.
+ (bit_test_cluster::find_bit_tests_slow): Remove function.
+ (bit_test_cluster::find_bit_tests): We don't need to decide
+ between slow and fast so just put the modified (no longer) slow
+ algorithm here.
+
+2025-05-02 Jennifer Schmitz <jschmitz@nvidia.com>
+
+ * config/aarch64/aarch64-sve.md (vec_extract<mode><Vel>):
+ Prevent the emission of pfalse+lastb for VLS.
+
+2025-05-02 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/118617
+ * tree-vect-generic.cc (expand_vector_conversion): Have 2 elements
+ as internal storage for converts.
+ * tree-vect-stmts.cc (vectorizable_conversion): Likewise.
+
+2025-05-02 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/118659
+ * tree-ssanames.cc (get_known_nonzero_bits_1): Use
+ wi::bit_and_not instead of `a & ~b`.
+
+2025-05-02 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/118090
+ * ccmp.cc (get_compare_parts): Remove the up argument.
+ (expand_ccmp_next): Update call to get_compare_parts.
+ (expand_ccmp_expr_1): Likewise.
+
+2025-05-02 Richard Biener <rguenther@suse.de>
+
+ * common.opt.urls: Regenerate.
+
2025-05-01 Jason Merrill <jason@redhat.com>
* doc/invoke.texi: Add -fabi-version detail.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 8632515..2d83869 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250502
+20250503
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 08e747e..b7cdd11 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,14 @@
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/120057
+ * c-typeck.cc (check_constexpr_init): Handle RAW_DATA_CST.
+
+2025-05-02 Florian Weimer <fweimer@redhat.com>
+
+ PR c/120055
+ * c-typeck.cc (convert_arguments): Check if fundecl is null
+ before checking for builtin function declaration.
+
2025-05-01 Christopher Bazley <chris.bazley@arm.com>
PR c/119317
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 05fb129..0e1f842 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -9143,8 +9143,24 @@ check_constexpr_init (location_t loc, tree type, tree init,
/* The initializer must be an integer constant expression,
representable in the target type. */
if (!int_const_expr)
- error_at (loc, "%<constexpr%> integer initializer is not an "
- "integer constant expression");
+ {
+ if (TREE_CODE (init) == RAW_DATA_CST
+ && TYPE_PRECISION (type) == CHAR_BIT)
+ {
+ if (!TYPE_UNSIGNED (type))
+ for (unsigned int i = 0;
+ i < (unsigned) RAW_DATA_LENGTH (init); ++i)
+ if (RAW_DATA_SCHAR_ELT (init, i) < 0)
+ {
+ error_at (loc, "%<constexpr%> initializer not "
+ "representable in type of object");
+ break;
+ }
+ }
+ else
+ error_at (loc, "%<constexpr%> integer initializer is not an "
+ "integer constant expression");
+ }
else if (!int_fits_type_p (init, type))
error_at (loc, "%<constexpr%> initializer not representable in "
"type of object");
diff --git a/gcc/cobol/ChangeLog b/gcc/cobol/ChangeLog
index d7d8596..7cd2ae0 100644
--- a/gcc/cobol/ChangeLog
+++ b/gcc/cobol/ChangeLog
@@ -1,3 +1,182 @@
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR cobol/119364
+ * structs.h (cbl_enabled_exception_type_node): New variable
+ declaration.
+ * structs.cc (cbl_enabled_exception_type_node): New variable.
+ (create_cbl_enabled_exception_t): New function.
+ (create_our_type_nodes): Initialize cbl_enabled_exception_type_node
+ using it.
+ * genapi.cc (stash_exceptions): Don't compare padding bits to
+ determine if the exceptions are the same as last time. Use
+ cbl_enabled_exception_type_node for target size and field offsets
+ and native_encode_expr to write each field into byte sequence.
+
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR cobol/119364
+ * util.cc (is_numeric_edited): Use HOST_SIZE_T_PRINT_UNSIGNED
+ instead of "%zu" and cast corresponding argument to fmt_size_t.
+ (normalize_picture): Use GCC_PRISZ instead of "z" and pass address
+ of fmt_size_t var to sscanf and copy afterwards.
+ (cbl_refer_t::str): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" and cast corresponding argument
+ to fmt_size_t.
+ (struct move_corresponding_field): Likewise.
+ (valid_move): Likewise.
+ (ambiguous_reference): Likewise.
+ (parent_names): Likewise.
+ (find_corresponding::find_corresponding): Likewise.
+ (corresponding_fields): Likewise.
+ (unique_stack::push): Likewise.
+ (cobol_filename): Likewise.
+ * lexio.cc: Include config.h first.
+ (recognize_replacements): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" and cast corresponding argument
+ to fmt_size_t.
+ (check_source_format_directive): Likewise.
+ (parse_replacing_pair): Use size_t(0) instead of 0UL in span_t
+ construction.
+ (parse_replace_pairs): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (parse_copy_directive): Likewise.
+ (parse_replace_last_off): Likewise.
+ (parse_replace_text): Likewise.
+ (bytespan_t::append): Likewise.
+ (cdftext::map_file): Likewise.
+ (cdftext::process_file): Likewise.
+ * symfind.cc (dump_symbol_map2): Likewise.
+ (dump_symbol_map_value): Likewise.
+ (build_symbol_map): Likewise.
+ (is_name::dump_key): Likewise.
+ (symbol_match2): Likewise.
+ (symbol_find): Likewise.
+ (symbol_find_of): Likewise.
+ * cdf.y: Likewise.
+ * symbols.cc: Include config.h first.
+ (cbl_field_t::set_attr): Return uint64_t rather than size_t
+ and replace size_t(attr) with uint64_t(attr).
+ (cbl_field_t::clear_attr): Likewise.
+ (symbol_field_capacity): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (symbol_find_odo_debug): Likewise.
+ (symbols_dump): Likewise.
+ (calculate_capacity): Likewise.
+ (field_str): Likewise.
+ (symbols_update): Likewise.
+ (symbol_field_forward): Likewise.
+ (numeric_group_attrs): Return uint64_t rather than size_t and
+ change inherit variable to from size_t to uint64_t.
+ (new_literal_add): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (temporaries_t::dump): Likewise.
+ (cbl_label_t::str): Likewise.
+ (symbol_label_add): Likewise.
+ (symbol_program_add): Likewise.
+ (symbol_forward_names): Likewise.
+ (symbol_forward_to): Likewise.
+ (cbl_file_key_t::deforward): Likewise.
+ (cbl_file_key_t::str): Likewise.
+ * gengen.cc (show_type): Use PRId64 instead of "ld".
+ (gg_unique_in_function): Use HOST_SIZE_T_PRINT_DEC instead of
+ %ld and cast corresponding argument to fmt_size_t.
+ * scan.l: Add %top section with #include "config.h".
+ * genmath.cc (parser_add): Use HOST_SIZE_T_PRINT_DEC instead of
+ %ld and cast corresponding argument to fmt_size_t.
+ (parser_subtract): Likewise.
+ * parse.y: Include "config.h" before <fstream>. Use
+ HOST_SIZE_T_PRINT_UNSIGNED instead of "%zu" and cast corresponding
+ argument to fmt_size_t. Change type of sign_attrs, group_sign and
+ type_implies from size_t to uint64_t.
+ (perform_t::ec_labels_t::new_label): Use HOST_SIZE_T_PRINT_UNSIGNED
+ instead of "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC
+ instead of "%zd" and cast corresponding argument to fmt_size_t.
+ (stringify_src_t::dump): Likewise.
+ (lang_check_failed): Likewise.
+ (numstr2i): Use GCC_PRISZ instead of "z" and pass address of temporary
+ with fmt_size_t type to sscanf and then copy it over.
+ (initialize_statement): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (dump_inspect_oper): Likewise.
+ (new_literal): Likewise.
+ (literal_subscripts_valid): Likewise.
+ (eval_subject_t::label): Likewise.
+ * genapi.cc (level_88_helper): Likewise.
+ (parser_call_targets_dump): Likewise.
+ (combined_name): Use HOST_SIZE_T_PRINT_DEC instead of "%ld"
+ and cast corresponding argument to fmt_size_t.
+ (section_label): Likewise.
+ (paragraph_label): Likewise.
+ (leave_procedure): Likewise.
+ (parser_perform): Likewise.
+ (parser_perform_times): Likewise.
+ (internal_perform_through): Likewise.
+ (internal_perform_through_times): Likewise.
+ (parser_enter_program): Likewise.
+ (parser_init_list_size): Likewise.
+ (parser_init_list): Likewise.
+ (psa_FldLiteralN): Likewise.
+ (psa_FldBlob): Likewise.
+ (parser_assign): Likewise.
+ (parser_free): Pass p->field->name to dbgmsg.
+ (parser_division): Use HOST_SIZE_T_PRINT_DEC instead of "%ld"
+ and cast corresponding argument to fmt_size_t.
+ (perform_outofline_before_until): Likewise.
+ (perform_outofline_after_until): Likewise.
+ (perform_outofline_testafter_varying): Likewise.
+ (perform_outofline_before_varying): Likewise.
+ (perform_inline_testbefore_varying): Likewise.
+ (parser_inspect): Change n_operations parameter type from
+ unsigned long to size_t.
+ (parser_intrinsic_callv): Use HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (parser_bitop): Use HOST_SIZE_T_PRINT_HEX_PURE instead of
+ "%lx" and cast corresponding argument to fmt_size_t.
+ (parser_bitwise_op): Likewise.
+ (parser_program_hierarchy): Use HOST_SIZE_T_PRINT_DEC instead of "%ld"
+ and cast corresponding argument to fmt_size_t.
+ (parser_set_handled): Use HOST_SIZE_T_PRINT_HEX_PURE instead of
+ "%lx" and cast corresponding argument to fmt_size_t.
+ (parser_set_numeric): Use HOST_SIZE_T_PRINT_DEC instead of "%ld"
+ and cast corresponding argument to fmt_size_t.
+ (psa_new_var_decl): Use HOST_SIZE_T_PRINT_DEC instead of "%ld"
+ and cast corresponding argument to fmt_size_t.
+ (parser_symbol_add): Use HOST_SIZE_T_PRINT_DEC instead of "%zd"
+ or HOST_SIZE_T_PRINT_HEX_PURE instead of "%lx" and cast corresponding
+ argument to fmt_size_t.
+ * cdf-copy.cc: Include "config.h" first.
+ * scan_ante.h (trim_location): Use HOST_SIZE_T_PRINT_UNSIGNED instead
+ of "%zu" or "%d" and cast corresponding argument to fmt_size_t.
+ * structs.cc (create_cblc_field_t): Use ULONGLONG instead of SIZE
+ for "attr".
+ * cbldiag.h (dbgmsg): Add ATTRIBUTE_PRINTF_1.
+ * gcobolspec.cc (lang_specific_driver): Use HOST_SIZE_T_PRINT_DEC
+ instead of "%ld" and cast corresponding argument to fmt_size_t.
+ * parse_ante.h (literal_of): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (evaluate_elem_t::dump): Likewise.
+ (arith_t::another_pair): Likewise.
+ (current_t::end_program): Likewise.
+ (file_add): Likewise.
+ (implicit_paragraph): Likewise.
+ (implicit_section): Likewise.
+ (data_division_ready): Use HOST_SIZE_T_PRINT_DEC instead of "%d"
+ and cast corresponding argument to fmt_size_t.
+ * symbols.h (struct cbl_field_t): Change attr member type from size_t
+ to uint64_t.
+ (cbl_field_t::set_attr): Change return type from size_t to uint64_t.
+ (cbl_field_t::clear_attr): Likewise.
+ (function_descr_t::init): Use HOST_SIZE_T_PRINT_UNSIGNED instead of
+ "%zu" or GCC_PRISZ instead of "z" or HOST_SIZE_T_PRINT_DEC instead
+ of "%zd" and cast corresponding argument to fmt_size_t.
+ (cbl_perform_tgt_t::dump): Likewise.
+ (numeric_group_attrs): Change return type from size_t to uint64_t.
+
2025-04-24 Robert Dubner <rdubner@symas.com>
* genapi.cc: (initialize_variable_internal): Change TRACE1 formatting.
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 0c808c2..5ad47e1 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -22025,6 +22025,15 @@ vec_fp_conversion_cost (const struct processor_costs *cost, int size)
return cost->vcvtps2pd512;
}
+/* Return true of X is UNSPEC with UNSPEC_PCMP or UNSPEC_UNSIGNED_PCMP. */
+
+static bool
+unspec_pcmp_p (rtx x)
+{
+ return GET_CODE (x) == UNSPEC
+ && (XINT (x, 1) == UNSPEC_PCMP || XINT (x, 1) == UNSPEC_UNSIGNED_PCMP);
+}
+
/* Compute a (partial) cost for rtx X. Return true if the complete
cost has been computed, and false if subexpressions should be
scanned. In either case, *TOTAL contains the cost result. */
@@ -22807,14 +22816,77 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
case VEC_MERGE:
mask = XEXP (x, 2);
+ /* Scalar versions of SSE instructions may be represented as:
+
+ (vec_merge (vec_duplicate (operation ....))
+ (register or memory)
+ (const_int 1))
+
+ In this case vec_merge and vec_duplicate is for free.
+ Just recurse into operation and second operand. */
+ if (mask == const1_rtx
+ && GET_CODE (XEXP (x, 0)) == VEC_DUPLICATE)
+ {
+ *total = rtx_cost (XEXP (XEXP (x, 0), 0), mode,
+ outer_code, opno, speed)
+ + rtx_cost (XEXP (x, 1), mode, outer_code, opno, speed);
+ return true;
+ }
/* This is masked instruction, assume the same cost,
as nonmasked variant. */
- if (TARGET_AVX512F && register_operand (mask, GET_MODE (mask)))
- *total = rtx_cost (XEXP (x, 0), mode, outer_code, opno, speed);
+ else if (TARGET_AVX512F && register_operand (mask, GET_MODE (mask)))
+ {
+ *total = rtx_cost (XEXP (x, 0), mode, outer_code, opno, speed)
+ + rtx_cost (XEXP (x, 1), mode, outer_code, opno, speed);
+ return true;
+ }
+ /* Combination of the two above:
+
+ (vec_merge (vec_merge (vec_duplicate (operation ...))
+ (register or memory)
+ (reg:QI mask))
+ (register or memory)
+ (const_int 1))
+
+ i.e. avx512fp16_vcvtss2sh_mask. */
+ else if (TARGET_AVX512F
+ && mask == const1_rtx
+ && GET_CODE (XEXP (x, 0)) == VEC_MERGE
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == VEC_DUPLICATE
+ && register_operand (XEXP (XEXP (x, 0), 2),
+ GET_MODE (XEXP (XEXP (x, 0), 2))))
+ {
+ *total = rtx_cost (XEXP (XEXP (XEXP (x, 0), 0), 0),
+ mode, outer_code, opno, speed)
+ + rtx_cost (XEXP (XEXP (x, 0), 1),
+ mode, outer_code, opno, speed)
+ + rtx_cost (XEXP (x, 1), mode, outer_code, opno, speed);
+ return true;
+ }
+ /* vcmp. */
+ else if (unspec_pcmp_p (mask)
+ || (GET_CODE (mask) == NOT
+ && unspec_pcmp_p (XEXP (mask, 0))))
+ {
+ rtx uns = GET_CODE (mask) == NOT ? XEXP (mask, 0) : mask;
+ rtx unsop0 = XVECEXP (uns, 0, 0);
+ /* Make (subreg:V4SI (not:V16QI (reg:V16QI ..)) 0)
+ cost the same as register.
+ This is used by avx_cmp<mode>3_ltint_not. */
+ if (GET_CODE (unsop0) == SUBREG)
+ unsop0 = XEXP (unsop0, 0);
+ if (GET_CODE (unsop0) == NOT)
+ unsop0 = XEXP (unsop0, 0);
+ *total = rtx_cost (XEXP (x, 0), mode, outer_code, opno, speed)
+ + rtx_cost (XEXP (x, 1), mode, outer_code, opno, speed)
+ + rtx_cost (unsop0, mode, UNSPEC, opno, speed)
+ + rtx_cost (XVECEXP (uns, 0, 1), mode, UNSPEC, opno, speed)
+ + cost->sse_op;
+ return true;
+ }
else
- /* ??? We should still recruse when computing cost. */
*total = cost->sse_op;
- return true;
+ return false;
case MEM:
/* CONST_VECTOR_DUPLICATE_P in constant_pool is just broadcast.
@@ -22831,7 +22903,7 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno,
}
/* An insn that accesses memory is slightly more expensive
- than one that does not. */
+ than one that does not. */
if (speed)
{
*total += 1;
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d50293c..a99a1cc 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,22 @@
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/115207
+ * decl.cc (cp_finish_decl): Call layout_decl after CTAD.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/120012
+ * cp-tree.h (struct lang_type): Add non_aggregate_pod.
+ (CLASSTYPE_NON_AGGREGATE_POD): New.
+ * class.cc (check_bases_and_members): Set it.
+ (check_non_pod_aggregate): Diagnose it.
+
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/117827
+ * init.cc (build_vec_init): Push to *cleanup_flags clearing of rval
+ instead of setting of iterator to maxindex.
+
2025-05-01 Patrick Palka <ppalka@redhat.com>
* constexpr.cc (explain_invalid_constexpr_fn): In the
diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
index 7c4d8e6..7bcbe11 100644
--- a/gcc/simplify-rtx.cc
+++ b/gcc/simplify-rtx.cc
@@ -3063,6 +3063,10 @@ simplify_with_subreg_not (rtx_code binop, machine_mode mode, rtx op0, rtx op1)
XEXP (SUBREG_REG (opn), 0),
GET_MODE (SUBREG_REG (opn)),
SUBREG_BYTE (opn));
+
+ if (!new_subreg)
+ return NULL_RTX;
+
rtx new_not = simplify_gen_unary (NOT, mode, new_subreg, mode);
if (opn == op0)
return simplify_gen_binary (binop, mode, new_not, op1);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 354a2ad..0c034bf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,59 @@
+2025-05-02 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR rtl-optimization/120059
+ * gcc.dg/torture/pr120059-1.c: New test.
+
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/120057
+ * gcc.dg/cpp/embed-18.c: New test.
+ * gcc.dg/pr120057-1.c: New test.
+ * gcc.dg/pr120057-2.c: New test.
+
+2025-05-02 Jakub Jelinek <jakub@redhat.com>
+ Andrew MacLeod <amacleod@redhat.com>
+
+ PR c/117023
+ * gcc.dg/tree-ssa/pr78154-2.c: New test.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/115207
+ * g++.dg/cpp1z/class-deduction118.C: New test.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/cpp1y/constexpr-89285.C: Always diagnose reinterpret_cast.
+ * g++.dg/cpp23/constexpr-nonlit19.C: Remove ~A body.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/120012
+ * g++.dg/abi/base-defaulted1.C: New test.
+ * g++.dg/abi/base-defaulted1a.C: New test.
+
+2025-05-02 Jason Merrill <jason@redhat.com>
+
+ PR c++/60336
+ * g++.dg/abi/pr60336-8a.C: New test.
+
+2025-05-02 Filip Kastl <fkastl@suse.cz>
+
+ * gcc.dg/tree-ssa/switch-5.c: New test.
+ * gcc.dg/tree-ssa/switch-6.c: New test.
+
+2025-05-02 Florian Weimer <fweimer@redhat.com>
+
+ * gcc.dg/Wdeprecated-non-prototype-6.c: New test.
+
+2025-05-02 Jennifer Schmitz <jschmitz@nvidia.com>
+
+ * gcc.target/aarch64/sve/extract_last_128.c: New test.
+ * gcc.target/aarch64/sve/extract_1.c: Adjust expected outcome.
+ * gcc.target/aarch64/sve/extract_2.c: Likewise.
+ * gcc.target/aarch64/sve/extract_3.c: Likewise.
+ * gcc.target/aarch64/sve/extract_4.c: Likewise.
+
2025-05-01 Christopher Bazley <chris.bazley@arm.com>
PR c/119317
diff --git a/gcc/testsuite/gcc.dg/cpp/embed-18.c b/gcc/testsuite/gcc.dg/cpp/embed-18.c
new file mode 100644
index 0000000..198a6db
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/embed-18.c
@@ -0,0 +1,7 @@
+/* PR c/120057 */
+/* { dg-do compile } */
+/* { dg-options "-std=c23 --embed-dir=${srcdir}/c-c++-common/cpp/embed-dir" } */
+
+constexpr unsigned char magna_carta[] = {
+#embed <magna-carta.txt>
+};
diff --git a/gcc/testsuite/gcc.dg/pr120057-1.c b/gcc/testsuite/gcc.dg/pr120057-1.c
new file mode 100644
index 0000000..8832de6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr120057-1.c
@@ -0,0 +1,18 @@
+/* PR c/120057 */
+/* { dg-do compile } */
+/* { dg-options "-std=c23" } */
+
+constexpr char foo[65] = {
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1
+};
+constexpr char bar[66] = {
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2
+};
diff --git a/gcc/testsuite/gcc.dg/pr120057-2.c b/gcc/testsuite/gcc.dg/pr120057-2.c
new file mode 100644
index 0000000..1372baf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr120057-2.c
@@ -0,0 +1,11 @@
+/* PR c/120057 */
+/* { dg-do compile } */
+/* { dg-options "-std=c23" } */
+
+constexpr signed char foo[65] = {
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 129, 11, 12, 13, 14, 15, 16, /* { dg-error "'constexpr' initializer not representable in type of object" } */
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 1
+};
diff --git a/gcc/testsuite/gcc.dg/torture/pr120059-1.c b/gcc/testsuite/gcc.dg/torture/pr120059-1.c
new file mode 100644
index 0000000..36d0c5b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr120059-1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-g" } */
+
+/* PR rtl-optimization/120059 */
+
+int a[4];
+int c, d;
+void f(void) {
+ for (int e = 0; e < 4; e++)
+ a[e] = e | c;
+ int b = 0;
+ if ((a[0] & 1) && (a[0] & 4))
+ b = 2;
+ if (a[0] & 16)
+ b |= 1;
+ d = ~b;
+}