aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-08-10asm-hard-reg-5.c: Compile for x86 !ia32H.J. Lu1-1/+1
Since i?86 and x86_64 GCC can generate codes for ia32, x32 and lp64, compile asm-hard-reg-5.c for x86 !ia32. PR testsuite/121205 * gcc.dg/asm-hard-reg-5.c: Compile for x86 !ia32. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-10asm-hard-reg-4.c: Compile for x86 with -msse2 and scan x86H.J. Lu1-3/+4
Since i?86 and x86_64 GCC can generate codes for ia32, x32 and lp64, compile asm-hard-reg-4.c for x86 with -msse2 and scan x86 PR testsuite/121205 * gcc.dg/asm-hard-reg-4.c: Compile with -msse2 for x86 and scan x86. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-10asm-hard-reg-2.c: Compile for x86 !ia32 and scan x86H.J. Lu1-2/+2
Since i?86 and x86_64 GCC can generate codes for ia32, x32 and lp64, compile asm-hard-reg-2.c for x86 !ia32 and scan x86. PR testsuite/121205 * gcc.dg/asm-hard-reg-2.c: Compile for x86 !ia32 and scan x86. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-10asm-hard-reg-1.c: Adjust scan for x86 with ia32, x32 and lp64H.J. Lu1-4/+5
Since i?86 and x86_64 GCC can generate codes for ia32, x32 and lp64, adjust asm-hard-reg-1.c scan for x86 with ia32, x32 and lp64. PR testsuite/121205 * gcc.dg/asm-hard-reg-1.c: Adjust scan for x86 with ia32, x32 and lp64. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-10testsuite: i386: Fix gcc.target/i386/pr90579.c when PIE is enabled [PR118885]Harish Sadineni1-1/+1
When gcc build with --enable-deafult-pie the following tests were getting failed: FAIL: gcc.target/i386/pr90579.c scan-assembler vaddsd\tr\\+40 FAIL: gcc.target/i386/pr90579.c scan-assembler vaddsd\tr\\+32 FAIL: gcc.target/i386/pr90579.c scan-assembler vaddsd\tr\\+24 FAIL: gcc.target/i386/pr90579.c scan-assembler vaddsd\tr\\+16 PR target/118885 gcc/testsuite/ChangeLog: * gcc.target/i386/pr90579.c: add -fno-pie to dg-options to fix tests when PIE is enabled. Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
2025-08-10testsuite: handle-multiline-outputs must allow both cc1 and cc1.exeTorbjörn SVENSSON1-0/+3
Prior to 14-2027-g985d6480fe5, the input text had the file extensions pruned. In 14-2027-g985d6480fe5, due to the move of the call, the pruning is never done. This change restores the pruning of the file extension to allow multiline test to pass on both Windows and other platforms like Linux. gcc/testsuite/ChangeLog: * lib/multiline.exp: Added pruning of .exe. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2025-08-10Daily bump.GCC Administrator4-1/+107
2025-08-09asm-hard-reg-2.c: Use long long on z to trigger RA errorH.J. Lu1-1/+1
Use long long on z to trigger error: 'asm' operand has impossible constraints or there are not enough registers for -m32 on asm statements like: __asm__ __volatile__ ("" : "=A" (z), "={rax}" (y)); PR testsuite/121205 * gcc.target/i386/asm-hard-reg-2.c (z): Use long long for -m32 to trigger RA error. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-09Fortran: Correct wrong PR numbersPaul Thomas2-2/+2
2025-08-09Darwin: Anchor block internal symbols must not be linker-visible.Iain Sandoe1-5/+33
When we are using section anchors, there's a requirement that the sequence of the content is an unbroken block. If we allow linker- visible symbols in that block, ld(64) would be able to break it into sub-sections on those symbol boundaries. Do not allow symbols that should be visible to be anchored. Do not make anchor block internal symbols linker-visible. gcc/ChangeLog: * config/darwin.cc (darwin_encode_section_info): Do not make anchored symbols linker-visible. (darwin_use_anchors_for_symbol_p): Disallow anchoring on symbols that must be linker-visible (or external), even if the definitions are in this TU. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-08-09Darwin: Section anchors must be linker-visible.Iain Sandoe1-0/+2
In principle, these begin (or at least delineate) a region that could be split by the static linker. If the symbols are hidden to newer linkers they produce diagnostics about the temporary symbol generated. gcc/ChangeLog: * config/darwin.h (ASM_GENERATE_INTERNAL_LABEL): New entry for LANCHOR. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-08-09diagnostics: fix build on hosts where unsigned == size_tDavid Malcolm9-82/+87
Looks like I broke the build with r16-3091-gac4e7455a33237 on hosts where unsigned == size_t. ../../gcc/gcc/diagnostics/dumping.cc:98:1: error: redefinition of ‘void diagnostics::dumping::emit_field(FILE*, int, const char*, T) [with T = unsigned int; FILE = FILE]’ 98 | emit_field<unsigned> (FILE *outfile, int indent, | ^~~~~~~~~~~~~~~~~~~~ ../../gcc/gcc/diagnostics/dumping.cc:80:1: note: ‘void diagnostics::dumping::emit_field(FILE*, int, const char*, T) [with T = unsigned int; FILE = FILE]’ previously declared here 80 | emit_field<size_t> (FILE *outfile, int indent, | ^~~~~~~~~~~~~~~~~~ Sorry about this. Should be fixed by the following patch, which avoids templates here in favor of being explicit about types, avoids the use of "%zi" with fprintf in various places, and fixes some other minor issues in the dumping logic that I noticed whilst testing the patch. gcc/ChangeLog: * diagnostics/context.cc (context::dump): Bulletproof against m_reference_printer being null. * diagnostics/dumping.cc (emit_field<const char *>): Replace with... (emit_string_field): ...this. (emit_field<char *>): Eliminate. (emit_field<bool>): Replace with... (emit_bool_field): ...this. (emit_field<size_t>): Replace with... (emit_size_t_field): ...this, and use HOST_SIZE_T_PRINT_DEC rather than %zi in fprintf call. (emit_field<int>): Replace with... (emit_int_field): ...this. (emit_field<unsigned>): Replace with... (emit_unsigned_field): ...this. * diagnostics/dumping.h (emit_field): Replace this template decl with... (emit_string_field): ...this, (emit_bool_field): ...this, (emit_size_t_field): ...this, (emit_int_field): ...this, (emit_unsigned_field): ... and this. (DIAGNOSTICS_DUMPING_EMIT_FIELD): Rename to... (DIAGNOSTICS_DUMPING_EMIT_BOOL_FIELD): ...this and update for above change. * diagnostics/file-cache.cc (file_cache_slot::dump): Replace emit_field calls with calls that explicitly state the type. Fix type of dump of m_missing_trailing_newline to use bool. (file_cache_slot::dump): Use HOST_SIZE_T_PRINT_DEC rather than %zi in fprintf call. * diagnostics/html-sink.cc (html_generation_options::dump): Update for macro renaming. * diagnostics/sarif-sink.cc (sarif_serialization_format_json::dump): Likewise. (sarif_generation_options::dump): Likewise, and for function renaming. * diagnostics/text-sink.cc (text_sink::dump): Update for macro renaming. * libgdiagnostics.cc (diagnostic_manager_debug_dump_file): Use HOST_SIZE_T_PRINT_DEC rather than %zi in fprintf call. * pretty-print.cc: Include "diagnostics/dumping.h". (pp_formatted_chunks::dump): Use it. (get_url_format_as_string): New. (pretty_printer::dump): Use diagnostics::dumping. Bulletproof against m_buffer being null. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-09testsuite: Skip class-11_a.H for default_packed targetsDimitar Dimitrov2-0/+2
The g++.dg/modules/class-11_a.H test expects structs to have a padding. Skip this test for targets which have packed structs by default. This patch fixes the test for pru-unknown-elf from FAIL to UNSUPPORTED. The test still passes on x86_64-linux-gnu. gcc/testsuite/ChangeLog: * g++.dg/modules/class-11_a.H: Skip test for effective default_packed targets. * g++.dg/modules/class-11_b.C: Ditto. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2025-08-09Fortran: F2018 GENERIC statement is missing [PR121182]Paul Thomas6-2/+737
2025-08-09 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/121182 * decl.cc (match_generic_stmt): New function based on original gfc_match_generic but feeding namespace rather than typebound generics. (match_typebound_generic): Renamed original gfc_match_generic. (gfc_match_generic): New function that selects between type bound generic and other generic statements and calls one of the above two functions as appropriate. * parse.cc (decode_specification_statement): Allow generic statements. (parse_spec): Accept a generic statement in a specification block. gcc/testsuite/ PR fortran/121182 * gfortran.dg/generic_stmt_1.f90: New test. * gfortran.dg/generic_stmt_2.f90: New test. * gfortran.dg/generic_stmt_3.f90: New test. * gfortran.dg/generic_stmt_4.f90: New test.
2025-08-09testsuite: Require atomic operations for hardbool-ai.cDimitar Dimitrov1-0/+1
The test uses _Atomic int type, so add a filter to ensure the target supports it. This fixes a spurious test failure on pru-unknown-elf, which lacks atomic ops. The test still passes on x86_64-linux-gnu. gcc/testsuite/ChangeLog: * gcc.dg/torture/hardbool-ai.c: Require target that supports atomic operations on int types. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2025-08-08xtensa: Refine constraint "T" to define_special_memory_constraintTakayuki 'January June' Suwa1-1/+1
References to literal pool entries do not need to be reloaded or converted to "(mem (reg X))" to load via base register. gcc/ChangeLog: * config/xtensa/constraints.md (T): Change define_memory_constraint to define_special_memory_constraint.
2025-08-09Daily bump.GCC Administrator8-1/+351
2025-08-08forwprop: Don't do copy-prop-aggregates from statements that could throw ↵Andrew Pinski2-0/+30
[PR120599] In the testcase provided, currently we lose the landing pad for the exception that could throw from the aggregate load as we remove one copy and the second statement where load happens was not marked as throwable before so the landing pad for that internal throw is now gone. The fix is to ignore statements that could throw (internally or externally). PR tree-optimization/120599 gcc/ChangeLog: * tree-ssa-forwprop.cc (optimize_agr_copyprop): Don't try to copy from statements that throw. gcc/testsuite/ChangeLog: * g++.dg/torture/noncall-eh-1.C: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-08-08forwprop: Change proping memset into memcpy into a forwprop rather than a ↵Andrew Pinski4-128/+258
backwalk One thing I noticed while working on copy prop for aggregates is that we start with a memcpy like statement and then walk backwards. This means we could have a few walks backwards to see there was no statement for zeroing. Instead this changes the walk backwards into a true forwprop. In the future we can expand to forwprop the zeroing into say an function argument or something more than memcpy like statement. This should speed up slightly the compile time performance since there will be less memsets like statements than memcpy and there is only one walk forwards for memset like staments instead of multiple walk backwards to find the memset. Note this does add one extra improvement, the memcpy now does not need to have an address as its dest argument; this could have been done before too but it was even more noticable now because of the variable became only set so it was removed and the check was removed as well. There is also a fix on how ao_ref for the memset/memcpy is done, before it was just using ao_ref_init which is wrong since it should instead of used ao_ref_init_from_ptr_and_size. This part fixes PR 121422. Changes since v1: * v2: Add back limit on the walk which was missed in v1. Move the call to get_addr_base_and_unit_offset outside of the vuse loop. * v3: Remove extra check before the call to optimize_aggr_zeroprop_1. Fix setting up of ao_ref for memset (PR121422). PR tree-optimization/118946 PR tree-optimization/121422 gcc/ChangeLog: * tree-ssa-forwprop.cc (optimize_memcpy_to_memset): Remove. (optimize_aggr_zeroprop_1): New function. (optimize_aggr_zeroprop): New function. (simplify_builtin_call): Don't call optimize_memcpy_to_memset for memcpy but call optimize_aggr_zeroprop for memset. (pass_forwprop::execute): Don't call optimize_memcpy_to_memset for aggregate copies but rather call optimize_aggr_zeroprop for aggregate stores. gcc/testsuite/ChangeLog: * gcc.dg/pr118946-1.c: New test. * gcc.dg/torture/pr121422-1.c: New test. * gcc.dg/torture/pr121422-2.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-08-08forwprop: Change optimize_agr_copyprop into forward walk instead of backwardsAndrew Pinski1-61/+60
While thinking about how to implement the rest of the copy prop and makes sure not to introduce some compile time problems, optimize_agr_copyprop should be changed into a forwproping rather than looking backwards. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-forwprop.cc (optimize_agr_copyprop): Change into a forward looking (looking at vdef's uses) instead of a back looking (vuse's def). Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-08-08diagnostics: enable nested diagnostics by default [PR116253]David Malcolm22-24/+183
In GCC 15 I added an experimental nesting view in text sinks for hierarchical diagnostics, such as C++ template problems. This patch enables it for text sinks by default. The old behavior can be restored via -fno-diagnostics-show-nesting, which the patch also adds to -fdiagnostics-plain-output. The patch does not yet enable it for text sinks in sarif-replay. gcc/ChangeLog: PR diagnostics/116253 * common.opt (fdiagnostics-show-nesting): New option. (fdiagnostics-show-nesting-locations): New option. (fdiagnostics-show-nesting-levels): New option. * common.opt.urls: Regenerate. * diagnostics/context.cc (context::set_show_nesting): New. (context::set_show_nesting_locations): New. (context::set_show_nesting_levels): New. * diagnostics/context.h (context::set_show_nesting): New decl. (context::set_show_nesting_locations): New decl. (context::set_show_nesting_levels): New decl. * diagnostics/html-sink.cc: Tweak comment. * diagnostics/output-spec.cc (text_scheme_handler::make_sink): Rename "experimental-nesting" to "show-nesting" and enable by default. Rename "experimental-nesting-show-locations" to "show-nesting-locations". Rename "experimental-nesting-show-levels" to "show-nesting-levels". * diagnostics/sink.h (sink::dyn_cast_text_sink): New. * diagnostics/text-sink.h (text_sink::dyn_cast_text_sink): New. * doc/invoke.texi: Add -fdiagnostics-show-nesting, -fdiagnostics-show-nesting-locations, and -fdiagnostics-show-nesting-levels. Update for changes to output-spec.cc above. * lto-wrapper.cc (merge_and_complain): Ignore OPT_fdiagnostics_show_nesting, OPT_fdiagnostics_show_nesting_locations, and OPT_fdiagnostics_show_nesting_levels. (append_compiler_options): Likewise. (append_diag_options): Likewise. * opts-common.cc (decode_cmdline_options_to_array): Add "-fno-diagnostics-show-nesting" to -fdiagnostics-plain-output. * opts.cc (common_handle_option): Handle the new options. (gen_command_line_string): Ignore the new options. * toplev.cc (general_init): Call set_show_nesting, set_show_nesting_locations, and set_show_nesting_levels on global_dc. gcc/testsuite/ChangeLog: PR diagnostics/116253 * g++.dg/concepts/nested-diagnostics-1-truncated.C: Update for renamed keys to -fdiagnostics-set-output=text * g++.dg/concepts/nested-diagnostics-1.C: Likewise. * g++.dg/concepts/nested-diagnostics-2.C: Likewise. * gcc.dg/plugin/diagnostic-test-nesting-no-show-nesting.c: New test. * gcc.dg/plugin/diagnostic-test-nesting-show-nesting.c: New test. * gcc.dg/plugin/diagnostic-test-nesting-text-indented-show-levels.c: Update for renamed keys to -fdiagnostics-set-output=text. * gcc.dg/plugin/diagnostic-test-nesting-text-indented-unicode.c: Likewise. * gcc.dg/plugin/diagnostic-test-nesting-text-indented.c: Likewise. * gcc.dg/plugin/plugin.exp: Add the new tests. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-08diagnostics: revamp of dumping of "diagnostics" internal stateDavid Malcolm13-72/+336
The diagnostics subsystem has a handy dump feature, usable during debugging via (gdb) call global_dc->dump () which prints copious amounts of information about the state of the diagnostics subsystem to stderr. This patch consolidates the implementation and extends it, adding various per-sink data (generation options specific to each of text, SARIF, and HTML). No functional difference intended outside of the debugger. gcc/ChangeLog: * Makefile.in (OBJS-libcommon): Add diagnostics/dumping.o. * diagnostics/buffering.cc: Include "diagnostics/dumping.h". (buffer::dump): Reimplement using diagnostics::dumping. * diagnostics/context.cc: Include "diagnostics/dumping.h". (context::dump): Reimplement using diagnostics::dumping. Use sink::dump_kind when listing the sinks. (sink::dump): Reimplement using diagnostics::dumping. (counters::dump): Likewise. * diagnostics/dumping.cc: New file. * diagnostics/dumping.h: New file. * diagnostics/file-cache.cc: Include "diagnostics/dumping.h". (file_cache::dump): Reimplement using diagnostics::dumping. (file_cache_slot::dump): Likewise. * diagnostics/html-sink.cc: Include "diagnostics/dumping.h". (html_generation_options::dump): New. (html_sink_buffer::dump): Reimplement using diagnostics::dumping. (html_builder::dump): New. (html_sink::dump): Reimplement using diagnostics::dumping. Add dump of the html_builder. (html_file_sink::dump): Replace with... (html_file_sink::dump_kind): ...this. (html_buffered_sink::dump_kind): New. * diagnostics/html-sink.h (html_generation_options::dump): New decl. * diagnostics/sarif-sink.cc: Include "diagnostics/dumping.h". (sarif_serialization_format_json::dump): New. (sarif_builder::dump): New. (sarif_sink_buffer::dump): Reimplement using diagnostics::dumping. (sarif_sink::dump): Likewise. Add dump of the sarif_builder. (sarif_stream_sink::dump_kind): New. (sarif_file_sink::dump): Replace with... (sarif_file_sink::dump_kind): ...this. (get_dump_string_for_sarif_version): New. (sarif_generation_options::dump): New. (class buffered_sink): Rename to... (class sarif_buffered_sink): ...this. (sarif_buffered_sink::dump_kind): New. * diagnostics/sarif-sink.h (sarif_serialization_format::dump): New. (sarif_serialization_format_json::dump): New decl. (sarif_generation_options::dump): New decl. * diagnostics/sink.h (sink::dump_kind): New. * diagnostics/text-sink.cc: Include "diagnostics/dumping.h". (text_sink_buffer::dump): Reimplement using diagnostics::dumping. (text_sink::dump): Likewise. Emit fields m_show_nesting, m_show_locations_in_nesting, and m_show_nesting_levels. * diagnostics/text-sink.h (text_sink::dump_kind): New. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-08diagnostics: minor cleanupsDavid Malcolm5-7/+8
No functional change intended. gcc/ChangeLog: * diagnostic.h (diagnostics::get_cwe_url): Move decl to diagnostics/metadata.h. (diagnostics::maybe_line_and_column): Move into diagnostics::text_sink. * diagnostics/context.cc: Update for maybe_line_and_column becoming a static member of text_sink. * diagnostics/metadata.h (diagnostics::get_cwe_url): Move decl here from diagnostic.h. * diagnostics/text-sink.cc (maybe_line_and_column): Convert to... (text_sink::maybe_line_and_column): ...this. * diagnostics/text-sink.h (text_sink::maybe_line_and_column): Move here from diagnostic.h. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-08diagnostics: update signature of some callbacksDavid Malcolm4-8/+8
No functional change intended. gcc/cp/ChangeLog: * error.cc (cp_adjust_diagnostic_info): Convert "context" arg from ptr to const &. gcc/ChangeLog: * diagnostics/context.cc (context::get_any_inlining_info): Convert "context" arg of m_set_locations_cb from ptr to const &. (context::report_diagnostic): Convert "context" arg of m_adjust_diagnostic_info from ptr to const &. * diagnostics/context.h (context::set_locations_callback_t): Likewise. (context::set_adjust_diagnostic_info_callback): Likewise. (context::m_adjust_diagnostic_info): Likewise. * tree-diagnostic.cc (set_inlining_locations): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-08diagnostics: introduce struct column_optionsDavid Malcolm8-40/+89
Consolidate 3 fields in diagnostics::context and diagnostics::column_policy into a new struct diagnostics::column_options. No functional change intended; reduces the number of public fields in diagnostics::context. gcc/c-family/ChangeLog: * c-indentation.cc (should_warn_for_misleading_indentation): Update for moving diagnostics::context::m_tabstop into diagnostics::column_options. * c-opts.cc (c_common_post_options): Likewise. gcc/ChangeLog: * diagnostics/column-options.h: New file, adding struct diagnostics::column_options, taken from fields in diagnostics::context and diagnostics::column_policy. * diagnostics/context.cc (context::initialize): Update for moving fields of diagnostics::context into diagnostics::column_options. (column_policy::column_policy): Likewise. (column_policy::converted_column): Move implementation to... (column_options::convert_column): ...this new function. (context::report_diagnostic): Update for moving fields of diagnostics::context into diagnostics::column_options. (assert_location_text): Likewise. * diagnostics/context.h: Include "diagnostics/column-options.h". (class column_policy): Replace fields m_column_unit, m_column_origin, and m_tabstop with m_column_options. (context::get_column_options): New accessors. (context::m_column_unit): Move to struct column_options and replace with m_column_options. (context::m_column_origin): Likewise. (context::m_tabstop): Likewise. * diagnostics/sarif-sink.cc (sarif_builder::sarif_builder): Update for moving fields of diagnostics::context into diagnostics::column_options. * diagnostics/source-printing.cc: Likewise. * opts.cc (common_handle_option): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2025-08-08cobol: Divide-and-conquer conversion from binary to packed-decimal.Robert Dubner3-47/+175
The legacy routine for converting a binary integer to a packed-decimal representaion peeled two digits at a time from the bottom of an _int128 value. These changes replace that routine with a divide-and-conquer algorithm that runs about ten times faster. libgcobol/ChangeLog: * libgcobol.cc (int128_to_field): Switch to the new routine. * stringbin.cc (packed_from_combined): Implement the new routine. (__gg__binary_to_packed): Likewise. * stringbin.h (__gg__binary_to_packed): Likewise.
2025-08-08Update my maintainer entry emailAndrew Pinski1-2/+3
Just updating with my new email address. ChangeLog: * MAINTAINERS (Andrew Pinski): Update email address. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-08aarch64: libgcc: Honor disable-werror [PR117600]Christophe Lyon4-1/+35
In commit r15-4417-g71c7b446b98aa5, I made -werror mandatory when building libgcc for aarch64. While it achieved its goal (make us fix problems unnoticed so far), there has a been a lot of debate because it couldn't be disabled easily. This patch adds support for --enable-werror/--disable-werror in libgcc, defaulting to --enable-werror for aarch64. Tested on non-bootstrap builds on aarch64-linux-gnu (with -Wno-prio-ctor-dtor removed in order to get an error). libgcc/ChangeLog: PR libgcc/117600 * Makefile.in (WERROR): New. * config/aarch64/t-aarch64: Handle WERROR. * configure: Regenerate. * configure.ac: Add support for --enable-werror.
2025-08-08arm: Fix CMSE nonecure calls [PR 120977]Christophe Lyon6-27/+42
As discussed in https://gcc.gnu.org/pipermail/gcc-patches/2025-June/685733.html the operand of the call should be a mem rather than an unspec. This patch moves the unspec to an additional argument of the parallel and adjusts cmse_nonsecure_call_inline_register_clear accordingly. The scan-rtl-dump in cmse-18.c needs a fix since we no longer emit the 'unspec' part. In addition, I noticed that since arm_v8_1m_mve_ok is always true in the context of the test (we know we support CMSE as per cmse.exp, and arm_v8_1m_mve_ok finds the adequate options), we actually only use the more permissive regex. To improve that, the patch duplicates the test, such that cmse-18.c forces -march=armv8-m.main+fp (so FPCXP is disabled), and cmse-19.c forces -march=armv8.1-m.main+mve (so FPCXP is enabled). Each test uses the appropriate scan-rtl-dump, and also checks we are using UNSPEC_NONSECURE_MEM (we need to remove -slim for that). The tests enable an FPU via -march so that the test passes whether the testing harness forces -mfloat-abi or not. 2025-07-08 Christophe Lyon <christophe.lyon@linaro.org> PR target/120977 gcc/ * config/arm/arm.md (call): Move unspec parameter to parallel. (nonsecure_call_internal): Likewise. (call_value): Likewise. (nonsecure_call_value_internal): Likewise. * config/arm/thumb1.md (nonsecure_call_reg_thumb1_v5): Likewise. (nonsecure_call_value_reg_thumb1_v5): Likewise. * config/arm/thumb2.md (nonsecure_call_reg_thumb2_fpcxt): Likewise. (nonsecure_call_reg_thumb2): Likewise. (nonsecure_call_value_reg_thumb2_fpcxt): Likewise. (nonsecure_call_value_reg_thumb2): Likewise. * config/arm/arm.cc (cmse_nonsecure_call_inline_register_clear): Likewise. gcc/testsuite * gcc.target/arm/cmse/cmse-18.c: Check only the case when FPCXT is not enabled. * gcc.target/arm/cmse/cmse-19.c: New test.
2025-08-08AArch64: Fix invalid immediate offsets in SVE gather/scatter [PR121449]Pengfei Li2-32/+76
This patch fixes incorrect constraints in RTL patterns for AArch64 SVE gather/scatter with type widening/narrowing and vector-plus-immediate addressing. The bug leads to below "immediate offset out of range" errors during assembly, eventually causing compilation failures. /tmp/ccsVqBp1.s: Assembler messages: /tmp/ccsVqBp1.s:54: Error: immediate offset out of range 0 to 31 at operand 3 -- `ld1b z1.d,p0/z,[z1.d,#64]' Current RTL patterns for such instructions incorrectly use vgw or vgd constraints for the immediate operand, base on the vector element type in Z registers (zN.s or zN.d). However, for gather/scatter with type conversions, the immediate range for vector-plus-immediate addressing is determined by the element type in memory, which differs from that in vector registers. Using the wrong constraint can produce out-of-range offset values that cannot be encoded in the instruction. This patch corrects the constraints used in these patterns. A test case that reproduces the issue is also included. Bootstrapped and regression-tested on aarch64-linux-gnu. gcc/ChangeLog: PR target/121449 * config/aarch64/aarch64-sve.md (mask_gather_load<mode><v_int_container>): Use vg<Vesize> constraints for alternatives with immediate offset. (mask_scatter_store<mode><v_int_container>): Likewise. gcc/testsuite/ChangeLog: PR target/121449 * g++.target/aarch64/sve/pr121449.C: New test.
2025-08-08Add subsections for vectorization and OpenMP/OpenACC target hooksRichard Biener2-0/+20
Currently they are grouped under Addressing Modes which is quite misleading. gcc/ * doc/tm.texi.in: Add Vectorization and OpenMP and OpenACC sub-sections to the list of target macros and functions. * doc/tm.texi: Re-generate.
2025-08-08Remove setting of STMT_VINFO_VECTYPE on non-dataref stmtsRichard Biener2-176/+11
The following removes early setting of STMT_VINFO_VECTYPE and as side-effect early failing if we fail to compute a vector type. The latter is now ensured by SLP build. The former is still temporarily copied from the SLP tree during stmt analysis, and data reference stmts will still have STMT_VINFO_VECTYPE given existing uses in dependence and alignment analysis and peeling. * tree-vect-loop.cc (vect_determine_vectype_for_stmt_1): Remove. (vect_determine_vectype_for_stmt): Likewise. (vect_set_stmts_vectype): Likewise. (vect_analyze_loop_2): Do not call vect_set_stmts_vectype. * tree-vect-stmts.cc (vect_mark_stmts_to_be_vectorized): Detect irregular stmts early here.
2025-08-08aarch64: Relax fpm_t assert to allow const_ints [PR120986]Alex Coplan2-2/+10
This relaxes an overzealous assert that required the fpm_t argument to be in DImode when expanding FP8 intrinsics. Of course this fails to account for modeless const_ints. gcc/ChangeLog: PR target/120986 * config/aarch64/aarch64-sve-builtins.cc (function_expander::expand): Relax fpm_t assert to allow modeless const_ints. gcc/testsuite/ChangeLog: PR target/120986 * gcc.target/aarch64/torture/pr120986-2.c: New test.
2025-08-08aarch64: Fix predication of FP8 FDOT insns [PR120986]Alex Coplan3-8/+24
The predication of the SVE2 FP8 dot product insns was relying on the architectural dependency: FEAT_FP8DOT2 => FEAT_FP8DOT4 which was relaxed in GCC as of r15-7480-g299a8e2dc667e795991bc439d2cad5ea5bd379e2, thus leading to unrecognisable insn ICEs when compiling a two-way FDOT with just +fp8dot2. This patch introduces a new mode iterator which selectively enables the appropriate mode(s) depending on which of the FP8DOT{2,4} features are available, and uses it to fix the predication of the patterns. gcc/ChangeLog: PR target/120986 * config/aarch64/aarch64-sve2.md (@aarch64_sve_dot<mode>): Switch mode iterator from SVE_FULL_HSF to new iterator; remove insn predicate as this is now taken care of by conditions in the mode iterator. (@aarch64_sve_dot_lane<mode>): Likewise. * config/aarch64/iterators.md (SVE_FULL_HSF_FP8_FDOT): New. gcc/testsuite/ChangeLog: PR target/120986 * gcc.target/aarch64/pr120986-1.c: New test.
2025-08-08tree-optimization/121454 - ICE building libgoRichard Biener1-9/+18
The following avoids building BIT_FIELD_REFs of reference trees that are unexpected by nonoverlapping_refs_since_match_p and while being there also those declared invalid by IL verification. PR tree-optimization/121454 * tree-ssa-sccvn.cc (visit_nary_op): Avoid unexpected BIT_FIELD_REFs.
2025-08-08tailc: Handle other forms of finally_tmp.N conditional cleanups after ↵Jakub Jelinek5-46/+357
musttail [PR121389] My earlier r16-1886 PR120608 change incorrectly assumed that the finally_tmp.N vars introduced by eh pass will be only initialized to values 0 and 1 and there will be only EQ_EXPR/NE_EXPR comparisons of those. The following testcases show that is a bad assumption, the eh pass sets finally_tmp.N vars to 0 up to some highest index depending on hoiw many different exits there are from the finally region. And it emits then switch (finally_tmp.N) statement for all the different cases. So, if it uses more than 0/1 indexes, the lowering of the switch can turn it into a series of GIMPLE_CONDs, if (finally_tmp.N_M > 15) goto ... else goto ... if (finally_tmp.N_M > 7) goto ... else goto ... etc. (and that also means no longer single uses). And if unlucky, we can see a non-lowered GIMPLE_SWITCH as well. So, the following patch removes the assumption that it has to be 0/1 and EQ_EXPR/NE_EXPR, allows all the normal integral comparisons and handles GIMPLE_SWITCH too. 2025-08-08 Jakub Jelinek <jakub@redhat.com> PR middle-end/121389 * tree-tailcall.cc (find_tail_calls): For finally_tmp.N handle not just GIMPLE_CONDs with EQ_EXPR/NE_EXPR and only values 0 and 1, but arbitrary non-negative values, arbitrary comparisons in conditions and also GIMPLE_SWITCH next to GIMPLE_CONDs. * c-c++-common/asan/pr121389-1.c: New test. * c-c++-common/asan/pr121389-2.c: New test. * c-c++-common/asan/pr121389-3.c: New test. * c-c++-common/asan/pr121389-4.c: New test.
2025-08-08Modernize vectorizable_lane_reducingRichard Biener1-6/+7
The following avoids STMT_VINFO_VECTYPE usage in vect_is_emulated_mixed_dot_prod and makes sure to register the SLP node when costing in vectorizable_lane_reducing. * tree-vect-loop.cc (vect_is_emulated_mixed_dot_prod): Get the SLP node rather than the stmt_info. (vectorizable_lane_reducing): Adjust, pass SLP node to costing. (vect_transform_reduction): Adjust.
2025-08-08Pass SLP node to promotion/demotion costingRichard Biener1-11/+4
This one was forgotten. Also constants/externals are costed explicitly with SLP. * tree-vect-stmts.cc (vect_model_promotion_demotion_cost): Pass in SLP node and drop unused dr argument. Use SLP node for costing, drop costing of constant/external operands. (vectorizable_conversion): Adjust.
2025-08-08Fix typo in getting SLP_TREE_VECTYPERichard Biener1-1/+1
It was applied on the stmt_info rather than the slp_node. * tree-vect-stmts.cc (vectorizable_store): Apply SLP_TREE_VECTYPE to slp_node rather than stmt_info.
2025-08-08Daily bump.GCC Administrator13-1/+284
2025-08-07cobol: Improve binary-to-string conversion.Robert Dubner11-66/+397
COBOL often requires the conversion of binary integers to string of characters. These changes replace a naive routine that peels decimal digits from a binary value one digit at a time, with a divide-and-conquer algorithm that is twice as fast even for a couple of digits, and is about eight times faster past ten digits. Included here are some minor fixes to the lexer and parser. gcc/cobol/ChangeLog: * cbldiag.h (location_dump): Source code formatting. * parse.y: error_msg formatting. * scan.l: Remove UTF-8 character from regex pattern. * scan_ante.h (numstr_of): error_msg formatting. * show_parse.h (class ANALYZE): Suppress cppcheck error. * util.cc (cbl_field_t::report_invalid_initial_value): error_msg formatting. libgcobol/ChangeLog: * Makefile.am: Include new stringbin.cc file. * Makefile.in: Regenerated. * libgcobol.cc (__gg__power_of_ten): Improve error message. (__gg__binary_to_string): Deleted. (__gg__binary_to_string_internal): Deleted. (int128_to_field): Use new conversion routine. (__gg__move): Use new conversion routine. * stringbin.cc: New file. Implements new conversion routine. * stringbin.h: New file. Likewise.
2025-08-07c++: extract_call_expr and C++20 rewritten opsPatrick Palka1-22/+0
After r16-2519-gba5a6787374dea, we'll never express a C++20 rewritten comparison operator as a built-in operator acting on an operator<=> call, e.g. operator<=>(x, y) @ 0. This is because operator<=> always returns a class type (std::foo_ordering), so the outer operator@ will necessarily resolve to a non-built-in operator@ for that class type (even in the non-dependent templated case, after that commit). So the corresponding handling in extract_call_expr is basically dead code, except for the TRUTH_NOT_EXPR case where we can plausibly still have !(operator==(x, y)), but it doesn't make sense to recognize just that one special case of operator rewriting. So let's just remove it altogether; apparently it's no longer needed. Also, the handling is imprecise: it recognizes expressions such as 0 < f() which never corresponded to a call in the first place. All the more reason to remove it. gcc/cp/ChangeLog: * call.cc (extract_call_expr): Remove handling of C++20 rewritten comparison operators. Reviewed-by: Jason Merrill <jason@redhat.com>
2025-08-07libstdc++: Switch gcc.gnu.org installation docs to httpsGerald Pfeifer2-2/+2
libstdc++-v3: * doc/xml/manual/build_hacking.xml: Switch gcc.gnu.org installation docs to https. * doc/html/manual/appendix_porting.html: Regenerate.
2025-08-07c++: Implement C++26 P1061R10 - Structured Bindings can introduce a Pack ↵Jakub Jelinek15-42/+1990
[PR117783] The following patch implements the C++26 P1061R10 - Structured Bindings can introduce a Pack paper. One thing unresolved in the patch is mangling, I've raised https://github.com/itanium-cxx-abi/cxx-abi/issues/200 for that but no comments there yet. One question is if it is ok not to mention the fact that there is a structured binding pack in the mangling of the structured bindings but more important is in case of std::tuple* we might need to mangle individual structured binding pack elements separately (each might need an exported name for the var itself and perhaps its guard variable as well). The patch just uses the normal mangling for the whole structured bindings and emits sorry if we need to mangle the structured binding pack elements. The patch just marks the structured binding pack specially (considered e.g. using some bit on it, but in the end I'm identifying it using a made up type which causes DECL_PACK_P to be true; it is kind of self-referential solution, because the type on the pack mentions the DECL_DECOMPOSITION_P VAR_DECL on which the type is attached as its pack, so it needs to be handled carefully during instantiation to avoid infinite recursion, but it is the type that should be used if something else actually needs to use the same type as the structured binding pack, e.g. a capture proxy), and stores the pack elements when actually processed through cp_finish_decomp with non-dependent initializer into a TREE_VEC used as DECL_VALUE_EXPR of the pack; though because several spots use the DECL_VALUE_EXPR and assume it is ARRAY_REF from which they can find out the base variable and the index, it stores the base variable and index in the first 2 TREE_VEC elts and has the structured binding elements only after that. https://eel.is/c++draft/temp.dep.expr#3.6 says the packs are type dependent regardless of whether the initializer of the structured binding is type dependent or not, so I hope having a dependent type on the structured binding VAR_DECL is ok. The paper also has an exception for sizeof... which is then not value dependent when the structured bindings are initialized with non-dependent initializer: https://eel.is/c++draft/temp.dep.constexpr#4 The patch special cases that in 3 spots (I've been wondering if e.g. during parsing I couldn't just fold the sizeof... to the INTEGER_CST right away, but guess I'd need to repeat that also during partial instantiation). And one thing still unresolved is debug info, I've just added DECL_IGNORED_P on the structured binding pack VAR_DECL because there were ICEs with -g for now, hope it can be fixed incrementally but am not sure what exactly we should emit in the debug info for that. Speaking of which, I see DW_TAG_GNU_template_parameter_pack DW_TAG_GNU_formal_parameter_pack etc. DIEs emitted regardless of DWARF version, shouldn't we try to upstream those into DWARF 6 or check what other compilers emit for the packs? And bet we'd need DW_TAG_GNU_structured_binding_pack as well. 2025-08-07 Jakub Jelinek <jakub@redhat.com> PR c++/117783 gcc/c-family/ * c-cppbuiltin.cc (c_cpp_builtins): Change __cpp_structured_bindings predefined value for C++26 from 202403L to 202411L. gcc/cp/ * parser.cc: Implement C++26 P1061R10 - Structured Bindings can introduce a Pack. (cp_parser_range_for): Also handle TREE_VEC as DECL_VALUE_EXPR instead of ARRAY_REF. (cp_parser_decomposition_declaration): Use sb-identifier-list instead of identifier-list in comments. Parse structured bindings with structured binding pack. Don't emit pedwarn about structured binding attributes in structured bindings inside of a condition. (cp_convert_omp_range_for): Also handle TREE_VEC as DECL_VALUE_EXPR instead of ARRAY_REF. * decl.cc (get_tuple_element_type): Change i argument type from unsigned to unsigned HOST_WIDE_INT. (get_tuple_decomp_init): Likewise. (set_sb_pack_name): New function. (cp_finish_decomp): Handle structured binding packs. * pt.cc (tsubst_pack_expansion): Handle structured binding packs and capture proxies for them. Formatting fixes. (tsubst_decl): For structured binding packs don't tsubst TREE_TYPE first, instead recreate the type after r is created. (tsubst_omp_for_iterator): Also handle TREE_VEC as DECL_VALUE_EXPR instead of ARRAY_REF. (tsubst_expr): Handle sizeof... on non-dependent structure binding packs. (value_dependent_expression_p): Return false for sizeof... on non-dependent structure binding packs. (instantiation_dependent_r): Don't recurse on sizeof... on non-dependent structure binding packs. * constexpr.cc (potential_constant_expression_1): Also handle TREE_VEC on DECL_VALUE_EXPR of structure binding packs. gcc/testsuite/ * g++.dg/cpp26/decomp13.C: New test. * g++.dg/cpp26/decomp14.C: New test. * g++.dg/cpp26/decomp15.C: New test. * g++.dg/cpp26/decomp16.C: New test. * g++.dg/cpp26/decomp17.C: New test. * g++.dg/cpp26/decomp18.C: New test. * g++.dg/cpp26/decomp19.C: New test. * g++.dg/cpp26/decomp20.C: New test. * g++.dg/cpp26/decomp21.C: New test. * g++.dg/cpp26/feat-cxx26.C (__cpp_structured_bindings): Expect 202411 rather than 202403.
2025-08-07aarch64: Mark SME functions as .variant_pcs [PR121414]Richard Sandiford2-8/+56
Unlike base PCS functions, __arm_streaming and __arm_streaming_compatible functions allow/require PSTATE.SM to be 1 on entry, so they need to be treated as STO_AARCH64_VARIANT_PCS. Similarly, functions that share ZA or ZT0 with their callers require ZA to be active on entry, whereas the base PCS requires ZA to be dormant or off. These functions too need to be marked as having a variant PCS. gcc/ PR target/121414 * config/aarch64/aarch64.cc (aarch64_is_variant_pcs): New function, split out from... (aarch64_asm_output_variant_pcs): ...here. Handle various types of SME function type. gcc/testsuite/ PR target/121414 * gcc.target/aarch64/sme/pr121414_1.c: New test.
2025-08-07Remove MODE_COMPOSITE_P test from simplify_gen_subreg [PR120718]Richard Sandiford2-8/+16
simplify_gen_subreg rejected subregs of literal constants if MODE_COMPOSITE_P. This was added by the fix for PR96648 in g:c0f772894b6b3cd8ed5c5dd09d0c7917f51cf70f. Jakub said: As for the simplify_gen_subreg change, I think it would be desirable to just avoid creating SUBREGs of constants on all targets and for all constants, if simplify_immed_subreg simplified, fine, otherwise punt, but as we are late in GCC11 development, the patch instead guards this behavior on MODE_COMPOSITE_P (outermode) - i.e. only conversions to powerpc{,64,64le} double double long double - and only for the cases where simplify_immed_subreg was called. I'm not sure about relaxing the codes further, since subregs might be wanted for CONST, SYMBOL_REF and LABEL_REF. But removing the MODE_COMPOSITE_P is needed to fix PR120718, where we get an ICE from generating a subreg of a V2SI const_vector. gcc/ PR rtl-optimization/120718 * simplify-rtx.cc (simplify_context::simplify_gen_subreg): Remove MODE_COMPOSITE_P condition. gcc/testsuite/ PR rtl-optimization/120718 * gcc.target/aarch64/sve/acle/general/pr120718.c: New test.
2025-08-07tree-optimization/121405 - missed VN with aggregate copyRichard Biener3-5/+53
The following handles value-numbering of a BIT_FIELD_REF of a register that's defined by a load by looking up a subset load similar to how we handle bit-and masked loads. This allows the testcase to be simplified by two FRE passes, the first one will create the BIT_FIELD_REF. PR tree-optimization/121405 * tree-ssa-sccvn.cc (visit_nary_op): Handle BIT_FIELD_REF with reference def by looking up a combination of both. * gcc.dg/tree-ssa/ssa-fre-107.c: New testcase. * gcc.target/i386/pr90579.c: Adjust.
2025-08-07vect: Extend peeling and versioning for alignment to VLA modesPengfei Li11-97/+291
This patch extends the support for peeling and versioning for alignment from VLS modes to VLA modes. The key change is allowing the DR target alignment to be set to a non-constant poly_int. Since the value must be a power-of-two, for variable VFs, the power-of-two check is deferred to runtime through loop versioning. The vectorizable check for speculative loads is also refactored in this patch to handle both constant and variable target alignment values. Additional changes for VLA modes include: 1) Peeling In VLA modes, we use peeling with masking - using a partial vector in the first iteration of the vectorized loop to ensure aligned DRs in subsequent iterations. It was already enabled for VLS modes to avoid scalar peeling. This patch reuses most of the existing logic and just fixes a small issue of incorrect IV offset in VLA code path. This also removes a power-of-two rounding when computing the number of iterations to peel, as power-of-two VF has been guaranteed by a new runtime check. 2) Versioning The type of the mask for runtime alignment check is updated to poly_int to support variable VFs. After this change, both standalone versioning and peeling with versioning are available in VLA modes. This patch also introduces another runtime check for speculative read amount, to ensure that all speculative loads remain within current valid memory page. We plan to remove these runtime checks in the future by introducing capped VF - using partial vectors to limit the actual VF value at runtime. 3) Speculative read flag DRs whose scalar accesses are known to be in-bounds will be considered unaligned unsupported with a variable target alignment. But in fact, speculative reads can be naturally avoided for in-bounds DRs as long as partial vectors are used. Therefore, this patch clears the speculative flags and sets the "must use partial vectors" flag for these cases. This patch is bootstrapped and regression-tested on x86_64-linux-gnu, arm-linux-gnueabihf and aarch64-linux-gnu with bootstrap-O3. gcc/ChangeLog: * tree-vect-data-refs.cc (vect_compute_data_ref_alignment): Allow DR target alignment to be a poly_int. (vect_enhance_data_refs_alignment): Support peeling and versioning for VLA modes. * tree-vect-loop-manip.cc (get_misalign_in_elems): Remove power-of-two rounding in peeling. (vect_create_cond_for_align_checks): Update alignment check logic for poly_int mask. (vect_create_cond_for_vla_spec_read): New runtime checks. (vect_loop_versioning): Support new runtime checks. * tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Add a new loop_vinfo field. (vectorizable_induction): Fix wrong IV offset issue. * tree-vect-stmts.cc (get_load_store_type): Refactor vectorizable checks for speculative loads. * tree-vectorizer.h (LOOP_VINFO_MAX_SPEC_READ_AMOUNT): New macro for new runtime checks. (LOOP_REQUIRES_VERSIONING_FOR_SPEC_READ): Likewise (LOOP_REQUIRES_VERSIONING): Update macro for new runtime checks. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/peel_ind_11.c: New test. * gcc.target/aarch64/sve/peel_ind_11_run.c: New test. * gcc.target/aarch64/sve/peel_ind_12.c: New test. * gcc.target/aarch64/sve/peel_ind_12_run.c: New test. * gcc.target/aarch64/sve/peel_ind_13.c: New test. * gcc.target/aarch64/sve/peel_ind_13_run.c: New test.
2025-08-07MAINTAINERS: Add myself to write after approvalPengfei Li1-0/+1
ChangeLog: * MAINTAINERS: Add myself.
2025-08-07contrib/download_prerequisites: Update GMP, MPFR, MPC [PR120237]Tobias Burnus3-9/+9
Download newer versions of GMP, MPFR and MPC (the latest); besides the usual bug fixes and smaller features, MPFR adds new functions for C23, some of which are already used in GCC in the middle (fold-const-call.cc) and in Fortran 2023 for the 'pi' trignonometric functions, if MPFR is new enough. contrib/ChangeLog: PR other/120237 * download_prerequisites: Update to download GMP 6.3.0 (before 6.2.1), MPFR 4.2.2 (before 4.1.0), and MPC 1.3.1 (before 1.2.1). * prerequisites.md5: Update hash. * prerequisites.sha512: Likewise.