]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
4 months agoc: Fix bug in typedef redefinitions of tagged types [PR118765]
Martin Uecker [Sat, 1 Mar 2025 20:32:21 +0000 (21:32 +0100)] 
c: Fix bug in typedef redefinitions of tagged types [PR118765]

When we redefine a tagged type we incorrectly update TYPE_STUB_DECL
of the previously defined type instead of the new one.  Because
TYPE_STUB_DECL is used when determining whether two such types are
the same, this can cause valid typedef redefinitions to be rejected
later. This is only a partial fix for PR118765.

PR c/118765

gcc/c/ChangeLog:
* c-decl.cc (finish_struct,finish_enum): Swap direction when
copying TYPE_STRUB_DECL in redefinitions.

gcc/testsuite/ChangeLog:
* gcc.dg/pr118765.c: New test.

4 months agoc: Fix ICE in error recovery when checking struct compatibility [PR118061]
Martin Uecker [Sat, 1 Mar 2025 16:21:25 +0000 (17:21 +0100)] 
c: Fix ICE in error recovery when checking struct compatibility [PR118061]

Return early when comparing two structures for compatibility
and the type of a member is erroneous.

PR c/118061

gcc/c/ChangeLog:
* c-typeck.cc (tagged_types_tu_compatible_p): Handle
errors in types of struct members.

gcc/testsuite/ChangeLog:
* gcc.dg/pr118061.c: New test.

4 months agoFix spurious visibility error with partially parameterized formal package
Eric Botcazou [Wed, 19 Mar 2025 07:22:33 +0000 (08:22 +0100)] 
Fix spurious visibility error with partially parameterized formal package

This is not a regression but the issue is quite annoying and the fix is
trivial.  The problem is that a formal parameter covered by a box in the
formal package is not visible in the instance when it comes after another
formal parameter that is also a formal package.

It comes from a discrepancy internal to Instantiate_Formal_Package, where
a specific construct (the abbreviated instance) built for the nested formal
package discombobulates the processing done for the outer formal package.

gcc/ada/
* gen_il-gen-gen_nodes.adb (N_Formal_Package_Declaration): Use
N_Declaration instead of Node_Kind as ancestor.
* sem_ch12.adb (Get_Formal_Entity): Remove obsolete alternative.
(Instantiate_Formal_Package): Take into account the abbreviated
instances in the main loop running over the actuals of the local
package created for the formal package.

gcc/testsuite/
* gnat.dg/generic_inst14.adb: New test.
* gnat.dg/generic_inst14_pkg.ads: New helper.
* gnat.dg/generic_inst14_pkg-child.ads: Likewise.

4 months agoLoongArch: Add ABI names for FPR
Xi Ruoyao [Sun, 16 Mar 2025 06:19:53 +0000 (14:19 +0800)] 
LoongArch: Add ABI names for FPR

We already allow the ABI names for GPR in inline asm clobber list, so
for consistency allow the ABI names for FPR as well.

Reported-by: Yao Zi <ziyao@disroot.org>
gcc/ChangeLog:

* config/loongarch/loongarch.h (ADDITIONAL_REGISTER_NAMES): Add
fa0-fa7, ft0-ft16, and fs0-fs7.

gcc/testsuite/ChangeLog:

* gcc.target/loongarch/regname-float-abi.c: New test.

4 months agoMark gcc.target/i386/apx-ndd-tls-1b.c as xfail.
liuhongt [Mon, 17 Mar 2025 05:28:44 +0000 (22:28 -0700)] 
Mark gcc.target/i386/apx-ndd-tls-1b.c as xfail.

It looks like the testcase is fragile, it's supposed to check the
compiler ability of generating code_6_gottpoff_reloc instruction, but
failed since there's a seg_prefixed memory
usage(r14-6242-gd564198f960a2f).

        mov     r13, QWORD PTR j@gottpoff[rip]
        mov     r12, QWORD PTR a@gottpoff[rip]
        mov     rbp, QWORD PTR [rsp+1040]
        lea     rbx, [rsp+1040]
        add     r14, QWORD PTR fs:0, r12

gcc/testsuite/ChangeLog:

PR target/117069
* gcc.target/i386/apx-ndd-tls-1b.c: Add xfail.

4 months agoDaily bump.
GCC Administrator [Wed, 19 Mar 2025 00:17:56 +0000 (00:17 +0000)] 
Daily bump.

4 months agoAVR: target/119355 - Fix ICE in pass avr-fuse-move / -mfuse-move.
Georg-Johann Lay [Tue, 18 Mar 2025 20:22:22 +0000 (21:22 +0100)] 
AVR: target/119355 - Fix ICE in pass avr-fuse-move / -mfuse-move.

This ICE only occurred when the compiler is built with, say
CXXFLAGS='-Wp,-D_GLIBCXX_ASSERTIONS'.  The problem was that
a value from an illegal REGNO was read.  The value was not
used in these cases, but the access triggered an assertion
due to reading past std::array.

gcc/
PR target/119355
* config/avr/avr-passes.cc (memento_t::apply): Only
read values[p.arg] when it is actually used.

4 months agoc++: ICE with ptr-to-member-fn [PR119344]
Marek Polacek [Mon, 17 Mar 2025 21:46:02 +0000 (17:46 -0400)] 
c++: ICE with ptr-to-member-fn [PR119344]

This ICE appeared with the removal of NON_DEPENDENT_EXPR.  Previously
skip_simple_arithmetic would get NON_DEPENDENT_EXPR<CAST_EXPR<>> and
since NON_DEPENDENT_EXPR is neither BINARY_CLASS_P nor UNARY_CLASS_P,
there was no problem.  But now we pass just CAST_EXPR<> and a CAST_EXPR
is a tcc_unary, so we extract its null operand and crash.

skip_simple_arithmetic is called from save_expr.  cp_save_expr already
avoids calling save_expr in a template, so that seems like an appropriate
way to fix this.

PR c++/119344

gcc/cp/ChangeLog:

* typeck.cc (cp_build_binary_op): Use cp_save_expr instead of save_expr.

gcc/testsuite/ChangeLog:

* g++.dg/conversion/ptrmem10.C: New test.

Reviewed-by: Patrick Palka <ppalka@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
4 months agoc++: constexpr ref template arg [PR119194]
Jason Merrill [Tue, 18 Mar 2025 18:44:08 +0000 (14:44 -0400)] 
c++: constexpr ref template arg [PR119194]

Here we were assuming that a constant variable appearing in a template
argument is used for its value.  We also need to handle seeing its address
taken.

PR c++/119194

gcc/cp/ChangeLog:

* decl2.cc (min_vis_expr_r) [ADDR_EXPR]: New case.

gcc/testsuite/ChangeLog:

* g++.dg/template/linkage7.C: New test.

4 months agoc++: ICE when substituting packs into type aliases [PR118104]
Marek Polacek [Mon, 17 Mar 2025 16:56:40 +0000 (12:56 -0400)] 
c++: ICE when substituting packs into type aliases [PR118104]

r12-1094 mentions that adding the assert didn't lead to any regressions
in the testsuite, but this test case demonstrates that we can reach it
with valid code.

Here we arrive in use_pack_expansion_extra_args_p with t which is an
expansion whose pattern is void(Ts, Us) and tparm packs are {Us, Ts},
and parm_packs is { Ts -> <int, int>, Us -> <A, P...> }.  We want to
expand the pack into void(int, A) and void(int, P...).  We compare
int to A, which is fine, but then int to P... which crashes.  But
the code is valid so this patch removes the assert.

PR c++/118104

gcc/cp/ChangeLog:

* pt.cc (use_pack_expansion_extra_args_p): Remove an assert.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/alias-decl-variadic3.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
4 months agocobol: Remove dead code from the driver.
Iain Sandoe [Sun, 16 Mar 2025 10:31:44 +0000 (10:31 +0000)] 
cobol: Remove dead code from the driver.

EXEC_LIB is no longer defined anywhere, so that the dependent code is
now dead.  The rpath code (if required) would need to be conditional
since rpath support is not available on all hosts.  Remove now and then
address if/when it is needed (other drivers do not do this).

gcc/cobol/ChangeLog:

* gcobolspec.cc (append_rpath): Remove.
(lang_specific_driver): Remove hard-wired rpath and library
names.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agogcc, cobol: Check for get_current_dir_name [PR119301]
Iain Sandoe [Sat, 15 Mar 2025 09:43:36 +0000 (09:43 +0000)] 
gcc, cobol: Check for get_current_dir_name [PR119301]

This adds a configure check for get_current_dir_name and falls back
to getcwd() if it is not available on the host.

PR cobol/119301

gcc/cobol/ChangeLog:

* util.cc: Check for the availability of get_current_dir_name
snf fall back to getcwd() if it is not present on the host.

gcc/ChangeLog:

* config.in: Regenerate.
* configure: Regenerate.
* configure.ac: Add check for get_current_dir_name.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agolibphobos: Fix std.getopt doesn't accept const(string)[] anymore
Iain Buclaw [Tue, 18 Mar 2025 18:15:40 +0000 (19:15 +0100)] 
libphobos: Fix std.getopt doesn't accept const(string)[] anymore

Instead of passing receiver into the conversion function, just return
the value and assign it to the receiver. Renamed the conversion function
and also cleaned up all the `typeof' calls, which were very verbose.

libphobos/ChangeLog:

* src/MERGE: Merge upstream phobos 79cbde1ab.

Reviewed-on: https://github.com/dlang/phobos/pull/10684

4 months agolibphobos: Avoid setting union members in std.json, set the whole union instead
Iain Buclaw [Tue, 18 Mar 2025 18:12:14 +0000 (19:12 +0100)] 
libphobos: Avoid setting union members in std.json, set the whole union instead

libphobos/ChangeLog:

* src/MERGE: Merge upstream phobos cafe86453.

Reviewed-on: https://github.com/dlang/phobos/pull/10683

4 months agorust: force cargo to build offline
Marc Poulhiès [Mon, 17 Mar 2025 18:23:50 +0000 (19:23 +0100)] 
rust: force cargo to build offline

gcc/rust/Changelog:
PR rust/119333

* Make-lang.in: Force offline mode for cargo

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
4 months agogccrs: polonius: Vendor Rust dependencies
Arthur Cohen [Tue, 18 Mar 2025 10:39:54 +0000 (11:39 +0100)] 
gccrs: polonius: Vendor Rust dependencies

This fixes PR #119333 by allowing our borrow-checker interface to be built
offline. This was already done for our components in libgrust/, but had never been
done for the borrow-checker.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119333

gcc/rust/ChangeLog:

* checks/errors/borrowck/ffi-polonius/.cargo/config.toml: New file, force vendored deps.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/.cargo-checksum.json: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/CODE_OF_CONDUCT.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/Cargo.toml: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/LICENSE-APACHE: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/LICENSE-MIT: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/README.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/RELEASES.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/examples/borrow_check.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/examples/graspan1.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/src/join.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/src/lib.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/src/map.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/src/test.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/datafrog/src/treefrog.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/.cargo-checksum.json: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/CHANGELOG.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/Cargo.toml: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/LICENSE-APACHE: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/LICENSE-MIT: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/README.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/benches/value.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/__private_api.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/kv/error.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/kv/key.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/kv/mod.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/kv/source.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/kv/value.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/lib.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/macros.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/src/serde.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/log/triagebot.toml: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/.cargo-checksum.json: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/Cargo.toml: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/README.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/facts.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/lib.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/datafrog_opt.rs:
New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/initialization.rs:
New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/liveness.rs:
New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/location_insensitive.rs:
New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/mod.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/polonius-engine/src/output/naive.rs: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/.cargo-checksum.json: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/CODE_OF_CONDUCT.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/Cargo.toml: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/LICENSE-APACHE: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/LICENSE-MIT: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/README.md: New file.
* checks/errors/borrowck/ffi-polonius/vendor/rustc-hash/src/lib.rs: New file.

4 months agoFortran: check type-spec in ALLOCATE of dummy with assumed length [PR119338]
Harald Anlauf [Mon, 17 Mar 2025 21:34:19 +0000 (22:34 +0100)] 
Fortran: check type-spec in ALLOCATE of dummy with assumed length [PR119338]

PR fortran/119338

gcc/fortran/ChangeLog:

* resolve.cc (resolve_allocate_expr): Check F2003:C626: Type-spec
in ALLOCATE of an assumed-length character dummy argument shall be
an asterisk.

gcc/testsuite/ChangeLog:

* gfortran.dg/deferred_character_18.f90: Adjust testcase.
* gfortran.dg/allocate_assumed_charlen_5.f90: New test.

4 months agod: Add missing Declaration bitfield setters/getters
Iain Buclaw [Tue, 18 Mar 2025 17:47:45 +0000 (18:47 +0100)] 
d: Add missing Declaration bitfield setters/getters

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd fde0f8c40a.

Reviewed-on: https://github.com/dlang/dmd/pull/21014

4 months agolibphobos: Merge changes in upstream druntime testsuite
Iain Buclaw [Sat, 15 Mar 2025 15:32:48 +0000 (16:32 +0100)] 
libphobos: Merge changes in upstream druntime testsuite

libphobos/ChangeLog:

* libdruntime/MERGE: Merge upstream druntime d2ee11364c.
* testsuite/libphobos.aa/test_aa.d: Add new test.
* testsuite/libphobos.betterc/test19933.d: Adjust imports.
* testsuite/libphobos.config/test22523.d: Likewise.
* testsuite/libphobos.exceptions/assert_fail.d: Adjust test.
* testsuite/libphobos.exceptions/chain.d: Adjust imports.
* testsuite/libphobos.exceptions/future_message.d: Likewise.
* testsuite/libphobos.exceptions/line_trace.d: Likewise.
* testsuite/libphobos.exceptions/long_backtrace_trunc.d: Likewise.
* testsuite/libphobos.exceptions/static_dtor.d: Likewise.
* testsuite/libphobos.gc/forkgc.d: Likewise.
* testsuite/libphobos.gc/precisegc.d: Likewise.
* testsuite/libphobos.gc/recoverfree.d: Likewise.
* testsuite/libphobos.hash/test_hash.d: Likewise.
* testsuite/libphobos.init_fini/custom_gc.d: Likewise.
* testsuite/libphobos.init_fini/thread_join.d: Likewise.
* testsuite/libphobos.thread/external_threads.d: Likewise.
* testsuite/libphobos.thread/fiber_guard_page.d: Likewise.
* testsuite/libphobos.thread/tlsgc_sections.d: Likewise.
* testsuite/libphobos.thread/tlsstack.d: Likewise.
* testsuite/libphobos.unittest/customhandler.d: Likewise.

4 months agod: Update the copyright years of dmd sources to 2025
Iain Buclaw [Sat, 15 Mar 2025 15:32:48 +0000 (16:32 +0100)] 
d: Update the copyright years of dmd sources to 2025

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd 51be8bb729.

Reviewed-on: https://github.com/dlang/dmd/pull/20958

4 months agoc: Fix handling of [[gnu::musttail] return in if and else bodies [PR119311]
Jakub Jelinek [Tue, 18 Mar 2025 17:51:48 +0000 (18:51 +0100)] 
c: Fix handling of [[gnu::musttail] return in if and else bodies [PR119311]

The following new testcase FAILs with C (and succeeds with C++).
c_parser_handle_musttail is used in c_parser_compound_statement_nostart
where it is directly passed to c_parser_statement_after_labels, and in
c_parser_all_labels where it is returned.  Now, out of the 3
c_parser_all_labels callers, c_parser_statement passes it down to
c_parser_statement_after_labels, but c_parser_if_body and c_parser_else_body
don't, so if there are return statements with [[gnu::musttail]] or
[[clang::musttail]] directly in if or else bodies rather than wrapped with
{}s, we throw that information away.

2025-03-18  Jakub Jelinek  <jakub@redhat.com>

PR c/119311
* c-parser.cc (c_parser_if_body): Pass result of c_parser_all_labels
as last argument to c_parser_statement_after_labels.
(c_parser_else_body): Likewise.

* c-c++-common/musttail14.c: Use * instead of \* in the regexps.
* c-c++-common/musttail25.c: New test.

4 months agoc, c++: Support musttail attribute even using __attribute__ form [PR116545]
Jakub Jelinek [Tue, 18 Mar 2025 17:48:14 +0000 (18:48 +0100)] 
c, c++: Support musttail attribute even using __attribute__ form [PR116545]

Apparently some programs in the wild use
 #if __has_attribute(musttail)
   __attribute__((musttail)) return foo ();
 #else
   return foo ();
 #endif
clang supports musttail both as a standard attribute ([[clang::musttail]]
which we also support for compatibility) and the above worked just
fine with GCC 14 which had __has_attribute(musttail) 0.  Now that it is
0, this doesn't compile anymore.
So, either we need to ensure that __has_attribute(musttail) is 0
and just __has_c{,pp}_attribute({gnu,clang}::musttail) are non-zero,
or IMHO better we just make it work in the attribute form, especially for
C < C23 I can see why some projects would prefer that form.
While [[gnu::musttail]] is rejected as an error in C11 etc. before GCC 15,
rather than just handled as an unknown attribute.
I view this as both a regression and compatibility issue.
The patch handles it in similar spots to fallthrough/assume attributes
inside of __attribute__ for C, and for C++ enables mixing of standard [[]]
and GNU __attribute__(()) attributes at the start of statements in any order.

While working on it, I've noticed we weren't diagnosing arguments to the
clang::musttail attribute (fixed by the c-attribs.cc hunk) and newly
on the __attribute__ form attribute (in that case the arguments aren't just
skipped, they are always parsed and because we don't call decl_attributes
etc., it wouldn't be diagnosed without a manual check).

2025-03-18  Jakub Jelinek  <jakub@redhat.com>

PR c/116545
gcc/
* doc/extend.texi (musttail statement attribute): Document
that musttail GNU attribute can be used as well.
gcc/c-family/
* c-attribs.cc (c_common_clang_attributes): Add musttail.
gcc/c/
* c-parser.cc (c_parser_declaration_or_fndef): Parse
__attribute__((musttail)) return.
(c_parser_handle_musttail): Diagnose attribute arguments.
(c_parser_statement_after_labels): Parse
__attribute__((musttail)) return.
gcc/cp/
* parser.cc (cp_parser_statement): Call cp_parser_attributes_opt
rather than cp_parser_std_attribute_spec_seq.
(cp_parser_jump_statement): Diagnose gnu::musttail attributes
with no arguments.
gcc/testsuite/
* c-c++-common/attr-fallthrough-2.c: Adjust expected diagnostics
for C++.
* c-c++-common/musttail15.c: New test.
* c-c++-common/musttail16.c: New test.
* c-c++-common/musttail17.c: New test.
* c-c++-common/musttail18.c: New test.
* c-c++-common/musttail19.c: New test.
* c-c++-common/musttail20.c: New test.
* c-c++-common/musttail21.c: New test.
* c-c++-common/musttail22.c: New test.
* c-c++-common/musttail23.c: New test.
* c-c++-common/musttail24.c: New test.
* g++.dg/musttail7.C: New test.
* g++.dg/musttail8.C: New test.
* g++.dg/musttail12.C: New test.
* g++.dg/musttail13.C: New test.
* g++.dg/musttail14.C: New test.
* g++.dg/ext/pr116545.C: New test.

4 months agoUpdate cpplib fr.po, sv.po
Joseph Myers [Tue, 18 Mar 2025 17:48:07 +0000 (17:48 +0000)] 
Update cpplib fr.po, sv.po

* fr.po, sv.po: Update.

4 months agoPopulate -original dump for Cobol
Richard Biener [Tue, 11 Mar 2025 12:19:55 +0000 (13:19 +0100)] 
Populate -original dump for Cobol

The following implements -fdump-tree-original dumping for cobol,
mimicing what the D frontend does.

gcc/cobol/
* gengen.cc (gg_finalize_function): Dump to TDI_original.

4 months agocobol: Fifteen new cobol.dg testscases.
Bob Dubner [Tue, 18 Mar 2025 01:47:05 +0000 (21:47 -0400)] 
cobol: Fifteen new cobol.dg testscases.

gcc/testsuite

* cobol.dg/group1/check_88.cob: New testcase.
* cobol.dg/group1/comp5.cob: Likewise.
* cobol.dg/group1/declarative_1.cob: Likewise.
* cobol.dg/group1/display.cob: Likewise.
* cobol.dg/group1/display2.cob: Likewise.
* cobol.dg/group1/line-sequential.cob: Likewise.
* cobol.dg/group1/multiple-compares.cob: Likewise.
* cobol.dg/group1/multiply2.cob: Likewise.
* cobol.dg/group1/packed.cob: Likewise.
* cobol.dg/group1/perform-nested-exit.cob: Likewise.
* cobol.dg/group1/pointer1.cob: Likewise.
* cobol.dg/group1/simple-arithmetic.cob: Likewise.
* cobol.dg/group1/simple-classes.cob: Likewise.
* cobol.dg/group1/simple-if.cob: Likewise.
* cobol.dg/group1/simple-perform.cob: Likewise.

4 months agodoc: regenerate rs6000/rs6000.opt.urls
Michael Matz [Tue, 18 Mar 2025 16:21:23 +0000 (17:21 +0100)] 
doc: regenerate rs6000/rs6000.opt.urls

which I forgot and the autobuilder complained.

* config/rs6000/rs6000.opt.urls: Regenerate.

4 months agocobol: Bring the code base into compliance with C++14
Bob Dubner [Tue, 18 Mar 2025 11:47:39 +0000 (07:47 -0400)] 
cobol: Bring the code base into compliance with C++14

gcc/cobol

* cdf.y: Make compatible with C++14.
* copybook.h: Likewise.
* dts.h: Likewise.
* except.cc: Likewise.
* genapi.cc: Likewise.
* genutil.cc: Likewise.
* genutil.h: Likewise.
* lexio.cc: Likewise.
* parse.y: Likewise.
* parse_ante.h: Likewise.
* show_parse.h: Likewise.
* symbols.cc: Likewise.
* symbols.h: Likewise.
* util.cc: Likewise.

4 months agotestsuite: Add support for dg-output-file directive
Jakub Jelinek [Tue, 18 Mar 2025 15:50:05 +0000 (16:50 +0100)] 
testsuite: Add support for dg-output-file directive

The COBOL tests has many tests which just dump emit lots of output
to stdout and want to compare it against expected output.
We have the dg-output directive, but if one needs more than dozens
of lines in the output, adding hundreds of dg-output directives to
each source uses too much memory and is harder to maintain.

The following patch offers an alternative, dg-output-file
directive where one can supply a text file with expected output
(no regexp matching in that case, just exact output, except that it
handles different line ending styles (for the expected file
using tcl gets, for the actual output skips over \n, \r\n or \r).
And a newline at the end of the whole output is optional (in the actual
output, because I think some boards get it eaten).

Also tested with addition or subtraction of some characters from the
expected output files and saw FAILs with appropriate messages.

2025-03-18  Jakub Jelinek  <jakub@redhat.com>

* doc/sourcebuild.texi (dg-output-file): Document.

* lib/gcc-dg.exp (${tool}-load): If output-file is set, compare
combined output against content of the [lindex ${output-file} 1]
file.
(dg-output-file): New directive.
* lib/dg-test-cleanup.exp (cleanup-after-saved-dg-test): Clear
output-file variable.
* gcc.dg/dg-output-file-1.c: New test.
* gcc.dg/dg-output-file-1-lp64.txt: New test.
* gcc.dg/dg-output-file-1-ilp32.txt: New test.

4 months agoc++: memfn pointer as NTTP argument considered unused [PR119233]
Patrick Palka [Tue, 18 Mar 2025 15:38:33 +0000 (11:38 -0400)] 
c++: memfn pointer as NTTP argument considered unused [PR119233]

This is just the member function pointer version of PR c++/105848,
in which our non-dependent call pruning may cause us to not mark an
otherwise unused function pointer template argument as used.

PR c++/119233

gcc/cp/ChangeLog:

* pt.cc (mark_template_arguments_used): Also handle member
function pointers.

gcc/testsuite/ChangeLog:

* g++.dg/template/fn-ptr5.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
4 months agoBuild and install gcobol driver for the cross build
Matthias Klose [Tue, 18 Mar 2025 15:12:37 +0000 (16:12 +0100)] 
Build and install gcobol driver for the cross build

gcc/cobol/

2025-03-18  Matthias Klose  <doko@ubuntu.com>

* Make-lang.in (GCOBC_TARGET_INSTALL_NAME, gcobol-cross): New.
(cobol.all.cross): Depend on gcobol-cross.
(cobol.install-common): Adjust install for the cross build.
(cobol.uninstall): Use *_INSTALL_NAME for uninstall.

4 months agocobol: Avoid a use of auto.
Iain Sandoe [Mon, 17 Mar 2025 10:04:52 +0000 (10:04 +0000)] 
cobol: Avoid a use of auto.

In this case the deduction for Darwin's implementation is 'char *' which
then conflicts with the second use of data.initial in the find_if
callback.  Let's just specify it as 'const char *'.

gcc/cobol/ChangeLog:

* util.cc (cbl_field_t::report_invalid_initial_value): Avoid
auto here and specify const char *.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agoSCC-Copy: Add More Debug dumps
Andrew Pinski [Mon, 17 Mar 2025 18:28:16 +0000 (11:28 -0700)] 
SCC-Copy: Add More Debug dumps

While debugging a failure, I noticed that SCC copy didn't print
out what it was doing, e.g. replacing name1 with name 2.
This adds that dump.

Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

* gimple-ssa-sccopy.cc (scc_copy_prop::replace_scc_by_value): Dump
what is being replaced with what.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
4 months agolibstdc++: Add P1206R7 from_range members to unordered maps [PR111055]
Tomasz Kamiński [Tue, 18 Mar 2025 10:08:19 +0000 (11:08 +0100)] 
libstdc++: Add P1206R7 from_range members to unordered maps [PR111055]

This is another piece of P1206R7, adding new members to std::unordered_map
and std::unordered_multimap.

PR libstdc++/111055

libstdc++-v3/ChangeLog:

* include/bits/unordered_map.h (unordered_map): Define from_range
constructors and insert_range member.
(unordered_multimap): Likewise.
* testsuite/23_containers/unordered_multimap/cons/from_range.cc:
New test.
* testsuite/23_containers/unordered_multimap/modifiers/insert_range.cc:
New test.
* testsuite/23_containers/unordered_map/cons/from_range.cc:
New test.
* testsuite/23_containers/unordered_map/modifiers/insert_range.cc:
New test.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
4 months agolibstdc++: Add P1206R7 from_range members to unordered sets [PR111055]
Tomasz Kamiński [Mon, 17 Mar 2025 13:30:35 +0000 (14:30 +0100)] 
libstdc++: Add P1206R7 from_range members to unordered sets [PR111055]

This is another piece of P1206R7, adding new members to std::unordered_set
and std::unordered_multiset.

PR libstdc++/111055

libstdc++-v3/ChangeLog:

* include/bits/hashtable.h (_M_rehash_insert)
(_M_insert_range_multi): Extracted rehashing for range insertion
to separate function.
* include/bits/unordered_set.h (unordered_set): Define from_range
constructors and insert_range member.
(unordered_multiset) Likewise.
* testsuite/23_containers/unordered_multiset/cons/from_range.cc:
New test.
* testsuite/23_containers/unordered_multiset/modifiers/insert_range.cc:
New test.
* testsuite/23_containers/unordered_set/cons/from_range.cc:
New test.
* testsuite/23_containers/unordered_set/modifiers/insert_range.cc:
New test.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
4 months agolra: Handle SUBREG in lra_rtx_hash [PR119307]
Jakub Jelinek [Tue, 18 Mar 2025 13:57:41 +0000 (14:57 +0100)] 
lra: Handle SUBREG in lra_rtx_hash [PR119307]

The following testcase ICEs starting with r15-3213 in
decompose_normal_address and starting with r15-3288 ICEs
in lra_rtx_hash, which since r8-5466 can't handle SUBREG
(previously SUBREG was "ei" and lra_rtx_hash can handle
that through
val += lra_rtx_hash (XEXP (x, i));
for e and
val += XINT (x, i);
for i, now it is "ep" where p stands for poly_uint16).

The following patch fixes it by handling SUBREG directly, a variant
could be instead add
        case 'p':
          for (int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
            val += SUBREG_BYTE (x).coeffs[i];
          break;
if you prefer that more (p is used solely for SUBREG and e.g. rtx_equal_p
has
        case 'p':
          if (maybe_ne (SUBREG_BYTE (x), SUBREG_BYTE (y)))
            return false;
          break;
).  Given the above rtx_equal_p snippet and that lra_rtx_hash
is solely used in invariant_hash (and recursion) and invariant_eq_p
uses rtx_equal_p we'll never consider different SUBREGs of the same thing
as the same invariant.

2025-03-18  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/119307
* lra.cc (lra_rtx_hash): Handle SUBREG.

* gcc.target/i386/pr119307.c: New test.

4 months agolibstdc++: Add P1206R7 from_range members to ordered sets [PR111055]
Tomasz Kamiński [Thu, 13 Mar 2025 17:24:38 +0000 (18:24 +0100)] 
libstdc++: Add P1206R7 from_range members to ordered sets [PR111055]

This is another piece of P1206R7, adding new members to std::set
and std::multiset.

PR libstdc++/111055

libstdc++-v3/ChangeLog:

* include/bits/stl_multiset.h: (inser_range)
(multiset(from_range_t, _Rg&&, const _Compare&, const _Alloc&))
(multiset(from_range_t, _Rg&&, const _Alloc&)): Define.
* include/bits/stl_set.h: (set(from_range_t, _Rg&&, const _Alloc&))
(set(from_range_t, _Rg&&, const _Compare&, const _Alloc&), insert_range):
Define.
* testsuite/23_containers/multiset/cons/from_range.cc: New test.
* testsuite/23_containers/multiset/modifiers/insert/insert_range.cc:
New test.
* testsuite/23_containers/set/cons/from_range.cc: New test.
* testsuite/23_containers/set/modifiers/insert/insert_range.cc:
New test.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
4 months agolibstdc++: Add P1206R7 from_range members to ordered maps [PR111055]
Tomasz Kamiński [Fri, 14 Mar 2025 15:04:11 +0000 (16:04 +0100)] 
libstdc++: Add P1206R7 from_range members to ordered maps [PR111055]

This is another piece of P1206R7, adding new members to std::map
and std::multimap.

PR libstdc++/111055

libstdc++-v3/ChangeLog:

* include/bits/ranges_base.h (__detail::__range_to_alloc_type):
Define.
* include/bits/stl_multimap.h: (inser_range)
(multimap(from_range_t, _Rg&&, const _Compare&, const _Alloc&))
(multimap(from_range_t, _Rg&&, const _Alloc&)): Define.
* include/bits/stl_map.h: (map(from_range_t, _Rg&&, const _Alloc&)) i
(map(from_range_t, _Rg&&, const _Compare&, const _Alloc&), insert_range):
Define.
* testsuite/23_containers/multimap/cons/from_range.cc: New test.
* testsuite/23_containers/multimap/modifiers/insert/insert_range.cc: New test.
* testsuite/23_containers/map/cons/from_range.cc: New test.
* testsuite/23_containers/map/modifiers/insert/insert_range.cc: New test.

4 months agocobol: use ldirname in cdf-copy.cc
Jose E. Marchesi [Mon, 17 Mar 2025 15:51:31 +0000 (16:51 +0100)] 
cobol: use ldirname in cdf-copy.cc

This patch changes gcc/cobol/cdf-copy.cc to use the new ldirname from
libibertay rather than the host's dirname.  This removes an include
for libgen.h.

Regtested in x86_64-linux-gnu by running make check-cobol.

gcc/cobol/ChangeLog

* cdf-copy.cc (copybook_elem_t::open_file): Use ldirname rather
than dirname.

4 months agolibiberty: add ldirname function
Jose E. Marchesi [Mon, 17 Mar 2025 11:47:40 +0000 (12:47 +0100)] 
libiberty: add ldirname function

This patch adds a function ldirname to libiberty.  It is implemented
in terms of lbasename.  Basically, given a given pathname, the dirname
part is what is not the basename minus the last directory separator
separating the dirname with the basename.

include/ChangeLog

* libiberty.h (ldirname): New function declaration.
(dos_ldirname): Likewise.
(unix_ldirname): Likewise.

libiberty/ChangeLog

* ldirname.c: New file.
* Makefile.in (CFILES): Add ldirname.c.
(REQUIRED_OFILES): Add ldirname.$(objext).
(./ldirname.$(objext)): New rule.
* makefile.vms (OBJS): Add ldirname.obj.
* configure.com (FILES): Add ldirname.

4 months agocobol: Do not include C++ headers after system.h.
Iain Sandoe [Sat, 15 Mar 2025 09:20:13 +0000 (09:20 +0000)] 
cobol: Do not include C++ headers after system.h.

The headers mentioned in parse.y are already unconditionally included
by system.h (via cobol-system.h).

gcc/cobol/ChangeLog:

* parse.y: Remove c++ header includes appearing after
system.h.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months agodebug/101533 - ICE with variant typedef DIE generation
Richard Biener [Wed, 5 Mar 2025 13:24:50 +0000 (14:24 +0100)] 
debug/101533 - ICE with variant typedef DIE generation

There's a sanity check in gen_type_die_with_usage that trips
unnecessarily for a case where the relevant DIE has already been
generated successfully in other ways.  The following keys the
existing TREE_ASM_WRITTEN check on the correct object, honoring
this and does nothing instead of ICEing for the testcase at hand.

PR debug/101533
* dwarf2out.cc (gen_type_die_with_usage): When we have
output the typedef already do nothing for a typedef variant.
Do not set TREE_ASM_WRITTEN on the type.

* g++.dg/debug/pr101533.C: New testcase.

4 months agoi386: Remove XFAIL for pr103750 testcases
Haochen Jiang [Tue, 11 Mar 2025 02:52:46 +0000 (10:52 +0800)] 
i386: Remove XFAIL for pr103750 testcases

After commit r15-4510, the following testcases also do not need XFAIL.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512f-pr103750-1.c: Remove XFAIL.
* gcc.target/i386/avx512f-pr103750-2.c: Ditto.
* gcc.target/i386/avx512fp16-pr103750-1.c: Ditto.
* gcc.target/i386/avx512fp16-pr103750-2.c: Ditto.

4 months ago[RISC-V] Fix another unreported code quality regression
Jeff Law [Tue, 18 Mar 2025 03:58:03 +0000 (21:58 -0600)] 
[RISC-V] Fix another unreported code quality regression

So here's the other case I was just looking at.  This is a slightly modified
version of some code from 500.perlbench which shows another nop logical
operation:

> void frob (void);
> typedef struct av AV;
> typedef unsigned int U32;
> struct av
> {
>   void *dummy;
>   U32 sv_refcnt;
>   U32 sv_flags;
> };
> void
> Perl_save_ary (AV *const oav)
> {
>   AV *av;
>   unsigned int x1 = oav->sv_flags;
>   unsigned int x2 = x1 & 3221225472;
>   if (x2 == 2147483648)
>     frob ();
> }

https://godbolt.org/z/941vqfGE6

It's not as obvious, but this is probably a regression as well.  I would expect
the gcc-14 code to execute in 1c faster than the current trunk code on a
superscalar design:

gcc-14:                               trunk:
        lw      a5,12(a0)                   lw      a5,12(a0)
        li      a3,-1073741824              li      a3,-2
        li      a4,-2147483648

        and     a5,a5,a3                    srai    a4,a5,30

        beq     a5,a4,.L4                   andi    a4,a4,-1

                                            beq     a4,a3,.L4

Essentially the "li" instrutions can execute in parallel with the lw. But the
rest of the sequence has data dependencies forcing the instructions to execute
serially.  Thus that extra andi extends the critical path by 1c.

Removing the useless andi should make the two sequences perform the same and
reduces the codesize.

Much like the prior case we walk backwards using -fdump-rtl-all -dp to find the
andi:

        andi    a4,a4,-1        # 26    [c=4 l=4]  *anddi3/1

The UID is 26.  And just like the prior case it first shows up in the .split2
dump:

grep insn\ 26 j.c.*
j.c.326r.split2:(insn 26 25 27 2 (set (reg:DI 14 a4 [144])
j.c.327r.ree:(insn 26 25 27 2 (set (reg:DI 14 a4 [144])
j.c.329r.pro_and_epilogue:(insn 26 25 27 2 (set (reg:DI 14 a4 [144])
j.c.330r.dse2:(insn 26 25 27 2 (set (reg:DI 14 a4 [144])

In the .split2 dump:

Splitting with gen_split_77 (riscv.md:3184)
scanning new insn with uid = 25.
scanning new insn with uid = 26.
scanning new insn with uid = 27.
scanning new insn with uid = 28.
deleting insn with uid = 12.
deleting insn with uid = 12.

So insn 12 is where we want to look.

> (jump_insn 12 6 13 2 (parallel [
>             (set (pc)
>                 (if_then_else (ne (and:DI (reg:DI 15 a5 [orig:138 oav_3(D)->sv_flags ] [138])
>                             (const_int -1073741824 [0xffffffffc0000000]))
>                         (const_int -2147483648 [0xffffffff80000000]))
>                     (label_ref:DI 18)
>                     (pc)))
>             (clobber (reg:DI 14 a4 [144]))
>             (clobber (reg:DI 13 a3 [145]))
>         ]) "j.c":16:6 361 {*branchdi_shiftedarith_ne_shifted}
>      (int_list:REG_BR_PROB 856416484 (nil))
>  -> 18)

So that's a conditional branch with the condition

(a5 & 0xffffffffc0000000) != 0xffffffff80000000

Note how those instructions have many low bits as zeros and that the constants
likely require some kind of constant synthesis.  We can conceptually do an
arithmetic right shift of a5 and both constants and get the same result, likely
making the constants easier to synthesize.

And that's precisely what this pattern is designed to do:

> (define_insn_and_split "*branch<ANYI:mode>_shiftedarith_<optab>_shifted"
>   [(set (pc)
>         (if_then_else (any_eq
>                     (and:ANYI (match_operand:ANYI 1 "register_operand" "r")
>                           (match_operand 2 "shifted_const_arith_operand" "i"))
>                     (match_operand 3 "shifted_const_arith_operand" "i"))
>          (label_ref (match_operand 0 "" ""))
>          (pc)))
>    (clobber (match_scratch:X 4 "=&r"))
>    (clobber (match_scratch:X 5 "=&r"))]
>   "!SMALL_OPERAND (INTVAL (operands[2]))
>     && !SMALL_OPERAND (INTVAL (operands[3]))
>     && SMALL_AFTER_COMMON_TRAILING_SHIFT (INTVAL (operands[2]),
>                                              INTVAL (operands[3]))"
>   "#"
>   "&& reload_completed"
>   [(set (match_dup 4) (ashiftrt:X (match_dup 1) (match_dup 7)))
>    (set (match_dup 4) (and:X (match_dup 4) (match_dup 8)))
>    (set (match_dup 5) (match_dup 9))
>    (set (pc) (if_then_else (any_eq (match_dup 4) (match_dup 5))
>                            (label_ref (match_dup 0)) (pc)))]
> {
>   HOST_WIDE_INT mask1 = INTVAL (operands[2]);
>   HOST_WIDE_INT mask2 = INTVAL (operands[3]);
>   int trailing_shift = COMMON_TRAILING_ZEROS (mask1, mask2);
>
>   operands[7] = GEN_INT (trailing_shift);
>   operands[8] = GEN_INT (mask1 >> trailing_shift);
>   operands[9] = GEN_INT (mask2 >> trailing_shift);
> }
It finds the number of low bits in both that must be zero.  In this case it's
30 bits.  So it shifts the register right by 30 bits.  Then constructs the two
new constants, one of which is -1 after shifting. And we emit (set (match_dup
4) (and (match_dup 4) (const_int -1))

And since this splits after register allocation nothing eliminates the useless
and dest,src,-1 and boom we have a regression.

The fix this time is a bit different.  I really don't want to open code the new
RTL.  So instead I create a new operand for the source of the AND statement.
If the constant is going to be -1 then that operand has the same value as the
destination operand (ie, a nop move).  Otherwise it is the appropriate AND
expression.

The nop-move will get eliminated thus resolving the regression.

I suspect some of the other patterns in riscv.md are subject to similar issues,
though I haven't seem them trigger, so I'm leaving them alone for now.

This has been tested in my tester and it'll obviously go through the upstream
CI flow before I push it to the trunk.

gcc/
* config/riscv/riscv.md (equality shifted-arith splitter): Do not
create op AND -1 as it won't be cleaned up post-reload.

gcc/testsuite
* gcc.target/riscv/redundant-andi-2.c: New test.

4 months agoFix r15-8073 (Pass -macos_version_min to the linker)
Andrew Pinski [Tue, 18 Mar 2025 01:16:56 +0000 (18:16 -0700)] 
Fix r15-8073 (Pass -macos_version_min to the linker)

With r15-8073-g952e17223d3a98, gcc_cv_ld64_macosx_version_min is being
used for the replacement and being set in a few locations but
gcc_cv_ld64_macos_version_min is set in others.
Since the auto-host.h variable is named LD64_HAS_MACOS_VERSION_MIN,
I changed over to remove the x from the name.

Committed as obvious after a quick test to make sure LD64_HAS_MACOS_VERSION_MIN
was not set to empty.

gcc/ChangeLog:

* configure: Regenerate.
* configure.ac: s/gcc_cv_ld64_macosx_version_min/gcc_cv_ld64_macos_version_min/.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
4 months agoDaily bump.
GCC Administrator [Tue, 18 Mar 2025 00:19:44 +0000 (00:19 +0000)] 
Daily bump.

4 months agoUpdate .po files
Joseph Myers [Mon, 17 Mar 2025 23:45:57 +0000 (23:45 +0000)] 
Update .po files

gcc/po/
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po,
ja.po, ka.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po,
zh_CN.po, zh_TW.po: Update.

libcpp/po/
* be.po, ca.po, da.po, de.po, el.po, eo.po, es.po, fi.po, fr.po,
id.po, ja.po, ka.po, nl.po, pt_BR.po, ro.po, ru.po, sr.po, sv.po,
tr.po, uk.po, vi.po, zh_CN.po, zh_TW.po: Update.

4 months ago[RISC-V] Fix unreported code quality regression with single bit manipulations
Jeff Law [Mon, 17 Mar 2025 23:29:42 +0000 (17:29 -0600)] 
[RISC-V] Fix unreported code quality regression with single bit manipulations

I was reviewing some code recently and spotted an oddity.  In a few places we
were emitting andi dst,src,-1 and in others [x]ori dst,src,0. Those are
obviously nops and we should get rid of them.

Most of these are coming from a split part of a couple define_insn_and_split
patterns added back in late 2022, so this is an unreported 13, 14 & 15 code
quality regression (verified on godbolt, https://godbolt.org/z/EPszox5Kd).
Essentially the split part is matching over-aggressively and splitting what
should be a trivial bitmanip insn such as bset, bclr or binv into a nop logical
with a bit twiddle.

Since the split portions trigger post-reload nothing comes along to remove the
nop logical operations.

The fix is trivial.  Just refine the condition.  I considered refining the
operand predicates too.  Both are valid approaches.  I noticed the formatting
was goofy, so fixed that while I was in there.

I'm aware of one other similar case, but I haven't concluded if it's a
regression or not.

Tested in my tester.  Waiting for pre-commit CI to do its thing.

Jeff

gcc/
* config/riscv/bitmanip.md (*<or_optab>i<mode>_extrabit): Reject cases
where we only need to twiddle one bit.  Fix formatting.
(*andi<mode>extrabit): Likewise.

gcc/testsuite/

* gcc.target/riscv/redundant-andi.c: New test.
* gcc.target/riscv/redundant-ori.c: Likewise

4 months agogcc.dg/pr90838-2.c: Replace long with long long
H.J. Lu [Mon, 17 Mar 2025 22:02:35 +0000 (15:02 -0700)] 
gcc.dg/pr90838-2.c: Replace long with long long

Since gcc.dg/pr90838-2.c is only for 64-bit integer, replace long with
long long for ILP32 targets.

* gcc.dg/pr90838-2.c (ctz4): Replace long with long long.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
4 months agocobol: Eliminate CPPFLAGS assignment from Make-lang.in [PR119213].
Bob Dubner [Mon, 17 Mar 2025 17:13:50 +0000 (13:13 -0400)] 
cobol: Eliminate CPPFLAGS assignment from Make-lang.in [PR119213].

A number of gcc/cobol files had to be modified to
'#include "../../libgcobol/xxx.h" instead of "xxx.h"

gcc/cobol

PR cobol/119213
* Make-lang.in: Eliminate CPPFLAGS= assignment.
* cdf.y: Modify #includes that reference libgcobol.
* cobol1.cc: Modify #includes that reference libgcobol.
* except.cc: Modify #includes that reference libgcobol.
* gcobolspec.cc: Modify #includes that reference libgcobol.
* genapi.cc: Modify #includes that reference libgcobol.
* gengen.cc: Modify #includes that reference libgcobol.
* genmath.cc: Modify #includes that reference libgcobol.
* genutil.cc: Modify #includes that reference libgcobol.
* parse.y: Modify #includes that reference libgcobol.
* scan.l: Modify #includes that reference libgcobol.
* structs.cc: Modify #includes that reference libgcobol.
* symbols.cc: Modify #includes that reference libgcobol.
* symfind.cc: Modify #includes that reference libgcobol.
* util.cc: Modify #includes that reference libgcobol.

4 months agolibgcobol: Remove unused headers from shared sources.
Bob Dubner [Mon, 17 Mar 2025 20:45:17 +0000 (16:45 -0400)] 
libgcobol: Remove unused headers from shared sources.

This reduces the number of headers included in sources that are
shared with the Front End.

libgcobol/ChangeLog:

* charmaps.cc: Remove unused headers
* libgcobol.h: Likewise.
* valconv.cc: Likewise.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
4 months ago[PR119285][IRA]: Use an additional way of reg equiv invariant substitution correctness
Vladimir N. Makarov [Mon, 17 Mar 2025 19:21:46 +0000 (15:21 -0400)] 
[PR119285][IRA]: Use an additional way of reg equiv invariant substitution correctness

Patch for PR114991 resulted in 5% decrease of SPEC2017 lbm performance
on Zen2 and Zen4.  For one RTL insn of lbm, LRA with PR114991 patch
can not confirm that the equivalence insertion will create a valid RTL
insn.  This resulted in that the pseudo equiv was assumed costly and
pseudo was assigned to hard reg (caller saved as the pseudo lives
through calls) and some other pseudos did not get hard regs as it was
before PR114991 patch.  The insn in question is `pseudo1 = pseduo2 +
pseudo3` where pseudo2 has equiv `hard_reg + const`.  The old code
recognized the insn after equiv substitution as LEA.  The new code
failed.  The patch here makes to use two ways for equiv subsbtitution
correctness, the old one and new one (mostly for memory addresses
where the old code fails to find the substitution correctness).  So
given patch fixes lbm performance degradation and actually makes GCC
to generate the same code as it was before PR114991 patch.

gcc/ChangeLog:

PR rtl-optimization/119285
* ira-costs.cc (equiv_can_be_consumed_p): Use 2 ways for
recognizing a valid insn after equiv insertion.

4 months agors6000: Add -msplit-patch-nops (PR112980)
Michael Matz [Wed, 13 Nov 2024 15:04:06 +0000 (16:04 +0100)] 
rs6000: Add -msplit-patch-nops (PR112980)

as the bug report details some uses of -fpatchable-function-entry
aren't happy with the "before" NOPs being inserted between global and
local entry point on powerpc.  We want the before NOPs be in front
of the global entry point.  That means that the patching NOPs aren't
consecutive for dual entry point functions, but for these usecases
that's not the problem.  But let us support both under the control
of a new target option: -msplit-patch-nops.

gcc/

PR target/112980
* config/rs6000/rs6000.opt (msplit-patch-nops): New option.
* doc/invoke.texi (RS/6000 and PowerPC Options): Document it.
* config/rs6000/rs6000.h (machine_function.stop_patch_area_print):
New member.
* config/rs6000/rs6000.cc (rs6000_print_patchable_function_entry):
Emit split nops under control of that one.
* config/rs6000/rs6000-logue.cc (rs6000_output_function_prologue):
Add handling of split patch nops.

4 months agodoc: Regenerate common.opt.urls
Michal Jires [Mon, 17 Mar 2025 16:12:32 +0000 (17:12 +0100)] 
doc: Regenerate common.opt.urls

Regenerating common.opt.urls, which I missed until autobuilder noticed.

gcc/ChangeLog:

* common.opt.urls: Regenerate.

4 months agogccrs: [E0576] Associated `item` not found in given `type`
Muhammad Mahad [Fri, 19 Jul 2024 13:42:03 +0000 (13:42 +0000)] 
gccrs: [E0576] Associated `item` not found in given `type`

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit):
Add rich error message and error code similiar to rustc with
associaed type and trait name

gcc/testsuite/ChangeLog:

* rust/compile/unknown-associated-item.rs: New test.

Signed-off-by: Muhammad Mahad <mahadtxt@gmail.com>
4 months agogccrs: [gccrs#2987] Patch ICE when deriving Clone and Copy
Liam Naddell [Fri, 19 Jul 2024 18:19:26 +0000 (14:19 -0400)] 
gccrs: [gccrs#2987] Patch ICE when deriving Clone and Copy

gcc/rust/ChangeLog:
* expand/rust-expand-visitor.cc:
Fix ICE caused by unique_ptr UB and buggy iterator use

gcc/testsuite/ChangeLog:
* rust/compile/issue-2987.rs:
Add test for deriving Clone and Copy at the same time

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
4 months agogccrs: Fix ffi and enum conventions
badumbatish [Tue, 23 Jul 2024 20:21:31 +0000 (13:21 -0700)] 
gccrs: Fix ffi and enum conventions

gcc/rust/ChangeLog:

* ast/rust-fmt.h (enum ParseMode):
Drop typedef in Cpp

libgrust/ChangeLog:

* libformat_parser/generic_format_parser/src/lib.rs:
Remove repr(C)
* libformat_parser/src/bin.rs: Use ffi
* libformat_parser/src/lib.rs: pub ffi, create ParseMode and match
rustc's parse mode

4 months agogccrs: Added options for ParseMode
badumbatish [Sat, 20 Jul 2024 07:44:26 +0000 (00:44 -0700)] 
gccrs: Added options for ParseMode

gcc/rust/ChangeLog:

* ast/rust-fmt.cc (Pieces::collect):
Added options for ParseMode
* ast/rust-fmt.h (collect_pieces): Likewise.
(struct Pieces): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler):
Likewise.

libgrust/ChangeLog:

* libformat_parser/generic_format_parser/src/lib.rs: Likewise.
* libformat_parser/src/bin.rs: Likewise.
* libformat_parser/src/lib.rs: Likewise.

4 months agogccrs: Change assertion of constructor
badumbatish [Sun, 21 Jul 2024 22:41:21 +0000 (15:41 -0700)] 
gccrs: Change assertion of constructor

Change the assert of (expr != nullptr) to
(this->expr != nullptr) because we assigned (std::move(expr)) to
this->expr, no need to assert expr

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Change assertion of constructor
(struct InlineAsmOperand):
Change assertion of constructor

4 months agogccrs: [gccrs#3046] ICE on failing to find enum variant
Liam Naddell [Sat, 13 Jul 2024 00:56:08 +0000 (20:56 -0400)] 
gccrs: [gccrs#3046] ICE on failing to find enum variant

gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc:
Fix ICE caused by not finding enum variant by adding new error
message

gcc/testsuite/ChangeLog:
* rust/compile/issue-3046.rs:
Add test for new error message

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
4 months agogccrs: Update pattern with \r* for dg-output tests
badumbatish [Wed, 17 Jul 2024 19:00:44 +0000 (12:00 -0700)] 
gccrs: Update pattern with \r* for dg-output tests

First scan with "rg -v '\\r' gcc/testsuite/rust | rg 'dg-output'"

gcc/testsuite/ChangeLog:

* rust/execute/torture/issue-2187.rs:
Update pattern with \r* for dg-output tests
* rust/execute/xfail/macro1.rs: Likewise

4 months agogccrs: Improve error messages for operator expressions
Antonio Gomes [Sun, 14 Jul 2024 04:45:24 +0000 (01:45 -0300)] 
gccrs: Improve error messages for operator expressions

gcc/rust/ChangeLog:
* hir/tree/rust-hir-expr.h: Add new get_operator_str method in
ArithmeticOrLogicalExpr and CompoundAssignmentExpr
* hir/tree/rust-hir.cc: Likewise
* typecheck/rust-hir-type-check-expr.cc: Improve error message for
operator expressions to display the correct operator symbol

gcc/testsuite/ChangeLog:
* rust/compile/shadow1.rs: Fix test for new error message

Signed-off-by: Antonio Gomes <antoniospg100@gmail.com>
4 months agogccrs: Introduce new class to handle borrow errors
Kushal Pal [Fri, 28 Jun 2024 06:25:52 +0000 (06:25 +0000)] 
gccrs: Introduce new class to handle borrow errors

gcc/rust/ChangeLog:

* Make-lang.in: Compile new file.
* checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go):
Use new class to report errors.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.cc: New file.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.h:
New file, adds new class.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
4 months agogccrs: Fix nightly rustc warnings
Kushal Pal [Mon, 24 Jun 2024 12:07:30 +0000 (12:07 +0000)] 
gccrs: Fix nightly rustc warnings

libgrust/ChangeLog:

* libformat_parser/Cargo.toml:
Used crate-type instead of depricated crate_type.
* libformat_parser/generic_format_parser/src/lib.rs:
Remove dead code.
* libformat_parser/src/lib.rs: Likewise.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
4 months agogccrs: Added FFIVector to get Polonius output on C++ side
Kushal Pal [Wed, 5 Jun 2024 11:09:10 +0000 (11:09 +0000)] 
gccrs: Added FFIVector to get Polonius output on C++ side

gcc/rust/ChangeLog:

* Make-lang.in: Compile new file, rust-polonius.cc
* checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs: Opaque
type to represent FFIVector from C++.
* checks/errors/borrowck/ffi-polonius/src/gccrs_ffi_generated.rs:
Change types of fields in Output.
* checks/errors/borrowck/ffi-polonius/src/lib.rs: Added helper
functions to contruct Polonius output on C++ side,
used helpers to contruct Polonius output on C++ side.
* checks/errors/borrowck/polonius/rust-polonius-ffi.h (make_vector):
FFIVector is a wrapper around std::vector for transfering data
from Rust to C++.
(struct Output): Use pointers to FFIVector instead of bool to
store Polonius output data.
* checks/errors/borrowck/polonius/rust-polonius.h (FFIVector__new):
Helper function.
(FFIVector__new_vec_pair): Likewise.
(FFIVector__new_vec_triple): Likewise.
(FFIVector__push): Likewise.
(FFIVector__push_vec_pair): Likewise.
(FFIVector__push_vec_triple): Likewise.
* checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go):
Convert FFIVector to std::vector representation for easier
navigation.
* checks/errors/borrowck/polonius/rust-polonius.cc: New file,
implementation of helper functions.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
4 months agorust: fix HIR dump for MatchExpr
Marc Poulhiès [Sun, 30 Jun 2024 21:11:17 +0000 (23:11 +0200)] 
rust: fix HIR dump for MatchExpr

The visitor was still using the as_string() method.

gcc/rust/ChangeLog:

* hir/rust-hir-dump.cc (Dump::do_matcharm): New.
(Dump::do_matchcase): New.
(Dump::visit(MatchExpr)): Adjust, don't use as_string.
* hir/rust-hir-dump.h (Dump::do_matcharm, Dump::do_matchcase): New.

Signed-off-by: Marc Poulhiès <dkm@kataplop.net>
4 months agogccrs: [gccrs#3051] Remove unnecessary #include from rust-expr.h
Liam Naddell [Tue, 2 Jul 2024 11:44:47 +0000 (07:44 -0400)] 
gccrs: [gccrs#3051] Remove unnecessary #include from rust-expr.h

gcc/rust/ChangeLog:
* ast/rust-expr.h:
Remove unnecessary include.

Signed-off-by: Liam Naddell <liam.naddell@mail.utoronto.ca>
4 months agogccrs: Safe-guard InlineAsm structs
badumbatish [Mon, 1 Jul 2024 00:37:58 +0000 (17:37 -0700)] 
gccrs: Safe-guard InlineAsm structs

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Safe-guard InlineAsm structs
(struct InlineAsmOperand): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand_in):
Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_inout): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Store parse result of parse_format_string(s)
badumbatish [Sun, 30 Jun 2024 00:12:33 +0000 (17:12 -0700)] 
gccrs: Store parse result of parse_format_string(s)

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct TupleTemplateStr):
Store parse result of parse_format_string(s)
* expand/rust-macro-builtins-asm.cc (parse_format_strings):
Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Clean up monadic operations on expected<>
jjasmine [Wed, 26 Jun 2024 14:39:00 +0000 (07:39 -0700)] 
gccrs: Clean up monadic operations on expected<>

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_asm):
Clean up monadic operations on expected<>

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Addresses warning, put warn unused in right place
jjasmine [Wed, 26 Jun 2024 04:29:13 +0000 (21:29 -0700)] 
gccrs: Addresses warning, put warn unused in right place

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Addresses warning, put warn unused in right place
(parse_reg_operand_inout): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h (enum WARN_UNUSED_RESULT): Likewise.
(enum InlineAsmParseError): Likewise.
(validate): Likewise.
(parse_asm_arg): Likewise.
(parse_format_strings): Likewise.
(parse_clobber_abi): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_inlateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_sym): Likewise.
(parse_reg_operand_unexpected): Likewise.
(parse_asm): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_format_string): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Add WARN_UNUSED_RESULT parse error
jjasmine [Wed, 26 Jun 2024 03:33:22 +0000 (20:33 -0700)] 
gccrs: Add WARN_UNUSED_RESULT parse error

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.h (enum InlineAsmParseError):
Add WARN_UNUSED_RESULT parse error
(enum WARN_UNUSED_RESULT): Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Added a test that is expected to fail
jjasmine [Mon, 17 Jun 2024 04:23:21 +0000 (21:23 -0700)] 
gccrs: Added a test that is expected to fail

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
added comments
(parse_options): Likewise
(parse_asm_arg): Likewise
(parse_asm): Likewise
* expand/rust-macro-builtins-asm.h: Likewise

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_illegal_options.rs: new test
* rust/compile/inline_asm_illegal_operands.rs: New test.
This is expected to fail but we couldn't resolve parse_expr()'s
general functionality yet

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Added tl::expected to parse_operand
jjasmine [Mon, 17 Jun 2024 03:40:06 +0000 (20:40 -0700)] 
gccrs: Added tl::expected to parse_operand

Added tl::expected to parse_operand by implementing the validation
inside the parse_reg_operand function.

gcc/rust/ChangeLog:

* ast/rust-expr.h:
Added tl::expected to parse_operand
* expand/rust-macro-builtins-asm.cc (parse_reg): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h: Likewise.

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Scaffold expected on parse_options and asm_arg
jjasmine [Sun, 16 Jun 2024 18:03:23 +0000 (11:03 -0700)] 
gccrs: Scaffold expected on parse_options and asm_arg

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (check_and_set):
Scaffold expected on parse_options and asm_arg
(parse_options): Likewise
(parse_asm_arg): Likewise
* expand/rust-macro-builtins-asm.h (check_and_set): Likewise
(parse_label): Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Finish expected parse_reg_operand
jjasmine [Sun, 16 Jun 2024 05:18:22 +0000 (22:18 -0700)] 
gccrs: Finish expected parse_reg_operand

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand_in):
Finish expected parse_reg_operand
(parse_reg_operand_unexpected): Likewise
* expand/rust-macro-builtins-asm.h (parse_reg_operand_unexpected): Likewise

Signed-off-by: badumbatish <tanghocle456@gmail.com>
4 months agogccrs: Finish incorporating expected of parse_reg_operand
jjasmine [Fri, 14 Jun 2024 06:06:01 +0000 (23:06 -0700)] 
gccrs: Finish incorporating expected of parse_reg_operand

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
Finish incorporating expected of parse_reg_operand
(parse_reg): Likewise.
(parse_reg_operand): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_sym): Likewise.
(MacroBuiltin::asm_handler): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
(parse_format_strings): Likewise.
(validate): Likewise.
* expand/rust-macro-builtins-asm.h (class InlineAsmParseError): Likewise.
(enum InlineAsmParseError): Likewise.
(validate): Likewise.
(parse_format_strings): Likewise.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
(parse_reg_operand_lateout): Likewise.
(parse_reg_operand_inout): Likewise.
(parse_reg_operand_inlateout): Likewise.
(parse_reg_operand_const): Likewise.
(parse_reg_operand_sym): Likewise.

4 months agogccrs: Add RAW_STRING_LITERAL
ansh [Mon, 24 Jun 2024 11:01:53 +0000 (04:01 -0700)] 
gccrs: Add RAW_STRING_LITERAL

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit):
Handle case for RAW_STRING_LITERAL.
* ast/rust-ast.cc (AttributeParser::parse_meta_item_inner):
Likewise.
(AttributeParser::parse_literal): Likewise.
* ast/rust-ast.h: Likewise.
* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_literal):
Likewise.
* lex/rust-lex.cc (Lexer::parse_raw_string): Likewise.
* lex/rust-token.cc (Token::as_string): Likewise.
* lex/rust-token.h (enum PrimitiveCoreType): Likewise.
* parse/rust-parse-impl.h (Parser::parse_attr_input): Likewise.
(Parser::parse_literal_expr): Likewise.
(Parser::parse_pattern_no_alt): Likewise.

Signed-off-by: ansh <anshmalik2002@gmail.com>
4 months agogccrs: Added ExprType::InlineAsm
jjasmine [Sun, 23 Jun 2024 18:00:58 +0000 (11:00 -0700)] 
gccrs: Added ExprType::InlineAsm

gcc/rust/ChangeLog:

* hir/tree/rust-hir-expr.h:
Added ExprType::InlineAsm
* hir/tree/rust-hir.h:
Added ExprType::InlineAsm

4 months agogccrs: Add test case for using asm! outside of unsafe {}
jjasmine [Sat, 22 Jun 2024 06:38:10 +0000 (23:38 -0700)] 
gccrs: Add test case for using asm! outside of unsafe {}

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_outside_unsafe.rs: New test.

4 months agogccrs: expand: Switch semicolon boolean to an enum instead.
Arthur Cohen [Tue, 18 Jun 2024 11:47:57 +0000 (13:47 +0200)] 
gccrs: expand: Switch semicolon boolean to an enum instead.

gcc/rust/ChangeLog:

* ast/rust-ast-fragment.h (enum class): Add InvocKind and AsmKind enums.
* ast/rust-macro.h: Switch semicolon boolean to InvocKind enum.
* expand/rust-expand-visitor.cc (ExpandVisitor::visit): Likewise.
* expand/rust-macro-builtins-asm.cc (MacroBuiltin::asm_handler): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler): Likewise.
* expand/rust-macro-builtins-include.cc (MacroBuiltin::include_bytes_handler): Likewise.
(MacroBuiltin::include_str_handler): Likewise.
(MacroBuiltin::include_handler): Likewise.
* expand/rust-macro-builtins-location.cc (MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Likewise.
(MacroBuiltin::line_handler): Likewise.
* expand/rust-macro-builtins-log-debug.cc (MacroBuiltin::assert_handler): Likewise.
* expand/rust-macro-builtins-utility.cc (MacroBuiltin::compile_error_handler): Likewise.
(MacroBuiltin::concat_handler): Likewise.
(MacroBuiltin::env_handler): Likewise.
(MacroBuiltin::cfg_handler): Likewise.
(MacroBuiltin::stringify_handler): Likewise.
* expand/rust-macro-builtins.cc (format_args_maker): Likewise.
(enum class): Likewise.
(inline_asm_maker): Likewise.
(MacroBuiltin::sorry): Likewise.
(MacroBuiltin::proc_macro_builtin): Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise.
(MacroExpander::expand_eager_invocations): Likewise.
(MacroExpander::expand_invoc): Likewise.
* expand/rust-macro-expand.h (struct MacroExpander): Likewise.

4 months agogccrs: expand: Keep track of semicoloned builtin macros
Arthur Cohen [Fri, 14 Jun 2024 14:45:34 +0000 (16:45 +0200)] 
gccrs: expand: Keep track of semicoloned builtin macros

This is quite a rough fix (like a lot of the macro expansion code...) but
it allows built-in macros to be treated as statements. I *think* asm!()
might be the only one where it really matters, but also doing something
like

{
    line!();
}

will now work, whereas before the macro invocation would not get expanded
properly and would be ignored.

gcc/rust/ChangeLog:

* ast/rust-ast-fragment.h: Pass `is_semicolon` information to builtin
macro transcribers.
* ast/rust-macro.h: Pass semicolon information to transcriber..
* expand/rust-macro-builtins-asm.cc (MacroBuiltin::asm_handler): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm): Likewise.
* expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler): Likewise.
* expand/rust-macro-builtins-include.cc (MacroBuiltin::include_bytes_handler): Likewise.
(MacroBuiltin::include_str_handler): Likewise.
(MacroBuiltin::include_handler): Likewise.
* expand/rust-macro-builtins-location.cc (MacroBuiltin::file_handler): Likewise.
(MacroBuiltin::column_handler): Likewise.
(MacroBuiltin::line_handler): Likewise.
* expand/rust-macro-builtins-log-debug.cc (MacroBuiltin::assert_handler): Likewise.
* expand/rust-macro-builtins-utility.cc (MacroBuiltin::compile_error_handler): Likewise.
(MacroBuiltin::concat_handler): Likewise.
(MacroBuiltin::env_handler): Likewise.
(MacroBuiltin::cfg_handler): Likewise.
(MacroBuiltin::stringify_handler): Likewise.
* expand/rust-macro-builtins.cc (format_args_maker): Likewise.
(inline_asm_maker): Likewise.
(MacroBuiltin::sorry): Likewise.
(MacroBuiltin::proc_macro_builtin): Likewise.
* expand/rust-macro-builtins.h: Likewise.
* expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise.
(MacroExpander::expand_invoc): Likewise.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Remove rust_unreachable.
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

4 months agogccrs: Fix optional trait parsing
dave [Wed, 15 Nov 2023 18:28:27 +0000 (12:28 -0600)] 
gccrs: Fix optional trait parsing

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Check for ?Trait in visitor

gcc/testsuite/ChangeLog:

* rust/compile/issue-2725.rs: New test.

Signed-off-by: Dave Evans <dave@dmetwo.org>
4 months agogccrs: Partial second layer of expected in parsing asm
jjasmine [Wed, 12 Jun 2024 06:25:50 +0000 (23:25 -0700)] 
gccrs: Partial second layer of expected in parsing asm

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parseDirSpec):
Partial second layer of expected in parsing asm
(parse_clobber_abi): Likewise
(parse_operand): Likewise
(parse_reg_operand): Likewise
(parse_asm_arg): Likewise
* expand/rust-macro-builtins-asm.h (parse_clobber_abi): Likewise
(parse_reg_operand): Likewise
(parse_operand): Likewise

4 months agogccrs: Expected first layer done
jjasmine [Wed, 12 Jun 2024 05:07:14 +0000 (22:07 -0700)] 
gccrs: Expected first layer done

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg):
Expected first layer done
(parse_reg_operand): Likewise.
(parse_asm_arg): Likewise.
(parse_format_strings): Likewise.
(parse_asm): Likewise.
(validate): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm_arg): Likewise.
(validate): Likewise.
(parse_format_strings): Likewise.

4 months agogccrs: Move parser and last_token_id to InlineAsmCtx
jjasmine [Wed, 12 Jun 2024 00:56:20 +0000 (17:56 -0700)] 
gccrs: Move parser and last_token_id to InlineAsmCtx

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_clobber_abi):
Move parser and last_token_id to InlineAsmCtx to prepapre
for tl::expected.
(parse_reg): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_format_string): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (class InlineAsmParseError): Likewise.
(parse_asm_arg): Likewise.
(check_and_set): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_clobber_abi): Likewise.
(parse_format_string): Likewise.

4 months agogccrs: Update parser to parse strings in the first stage
jjasmine [Tue, 11 Jun 2024 23:57:48 +0000 (16:57 -0700)] 
gccrs: Update parser to parse strings in the first stage

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Update parser to parse strings in the first stage
(parse_label): not needed right now

4 months agogccrs: Scaffolding validation of asm!
jjasmine [Tue, 11 Jun 2024 01:08:42 +0000 (18:08 -0700)] 
gccrs: Scaffolding validation of asm!

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_asm):
Scaffolding validation of asm!
(validate): Likewise
* expand/rust-macro-builtins-asm.h (validate): Likewise

4 months agogccrs: Partial support for operand
jjasmine [Mon, 10 Jun 2024 23:54:34 +0000 (16:54 -0700)] 
gccrs: Partial support for operand

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmOperand):
Partial support for operand
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
(parse_label): Likewise.
* expand/rust-macro-builtins-asm.h (parse_label): Likewise.

4 months agogccrs: Refactoring and supporting more parse_reg_operand
jjasmine [Mon, 10 Jun 2024 21:04:11 +0000 (14:04 -0700)] 
gccrs: Refactoring and supporting more parse_reg_operand

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct InlineAsmOperand):
Refactoring and supporting more parse_reg_operand
* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Likewise.
(rust_debug): Likewise.

4 months agogccrs: Fix visitor-related warnings
jjasmine [Thu, 6 Jun 2024 01:12:49 +0000 (18:12 -0700)] 
gccrs: Fix visitor-related warnings

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit):
Fix visitor-related warnings
* ast/rust-ast-collector.h: Likewise.
* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise.
* ast/rust-ast-visitor.h: Likewise.
* checks/errors/borrowck/rust-bir-builder-struct.h: Likewise.
* checks/errors/borrowck/rust-function-collector.h: Likewise.
* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
* checks/errors/rust-const-checker.h: Likewise.
* expand/rust-derive.h: Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
* hir/rust-hir-dump.cc (Dump::visit): Likewise.
* hir/rust-hir-dump.h: Likewise.
* hir/tree/rust-hir-visitor.h: Likewise.
* resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-base.h: Likewise.

4 months agogccrs: Add potentially_nonpromoted_keywords set str
jjasmine [Wed, 5 Jun 2024 15:24:50 +0000 (08:24 -0700)] 
gccrs: Add potentially_nonpromoted_keywords set str

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Add potentially_nonpromoted_keywords set str
(check_identifier): likewise
* expand/rust-macro-builtins-asm.h (parse_format_string):
likewise

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_parse_operand.rs: fix warnings

4 months agogccrs: Successful parse of in and inout, albeit with str
jjasmine [Wed, 5 Jun 2024 06:14:19 +0000 (23:14 -0700)] 
gccrs: Successful parse of in and inout, albeit with str

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Successful parse of in and inout, albeit with str
(check_identifier): Likewise.
(parse_asm_arg): Likewise.
* expand/rust-macro-builtins-asm.h (parse_format_string): Likewise.

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_parse_operand.rs: New test.

4 months agogccrs: Scaffolding HIRFullVisitor for inline asm
jjasmine [Wed, 5 Jun 2024 03:17:23 +0000 (20:17 -0700)] 
gccrs: Scaffolding HIRFullVisitor for inline asm

gcc/rust/ChangeLog:

* ast/rust-ast-visitor.h:
Scaffolding HIRFullVisitor for inline asm
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* hir/tree/rust-hir-visitor.h (RUST_HIR_VISITOR_H): Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

4 months agogccrs: Scaffolding ast visitor for InlineAsm
jjasmine [Wed, 5 Jun 2024 02:34:58 +0000 (19:34 -0700)] 
gccrs: Scaffolding ast visitor for InlineAsm

gcc/rust/ChangeLog:

* ast/rust-ast-visitor.h:
Scaffolding ast visitor for InlineAsm
* ast/rust-ast.cc (InlineAsm::accept_vis): Likewise.
* ast/rust-expr.h: Likewise.

4 months agogccrs: Fix warnings
jjasmine [Sat, 1 Jun 2024 02:34:49 +0000 (19:34 -0700)] 
gccrs: Fix warnings

gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_reg_operand):
Fix compile warnings.
(parse_options): Likewise.
(parse_asm): Likewise.

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_illegal_options.rs:

4 months agogccrs: Partial unsafe support for inline asm
jjasmine [Fri, 31 May 2024 23:09:40 +0000 (16:09 -0700)] 
gccrs: Partial unsafe support for inline asm

gcc/rust/ChangeLog:

* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit):
Partial unsafe support for inline asm
* checks/errors/rust-unsafe-checker.h: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.

4 months agogccrs: Add support for AST to HIR inline asm translation
jjasmine [Fri, 31 May 2024 21:55:45 +0000 (14:55 -0700)] 
gccrs: Add support for AST to HIR inline asm translation

gcc/rust/ChangeLog:

* ast/rust-expr.h:
Add support for AST to HIR inline asm translation
* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-base.h: Likewise.
* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
* hir/rust-ast-lower-expr.h: Likewise.
* hir/tree/rust-hir-expr.h (class InlineAsm): Likewise.

4 months agogccrs: Slim down the test cases
jjasmine [Fri, 31 May 2024 09:06:18 +0000 (02:06 -0700)] 
gccrs: Slim down the test cases

gcc/testsuite/ChangeLog:

* rust/compile/inline_asm_faulty_clobber.rs: compress
the test
* rust/compile/inline_asm_nop.rs: compress
the test
* rust/compile/inline_asm_faulty_clobber_1.rs: Removed.
* rust/compile/inline_asm_faulty_clobber_2.rs: Removed.
* rust/compile/inline_asm_nop_2.rs: Removed.

4 months agogccrs: Refactoring for inline asm pr
jjasmine [Fri, 31 May 2024 09:01:18 +0000 (02:01 -0700)] 
gccrs: Refactoring for inline asm pr

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
major refactoring of inline asm, mostly concerns
naming convention, trinary conditionals, warnings,
adding rust_unreachables in not-yet supported errors.
(struct InlineAsmRegOrRegClass): Likewise.
(struct InlineAsmOperand): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_clobber_abi): Likewise.
(parse_reg): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(check_and_set): Likewise.
(parse_options): Likewise.
(parse_format_string): Likewise.
(parse_asm_arg): Likewise.
(parse_asm): Likewise.
* expand/rust-macro-builtins-asm.h (parse_asm_arg): Likewise.
(check_identifier): Likewise.
(check_and_set): Likewise.
(parse_operand): Likewise.
(parse_reg_operand): Likewise.
(parse_options): Likewise.
(parse_reg): Likewise.
(parse_clobber_abi): Likewise.
* expand/rust-macro-builtins.cc (enum class): Likewise.
(inline_asm_maker): Likewise.
* checks/errors/borrowck/ffi-polonius/Cargo.lock: Removed. Likewise.

gcc/testsuite/ChangeLog:
* rust/compile/inline_asm_faulty_clobber.rs: Likewise.
* rust/compile/inline_asm_faulty_clobber_1.rs: Likewise.
* rust/compile/inline_asm_faulty_clobber_2.rs: Likewise.
* rust/compile/inline_asm_illegal_options.rs: Likewise.

4 months agogccrs: Got AST::Fragment to be created from InlineAsm
jjasmine [Wed, 29 May 2024 04:56:19 +0000 (21:56 -0700)] 
gccrs: Got AST::Fragment to be created from InlineAsm

gcc/rust/ChangeLog:

* ast/rust-expr.h (struct AnonConst):
Got AST::Fragment to be created from InlineAsm.
(struct InlineAsmOperand): Likewise.
(class InlineAsm): Likewise.
* expand/rust-macro-builtins-asm.cc (parse_reg_operand): Likewise.
(parse_asm): likewise