]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
8 weeks agolibstdc++: Add dg-bogus check to istreambuf_iterator/105580.cc [PR105580]
Tomasz Kamiński [Mon, 2 Mar 2026 10:37:43 +0000 (11:37 +0100)] 
libstdc++: Add dg-bogus check to istreambuf_iterator/105580.cc [PR105580]

PR libstdc++/105580

libstdc++-v3/ChangeLog:

* testsuite/24_iterators/istreambuf_iterator/105580.cc:
Add dg-bogus check for warning.

8 weeks agolibstdc++: Add #pragma to slience null-dereference warning in istreambuf_iterator...
Tomasz Kamiński [Fri, 27 Feb 2026 19:14:44 +0000 (20:14 +0100)] 
libstdc++: Add #pragma to slience null-dereference warning in istreambuf_iterator::operator++ [PR105580]

The warning was produced by following sequence, given an istream_iterator<char>
it, such that *it will result in hitting EoF in it->_M_get(), and thus clearing
_M_sbuf, the subsequent call to ++it, will result in _M_sbuf->sbumpc() call on
null pointer. This is however an false-positive, as in such situation
it == istream_iteator() returns true, and the iterator should not be
incremented in first place.

This patch sliences the issue, by disabling the "-Wnull-dereference" using
GCC diagnostic pragmas. To work correctly the pragmas needs to be placed around
streambuf functions on which the issue originating from istreambuf_iterator are
reported.

PR libstdc++/105580

libstdc++-v3/ChangeLog:

* include/std/streambuf (streambuf::gptr, streambuf::egptr)
(streambuf::gbump): Surround with pragma disabling -Wnull-dereference.
* testsuite/24_iterators/istreambuf_iterator/105580.cc: Remove check for
warning being emitted.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
8 weeks agoAdd changelog entry for r16-7757 manually.
Jakub Jelinek [Mon, 2 Mar 2026 09:54:04 +0000 (10:54 +0100)] 
Add changelog entry for r16-7757 manually.

8 weeks agoDaily bump.
GCC Administrator [Mon, 2 Mar 2026 09:49:03 +0000 (09:49 +0000)] 
Daily bump.

8 weeks agoi386: Fix up avx512fp16_mov<mode> AVX10.2 operand order for -masm=intel [PR124294]
Jakub Jelinek [Mon, 2 Mar 2026 09:46:00 +0000 (10:46 +0100)] 
i386: Fix up avx512fp16_mov<mode> AVX10.2 operand order for -masm=intel [PR124294]

This insn uses incorrect operand order for -masm=intel in the AVX10.2
variant.
I've checked for similar mistakes and haven't found any in all the i386/*.md
files.

Note, I also wonder why the insn doesn't use * in front of the define_insn
name, I can't find anything that would need gen_avx512fp16_movv8{hi,hf,bf}.

2026-03-02  Jakub Jelinek  <jakub@redhat.com>

PR target/124294
* config/i386/sse.md (avx512fp16_mov<mode>): Fix ordering of operands
for -masm=intel for the avx10_2 alternative.  Fix up indentation in
the insn condition.
(vec_set<mode>_0): Fix comment typo, higer -> higher.

* gcc.target/i386/avx10_2-pr124294.c: New test.

8 weeks agoAdd r16-7757 -> r16-7745 to ignored_commits
Jakub Jelinek [Mon, 2 Mar 2026 09:42:29 +0000 (10:42 +0100)] 
Add r16-7757 -> r16-7745 to ignored_commits

2026-03-02 00:16:26,078:INFO:root:While processing 9a7da540b63e7d77e747b5cdd6fdbbd3954e28c8:
2026-03-02 00:16:26,078:INFO:root:Expected empty second line in commit message: "Revert "[PR115042, LRA]: Postpone processing of new reload insns" as it"

2026-03-02  Jakub Jelinek  <jakub@redhat.com>

* gcc-changelog/git_update_version.py (ignored_commits): Add
9a7da540b63e7d77e747b5cdd6fdbbd3954e28c8.

8 weeks agotestsuite: Fix testism in avx512fp16-xorsign-1.c
Tamar Christina [Mon, 2 Mar 2026 08:16:38 +0000 (08:16 +0000)] 
testsuite: Fix testism in avx512fp16-xorsign-1.c

After r16-7762-g0383e6c398a this test now only vectorizes
the main loop and not the early break result checking loop
due to the FP * being able to raise an FE and we're compiling
with -ftrapping-math.

Test was marked unsupported so didn't notice it before.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx512fp16-xorsign-1.c: Update loop count.

8 weeks agotestsuite: arm: drop additional option -march=armv7-a
Torbjörn SVENSSON [Mon, 23 Feb 2026 08:30:34 +0000 (09:30 +0100)] 
testsuite: arm: drop additional option -march=armv7-a

Since r16-7155-g74907f407db641, the -march option is part of the
arm_neon effective target, thus, the extra -march is pointless.
Using -march=armv7-a also prevents testing using softfp or hard float
ABI.

gcc/testsuite/ChangeLog:

* gcc.target/arm/addr-modes-int.c: Drop additional option
-march=armv7-a.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
8 weeks agotestsuite: add require effective target profile_update_atomic
Torbjörn SVENSSON [Tue, 24 Feb 2026 16:31:26 +0000 (17:31 +0100)] 
testsuite: add require effective target profile_update_atomic

gcc/testsuite/ChangeLog:

* gcc.misc-tests/gcov-30.c: Add require effective target
profile_update_atomic.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
8 weeks agotestsuite: arm: adjust expected assembler for bfloat16_*_2.c tests
Torbjörn SVENSSON [Mon, 23 Feb 2026 09:01:57 +0000 (10:01 +0100)] 
testsuite: arm: adjust expected assembler for bfloat16_*_2.c tests

Since r16-5947-ga6c50ec2c6ebcb, gcc no longer uses a register for the
stack offset.  Adjust the expected assembler to use sp directly instead.

r16-5946-g83739ee76da65d produces:
stacktest1:
        sub     sp, sp, #8
        add     r3, sp, #6
        strh    r0, [r3]        @ __bf16
        ldrh    r0, [sp, #6]    @ __bf16
        add     sp, sp, #8
        bx      lr

r16-5947-ga6c50ec2c6ebcb produces:
stacktest1:
        sub     sp, sp, #8
        strh    r0, [sp, #6]    @ __bf16
        ldrh    r0, [sp, #6]    @ __bf16
        add     sp, sp, #8
        bx      lr

gcc/testsuite/ChangeLog:

* gcc.target/arm/bfloat16_scalar_1_2.c: Adjust assembler to
match compiler.
* gcc.target/arm/bfloat16_scalar_2_2.c: Likewise.
* gcc.target/arm/bfloat16_scalar_3_2.c: Likewise.
* gcc.target/arm/bfloat16_simd_1_2.c: Likewise.
* gcc.target/arm/bfloat16_simd_2_2.c: Likewise.
* gcc.target/arm/bfloat16_simd_3_2.c: Likewise.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
8 weeks agotestsuite: add -Wno-overflow to avoid warning in test [PR123191]
Torbjörn SVENSSON [Thu, 26 Feb 2026 16:37:25 +0000 (17:37 +0100)] 
testsuite: add -Wno-overflow to avoid warning in test [PR123191]

Without -Wno-overflow, for arm-none-eabi targets, I see warnings like:
coreutils-group_number.c:13:21: warning: conversion from 'long long unsigned int' to 'size_t' {aka 'unsigned int'} changes value from '18446744073709551615' to '4294967295' [-Woverflow]

gcc/testsuite/ChangeLog:

PR testsuite/123191
* c-c++-common/analyzer/coreutils-group_number.c: Add
-Wno-overflow.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
8 weeks agotestsuite: Fix up anon4.C test for excess precision targets
Jakub Jelinek [Mon, 2 Mar 2026 07:02:45 +0000 (08:02 +0100)] 
testsuite: Fix up anon4.C test for excess precision targets

The g++.dg/reflect/anon4.C test FAILs on i686-linux, because with
extended precision the store to .c rounds to double precision, but comparison
of it against 3.14 constant doesn't.

2026-03-02  Jakub Jelinek  <jakub@redhat.com>

* g++.dg/reflect/anon4.C (test): Use (double) 3.14 instead of 3.14 in
comparisons.

8 weeks agoRemove gld --as-needed workaround on Solaris/x86 [PR57261]
Rainer Orth [Sun, 1 Mar 2026 20:16:33 +0000 (21:16 +0100)] 
Remove gld --as-needed workaround on Solaris/x86 [PR57261]

When configured to use gld, gcc has disabled the --as-needed option
as a workaround for binutils PR ld/12320:

[build] Fix Solaris --as-needed/-z ignore detection (PR target/57261)
        https://gcc.gnu.org/legacy-ml/gcc-patches/2013-05/msg00698.html

gld would add an unnecessary dependency on libgcc_s.so.1 even though
--as-needed was used.

Back then, libgcc_s.so.1 wasn't bundled with Solaris, so even trivial
programs would fail to run unless linked with -R <libdir>.

This workaround is no longer necessary for several reasons:

* In Solaris 11, libgcc_s.so.1 is bundled, so there won't be runtime
  failures.

* Although the problem occured more often on x86, Solaris/SPARC is
  affected just the same.  Nonetheless the workaround isn't used there.

* The gld bug has finally been fixed for binutils 2.47, so the issue is
  going to vanish soon.

Therefore this patch removes the workaround, bringing x86 en par with
SPARC.

Bootstrapped without regressions on i386-pc-solaris2.11,
amd64-pc-solaris2.11, and x86_64-pc-linux-gnu.

2026-02-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc:
PR target/57261
* configure.ac (gcc_cv_ld_as_needed) <i?86-*-solaris2* |
x86_64-*-solaris2*>: Don't disable.
* configure: Regenerate.

8 weeks agoSwitch to HAVE_SOLARIS_LD
Rainer Orth [Sun, 1 Mar 2026 17:32:26 +0000 (18:32 +0100)] 
Switch to HAVE_SOLARIS_LD

When configuring GCC to use GNU ld on Solaris, gcc/configure can get
inconsistent ideas about gnu_ld_flag, which results in wrong settings
for various macros:

* Toplevel configure determines LD from PATH using
  NCN_STRICT_CHECK_TOOLS(LD, ld).  This may be either Solaris ld or GNU ld.

* The resulting LD is always passed to gcc/configure in stages 1 to 3.

* However, when LD and the value of --with-ld differ, there can result
  two values of gnu_ld_flag in different sections of gcc/configure:

** config/lib-ld.m4 (AC_LIB_PROG_LD_GNU) determines gnu_ld_flag from $LD.

** However, gcc/configure also checks gcc_cv_ld which can come from
   either --with-ld or PATH.

* When this happens, several linker tests arrive at wrong values,
  e.g. Solaris ld versions of LD_AS_NEEDED_OPTION when actually GNU ld
  is used.

To avoid this, this patch determines gnu_ld_flag from ld -V/--version
once gcc_cv_ld has finally been set.

Besides, just like the HAVE_GNU_AS case, the majority of HAVE_GNU_LD
uses are in Solaris-specific code to distinguish GNU ld from Solaris ld.
Again, it's easier to turn the check around, checking for Solaris ld
directly, which this patch does.

Bootstrapped without regressions on sparcv9-sun-solaris2.11,
amd64-pc-solaris2.11, sparc64-unknown-linux-gnu, and
x86_64-pc-linux-gnu.

2026-02-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc:
* configure.ac (solaris_ld): New check.
Test solaris_ld instead of gnu_ld_flag.
* configure: Regenerate.
* config.in: Regenerate.
* config/i386/sol2.h: Switch to HAVE_SOLARIS_LD.
* config/sol2.h: Likewise.
* config/sparc/sol2.h: Likewise.
* config/sparc/sparc.md: Likewise.

gcc/go:
* gospec.cc (lang_specific_driver): Switch to HAVE_SOLARIS_LD.

8 weeks agoSwitch to HAVE_SOLARIS_AS
Rainer Orth [Sun, 1 Mar 2026 17:04:03 +0000 (18:04 +0100)] 
Switch to HAVE_SOLARIS_AS

The vast majority of the remaining uses of HAVE_GNU_AS are in
Solaris-specific code to distinguish uses of GNU as from Solaris as.
It's simpler to turn the check around, checking for Solaris as directly
instead.

The following patch does just that.

Bootstrapped without regressions on sparcv9-sun-solaris2.11,
amd64-pc-solaris2.11, sparc64-unknown-linux-gnu, and x86_64-pc-linux-gnu.

2026-02-08  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc:
* configure.ac (solaris_as): New check.
* configure: Regenerate.
* config.in: Regenerate.
* config/i386/i386.cc: Switch to HAVE_SOLARIS_AS.
* config/i386/sol2.h: Likewise.
* config/sol2.h: Likewise.
* config/sparc/sol2.h: Likewise.
* config/sparc/sparc.cc: Likewise.
* config/sparc/sparc.md: Likewise.

2 months agoc++/reflection: Improve static_assert diagnostics when comparing reflections
Nathaniel Shead [Wed, 25 Feb 2026 12:19:32 +0000 (23:19 +1100)] 
c++/reflection: Improve static_assert diagnostics when comparing reflections

This adds another case to static_assert to print a helpful diagnostic
when comparing reflections.  This makes it easier to see what's gone
wrong when doing 'static_assert(some_query(^^a) == some_query(^^b));'
by decomposing the resulting resulting reflection.

gcc/cp/ChangeLog:

* constexpr.cc (diagnose_failing_condition): Also decompose
comparisons of reflections.

gcc/testsuite/ChangeLog:

* g++.dg/reflect/diag5.C: New test.

Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
Reviewed-by: Marek Polacek <polacek@redhat.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
2 months agoFortran: Fix libfortran cannot be cross compiled [PR124286]
Jerry DeLisle [Sun, 1 Mar 2026 01:30:41 +0000 (17:30 -0800)] 
Fortran: Fix libfortran cannot be cross compiled [PR124286]

Remove unneeded check for a sane CLZL and regenerate using
the correct version of autoconf.

PR fortran/124286

libgfortran/ChangeLog:

* acinclude.m4: Remove LIBGFOR_CHECK_SANE_BUILTIN_CLZL.
* caf/shmem/allocator.c (next_power_of_two): Use known sane
builtin.
* configure: Regenerate.
* configure.ac: Remove use of LIBGFOR_CHECK_SANE_BUILTIN_CLZL.

2 months agoc++: ICE with scoped member variable template-id [PR123143]
Marek Polacek [Wed, 25 Feb 2026 21:05:17 +0000 (16:05 -0500)] 
c++: ICE with scoped member variable template-id [PR123143]

In this test we crash in lookup_member with

  s.S::template a<42> == 42

but not without the "S::".  The problem is that lookup_member gets
a TEMPLATE_DECL and not an identifier.

In tsubst_expr/COMPONENT_REF for variable templates we should not
go to the "Lookup the template functions" block; we should let
finish_class_member_access_expr do the job.

PR c++/123143

gcc/cp/ChangeLog:

* pt.cc (tsubst_expr) <case COMPONENT_REF>: Check identifier_p
before doing lookup for a template function.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1y/var-templ88.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2 months agoc++/reflection: reflection is unevaluated operand [PR123608]
Marek Polacek [Thu, 26 Feb 2026 20:53:16 +0000 (15:53 -0500)] 
c++/reflection: reflection is unevaluated operand [PR123608]

We reject this test with

  error: default argument '^^a' uses local variable 'a'

However: [dcl.fct.default]/9: "A parameter shall not appear as
a potentially-evaluated expression in a default argument.", and
[expr.reflect]/7: "The id-expression of a reflect-expression
is an unevaluated operand."

We still have to look at REFLECT_EXPRs in check_out_of_consteval_use_r
though, otherwise it wouldn't work too well.

PR c++/123608

gcc/cp/ChangeLog:

* cp-tree.h (unevaluated_p): Include REFLECT_EXPR.
* reflect.cc (check_out_of_consteval_use_r): Don't give up early
on REFLECT_EXPR_P.

gcc/testsuite/ChangeLog:

* g++.dg/reflect/defarg1.C: New test.

Reviewed-by: Jason Merrill <jason@redhat.com>
2 months agoAda: Fix infinite recursion on unchecked union with representation clause
Eric Botcazou [Sat, 28 Feb 2026 18:48:23 +0000 (19:48 +0100)] 
Ada: Fix infinite recursion on unchecked union with representation clause

This is a regression present on all active branches: the compiler enters an
infinite recursion when it is generating the initialization procedure of an
unchecked union type with a representation clause, because the layout it has
done for it is problematic.  This comes from an old kludge added to support
aggregates for such types, so the fix is to further tweak this kludge.

gcc/ada/
PR ada/124285
* gcc-interface/decl.cc (components_to_record): Force a packed
layout for the innermost variant of an unchecked union type with
fixed part and full representation clause.

gcc/testsuite/
* gnat.dg/specs/unchecked_union3.ads: New test.

2 months ago[PR tree-optimization/90036] Backpropagate more equivalences in DOM
Jeff Law [Sat, 28 Feb 2026 15:54:23 +0000 (08:54 -0700)] 
[PR tree-optimization/90036] Backpropagate more equivalences in DOM

And now the rest of the fix for 90036.  Two changes of note.

First, when recording temporary equivalences from the edge info cache, if the
equivalence has the form:

[0/1] = A EQ/NE CST;

Go ahead and backprop that equivalence to the uses of A.

Concretely from the BZ we have this:

> ;;   basic block 2, loop depth 0
> ;;    pred:       ENTRY
>   _1 = vptr_14(D) == 0;
>   _2 = ownvptr_15(D) != 0;
>   _3 = _1 | _2;
>   if (_3 != 0)
>     goto <bb 4>; [67.00%]
>   else
>     goto <bb 3>; [33.00%]
> ;;    succ:       4
> ;;                3
[ ... ]

> ;;   basic block 4, loop depth 0
> ;;    pred:       2
>   if (vptr_14(D) != 0)
>     goto <bb 5>; [25.37%]
>   else
>     goto <bb 10>; [74.63%]
> ;;    succ:       5
> ;;                10
>
> ;;   basic block 5, loop depth 0
> ;;    pred:       4
>   # definition_10 = PHI <0(4)>
>   # vstring_9 = PHI <0B(4)>
>   if (ownvptr_15(D) != 0)
>     goto <bb 7>; [80.00%]
>   else
>     goto <bb 6>; [20.00%]
> ;;    succ:       7
> ;;                6
>
> ;;   basic block 6, loop depth 0
> ;;    pred:       5
>   sprintf (p_13(D), "~%%%s", vstring_9);
>   goto <bb 10>; [100.00%]
> ;;    succ:       10

So when DOM discovers the edge equivalence for vptr_14 on the 4->5 edge DOM now
back-propagates the value to the uses of vptr_14, particularly uses in bb#1.
That allows us to discover a simple equivalence for _1 which is a key nugget to
unlocking this BZ.

1 = (_3 != 0) by way of traversing the 2->4 edge.
1 = (vptr_14 != 0) by way of traversing the 4->5 edge
_1 = 0 by backproping the state of vptr_14 to use point in bb1

The last step is to back-propagate the _1 = 0 equivalence to the use points of
_1 in bb1.  In particular to this statement

_3 = _1 | _2;

If we know that _1 == 0, then _3 and _2 must have the same values (nonzero in
this case).

_2 = ownvptr_15(D) != 0;

Since we know the state of _2, we can compute the state of ownvptr_15.  Which
was the goal.  We're still on the 4->5 edge, but we've managed to compute an
equivalence for ownvptr_15 which in turn allows us to know how the branch at
the end of bb5 will go.

Note this is not jump threading.  It's a conditional equivalence with back
propagation.

The additional lookups in the hash table trigger messages in the dump file.
The unconstrained_commons.f test scans the DOM dump file to ensure certain
messages never appear.  That scan test is now bogus.  The test has other things
it checks to ensure DOM hasn't done anything wrong.  So that one scan test in
unconstrained_commons.f has been removed.

Bootstrapped and regression tested on x86, armv7, loongarch64, riscv64.
Regression tested on the usual crosses as well.

PR tree-optimization/90036
gcc/
* tree-ssa-dom.cc (back_propagate_equivalences): Accept new
argument for available expression stack.  Lookup equivalences
in the expression hash table too.  If an expression hash a
known constant value, record it and recurse.
(record_temporary_equivalences): Back propagate for a subset of
edge equivalences.

gcc/testsuite
* gcc.dg/tree-ssa/pr90036.c: New test.
* gfortran.dg/unconstrained_commons.f: Drop useless DOM hash table
lookup check.

2 months agolibstdc++: Add test for -Wnull-deference in istream_iterator [PR105580]
Tomasz Kamiński [Fri, 27 Feb 2026 18:55:19 +0000 (19:55 +0100)] 
libstdc++: Add test for -Wnull-deference in istream_iterator [PR105580]

PR libstdc++/105580

libstdc++-v3/ChangeLog:

* testsuite/24_iterators/istreambuf_iterator/105580.cc: New test.

2 months agoaarch64: improve diagnostics for bogus JSON tuning inputs [PR124094]
David Malcolm [Sat, 28 Feb 2026 04:35:46 +0000 (23:35 -0500)] 
aarch64: improve diagnostics for bogus JSON tuning inputs [PR124094]

Use json-diagnostic.{h,cc} to improve the diagnostics issued
for malformed and invalid JSON tuning inputs: report the
file/line/column and, if possible, the JSON Pointer of the
problematic input.

Before
------

$ ./xgcc -B. -S test.c -muser-provided-CPU=malformed.json
cc1: error: error parsing JSON data: expected ':'; got number

$ ./xgcc -B. -S test.c -muser-provided-CPU=unsigned-3.json
cc1: warning: JSON tuning file does not contain version information; compatibility cannot be verified
cc1: error: key ‘tune_params.sve_width’ value 5000000000 is out of range for ‘uint’ type [0, 4294967295]
cc1: error: validation failed for the provided JSON data

After
-----

$ ./xgcc -B. -S test.c -muser-provided-CPU=malformed.json
malformed.json:3:17: error: error parsing JSON data: expected ':'; got number
    3 |     "sve_width" 128
      |                 ^~~

$ ./xgcc -B. -S test.c -muser-provided-CPU=unsigned-3.json
cc1: warning: JSON tuning file does not contain version information; compatibility cannot be verified
unsigned-3.json: In JSON value ‘/tune_params/sve_width’
unsigned-3.json:3:18: error: key ‘tune_params.sve_width’ value 5000000000 is out of range for ‘uint’ type [0, 4294967295]
    3 |     "sve_width": 5000000000
      |                  ^~~~~~~~~~
cc1: error: validation failed for the provided JSON data

gcc/ChangeLog:
PR target/124094
* config/aarch64/aarch64-generate-json-tuning-routines.py
(generate_field_code): Add "ctxt, " arg to function call when
operation is "parse".
(generate_function): Add "gcc_json_context &ctxt, " param to
function decl when operation is "parse".
* config/aarch64/aarch64-json-tunings-parser-generated.inc:
Regenerate, passing around a gcc_json_context &.
* config/aarch64/aarch64-json-tunings-parser.cc: Include
"json-diagnostic.h".
(WARNING_OPT) New macro.
(PARSE_INTEGER_FIELD): Add "ctxt" param and pass it around.
(PARSE_UNSIGNED_INTEGER_FIELD): Likewise.
(PARSE_BOOLEAN_FIELD): Likewise.
(PARSE_STRING_FIELD): Likewise.
(PARSE_OBJECT): Likewise.
(PARSE_ARRAY_FIELD): Likewise.
(PARSE_ENUM_FIELD): Likewise.
(parse_func_type): Likewise.
(parse_object_helper): Likewise.  Use json_error rather than error.
(inform_about_wrong_kind_of_json_value): New.
(extract_string): Add "ctxt" param.  Replace "warning" with a pair
of calls to json_warning and
inform_about_wrong_kind_of_json_value, tweaking wording
accordingly.
(extract_integer): Likewise.
(extract_unsigned_integer): Likewise.
(parse_enum_field): Likewise.
(validate_and_traverse): Replace "warning" and "error" with
"json_warning" and "json_error".
(check_version_compatibility): Use WARNING_OPT.  Add
auto_diagnostic_group to group the error and note.
(aarch64_load_tuning_params_from_json_string): Add "js_filename"
param.  Use gcc_json_context to capture location info.  Use it
when reporting errors to get file/line/column info.  Replace check
on root being non-null with assertion, as this is guaranteed if
error is non-null.  Replace warning with json_warning.
(aarch64_load_tuning_params_from_json): Pass data_filename to
aarch64_load_tuning_params_from_json_string for use when reporting
diagnostics.
(selftest::test_json_integers): Add a placeholder filename.
(selftest::test_json_boolean): Likewise.
(selftest::test_json_strings): Likewise.
(selftest::test_json_enums): Likewise.

gcc/testsuite/ChangeLog:
PR target/124094
* gcc.target/aarch64/aarch64-json-tunings/boolean-2.c: Add options
-fdiagnostics-show-caret -fdiagnostics-show-line-numbers.  Replace
dg-error with a pair of dg-regexps to verify that we report the
filename and JSON Pointer of where the error occurs, and then
the filename and location within the JSON file.  Verify that we
quote and underline the pertinent part of the JSON file.
* gcc.target/aarch64/aarch64-json-tunings/empty-brackets.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/enum-2.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/integer-2.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/integer-3.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/string-2.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/unidentified-key.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/unsigned-2.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/unsigned-3.c: Likewise.
* gcc.target/aarch64/aarch64-json-tunings/malformed.c: New test,
to verify behavior on a malformed JSON input file.
* gcc.target/aarch64/aarch64-json-tunings/malformed.json: New
test file.  This is malformed JSON, due to a missing ':" between
key and value.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 months agoAdd json-diagnostic.{cc,h}
David Malcolm [Sat, 28 Feb 2026 04:35:45 +0000 (23:35 -0500)] 
Add json-diagnostic.{cc,h}

This patch adds support for emitting diagnostics about JSON input files
to global_dc, showing both the file/line/columns and the JSON Pointer
for the problematic json::value.  Test coverage is added by the followup
on aarch64.

gcc/ChangeLog:
* Makefile.in (OBJS-libcommon): Add json-diagnostic.o.
* diagnostics/client-data-hooks.h
(class client_data_hooks_decorator): New.
* diagnostics/context.cc (context::set_client_data_hooks): Return
the old hooks.
* diagnostics/context.h (context::set_client_data_hooks): Update
decl likewise.
* json-diagnostic.cc: New file.
* json-diagnostic.h: New file.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 months agojson: split out replayer_location_map from libsarifreplay.cc
David Malcolm [Sat, 28 Feb 2026 04:35:45 +0000 (23:35 -0500)] 
json: split out replayer_location_map from libsarifreplay.cc

No functional change intended, but make this code usable elsewhere.

gcc/ChangeLog:
* config/aarch64/aarch64-json-tunings-parser.cc: Define
INCLUDE_MAP.
* json-parsing.cc: Likewise.
* json-parsing.h (class simple_location_map): New class, moved and
renamed from...
* libsarifreplay.cc (class replayer_location_map): ...here.
(sarif_replayer::m_json_location_map): Update for renaming of
class.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 months agodiagnostics: split out physical_location_maker from libgdiagnostics
David Malcolm [Sat, 28 Feb 2026 04:35:44 +0000 (23:35 -0500)] 
diagnostics: split out physical_location_maker from libgdiagnostics

Make this code usable elsewhere.
No functional change intended.

gcc/ChangeLog:
* Makefile.in (OBJS-libcommon):
Add diagnostics/physical-location-maker.o.
* diagnostics/physical-location-maker.cc: New file, adapted from
material in libgdiagnostics.cc.
* diagnostics/physical-location-maker.h: New file, adapted from
material in libgdiagnostics.cc.
* libgdiagnostics.cc: Include
"diagnostics/physical-location-maker.h".
(diagnostic_manager::diagnostic_manager): Initialize
m_phys_loc_maker.
(diagnostic_manager::new_location_from_file_and_line): Split out
into physical_location_maker.
(diagnostic_manager::new_location_from_file_line_column):
Likewise.
(diagnostic_manager::ensure_linemap_for_file_and_line): Likewise.
(diagnostic_manager::m_phys_loc_maker): New field.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 months agodiagnostics: use label_text for logical_location strings
David Malcolm [Sat, 28 Feb 2026 04:35:44 +0000 (23:35 -0500)] 
diagnostics: use label_text for logical_location strings

Doing so makes it possible for logical_locations::manager subclasses to
return copies of temporary buffers, rather than requiring
the buffer to outlive the call.  This is useful for generating
JSON pointer strings, for logical locations within JSON files.

gcc/ChangeLog:
* diagnostics/html-sink.cc
(html_builder::make_element_for_diagnostic): Update for logical
location strings being returned as  label_text rather than
const char *.
* diagnostics/logical-locations.h
(logical_locations::manager::get_short_name): Return label_text
rather than const char *.
(logical_locations::manager::get_name_with_scope): Likewise.
(logical_locations::manager::get_internal_name): Likewise.
* diagnostics/sarif-sink.cc
(sarif_builder::ensure_sarif_logical_location_for): Update for
logical location strings being returned as label_text rather than
const char *.
(sarif_builder::make_minimal_sarif_logical_location): Likewise.
* diagnostics/selftest-logical-locations.cc
(test_manager::get_short_name): Likewise.
(test_manager::get_name_with_scope): Likewise.
(test_manager::get_internal_name): Likewise.
(selftest_logical_locations_cc_tests): Likewise.
* diagnostics/selftest-logical-locations.h
(test_manager::get_short_name): Likewise.
(test_manager::get_name_with_scope): Likewise.
(test_manager::get_internal_name): Likewise.
* diagnostics/state-graphs-to-dot.cc
(state_diagram::on_node_in_table): Likewise.
* libgdiagnostics.cc
(impl_logical_location_manager::get_short_name): Likewise.
(impl_logical_location_manager::get_name_with_scope): Likewise.
(impl_logical_location_manager::get_internal_name): Likewise.
* tree-logical-location.cc
(tree_logical_location_manager::get_short_name): Likewise.
(tree_logical_location_manager::get_name_with_scope): Likewise.
(tree_logical_location_manager::get_internal_name): Likewise.
* tree-logical-location.h
(tree_logical_location_manager::get_short_name): Likewise.
(tree_logical_location_manager::get_name_with_scope): Likewise.
(tree_logical_location_manager::get_internal_name): Likewise.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2 months agodoc: Document __attribute keyword [PR87591]
Sandra Loosemore [Fri, 27 Feb 2026 03:46:27 +0000 (03:46 +0000)] 
doc: Document __attribute keyword [PR87591]

gcc/ChangeLog
PR c/87591
* doc/extend.texi (Attributes): Document __attribute keyword.
(Attribute Syntax): Here too.

2 months agodoc: Restore anchors for deleted attribute section names.
Sandra Loosemore [Fri, 27 Feb 2026 01:26:20 +0000 (01:26 +0000)] 
doc: Restore anchors for deleted attribute section names.

This is a followup to commit gcc-16-7674-g6e3c137f5db: when I merged
attribute subsections, I should have left @anchors with the old names
in place to avoid breaking external links and bookmarks.

gcc/ChangeLog
* doc/extend.texi (Attributes): Rename the node "GNU Attribute
Syntax" node back to "Attribute Syntax"; fix references.  Add
@anchor for sections recently merged away at the new location of
the material they used to contain.

2 months agoopenmp: Re-add support for private references to variable-length arrays with allocato...
Kwok Cheung Yeung [Sat, 28 Feb 2026 00:09:14 +0000 (00:09 +0000)] 
openmp: Re-add support for private references to variable-length arrays with allocator clause [PR113436]

The previous patch for PR113436 fixed the testsuite regressions, but disabled
support for allocators when applied to references to variable-length objects
in private clauses.  This patch re-adds it.

2026-02-28  Kwok Cheung Yeung  <kcyeung@baylibre.com>

gcc/

PR middle-end/113436
* omp-low.cc (lower_omp_target): Merge branches for allocating memory
for private clauses.  Add handling for references when allocator
clause not specified.

gcc/testsuite/

PR middle-end/113436
* g++.dg/gomp/pr113436.C: Rename to...
* g++.dg/gomp/pr113436-1.C: ... this.  Remove restriction on C++
dialect.
(f): Remove use of auto.
* g++.dg/gomp/pr113436-2.C: New.  Original renamed to...
* g++.dg/gomp/pr113436-5.C: ... this.  Add tests for alignment.
(f): Test references to VLAs of pointers.
* g++.dg/gomp/pr113436-3.C: New.
* g++.dg/gomp/pr113436-4.C: New.

libgomp/

PR middle-end/113436
* testsuite/libgomp.c++/pr113436-1.C (test_vla_by_ref): New.
(main): Add call to test_vla_by_ref.
* testsuite/libgomp.c++/pr113436-2.C (test_vla_by_ref): New.
(main): Add call to test_vla_by_ref.

2 months agoUpdate .po files
Joseph Myers [Fri, 27 Feb 2026 22:31:49 +0000 (22:31 +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.

2 months agoFortran: deferred-length character results and -fno-automatic [PR78187]
Harald Anlauf [Tue, 24 Feb 2026 19:58:53 +0000 (20:58 +0100)] 
Fortran: deferred-length character results and -fno-automatic [PR78187]

As the SAVE attribute cannot be specified for dummy variables and function
results (F2023:C862), the option -fno-automatic should not treat them as
automatically saved.

PR fortran/78187

gcc/fortran/ChangeLog:

* trans-decl.cc (gfc_trans_deferred_vars): An initialization block
shall be generated for deferred-length character results even
when -fno-automatic is given.

gcc/testsuite/ChangeLog:

* gfortran.dg/deferred_character_40.f90: New test.

2 months agoAda: Fix bogus visibility error for expression of iterated association
Eric Botcazou [Fri, 27 Feb 2026 20:41:38 +0000 (21:41 +0100)] 
Ada: Fix bogus visibility error for expression of iterated association

This completes the transition of the Resolve_Iterated_Association procedure
to the preanalysis of the original nodes for the sake of instantiations.

gcc/ada/
PR ada/124201
PR ada/124282
* exp_aggr.adb (Expand_Iterated_Component): Replace the iteration
variable in the expression as well.
* sem_aggr.adb (Resolve_Iterated_Component_Association): Preanalyze
the expression directly as well.

gcc/testsuite/
* gnat.dg/generic_inst18.adb: New test.

2 months agoAda: Fix assertion failure for unfrozen mutably tagged type as actual
Eric Botcazou [Fri, 27 Feb 2026 18:54:33 +0000 (19:54 +0100)] 
Ada: Fix assertion failure for unfrozen mutably tagged type as actual

This is a follow-up to the fix done last December at:
  https://gcc.gnu.org/pipermail/gcc-patches/2025-December/704521.html

The fix is not sufficient when nested layers of generics are involved,
so this changes the implementation of mutably tagged types to have the
declaration of their CW-equivalent type immediately analyzed.  But this
in turn requires making sure that the root type is frozen before the
CW-equivalent type in all cases.

gcc/ada/
PR ada/123306
* freeze.adb (Freeze_Entity): For a class-wide equivalent type of
a non-interface root type, freeze the root type before it.
* sem_ch3.adb (Derived_Type_Declaration): Minor tweak.
* sem_ch12.adb (Analyze_One_Association): Revert latest change.
* sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Size>: When
the prefix is a class-wide type, insert the declaration of the CW-
equivalent type immediately after that of the root type, and the
size check for the root type into its own freezing actions.

gcc/testsuite/
* gnat.dg/specs/mutably_tagged2.ads: New test.

2 months agolibgfortran: Regenerate generated files with autoconf 2.69 and automake 1.15.1
Jakub Jelinek [Fri, 27 Feb 2026 20:30:53 +0000 (21:30 +0100)] 
libgfortran: Regenerate generated files with autoconf 2.69 and automake 1.15.1

2026-02-27  Jakub Jelinek  <jakub@redhat.com>

* aclocal.m4: Regenerate.
* configure: Regenerate.
* Makefile.in: Regenerate.

2 months agoFortran: Fix dprintf on some older systems
Jerry DeLisle [Fri, 27 Feb 2026 17:05:20 +0000 (09:05 -0800)] 
Fortran: Fix dprintf on some older systems

PR fortran/88076

libgfortran/ChangeLog:

* caf/shmem/supervisor.c (supervisor_main_loop): Use fprintf
instead of dprintf.

2 months agogccrs : TypeCheck : Enhance missing fields error message
Islam-Imad [Sun, 8 Feb 2026 10:11:50 +0000 (12:11 +0200)] 
gccrs : TypeCheck : Enhance missing fields error message

improved the error message from "a, b, c" to "'a', 'b' and 'c'"

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-struct.cc: enhance missing fields error message

gcc/testsuite/ChangeLog:

* rust/compile/missing_constructor_fields.rs: update to match the new error message

Signed-off-by: Islam-Imad <islamimad404@gmail.com>
2 months agogccrs: Make AST::Crate final
Owen Avery [Sun, 1 Feb 2026 06:13:24 +0000 (01:13 -0500)] 
gccrs: Make AST::Crate final

This should prevent the warnings which seem to be breaking
bootstrapping.

gcc/rust/ChangeLog:

* ast/rust-ast.h (struct Crate): Make final.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 months agogccrs: Remove ProcMacroInvocLexer
Owen Avery [Tue, 10 Feb 2026 03:45:48 +0000 (22:45 -0500)] 
gccrs: Remove ProcMacroInvocLexer

ProcMacroInvocLexer and MacroInvocLexer were only separate because one
stored instances of const_TokenPtr directly, while the other stored
instances of AST::Token (a thin wrapper around const_TokenPtr). This
patch removes ProcMacroInvocLexer and makes MacroInvocLexer directly
store const_TokenPtr instances.

gcc/rust/ChangeLog:

* Make-lang.in (GRS_OBJS): Remove entries.
* ast/rust-ast.cc (DelimTokenTree::parse_to_meta_item): Handle
changes to AttributeParser.
(AttributeParser::AttributeParser): Change signature.
* ast/rust-macro.h (AttributeParser::AttributeParser): Likewise.
* expand/rust-macro-expand.cc
(MacroExpander::expand_eager_invocations): Handle changes to
MacroInvocLexer.
(MacroExpander::parse_proc_macro_output): Use MacroInvocLexer
instead of ProcMacroInvocLexer.
* expand/rust-macro-expand.h: Remove inclusion of
"rust-proc-macro-invoc-lexer.h".
* expand/rust-macro-invoc-lexer.cc
(MacroInvocLexer::peek_token): Handle changes to MacroInvocLexer
internal representation.
(MacroInvocLexer::get_token_slice): Likewise.
(MacroInvocLexer::split_current_token): Likewise and fix
iterator handling.
* expand/rust-macro-invoc-lexer.h (class MacroInvocLexerBase):
Remove and combine with...
(class MacroInvocLexer): ...its now only derived class.
* expand/rust-proc-macro-invoc-lexer.cc: Removed.
* expand/rust-proc-macro-invoc-lexer.h: Removed.
* parse/rust-parse-impl-proc-macro.cc: Removed.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 months agogccrs: parser: Fix rogue null pointer in null_denotation_path
Harishankar [Sat, 31 Jan 2026 12:15:51 +0000 (17:45 +0530)] 
gccrs: parser: Fix rogue null pointer in null_denotation_path

The compiler previously crashed with a segmentation fault when parsing
a struct or tuple expression that failed to parse correctly (e.g.,
returning nullptr). This occurred because the parser implicitly wrapped
the null pointer result in a successful tl::expected, causing a crash
later when the compiler attempted to use the invalid pointer. This
patch adds checks in null_denotation_path to ensure that failed struct
and tuple parsing results are returned as errors (tl::unexpected)
instead of null pointers.

Fixes Rust-GCC/gccrs#4426

gcc/rust/ChangeLog:

* parse/rust-parse-impl-expr.hxx (null_denotation_path):
Check for null struct and tuple expressions to prevent segmentation fault.

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
2 months agogccrs: parser: Fix ICE on invalid arithmetic expression
Harishankar [Sat, 31 Jan 2026 12:15:51 +0000 (17:45 +0530)] 
gccrs: parser: Fix ICE on invalid arithmetic expression

The compiler previously crashed with a segmentation fault when parsing
an arithmetic expression where the left-hand side was invalid (e.g.,
after a failed macro expansion). This occurred because the parser
attempted to access the location of the null 'left' pointer. This
patch adds a check to ensure the left operand is valid before proceeding.

Fixes Rust-GCC/gccrs#4414

gcc/rust/ChangeLog:

* parse/rust-parse-impl-expr.hxx (parse_arithmetic_or_logical_expr):
Check for null left operand to prevent segmentation fault.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
2 months agogccrs: ast: Add qualified_call helper to Builder
Jayant Chauhan [Fri, 16 Jan 2026 17:23:28 +0000 (22:53 +0530)] 
gccrs: ast: Add qualified_call helper to Builder

This patch implements the `qualified_call` helper method in the `Builder`
class. This logic was previously intended to be a local helper in
`DeriveClone`, but moving it to the `Builder` allows it to be reused
across the compiler for constructing qualified function calls.

It updates `DeriveClone::clone_call` to use this new `Builder` method,
simplifying the code and resolving the TODO.

Fixes Rust-GCC#4393

gcc/rust/ChangeLog:

* ast/rust-ast-builder.h (Builder::qualified_call): New method declaration.
* ast/rust-ast-builder.cc (Builder::qualified_call): Implement new method.
* expand/rust-derive-clone.cc (DeriveClone::clone_call): Use builder.qualified_call.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: parser: Fix ICE in AnonConst by handling null macro result
jayant chauhan [Sun, 1 Feb 2026 13:18:28 +0000 (18:48 +0530)] 
gccrs: parser: Fix ICE in AnonConst by handling null macro result

The parse_anon_const function triggered an assertion failure (ICE) when
receiving a success Result containing a null expression pointer. This
occurred because null_denotation_path directly returned the result of
parse_macro_invocation_partial (which returns a raw pointer) without
checking for failure.

When parse_macro_invocation_partial failed (returning nullptr), it was
wrapped into a tl::expected success state containing nullptr, rather than
an error state.

This patch adds a check in null_denotation_path to verify if the parsed
macro invocation is null. If it is, it now returns a tl::unexpected error,
ensuring that invalid expressions are correctly reported as errors
upstream.

Fixes Rust-GCC#4412

gcc/rust/ChangeLog:

* parse/rust-parse-impl-expr.hxx (null_denotation_path): Check
if macro invocation returns null and return error.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs : parse: Fix ICE when using 'dyn' without trait bound
Islam-Imad [Tue, 3 Feb 2026 12:11:48 +0000 (14:11 +0200)] 
gccrs : parse: Fix ICE when using 'dyn' without trait bound

The parser was accepting 'dyn' as a standalone type in contexts like:
  static STATIC_1: dyn = 1;

This invalid syntax should be rejected at parse time.

Fixes Rust-GCC/gccrs#3905

gcc/rust/ChangeLog:

* lex/rust-lex.cc (is_whitespace): refactor if-else to switch
* lex/rust-token.h: refactor if-else to switch
* parse/rust-parse-impl.hxx: return nullptr when type is in invalid state

gcc/testsuite/ChangeLog:

* rust/compile/issue-3904.rs: refactor the testcase to match the new thrown error

Signed-off-by: Islam-Imad <islamimad404@gmail.com>
2 months agogccrs: util/attributes: Fix ICE on bare #[deprecated] attribute
jayant chauhan [Sun, 1 Feb 2026 11:09:30 +0000 (16:39 +0530)] 
gccrs: util/attributes: Fix ICE on bare #[deprecated] attribute

The check_deprecated_attribute function previously assumed that the
attribute always contained an input (arguments). However, #[deprecated]
is valid without arguments. Accessing the input on a bare #[deprecated]
attribute resulted in a null pointer dereference and a segmentation fault.

This patch adds a guard clause to check if the attribute has input
before attempting to access it, preventing the crash.

Fixes Rust-GCC#4410

gcc/rust/ChangeLog:

* util/rust-attributes.cc (check_deprecated_attribute): Guard against
attributes without input.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: Reduce node id sharing
Owen Avery [Sun, 25 Jan 2026 19:15:38 +0000 (14:15 -0500)] 
gccrs: Reduce node id sharing

Also removes some redundant copies and improves TypePath copying.

gcc/rust/ChangeLog:

* ast/rust-ast-builder.cc (Builder::trait_bound): Replace copy
with move.
(Builder::trait_impl): Likewise.
(Builder::new_const_param): Replace cloning with reconstruction.
* ast/rust-path.h (TypePath::TypePath): Use TypeNoBounds copy
constructor.
(TypePath::operator=): Use TypeNoBounds copy assignment.
* expand/rust-derive-clone.cc (DeriveClone::clone_impl): Produce
trait bounds lazily.
* expand/rust-derive-copy.cc (DeriveCopy::copy_impl): Likewise.
* expand/rust-derive-debug.cc (DeriveDebug::stub_derive_impl):
Likewise.
* expand/rust-derive-default.cc (DeriveDefault::default_impl):
Likewise.
* expand/rust-derive-eq.cc (DeriveEq::eq_impls): Likewise.
* expand/rust-derive-hash.cc (DeriveHash::hash_impl): Likewise.
* expand/rust-derive-ord.cc (DeriveOrd::cmp_impl): Likewise.
* expand/rust-derive-partial-eq.cc
(DerivePartialEq::partialeq_impls): Likewise.
* expand/rust-derive.cc (DeriveVisitor::setup_impl_generics):
Likewise.
* expand/rust-derive.h (DeriveVisitor::setup_impl_generics):
Likewise.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 months agogccrs: ast: Fix module path resolution for sibling modules in root
Harishankar [Thu, 22 Jan 2026 13:43:30 +0000 (19:13 +0530)] 
gccrs: ast: Fix module path resolution for sibling modules in root

Currently, the compiler fails to resolve module paths when a file in the
root directory (e.g. 'bar.rs') attempts to load a sibling module
(e.g. 'foo.rs') if a 'bar/' directory does not exist. The compiler
incorrectly assumes that if 'bar.rs' is not 'mod.rs', it must look
exclusively in a subdirectory.

This patch adds a fallback mechanism in 'Module::process_file_path'.
If the subdirectory search fails, it strips the implicit subdirectory
and attempts to resolve the module in the parent directory, consistent
with Rust 2018 path rules.

Fixes Rust-GCC/gccrs#4402

gcc/rust/ChangeLog:

* ast/rust-ast.cc (Module::process_file_path): Add fallback search
for sibling modules when subdirectory search fails.

gcc/testsuite/ChangeLog:

* rust/compile/issue-4402.rs: New test.
* rust/compile/issue_4402_foo.rs: New test.
* rust/compile/compile.exp:Ignore issue_4402_foo.rs

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
2 months agogccrs: util/attributes: Error on malformed lint attributes
Jayant Chauhan [Fri, 16 Jan 2026 16:58:00 +0000 (22:28 +0530)] 
gccrs: util/attributes: Error on malformed lint attributes

Emit a diagnostic when lint attributes (allow, deny, warn, forbid) are
used without arguments. Previously, these attributes were accepted silently
if malformed, which could lead to confusion or ignored lints. This ensures
users are informed of the expected form: #[allow(lint_name)].

Fixes Rust-GCC#4358

gcc/rust/ChangeLog:

* util/rust-attributes.cc (check_lint_attribute): New helper.
(AttributeChecker::visit): Call helper for lint attributes on functions.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: Add `#![no_core]` attribute to most tests
Pierre-Emmanuel Patry [Fri, 23 Jan 2026 18:40:36 +0000 (19:40 +0100)] 
gccrs: Add `#![no_core]` attribute to most tests

The compiler implicitely inject the core crate in every crate but those
explicitely tagged with `no_core`. Since most of the tests were
developped with no core in mind, most of those shall have the no_core
attribute inserted.

gcc/testsuite/ChangeLog:

* rust/borrowck/position_dependant_outlives.rs: Enable `no_core` feature and
use `no_core` attribute.
* rust/borrowck/reference.rs: Likewise.
* rust/borrowck/return_ref_to_local.rs: Likewise.
* rust/borrowck/subset.rs: Likewise.
* rust/borrowck/test_move.rs: Likewise.
* rust/borrowck/test_move_behind_reference.rs: Likewise.
* rust/borrowck/test_move_conditional.rs: Likewise.
* rust/borrowck/tmp.rs: Likewise.
* rust/borrowck/use_while_mut.rs: Likewise.rs
* rust/borrowck/use_while_mut_fr.rs: Likewise.
* rust/borrowck/well_formed_function_inputs.rs: Likewise.
* rust/compile/abi-options1.rs: Likewise.
* rust/compile/abi-vardaic.rs: Likewise.
* rust/compile/additional-trait-bounds1.rs: Likewise.
* rust/compile/additional-trait-bounds2.rs: Likewise.
* rust/compile/additional-trait-bounds2nr2.rs: Likewise.
* rust/compile/all-cast.rs: Likewise.
* rust/compile/array3.rs: Likewise.
* rust/compile/array4.rs: Likewise.
* rust/compile/array_empty_list.rs: Likewise.
* rust/compile/arrays1.rs: Likewise.
* rust/compile/arrays2.rs: Likewise.
* rust/compile/assume.rs: Likewise.
* rust/compile/attr-macro.rs: Likewise.
* rust/compile/attr-mismatch-crate-name.rs: Likewise.
* rust/compile/attr_cold.rs: Likewise.
* rust/compile/attr_deprecated.rs: Likewise.
* rust/compile/attr_deprecated_2.rs: Likewise.
* rust/compile/attr_malformed_doc.rs: Likewise.
* rust/compile/attr_malformed_path.rs: Likewise.
* rust/compile/auto_trait.rs: Likewise.
* rust/compile/auto_trait_invalid.rs: Likewise.
* rust/compile/auto_trait_super_trait.rs: Likewise.
* rust/compile/auto_trait_valid.rs: Likewise.
* rust/compile/auto_traits1.rs: Likewise.
* rust/compile/auto_traits2.rs: Likewise.
* rust/compile/auto_traits4.rs: Likewise.
* rust/compile/bad-crate-name1.rs: Likewise.
* rust/compile/bad-crate-name2.rs: Likewise.
* rust/compile/bad-rpit1.rs: Likewise.
* rust/compile/bad=file-name.rs: Likewise.
* rust/compile/bad_as_bool_char.rs: Likewise.
* rust/compile/bad_file_name.txt.rs: Likewise.
* rust/compile/bad_inner_doc.rs: Likewise.
* rust/compile/bad_pub_enumitems.rs: Likewise.
* rust/compile/bad_stmt_enums.rs: Likewise.
* rust/compile/bad_toplevel_enums.rs: Likewise.
* rust/compile/bad_tuple_index.rs: Likewise.
* rust/compile/bad_type1.rs: Likewise.
* rust/compile/bad_type2.rs: Likewise.
* rust/compile/black_box.rs: Likewise.
* rust/compile/bounds.rs: Likewise.
* rust/compile/bounds1.rs: Likewise.
* rust/compile/box_syntax.rs: Likewise.
* rust/compile/box_syntax_feature_gate.rs: Likewise.
* rust/compile/braced_macro_arm.rs: Likewise.
* rust/compile/braced_macro_statements1.rs: Likewise.
* rust/compile/braced_macro_statements2.rs: Likewise.
* rust/compile/braced_macro_statements3.rs: Likewise.
* rust/compile/break-rust1.rs: Likewise.
* rust/compile/break-rust2.rs: Likewise.
* rust/compile/break-rust3.rs: Likewise.
* rust/compile/break1.rs: Likewise.
* rust/compile/break2.rs: Likewise.
* rust/compile/break_continue_outside_loop.rs: Likewise.
* rust/compile/break_with_value_inside_loop.rs: Likewise.
* rust/compile/bug-with-default-generic.rs: Likewise.
* rust/compile/bytecharstring.rs: Likewise.
* rust/compile/canonical_paths1.rs: Likewise.
* rust/compile/cast1.rs: Likewise.
* rust/compile/cast4.rs: Likewise.
* rust/compile/cast5.rs: Likewise.
* rust/compile/cast_float_as_integer.rs: Likewise.
* rust/compile/cast_generics.rs: Likewise.
* rust/compile/cfg-attr.rs: Likewise.
* rust/compile/cfg-core1.rs: Likewise.
* rust/compile/cfg-core2.rs: Likewise.
* rust/compile/cfg-test.rs: Likewise.
* rust/compile/cfg1.rs: Likewise.
* rust/compile/cfg2.rs: Likewise.
* rust/compile/cfg3.rs: Likewise.
* rust/compile/cfg4.rs: Likewise.
* rust/compile/cfg5.rs: Likewise.
* rust/compile/cfg6.rs: Likewise.
* rust/compile/changed_intrinsics.rs: Likewise.
* rust/compile/closure_in_closure.rs: Likewise.
* rust/compile/closure_move_expr.rs: Likewise.
* rust/compile/closure_no_type_anno.rs: Likewise.
* rust/compile/cmp1.rs: Likewise.
* rust/compile/complex-path1.rs: Likewise.
* rust/compile/complex_qualified_path_in_expr.rs: Likewise.
* rust/compile/const-issue1440.rs: Likewise.
* rust/compile/const1.rs: Likewise.
* rust/compile/const10.rs: Likewise.
* rust/compile/const2.rs: Likewise.
* rust/compile/const3.rs: Likewise.
* rust/compile/const4.rs: Likewise.
* rust/compile/const5.rs: Likewise.
* rust/compile/const6.rs: Likewise.
* rust/compile/const7.rs: Likewise.
* rust/compile/const8.rs: Likewise.
* rust/compile/const9.rs: Likewise.
* rust/compile/const_async_function.rs: Likewise.
* rust/compile/const_generics_1.rs: Likewise.
* rust/compile/const_generics_10.rs: Likewise.
* rust/compile/const_generics_11.rs: Likewise.
* rust/compile/const_generics_12.rs: Likewise.
* rust/compile/const_generics_13.rs: Likewise.
* rust/compile/const_generics_14.rs: Likewise.
* rust/compile/const_generics_15.rs: Likewise.
* rust/compile/const_generics_16.rs: Likewise.
* rust/compile/const_generics_17.rs: Likewise.
* rust/compile/const_generics_18.rs: Likewise.
* rust/compile/const_generics_19.rs: Likewise.
* rust/compile/const_generics_2.rs: Likewise.
* rust/compile/const_generics_3.rs: Likewise.
* rust/compile/const_generics_4.rs: Likewise.
* rust/compile/const_generics_5.rs: Likewise.
* rust/compile/const_generics_6.rs: Likewise.
* rust/compile/const_generics_7.rs: Likewise.
* rust/compile/const_generics_8.rs: Likewise.
* rust/compile/const_generics_9.rs: Likewise.
* rust/compile/const_trait_fn.rs: Likewise.
* rust/compile/continue1.rs: Likewise.
* rust/compile/crate-metavar1.rs: Likewise.
* rust/compile/deadcode_err1.rs: Likewise.
* rust/compile/deadcode_err2.rs: Likewise.
* rust/compile/debug-diagnostics-default.rs: Likewise.
* rust/compile/debug-diagnostics-off.rs: Likewise.
* rust/compile/debug-diagnostics-on.rs: Likewise.
* rust/compile/decl_macro1.rs: Likewise.
* rust/compile/decl_macro2.rs: Likewise.
* rust/compile/decl_macro3.rs: Likewise.
* rust/compile/decl_macro4.rs: Likewise.
* rust/compile/decl_macro5.rs: Likewise.
* rust/compile/decl_macro6.rs: Likewise.
* rust/compile/decl_macro7.rs: Likewise.
* rust/compile/default_not_a_kw.rs: Likewise.
* rust/compile/deferred_const_inference.rs: Likewise.
* rust/compile/deprecated-fn.rs: Likewise.
* rust/compile/derive-debug1.rs: Likewise.
* rust/compile/derive-partialeq1.rs: Likewise.
* rust/compile/derive_clone_enum1.rs: Likewise.
* rust/compile/derive_clone_enum2.rs: Likewise.
* rust/compile/derive_clone_enum3.rs: Likewise.
* rust/compile/derive_empty.rs: Likewise.
* rust/compile/derive_macro1.rs: Likewise.
* rust/compile/derive_macro3.rs: Likewise.
* rust/compile/derive_macro4.rs: Likewise.
* rust/compile/derive_macro6.rs: Likewise.
* rust/compile/derive_macro7.rs: Likewise.
* rust/compile/derive_macro8.rs: Likewise.
* rust/compile/derive_partial_ord1.rs: Likewise.
* rust/compile/diagnostic_underline.rs: Likewise.
* rust/compile/doc_isolated_cr_block_comment.rs: Likewise.
* rust/compile/doc_isolated_cr_inner_block_comment.rs: Likewise.
* rust/compile/doc_isolated_cr_inner_line_comment.rs: Likewise.
* rust/compile/doc_isolated_cr_line_comment.rs: Likewise.
* rust/compile/doc_macro.rs: Likewise.
* rust/compile/dropck_eyepatch_feature_gate.rs: Likewise.
* rust/compile/dup_fields.rs: Likewise.
* rust/compile/e0579-neg-float-fail.rs: Likewise.
* rust/compile/e0579-neg-float.rs: Likewise.
* rust/compile/empty_comment_before_match.rs: Likewise.
* rust/compile/empty_union.rs: Likewise.
* rust/compile/enum_discriminant1.rs: Likewise.
* rust/compile/enum_discriminant2.rs: Likewise.
* rust/compile/enum_discriminant3.rs: Likewise.
* rust/compile/enum_variant_name.rs: Likewise.
* rust/compile/exclusive_range_pattern.rs: Likewise.
* rust/compile/exclusive_range_pattern_feature_gate.rs: Likewise.
* rust/compile/exhaustiveness1.rs: Likewise.
* rust/compile/exhaustiveness2.rs: Likewise.
* rust/compile/exhaustiveness3.rs: Likewise.
* rust/compile/expand_macro_qual_path_in_type.rs: Likewise.
* rust/compile/expected_type_args2.rs: Likewise.
* rust/compile/expected_type_args3.rs: Likewise.
* rust/compile/export_name.rs: Likewise.
* rust/compile/extern_c_named_variadic.rs: Likewise.
* rust/compile/extern_func_with_body.rs: Likewise.
* rust/compile/extern_generics.rs: Likewise.
* rust/compile/extern_type_item.rs: Likewise.
* rust/compile/extern_type_item_missing_semi.rs: Likewise.
* rust/compile/feature.rs: Likewise.
* rust/compile/feature_extern_types.rs: Likewise.
* rust/compile/feature_intrinsics.rs: Likewise.
* rust/compile/feature_rust_attri0.rs: Likewise.
* rust/compile/feature_rust_attri1.rs: Likewise.
* rust/compile/for-loop1.rs: Likewise.
* rust/compile/for-loop2.rs: Likewise.
* rust/compile/for_expr.rs: Likewise.
* rust/compile/for_lifetimes.rs: Likewise.
* rust/compile/format_args_basic_expansion.rs: Likewise.
* rust/compile/format_args_concat.rs: Likewise.
* rust/compile/format_args_extra_comma.rs: Likewise.
* rust/compile/found_struct.rs: Likewise.
* rust/compile/frust-compile-until.rs: Likewise.
* rust/compile/func-const-unsafe.rs: Likewise.
* rust/compile/func1.rs: Likewise.
* rust/compile/func2.rs: Likewise.
* rust/compile/func3.rs: Likewise.
* rust/compile/func4.rs: Likewise.
* rust/compile/func5.rs: Likewise.
* rust/compile/functions_without_body.rs: Likewise.
* rust/compile/gat1.rs: Likewise.
* rust/compile/generic-default1.rs: Likewise.
* rust/compile/generic_auto_trait.rs: Likewise.
* rust/compile/generics1.rs: Likewise.
* rust/compile/generics10.rs: Likewise.
* rust/compile/generics11.rs: Likewise.
* rust/compile/generics12.rs: Likewise.
* rust/compile/generics13.rs: Likewise.
* rust/compile/generics14.rs: Likewise.
* rust/compile/generics2.rs: Likewise.
* rust/compile/generics3.rs: Likewise.
* rust/compile/generics4.rs: Likewise.
* rust/compile/generics5.rs: Likewise.
* rust/compile/generics6.rs: Likewise.
* rust/compile/generics7.rs: Likewise.
* rust/compile/generics8.rs: Likewise.
* rust/compile/generics9.rs: Likewise.
* rust/compile/glob_import_enum.rs: Likewise.
* rust/compile/global-path-array.rs: Likewise.
* rust/compile/if-without-else.rs: Likewise.
* rust/compile/if_let_expr.rs: Likewise.
* rust/compile/if_let_expr_simple.rs: Likewise.
* rust/compile/iflet.rs: Likewise.
* rust/compile/impl_fnptr.rs: Likewise.
* rust/compile/impl_trait_diag.rs: Likewise.
* rust/compile/impl_trait_generic_arg.rs: Likewise.
* rust/compile/implicit_returns_err1.rs: Likewise.
* rust/compile/implicit_returns_err2.rs: Likewise.
* rust/compile/implicit_returns_err3.rs: Likewise.
* rust/compile/implicit_returns_err4.rs: Likewise.
* rust/compile/import_wildcards.rs: Likewise.
* rust/compile/include_empty.rs: Likewise.
* rust/compile/infer-crate-name.rs: Likewise.
* rust/compile/inline_1.rs: Likewise.
* rust/compile/inline_2.rs: Likewise.
* rust/compile/inline_asm_compile_nop.rs: Likewise.
* rust/compile/inline_asm_faulty_clobber.rs: Likewise.
* rust/compile/inline_asm_ident_first.rs: Likewise.
* rust/compile/inline_asm_illegal_operands.rs: Likewise.
* rust/compile/inline_asm_illegal_options.rs: Likewise.
* rust/compile/inline_asm_legal_options.rs: Likewise.
* rust/compile/inline_asm_nop.rs: Likewise.
* rust/compile/inline_asm_outside_unsafe.rs: Likewise.
* rust/compile/inline_asm_parse_operand.rs: Likewise.
* rust/compile/inline_asm_parse_output_operand.rs: Likewise.
* rust/compile/inline_asm_typecheck.rs: Likewise.
* rust/compile/invalid_label_name.rs: Likewise.
* rust/compile/invalid_variadics.rs: Likewise.
* rust/compile/issue-1005.rs: Likewise.
* rust/compile/issue-1006.rs: Likewise.
* rust/compile/issue-1019.rs: Likewise.
* rust/compile/issue-1023.rs: Likewise.
* rust/compile/issue-1031.rs: Likewise.
* rust/compile/issue-1034.rs: Likewise.
* rust/compile/issue-1048.rs: Likewise.
* rust/compile/issue-1073.rs: Likewise.
* rust/compile/issue-1081.rs: Likewise.
* rust/compile/issue-1089.rs: Likewise.
* rust/compile/issue-1089/test_mod.rs: Likewise.
* rust/compile/issue-1128.rs: Likewise.
* rust/compile/issue-1129-1.rs: Likewise.
* rust/compile/issue-1129-2.rs: Likewise.
* rust/compile/issue-1130.rs: Likewise.
* rust/compile/issue-1131.rs: Likewise.
* rust/compile/issue-1152.rs: Likewise.
* rust/compile/issue-1165.rs: Likewise.
* rust/compile/issue-1173.rs: Likewise.
* rust/compile/issue-1210.rs: Likewise.
* rust/compile/issue-1226.rs: Likewise.
* rust/compile/issue-1234.rs: Likewise.
* rust/compile/issue-1235.rs: Likewise.
* rust/compile/issue-1237.rs: Likewise.
* rust/compile/issue-1251.rs: Likewise.
* rust/compile/issue-1271.rs: Likewise.
* rust/compile/issue-1272.rs: Likewise.
* rust/compile/issue-1289.rs: Likewise.
* rust/compile/issue-1323-1.rs: Likewise.
* rust/compile/issue-1323-2.rs: Likewise.
* rust/compile/issue-1361.rs: Likewise.
* rust/compile/issue-1383.rs: Likewise.
* rust/compile/issue-1393.rs: Likewise.
* rust/compile/issue-1422.rs: Likewise.
* rust/compile/issue-1446.rs: Likewise.
* rust/compile/issue-1447.rs: Likewise.
* rust/compile/issue-1483.rs: Likewise.
* rust/compile/issue-1485.rs: Likewise.
* rust/compile/issue-1487.rs: Likewise.
* rust/compile/issue-1524.rs: Likewise.
* rust/compile/issue-1525.rs: Likewise.
* rust/compile/issue-1589.rs: Likewise.
* rust/compile/issue-1725-1.rs: Likewise.
* rust/compile/issue-1725-2.rs: Likewise.
* rust/compile/issue-1773.rs: Likewise.
* rust/compile/issue-1786.rs: Likewise.
* rust/compile/issue-1807.rs: Likewise.
* rust/compile/issue-1813.rs: Likewise.
* rust/compile/issue-1830_bytes.rs: Likewise.
* rust/compile/issue-1830_str.rs: Likewise.
* rust/compile/issue-1893.rs: Likewise.
* rust/compile/issue-1901.rs: Likewise.
* rust/compile/issue-1930.rs: Likewise.
* rust/compile/issue-1981.rs: Likewise.
* rust/compile/issue-2015.rs: Likewise.
* rust/compile/issue-2019-1.rs: Likewise.
* rust/compile/issue-2019-2.rs: Likewise.
* rust/compile/issue-2019-3.rs: Likewise.
* rust/compile/issue-2029.rs: Likewise.
* rust/compile/issue-2035.rs: Likewise.
* rust/compile/issue-2036.rs: Likewise.
* rust/compile/issue-2037.rs: Likewise.
* rust/compile/issue-2039.rs: Likewise.
* rust/compile/issue-2040.rs: Likewise.
* rust/compile/issue-2042.rs: Likewise.
* rust/compile/issue-2043.rs: Likewise.
* rust/compile/issue-2070.rs: Likewise.
* rust/compile/issue-2105.rs: Likewise.
* rust/compile/issue-2106.rs: Likewise.
* rust/compile/issue-2125.rs: Likewise.
* rust/compile/issue-2135.rs: Likewise.
* rust/compile/issue-2136-1.rs: Likewise.
* rust/compile/issue-2136-2.rs: Likewise.
* rust/compile/issue-2139.rs: Likewise.
* rust/compile/issue-2142.rs: Likewise.
* rust/compile/issue-2165.rs: Likewise.
* rust/compile/issue-2166.rs: Likewise.
* rust/compile/issue-2178.rs: Likewise.
* rust/compile/issue-2187.rs: Likewise.
* rust/compile/issue-2188.rs: Likewise.
* rust/compile/issue-2189.rs: Likewise.
* rust/compile/issue-2190-1.rs: Likewise.
* rust/compile/issue-2190-2.rs: Likewise.
* rust/compile/issue-2195.rs: Likewise.
* rust/compile/issue-2203.rs: Likewise.
* rust/compile/issue-2207.rs: Likewise.
* rust/compile/issue-2225.rs: Likewise.
* rust/compile/issue-2238.rs: Likewise.
* rust/compile/issue-2304.rs: Likewise.
* rust/compile/issue-2323.rs: Likewise.
* rust/compile/issue-2324-1.rs: Likewise.
* rust/compile/issue-2324-2.rs: Likewise.
* rust/compile/issue-2330.rs: Likewise.
* rust/compile/issue-2369.rs: Likewise.
* rust/compile/issue-2375.rs: Likewise.
* rust/compile/issue-2391.rs: Likewise.
* rust/compile/issue-2394.rs: Likewise.
* rust/compile/issue-2421_str.rs: Likewise.
* rust/compile/issue-2423.rs: Likewise.
* rust/compile/issue-2431.rs: Likewise.
* rust/compile/issue-2477.rs: Likewise.
* rust/compile/issue-2478.rs: Likewise.
* rust/compile/issue-2479.rs: Likewise.
* rust/compile/issue-2499.rs: Likewise.
* rust/compile/issue-2514.rs: Likewise.
* rust/compile/issue-2567-1.rs: Likewise.
* rust/compile/issue-2567-2.rs: Likewise.
* rust/compile/issue-2567-3.rs: Likewise.
* rust/compile/issue-2645.rs: Likewise.
* rust/compile/issue-2650-1.rs: Likewise.
* rust/compile/issue-2650-2.rs: Likewise.
* rust/compile/issue-266.rs: Likewise.
* rust/compile/issue-2665.rs: Likewise.
* rust/compile/issue-2680.rs: Likewise.
* rust/compile/issue-2709.rs: Likewise.
* rust/compile/issue-2723-1.rs: Likewise.
* rust/compile/issue-2723-2.rs: Likewise.
* rust/compile/issue-2725.rs: Likewise.
* rust/compile/issue-2747.rs: Likewise.
* rust/compile/issue-2767.rs: Likewise.
* rust/compile/issue-2772-1.rs: Likewise.
* rust/compile/issue-2772-2.rs: Likewise.
* rust/compile/issue-2775.rs: Likewise.
* rust/compile/issue-2782.rs: Likewise.
* rust/compile/issue-2785.rs: Likewise.
* rust/compile/issue-2788.rs: Likewise.
* rust/compile/issue-2812.rs: Likewise.
* rust/compile/issue-2847-b.rs: Likewise.
* rust/compile/issue-2847.rs: Likewise.
* rust/compile/issue-2850.rs: Likewise.
* rust/compile/issue-2905-1.rs: Likewise.
* rust/compile/issue-2905-2.rs: Likewise.
* rust/compile/issue-2906.rs: Likewise.
* rust/compile/issue-2907.rs: Likewise.
* rust/compile/issue-2951.rs: Likewise.
* rust/compile/issue-2953-1.rs: Likewise.
* rust/compile/issue-2953-2.rs: Likewise.
* rust/compile/issue-2954.rs: Likewise.
* rust/compile/issue-2987.rs: Likewise.
* rust/compile/issue-3009.rs: Likewise.
* rust/compile/issue-3022.rs: Likewise.
* rust/compile/issue-3030.rs: Likewise.
* rust/compile/issue-3032-1.rs: Likewise.
* rust/compile/issue-3032-2.rs: Likewise.
* rust/compile/issue-3033.rs: Likewise.
* rust/compile/issue-3035.rs: Likewise.
* rust/compile/issue-3036.rs: Likewise.
* rust/compile/issue-3045-1.rs: Likewise.
* rust/compile/issue-3045-2.rs: Likewise.
* rust/compile/issue-3046.rs: Likewise.
* rust/compile/issue-3082.rs: Likewise.
* rust/compile/issue-3139-1.rs: Likewise.
* rust/compile/issue-3139-2.rs: Likewise.
* rust/compile/issue-3139-3.rs: Likewise.
* rust/compile/issue-3140.rs: Likewise.
* rust/compile/issue-3141.rs: Likewise.
* rust/compile/issue-3144.rs: Likewise.
* rust/compile/issue-3174.rs: Likewise.
* rust/compile/issue-3231.rs: Likewise.
* rust/compile/issue-3242.rs: Likewise.
* rust/compile/issue-3261.rs: Likewise.
* rust/compile/issue-3304.rs: Likewise.
* rust/compile/issue-3315-1.rs: Likewise.
* rust/compile/issue-3315-2.rs: Likewise.
* rust/compile/issue-3350.rs: Likewise.
* rust/compile/issue-3382.rs: Likewise.
* rust/compile/issue-3402-2.rs: Likewise.
* rust/compile/issue-3454.rs: Likewise.
* rust/compile/issue-3524.rs: Likewise.
* rust/compile/issue-3525.rs: Likewise.
* rust/compile/issue-3530-1.rs: Likewise.
* rust/compile/issue-3530-2.rs: Likewise.
* rust/compile/issue-3538.rs: Likewise.
* rust/compile/issue-3541-1.rs: Likewise.
* rust/compile/issue-3541-2.rs: Likewise.
* rust/compile/issue-3546.rs: Likewise.
* rust/compile/issue-3549.rs: Likewise.
* rust/compile/issue-3551.rs: Likewise.
* rust/compile/issue-3552.rs: Likewise.
* rust/compile/issue-3553.rs: Likewise.
* rust/compile/issue-3554-1.rs: Likewise.
* rust/compile/issue-3554-2.rs: Likewise.
* rust/compile/issue-3556.rs: Likewise.
* rust/compile/issue-3563.rs: Likewise.
* rust/compile/issue-3566-1.rs: Likewise.
* rust/compile/issue-3566-2.rs: Likewise.
* rust/compile/issue-3567.rs: Likewise.
* rust/compile/issue-3568.rs: Likewise.
* rust/compile/issue-3581-1.rs: Likewise.
* rust/compile/issue-3581-2.rs: Likewise.
* rust/compile/issue-3588.rs: Likewise.
* rust/compile/issue-3592.rs: Likewise.
* rust/compile/issue-3599.rs: Likewise.
* rust/compile/issue-3605.rs: Likewise.
* rust/compile/issue-3606.rs: Likewise.
* rust/compile/issue-3612.rs: Likewise.
* rust/compile/issue-3613.rs: Likewise.
* rust/compile/issue-3614.rs: Likewise.
* rust/compile/issue-3615.rs: Likewise.
* rust/compile/issue-3617.rs: Likewise.
* rust/compile/issue-3618.rs: Likewise.
* rust/compile/issue-3625.rs: Likewise.
* rust/compile/issue-3628.rs: Likewise.
* rust/compile/issue-3642.rs: Likewise.
* rust/compile/issue-3643.rs: Likewise.
* rust/compile/issue-3645.rs: Likewise.
* rust/compile/issue-3646.rs: Likewise.
* rust/compile/issue-3647.rs: Likewise.
* rust/compile/issue-3648.rs: Likewise.
* rust/compile/issue-3649.rs: Likewise.
* rust/compile/issue-3652.rs: Likewise.
* rust/compile/issue-3654.rs: Likewise.
* rust/compile/issue-3656.rs: Likewise.
* rust/compile/issue-3657.rs: Likewise.
* rust/compile/issue-3659.rs: Likewise.
* rust/compile/issue-3660.rs: Likewise.
* rust/compile/issue-3661.rs: Likewise.
* rust/compile/issue-3662.rs: Likewise.
* rust/compile/issue-3663.rs: Likewise.
* rust/compile/issue-3664.rs: Likewise.
* rust/compile/issue-3665.rs: Likewise.
* rust/compile/issue-3667.rs: Likewise.
* rust/compile/issue-3671.rs: Likewise.
* rust/compile/issue-3711.rs: Likewise.
* rust/compile/issue-3726.rs: Likewise.
* rust/compile/issue-3836.rs: Likewise.
* rust/compile/issue-3874.rs: Likewise.
* rust/compile/issue-3876.rs: Likewise.
* rust/compile/issue-3885.rs: Likewise.
* rust/compile/issue-3898.rs: Likewise.
* rust/compile/issue-3904.rs: Likewise.
* rust/compile/issue-3915.rs: Likewise.
* rust/compile/issue-3916.rs: Likewise.
* rust/compile/issue-3922.rs: Likewise.
* rust/compile/issue-3924.rs: Likewise.
* rust/compile/issue-3928.rs: Likewise.
* rust/compile/issue-3929-1.rs: Likewise.
* rust/compile/issue-3929-2.rs: Likewise.
* rust/compile/issue-3930.rs: Likewise.
* rust/compile/issue-3947.rs: Likewise.
* rust/compile/issue-3958.rs: Likewise.
* rust/compile/issue-3960.rs: Likewise.
* rust/compile/issue-3965-1.rs: Likewise.
* rust/compile/issue-3965-2.rs: Likewise.
* rust/compile/issue-3966.rs: Likewise.
* rust/compile/issue-3969.rs: Likewise.
* rust/compile/issue-3971.rs: Likewise.
* rust/compile/issue-3974.rs: Likewise.
* rust/compile/issue-3977.rs: Likewise.
* rust/compile/issue-3978.rs: Likewise.
* rust/compile/issue-4006.rs: Likewise.
* rust/compile/issue-402.rs: Likewise.
* rust/compile/issue-407-2.rs: Likewise.
* rust/compile/issue-407.rs: Likewise.
* rust/compile/issue-4090-1.rs: Likewise.
* rust/compile/issue-4090-2.rs: Likewise.
* rust/compile/issue-4139.rs: Likewise.
* rust/compile/issue-4140-1.rs: Likewise.
* rust/compile/issue-4140-2.rs: Likewise.
* rust/compile/issue-4145.rs: Likewise.
* rust/compile/issue-4146.rs: Likewise.
* rust/compile/issue-4148.rs: Likewise.
* rust/compile/issue-4155.rs: Likewise.
* rust/compile/issue-4162.rs: Likewise.
* rust/compile/issue-4163-2.rs: Likewise.
* rust/compile/issue-4163.rs: Likewise.
* rust/compile/issue-4165.rs: Likewise.
* rust/compile/issue-4166.rs: Likewise.
* rust/compile/issue-4168.rs: Likewise.
* rust/compile/issue-4188.rs: Likewise.
* rust/compile/issue-4212.rs: Likewise.
* rust/compile/issue-4213.rs: Likewise.
* rust/compile/issue-4219.rs: Likewise.
* rust/compile/issue-4222.rs: Likewise.
* rust/compile/issue-4226.rs: Likewise.
* rust/compile/issue-4231.rs: Likewise.
* rust/compile/issue-4232.rs: Likewise.
* rust/compile/issue-4234.rs: Likewise.
* rust/compile/issue-4235.rs: Likewise.
* rust/compile/issue-4242.rs: Likewise.
* rust/compile/issue-4245.rs: Likewise.
* rust/compile/issue-4260_0.rs: Likewise.
* rust/compile/issue-4261.rs: Likewise.
* rust/compile/issue-4262.rs: Likewise.
* rust/compile/issue-4267.rs: Likewise.
* rust/compile/issue-4301.rs: Likewise.
* rust/compile/issue-4375-ice-regression.rs: Likewise.
* rust/compile/issue-4375-multiple-errors.rs: Likewise.
* rust/compile/issue-4375-tuple-pattern.rs: Likewise.
* rust/compile/issue-4387.rs: Likewise.
* rust/compile/issue-4388.rs: Likewise.
* rust/compile/issue-557.rs: Likewise.
* rust/compile/issue-635-1.rs: Likewise.
* rust/compile/issue-635-2.rs: Likewise.
* rust/compile/issue-850.rs: Likewise.
* rust/compile/issue-852.rs: Likewise.
* rust/compile/issue-855.rs: Likewise.
* rust/compile/issue-867.rs: Likewise.
* rust/compile/issue-925.rs: Likewise.
* rust/compile/iterators1.rs: Likewise.
* rust/compile/lang-impl.rs: Likewise.
* rust/compile/lang_feature_gate.rs: Likewise.
* rust/compile/let_alt.rs: Likewise.
* rust/compile/lifetime_name_validation.rs: Likewise.
* rust/compile/link_name-malformed.rs: Likewise.
* rust/compile/link_section-malformed.rs: Likewise.
* rust/compile/lookup_err1.rs: Likewise.
* rust/compile/loop_constant_context.rs: Likewise.
* rust/compile/macros/builtin/builtin_macro.exp: Likewise.
* rust/compile/macros/builtin/compile_error.rs: Likewise.
* rust/compile/macros/builtin/concat.rs: Likewise.
* rust/compile/macros/builtin/eager1.rs: Likewise.
* rust/compile/macros/builtin/eager2.rs: Likewise.
* rust/compile/macros/builtin/eager3.rs: Likewise.
* rust/compile/macros/builtin/env.rs: Likewise.
* rust/compile/macros/builtin/include1.rs: Likewise.
* rust/compile/macros/builtin/include2.rs: Likewise.
* rust/compile/macros/builtin/include3.rs: Likewise.
* rust/compile/macros/builtin/include4.rs: Likewise.
* rust/compile/macros/builtin/include_bytes.rs: Likewise.
* rust/compile/macros/builtin/include_bytes_location_info.rs: Likewise.
* rust/compile/macros/builtin/include_str.rs: Likewise.
* rust/compile/macros/builtin/include_str_location_info.rs: Likewise.
* rust/compile/macros/builtin/invalid_utf8: Likewise.
* rust/compile/macros/builtin/not_found.rs: Likewise.
* rust/compile/macros/builtin/option_env1.rs: Likewise.
* rust/compile/macros/builtin/option_env2.rs: Likewise.
* rust/compile/macros/builtin/option_env3.rs: Likewise.
* rust/compile/macros/builtin/recurse2.rs: Likewise.
* rust/compile/macros/mbe/macro-delim.rs: Likewise.
* rust/compile/macros/mbe/macro-duplicate-binding.rs: Likewise.
* rust/compile/macros/mbe/macro-expand-module.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1053-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1053.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1224.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1233.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1395-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1395.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1400-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue1400.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2092.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2192.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2194.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2229.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2264.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2268.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2273.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2653.rs: Likewise.
* rust/compile/macros/mbe/macro-issue2983_2984.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3608.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3693.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3708.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3709-1.rs: Likewise.
* rust/compile/macros/mbe/macro-issue3709-2.rs: Likewise.
* rust/compile/macros/mbe/macro-issue4054.rs: Likewise.
* rust/compile/macros/mbe/macro1.rs: Likewise.
* rust/compile/macros/mbe/macro10.rs: Likewise.
* rust/compile/macros/mbe/macro11.rs: Likewise.
* rust/compile/macros/mbe/macro12.rs: Likewise.
* rust/compile/macros/mbe/macro13.rs: Likewise.
* rust/compile/macros/mbe/macro14.rs: Likewise.
* rust/compile/macros/mbe/macro15.rs: Likewise.
* rust/compile/macros/mbe/macro16.rs: Likewise.
* rust/compile/macros/mbe/macro17.rs: Likewise.
* rust/compile/macros/mbe/macro18.rs: Likewise.
* rust/compile/macros/mbe/macro19.rs: Likewise.
* rust/compile/macros/mbe/macro2.rs: Likewise.
* rust/compile/macros/mbe/macro20.rs: Likewise.
* rust/compile/macros/mbe/macro21.rs: Likewise.
* rust/compile/macros/mbe/macro22.rs: Likewise.
* rust/compile/macros/mbe/macro23.rs: Likewise.
* rust/compile/macros/mbe/macro25.rs: Likewise.
* rust/compile/macros/mbe/macro26.rs: Likewise.
* rust/compile/macros/mbe/macro27.rs: Likewise.
* rust/compile/macros/mbe/macro28.rs: Likewise.
* rust/compile/macros/mbe/macro29.rs: Likewise.
* rust/compile/macros/mbe/macro3.rs: Likewise.
* rust/compile/macros/mbe/macro30.rs: Likewise.
* rust/compile/macros/mbe/macro31.rs: Likewise.
* rust/compile/macros/mbe/macro32.rs: Likewise.
* rust/compile/macros/mbe/macro33.rs: Likewise.
* rust/compile/macros/mbe/macro34.rs: Likewise.
* rust/compile/macros/mbe/macro35.rs: Likewise.
* rust/compile/macros/mbe/macro36.rs: Likewise.
* rust/compile/macros/mbe/macro37.rs: Likewise.
* rust/compile/macros/mbe/macro38.rs: Likewise.
* rust/compile/macros/mbe/macro39.rs: Likewise.
* rust/compile/macros/mbe/macro4.rs: Likewise.
* rust/compile/macros/mbe/macro40.rs: Likewise.
* rust/compile/macros/mbe/macro41.rs: Likewise.
* rust/compile/macros/mbe/macro42.rs: Likewise.
* rust/compile/macros/mbe/macro43.rs: Likewise.
* rust/compile/macros/mbe/macro44.rs: Likewise.
* rust/compile/macros/mbe/macro45.rs: Likewise.
* rust/compile/macros/mbe/macro46.rs: Likewise.
* rust/compile/macros/mbe/macro47.rs: Likewise.
* rust/compile/macros/mbe/macro48.rs: Likewise.
* rust/compile/macros/mbe/macro49.rs: Likewise.
* rust/compile/macros/mbe/macro5.rs: Likewise.
* rust/compile/macros/mbe/macro50.rs: Likewise.
* rust/compile/macros/mbe/macro51.rs: Likewise.
* rust/compile/macros/mbe/macro52.rs: Likewise.
* rust/compile/macros/mbe/macro53.rs: Likewise.
* rust/compile/macros/mbe/macro54.rs: Likewise.
* rust/compile/macros/mbe/macro55.rs: Likewise.
* rust/compile/macros/mbe/macro56.rs: Likewise.
* rust/compile/macros/mbe/macro57.rs: Likewise.
* rust/compile/macros/mbe/macro58.rs: Likewise.
* rust/compile/macros/mbe/macro6.rs: Likewise.
* rust/compile/macros/mbe/macro7.rs: Likewise.
* rust/compile/macros/mbe/macro8.rs: Likewise.
* rust/compile/macros/mbe/macro9.rs: Likewise.
* rust/compile/macros/mbe/macro_call_statement.rs: Likewise.
* rust/compile/macros/mbe/macro_export_1.rs: Likewise.
* rust/compile/macros/mbe/macro_return.rs: Likewise.
* rust/compile/macros/mbe/macro_rules_macro_rules.rs: Likewise.
* rust/compile/macros/mbe/macro_use1.rs: Likewise.
* rust/compile/macros/mbe/mbe_macro.exp: Likewise.
* rust/compile/macros/mbe/meta-param.rs: Likewise.
* rust/compile/macros/proc/attribute_crate_type.rs: Likewise.
* rust/compile/macros/proc/attribute_non_function.rs: Likewise.
* rust/compile/macros/proc/attribute_non_root_function.rs: Likewise.
* rust/compile/macros/proc/attribute_non_root_method.rs: Likewise.
* rust/compile/macros/proc/attribute_non_root_module.rs: Likewise.
* rust/compile/macros/proc/attribute_private.rs: Likewise.
* rust/compile/macros/proc/crate_type.rs: Likewise.
* rust/compile/macros/proc/derive_crate_type.rs: Likewise.
* rust/compile/macros/proc/derive_malformed.rs: Likewise.
* rust/compile/macros/proc/derive_non_function.rs: Likewise.
* rust/compile/macros/proc/derive_non_root_function.rs: Likewise.
* rust/compile/macros/proc/derive_non_root_module.rs: Likewise.
* rust/compile/macros/proc/derive_private.rs: Likewise.
* rust/compile/macros/proc/non_function.rs: Likewise.
* rust/compile/macros/proc/non_root_function.rs: Likewise.
* rust/compile/macros/proc/non_root_method.rs: Likewise.
* rust/compile/macros/proc/non_root_module.rs: Likewise.
* rust/compile/macros/proc/non_root_trait_method.rs: Likewise.
* rust/compile/macros/proc/private.rs: Likewise.
* rust/compile/macros/proc/proc_macro.exp: Likewise.
* rust/compile/macros/proc/pub_function.rs: Likewise.
* rust/compile/macros/proc/pub_module.rs: Likewise.
* rust/compile/match-identifierpattern-enum.rs: Likewise.
* rust/compile/match-identifierpattern.rs: Likewise.
* rust/compile/match-never-ltype.rs: Likewise.
* rust/compile/match-never-rtype.rs: Likewise.
* rust/compile/match-restpattern-tuple-1.rs: Likewise.
* rust/compile/match-restpattern-tuple-2.rs: Likewise.
* rust/compile/match-slicepattern-array.rs: Likewise.
* rust/compile/match-slicepattern-slice.rs: Likewise.
* rust/compile/match-struct-path.rs: Likewise.
* rust/compile/match-structpattern-tuplefield-err.rs: Likewise.
* rust/compile/match-structpattern-tuplefield.rs: Likewise.
* rust/compile/match-tuplestructpattern-err.rs: Likewise.
* rust/compile/match-tuplestructpattern-non-variant.rs: Likewise.
* rust/compile/match-tuplestructpattern-rest.rs: Likewise.
* rust/compile/match-tuplestructpattern.rs: Likewise.
* rust/compile/match1.rs: Likewise.
* rust/compile/match2.rs: Likewise.
* rust/compile/match3.rs: Likewise.
* rust/compile/match4.rs: Likewise.
* rust/compile/match5.rs: Likewise.
* rust/compile/match6.rs: Likewise.
* rust/compile/match7.rs: Likewise.
* rust/compile/match8.rs: Likewise.
* rust/compile/match9.rs: Likewise.
* rust/compile/match_break.rs: Likewise.
* rust/compile/may_dangle.rs: Likewise.
* rust/compile/method1.rs: Likewise.
* rust/compile/method2.rs: Likewise.
* rust/compile/min_specialization1.rs: Likewise.
* rust/compile/mismatch-crate-name.rs: Likewise.
* rust/compile/mismatched-types.rs: Likewise.
* rust/compile/missing_closing_paren.rs: Likewise.
* rust/compile/missing_constructor_fields.rs: Likewise.
* rust/compile/missing_return1.rs: Likewise.
* rust/compile/mod_missing_middle.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/both_path.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/explicit.not.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/explicit.not/other.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/inner_path.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/outer_path.rs: Likewise.
* rust/compile/mod_missing_middle/missing_middle/sub/mod.rs: Likewise.
* rust/compile/multi_reference_type.rs: Likewise.
* rust/compile/multiline-string.rs: Likewise.
* rust/compile/multiple_bindings1.rs: Likewise.
* rust/compile/multiple_bindings2.rs: Likewise.
* rust/compile/mutability_checks1.rs: Likewise.
* rust/compile/name_resolution1.rs: Likewise.
* rust/compile/name_resolution10.rs: Likewise.
* rust/compile/name_resolution11.rs: Likewise.
* rust/compile/name_resolution12.rs: Likewise.
* rust/compile/name_resolution13.rs: Likewise.
* rust/compile/name_resolution14.rs: Likewise.
* rust/compile/name_resolution15.rs: Likewise.
* rust/compile/name_resolution16.rs: Likewise.
* rust/compile/name_resolution17.rs: Likewise.
* rust/compile/name_resolution18.rs: Likewise.
* rust/compile/name_resolution19.rs: Likewise.
* rust/compile/name_resolution2.rs: Likewise.
* rust/compile/name_resolution20.rs: Likewise.
* rust/compile/name_resolution22.rs: Likewise.
* rust/compile/name_resolution23.rs: Likewise.
* rust/compile/name_resolution24.rs: Likewise.
* rust/compile/name_resolution25.rs: Likewise.
* rust/compile/name_resolution3.rs: Likewise.
* rust/compile/name_resolution4.rs: Likewise.
* rust/compile/name_resolution5.rs: Likewise.
* rust/compile/name_resolution6.rs: Likewise.
* rust/compile/name_resolution7.rs: Likewise.
* rust/compile/name_resolution8.rs: Likewise.
* rust/compile/name_resolution9.rs: Likewise.
* rust/compile/negative_impls.rs: Likewise.
* rust/compile/negative_impls_2.rs: Likewise.
* rust/compile/nested_generic.rs: Likewise.
* rust/compile/nested_macro_definition.rs: Likewise.
* rust/compile/nested_macro_use1.rs: Likewise.
* rust/compile/nested_macro_use2.rs: Likewise.
* rust/compile/nested_macro_use3.rs: Likewise.
* rust/compile/never_type1.rs: Likewise.
* rust/compile/no-crate-level-outer-attr.rs: Likewise.
* rust/compile/no_mangle-malformed.rs: Likewise.
* rust/compile/non-snake-case_0.rs: Likewise.
* rust/compile/non-upper-case-globals_0.rs: Likewise.
* rust/compile/non_foreign_variadic_function.rs: Likewise.
* rust/compile/non_member_const.rs: Likewise.
* rust/compile/nonexistent-field.rs: Likewise.
* rust/compile/not_a_float_literal_tuple_index.rs: Likewise.
* rust/compile/not_find_value_in_scope.rs: Likewise.
* rust/compile/not_raw_ref_op.rs: Likewise.
* rust/compile/offset_of1.rs: Likewise.
* rust/compile/offset_of2.rs: Likewise.
* rust/compile/parse_associated_type_as_generic_arg.rs: Likewise.
* rust/compile/parse_associated_type_as_generic_arg2.rs: Likewise.
* rust/compile/parse_associated_type_as_generic_arg3.rs: Likewise.
* rust/compile/parse_closure_bind.rs: Likewise.
* rust/compile/parse_complex_generic_application.rs: Likewise.
* rust/compile/parse_complex_generic_application2.rs: Likewise.
* rust/compile/parse_empty_tuple_pattern.rs: Likewise.
* rust/compile/parse_float_dot.rs: Likewise.
* rust/compile/parse_generic_path_expr.rs: Likewise.
* rust/compile/parse_global_path_generic.rs: Likewise.
* rust/compile/parse_invalid_specialization.rs: Likewise.
* rust/compile/parse_item_default_macro.rs: Likewise.
* rust/compile/parse_pub_unit_type.rs: Likewise.
* rust/compile/parse_range.rs: Likewise.
* rust/compile/parse_simple_path_fail_1.rs: Likewise.
* rust/compile/parse_simple_path_fail_2.rs: Likewise.
* rust/compile/parse_specialization.rs: Likewise.
* rust/compile/parse_variadic_function.rs: Likewise.
* rust/compile/path_as_generic_arg.rs: Likewise.
* rust/compile/pattern-or.rs: Likewise.
* rust/compile/pattern-struct.rs: Likewise.
* rust/compile/pattern_variadic.rs: Likewise.
* rust/compile/prelude_import.rs: Likewise.
* rust/compile/primitive-import.rs: Likewise.
* rust/compile/privacy1.rs: Likewise.
* rust/compile/privacy2.rs: Likewise.
* rust/compile/privacy3.rs: Likewise.
* rust/compile/privacy4.rs: Likewise.
* rust/compile/privacy5.rs: Likewise.
* rust/compile/privacy6.rs: Likewise.
* rust/compile/privacy7.rs: Likewise.
* rust/compile/privacy8.rs: Likewise.
* rust/compile/privacy9.rs: Likewise.
* rust/compile/ptr_int_cast.rs: Likewise.
* rust/compile/pub_restricted_1.rs: Likewise.
* rust/compile/pub_restricted_2.rs: Likewise.
* rust/compile/pub_restricted_3.rs: Likewise.
* rust/compile/range_from_expr_for_loop.rs: Likewise.
* rust/compile/raw-byte-string-loc.rs: Likewise.
* rust/compile/raw-string-loc.rs: Likewise.
* rust/compile/raw_identifiers_bad_keywords.rs: Likewise.
* rust/compile/raw_identifiers_underscore.rs: Likewise.
* rust/compile/raw_ref_op.rs: Likewise.
* rust/compile/raw_ref_op_feature_gate.rs: Likewise.
* rust/compile/raw_ref_op_invalid.rs: Likewise.
* rust/compile/redef_error1.rs: Likewise.
* rust/compile/redef_error2.rs: Likewise.
* rust/compile/redef_error3.rs: Likewise.
* rust/compile/redef_error4.rs: Likewise.
* rust/compile/redef_error5.rs: Likewise.
* rust/compile/redef_error6.rs: Likewise.
* rust/compile/redundant-semicolons_0.rs: Likewise.
* rust/compile/ref_pattern_fn_param1.rs: Likewise.
* rust/compile/ref_pattern_fn_param2.rs: Likewise.
* rust/compile/reference1.rs: Likewise.
* rust/compile/repeated_constructor_fields.rs: Likewise.
* rust/compile/rust-const-blog-issue.rs: Likewise.
* rust/compile/rust_abi.rs: Likewise.
* rust/compile/rustc_attr1.rs: Likewise.
* rust/compile/rustc_const_stable.rs: Likewise.
* rust/compile/rustc_const_unstable.rs: Likewise.
* rust/compile/same_field_name.rs: Likewise.
* rust/compile/self-in-impl.rs: Likewise.
* rust/compile/self-path1.rs: Likewise.
* rust/compile/self-path2.rs: Likewise.
* rust/compile/self_const_ptr.rs: Likewise.
* rust/compile/self_import_namespace.rs: Likewise.
* rust/compile/self_mut_ptr.rs: Likewise.
* rust/compile/self_ptr.rs: Likewise.
* rust/compile/shadow1.rs: Likewise.
* rust/compile/silly-order-bug.rs: Likewise.
* rust/compile/sizeof-stray-infer-var-bug.rs: Likewise.
* rust/compile/slice_rest_pattern.rs: Likewise.
* rust/compile/slicepattern-size-mismatch.rs: Likewise.
* rust/compile/specify-crate-name.rs: Likewise.
* rust/compile/static_item_0.rs: Likewise.
* rust/compile/static_var1.rs: Likewise.
* rust/compile/stmt_with_block_dot.rs: Likewise.
* rust/compile/stmt_with_block_err1.rs: Likewise.
* rust/compile/stringify.rs: Likewise.
* rust/compile/struct-expr-parse.rs: Likewise.
* rust/compile/struct_align1.rs: Likewise.
* rust/compile/struct_align2.rs: Likewise.
* rust/compile/struct_expr_field_attributes.rs: Likewise.
* rust/compile/struct_init1.rs: Likewise.
* rust/compile/struct_pack1.rs: Likewise.
* rust/compile/struct_pack2.rs: Likewise.
* rust/compile/structural-eq-peq.rs: Likewise.
* rust/compile/syntax-only.rs: Likewise.
* rust/compile/target_feature-malformed-4233.rs: Likewise.
* rust/compile/template_function_0.rs: Likewise.
* rust/compile/torture/all_doc_comment_line_blocks.rs: Likewise.
* rust/compile/torture/all_doc_comment_line_blocks_crlf.rs: Likewise.
* rust/compile/torture/alt_patterns1.rs: Likewise.
* rust/compile/torture/arithmetic_expressions1.rs: Likewise.
* rust/compile/torture/array_const_fold_1.rs: Likewise.
* rust/compile/torture/array_const_fold_2.rs: Likewise.
* rust/compile/torture/array_function.rs: Likewise.
* rust/compile/torture/array_type_infer.rs: Likewise.
* rust/compile/torture/array_zero_length.rs: Likewise.
* rust/compile/torture/arrays1.rs: Likewise.
* rust/compile/torture/arrays2.rs: Likewise.
* rust/compile/torture/arrays3.rs: Likewise.
* rust/compile/torture/arrays4.rs: Likewise.
* rust/compile/torture/arrays5.rs: Likewise.
* rust/compile/torture/arrays6.rs: Likewise.
* rust/compile/torture/arrays_index1.rs: Likewise.
* rust/compile/torture/arrays_index2.rs: Likewise.
* rust/compile/torture/arrays_index3.rs: Likewise.
* rust/compile/torture/as_bool_char.rs: Likewise.
* rust/compile/torture/associated_types1.rs: Likewise.
* rust/compile/torture/autoderef1.rs: Likewise.
* rust/compile/torture/block_expr1.rs: Likewise.
* rust/compile/torture/block_expr2.rs: Likewise.
* rust/compile/torture/block_expr3.rs: Likewise.
* rust/compile/torture/block_expr4.rs: Likewise.
* rust/compile/torture/block_expr5.rs: Likewise.
* rust/compile/torture/block_expr_parser_bug.rs: Likewise.
* rust/compile/torture/bom.rs: Likewise.
* rust/compile/torture/bom_comment.rs: Likewise.
* rust/compile/torture/bom_shebang.rs: Likewise.
* rust/compile/torture/bom_whitespace.rs: Likewise.
* rust/compile/torture/bools_eq.rs: Likewise.
* rust/compile/torture/borrow1.rs: Likewise.
* rust/compile/torture/borrow_function.rs: Likewise.
* rust/compile/torture/break_function.rs: Likewise.
* rust/compile/torture/builtin_abort.rs: Likewise.
* rust/compile/torture/byte_char_str.rs: Likewise.
* rust/compile/torture/byte_str.rs: Likewise.
* rust/compile/torture/cast1.rs: Likewise.
* rust/compile/torture/cast2.rs: Likewise.
* rust/compile/torture/cast3.rs: Likewise.
* rust/compile/torture/cfg_attr.rs: Likewise.
* rust/compile/torture/char1.rs: Likewise.
* rust/compile/torture/check-doc-attr-string.rs: Likewise.
* rust/compile/torture/coercion1.rs: Likewise.
* rust/compile/torture/coercion2.rs: Likewise.
* rust/compile/torture/comparison_expr1.rs: Likewise.
* rust/compile/torture/compile.exp: Likewise.
* rust/compile/torture/compound_assignment_expr1.rs: Likewise.
* rust/compile/torture/conditional.rs: Likewise.
* rust/compile/torture/constant1.rs: Likewise.
* rust/compile/torture/constant2.rs: Likewise.
* rust/compile/torture/constant3.rs: Likewise.
* rust/compile/torture/deadcode1.rs: Likewise.
* rust/compile/torture/deadcode2.rs: Likewise.
* rust/compile/torture/deref1.rs: Likewise.
* rust/compile/torture/deref_function.rs: Likewise.
* rust/compile/torture/doc_comment.rs: Likewise.
* rust/compile/torture/enum1.rs: Likewise.
* rust/compile/torture/extern_mod1.rs: Likewise.
* rust/compile/torture/extern_mod1/modules/mod.rs: Likewise.
* rust/compile/torture/extern_mod2.rs: Likewise.
* rust/compile/torture/float1.rs: Likewise.
* rust/compile/torture/float_types.rs: Likewise.
* rust/compile/torture/forward_decl_1.rs: Likewise.
* rust/compile/torture/forward_decl_2.rs: Likewise.
* rust/compile/torture/forward_decl_3-unsafe.rs: Likewise.
* rust/compile/torture/forward_decl_3.rs: Likewise.
* rust/compile/torture/forward_decl_4.rs: Likewise.
* rust/compile/torture/forward_decl_5.rs: Likewise.
* rust/compile/torture/func1.rs: Likewise.
* rust/compile/torture/func2.rs: Likewise.
* rust/compile/torture/function_reference1.rs: Likewise.
* rust/compile/torture/function_reference2.rs: Likewise.
* rust/compile/torture/function_reference3.rs: Likewise.
* rust/compile/torture/function_reference4.rs: Likewise.
* rust/compile/torture/generics1.rs: Likewise.
* rust/compile/torture/generics10.rs: Likewise.
* rust/compile/torture/generics11.rs: Likewise.
* rust/compile/torture/generics12.rs: Likewise.
* rust/compile/torture/generics13.rs: Likewise.
* rust/compile/torture/generics14.rs: Likewise.
* rust/compile/torture/generics15.rs: Likewise.
* rust/compile/torture/generics16.rs: Likewise.
* rust/compile/torture/generics17.rs: Likewise.
* rust/compile/torture/generics18.rs: Likewise.
* rust/compile/torture/generics19.rs: Likewise.
* rust/compile/torture/generics2.rs: Likewise.
* rust/compile/torture/generics20.rs: Likewise.
* rust/compile/torture/generics21.rs: Likewise.
* rust/compile/torture/generics22.rs: Likewise.
* rust/compile/torture/generics23.rs: Likewise.
* rust/compile/torture/generics24.rs: Likewise.
* rust/compile/torture/generics25.rs: Likewise.
* rust/compile/torture/generics26.rs: Likewise.
* rust/compile/torture/generics27.rs: Likewise.
* rust/compile/torture/generics28.rs: Likewise.
* rust/compile/torture/generics29.rs: Likewise.
* rust/compile/torture/generics3.rs: Likewise.
* rust/compile/torture/generics30.rs: Likewise.
* rust/compile/torture/generics31.rs: Likewise.
* rust/compile/torture/generics32.rs: Likewise.
* rust/compile/torture/generics4.rs: Likewise.
* rust/compile/torture/generics5.rs: Likewise.
* rust/compile/torture/generics6.rs: Likewise.
* rust/compile/torture/generics7.rs: Likewise.
* rust/compile/torture/generics8.rs: Likewise.
* rust/compile/torture/generics9.rs: Likewise.
* rust/compile/torture/grouped_expr_function.rs: Likewise.
* rust/compile/torture/identifier-missing-impl-1.rs: Likewise.
* rust/compile/torture/if.rs: Likewise.
* rust/compile/torture/if_elif.rs: Likewise.
* rust/compile/torture/if_elif_else_expr1.rs: Likewise.
* rust/compile/torture/if_else.rs: Likewise.
* rust/compile/torture/ifunaryexpr.rs: Likewise.
* rust/compile/torture/impl_block1.rs: Likewise.
* rust/compile/torture/impl_block2.rs: Likewise.
* rust/compile/torture/impl_block3.rs: Likewise.
* rust/compile/torture/impl_block_unused.rs: Likewise.
* rust/compile/torture/implicit_returns1.rs: Likewise.
* rust/compile/torture/infer_type1.rs: Likewise.
* rust/compile/torture/inner_attributes.rs: Likewise.
* rust/compile/torture/integer_inference_var1.rs: Likewise.
* rust/compile/torture/integer_inference_var2.rs: Likewise.
* rust/compile/torture/integer_inference_var3.rs: Likewise.
* rust/compile/torture/integer_inference_var4.rs: Likewise.
* rust/compile/torture/integer_inference_var5.rs: Likewise.
* rust/compile/torture/integer_types.rs: Likewise.
* rust/compile/torture/intrinsics-2.rs: Likewise.
* rust/compile/torture/intrinsics-3.rs: Likewise.
* rust/compile/torture/intrinsics-4.rs: Likewise.
* rust/compile/torture/intrinsics-5.rs: Likewise.
* rust/compile/torture/intrinsics-6.rs: Likewise.
* rust/compile/torture/intrinsics-7.rs: Likewise.
* rust/compile/torture/intrinsics-8.rs: Likewise.
* rust/compile/torture/intrinsics-math.rs: Likewise.
* rust/compile/torture/isolated_cr_block_comment.rs: Likewise.
* rust/compile/torture/isolated_cr_line_comment.rs: Likewise.
* rust/compile/torture/issue-1024.rs: Likewise.
* rust/compile/torture/issue-1075.rs: Likewise.
* rust/compile/torture/issue-1432.rs: Likewise.
* rust/compile/torture/issue-1434.rs: Likewise.
* rust/compile/torture/issue-1506.rs: Likewise.
* rust/compile/torture/issue-1555.rs: Likewise.
* rust/compile/torture/issue-368.rs: Likewise.
* rust/compile/torture/issue-808.rs: Likewise.
* rust/compile/torture/issue-862.rs: Likewise.
* rust/compile/torture/issue-893-2.rs: Likewise.
* rust/compile/torture/issue-893.rs: Likewise.
* rust/compile/torture/lazybooleanexpr_function.rs: Likewise.
* rust/compile/torture/lifetime1.rs: Likewise.
* rust/compile/torture/literals1.rs: Likewise.
* rust/compile/torture/loop1.rs: Likewise.
* rust/compile/torture/loop2.rs: Likewise.
* rust/compile/torture/loop3.rs: Likewise.
* rust/compile/torture/loop4.rs: Likewise.
* rust/compile/torture/loop5.rs: Likewise.
* rust/compile/torture/loop6.rs: Likewise.
* rust/compile/torture/loop7.rs: Likewise.
* rust/compile/torture/loop8.rs: Likewise.
* rust/compile/torture/macro-issue1403.rs: Likewise.
* rust/compile/torture/macro_as_expr.rs: Likewise.
* rust/compile/torture/match1.rs: Likewise.
* rust/compile/torture/methods1.rs: Likewise.
* rust/compile/torture/methods2.rs: Likewise.
* rust/compile/torture/methods3.rs: Likewise.
* rust/compile/torture/mod-nameresolve.rs: Likewise.
* rust/compile/torture/mod1.rs: Likewise.
* rust/compile/torture/mod2.rs: Likewise.
* rust/compile/torture/mod3.rs: Likewise.
* rust/compile/torture/modules/valid_path.rs: Likewise.
* rust/compile/torture/must_use1.rs: Likewise.
* rust/compile/torture/must_use2.rs: Likewise.
* rust/compile/torture/name_resolve1.rs: Likewise.
* rust/compile/torture/negation_function.rs: Likewise.
* rust/compile/torture/nested_fn1.rs: Likewise.
* rust/compile/torture/nested_fn2.rs: Likewise.
* rust/compile/torture/nested_struct1.rs: Likewise.
* rust/compile/torture/never_type1.rs: Likewise.
* rust/compile/torture/not_shebang.rs: Likewise.
* rust/compile/torture/not_shebang_block_comment.rs: Likewise.
* rust/compile/torture/not_shebang_comment.rs: Likewise.
* rust/compile/torture/not_shebang_multiline_comment.rs: Likewise.
* rust/compile/torture/not_shebang_spaces.rs: Likewise.
* rust/compile/torture/parameter_usage1.rs: Likewise.
* rust/compile/torture/parens1.rs: Likewise.
* rust/compile/torture/phantom_data.rs: Likewise.
* rust/compile/torture/pointer1.rs: Likewise.
* rust/compile/torture/primconsts.rs: Likewise.
* rust/compile/torture/prims_struct_eq.rs: Likewise.
* rust/compile/torture/range-lang-item1.rs: Likewise.
* rust/compile/torture/raw_identifiers.rs: Likewise.
* rust/compile/torture/raw_identifiers_keywords.rs: Likewise.
* rust/compile/torture/recursive_fn1.rs: Likewise.
* rust/compile/torture/return_function.rs: Likewise.
* rust/compile/torture/scoping1.rs: Likewise.
* rust/compile/torture/self_type1.rs: Likewise.
* rust/compile/torture/shadow1.rs: Likewise.
* rust/compile/torture/shadow2.rs: Likewise.
* rust/compile/torture/shebang.rs: Likewise.
* rust/compile/torture/shebang_plus_attr.rs: Likewise.
* rust/compile/torture/shebang_plus_attr2.rs: Likewise.
* rust/compile/torture/static_function.rs: Likewise.
* rust/compile/torture/static_var1.rs: Likewise.
* rust/compile/torture/stmt_with_block1.rs: Likewise.
* rust/compile/torture/str1.rs: Likewise.
* rust/compile/torture/struct_access1.rs: Likewise.
* rust/compile/torture/struct_base_init_1.rs: Likewise.
* rust/compile/torture/struct_decl.rs: Likewise.
* rust/compile/torture/struct_init.rs: Likewise.
* rust/compile/torture/struct_init_10.rs: Likewise.
* rust/compile/torture/struct_init_11.rs: Likewise.
* rust/compile/torture/struct_init_2.rs: Likewise.
* rust/compile/torture/struct_init_3.rs: Likewise.
* rust/compile/torture/struct_init_4.rs: Likewise.
* rust/compile/torture/struct_init_5.rs: Likewise.
* rust/compile/torture/struct_init_6.rs: Likewise.
* rust/compile/torture/struct_init_7.rs: Likewise.
* rust/compile/torture/struct_init_8.rs: Likewise.
* rust/compile/torture/struct_init_9.rs: Likewise.
* rust/compile/torture/top_attr.rs: Likewise.
* rust/compile/torture/traits1.rs: Likewise.
* rust/compile/torture/traits10.rs: Likewise.
* rust/compile/torture/traits11.rs: Likewise.
* rust/compile/torture/traits12.rs: Likewise.
* rust/compile/torture/traits13.rs: Likewise.
* rust/compile/torture/traits14.rs: Likewise.
* rust/compile/torture/traits15.rs: Likewise.
* rust/compile/torture/traits16.rs: Likewise.
* rust/compile/torture/traits17.rs: Likewise.
* rust/compile/torture/traits18.rs: Likewise.
* rust/compile/torture/traits19.rs: Likewise.
* rust/compile/torture/traits2.rs: Likewise.
* rust/compile/torture/traits3.rs: Likewise.
* rust/compile/torture/traits4.rs: Likewise.
* rust/compile/torture/traits5.rs: Likewise.
* rust/compile/torture/traits6.rs: Likewise.
* rust/compile/torture/traits7.rs: Likewise.
* rust/compile/torture/traits8.rs: Likewise.
* rust/compile/torture/traits9.rs: Likewise.
* rust/compile/torture/transmute-size-check-1.rs: Likewise.
* rust/compile/torture/transmute1.rs: Likewise.
* rust/compile/torture/tuple1.rs: Likewise.
* rust/compile/torture/tuple2.rs: Likewise.
* rust/compile/torture/tuple3.rs: Likewise.
* rust/compile/torture/tuple_enum_variants.rs: Likewise.
* rust/compile/torture/tuple_field_access.rs: Likewise.
* rust/compile/torture/tuple_function.rs: Likewise.
* rust/compile/torture/tuple_index.rs: Likewise.
* rust/compile/torture/tuple_struct1.rs: Likewise.
* rust/compile/torture/tuple_struct2.rs: Likewise.
* rust/compile/torture/tuple_struct_unit.rs: Likewise.
* rust/compile/torture/tuple_struct_unused.rs: Likewise.
* rust/compile/torture/type-alias1.rs: Likewise.
* rust/compile/torture/type-alias2.rs: Likewise.
* rust/compile/torture/type_infer1.rs: Likewise.
* rust/compile/torture/type_infer2.rs: Likewise.
* rust/compile/torture/type_infer3.rs: Likewise.
* rust/compile/torture/type_infer4.rs: Likewise.
* rust/compile/torture/type_infer5.rs: Likewise.
* rust/compile/torture/type_infer6.rs: Likewise.
* rust/compile/torture/unary_operators.rs: Likewise.
* rust/compile/torture/undended-string-1.rs: Likewise.
* rust/compile/torture/undended-string-2.rs: Likewise.
* rust/compile/torture/underscore_id.rs: Likewise.
* rust/compile/torture/unended-raw-byte-string.rs: Likewise.
* rust/compile/torture/uninit-intrinsic-1.rs: Likewise.
* rust/compile/torture/union.rs: Likewise.
* rust/compile/torture/union_union.rs: Likewise.
* rust/compile/torture/unit_type1.rs: Likewise.
* rust/compile/torture/unit_type2.rs: Likewise.
* rust/compile/torture/unit_type3.rs: Likewise.
* rust/compile/torture/unit_type4.rs: Likewise.
* rust/compile/torture/unit_type5.rs: Likewise.
* rust/compile/torture/unsafe1.rs: Likewise.
* rust/compile/torture/unsafe2.rs: Likewise.
* rust/compile/torture/unsafe3.rs: Likewise.
* rust/compile/torture/unsafe4.rs: Likewise.
* rust/compile/torture/unused.rs: Likewise.
* rust/compile/torture/unused1.rs: Likewise.
* rust/compile/torture/unused_struct.rs: Likewise.
* rust/compile/torture/unused_struct_field.rs: Likewise.
* rust/compile/torture/usize1.rs: Likewise.
* rust/compile/torture/utf8_identifiers.rs: Likewise.
* rust/compile/torture/utf8_whitespaces.rs: Likewise.
* rust/compile/torture/while_function.rs: Likewise.
* rust/compile/track_caller.rs: Likewise.
* rust/compile/trait-cycle.rs: Likewise.
* rust/compile/trait13.rs: Likewise.
* rust/compile/trait14.rs: Likewise.
* rust/compile/trait_pub_type.rs: Likewise.
* rust/compile/traits1.rs: Likewise.
* rust/compile/traits10.rs: Likewise.
* rust/compile/traits11.rs: Likewise.
* rust/compile/traits12.rs: Likewise.
* rust/compile/traits2.rs: Likewise.
* rust/compile/traits3.rs: Likewise.
* rust/compile/traits4.rs: Likewise.
* rust/compile/traits5.rs: Likewise.
* rust/compile/traits6.rs: Likewise.
* rust/compile/traits7.rs: Likewise.
* rust/compile/traits8.rs: Likewise.
* rust/compile/traits9.rs: Likewise.
* rust/compile/try-catch-unwind-new.rs: Likewise.
* rust/compile/try-catch-unwind-old.rs: Likewise.
* rust/compile/try-expr1.rs: Likewise.
* rust/compile/try-trait.rs: Likewise.
* rust/compile/try_block1.rs: Likewise.
* rust/compile/tuple1.rs: Likewise.
* rust/compile/tuple_float_index.rs: Likewise.
* rust/compile/tuple_index_on_non_tuple.rs: Likewise.
* rust/compile/tuple_mismatch.rs: Likewise.
* rust/compile/tuple_struct1.rs: Likewise.
* rust/compile/tuple_struct2.rs: Likewise.
* rust/compile/tuple_struct3.rs: Likewise.
* rust/compile/tuplepattern-rest-readonly.rs: Likewise.
* rust/compile/tuplepattern-restpattern-typecheck-err.rs: Likewise.
* rust/compile/tupple_struct_pattern_tuple.rs: Likewise.
* rust/compile/type-alias1.rs: Likewise.
* rust/compile/type-bindings1.rs: Likewise.
* rust/compile/type-if.rs: Likewise.
* rust/compile/unary_negation.rs: Likewise.
* rust/compile/unary_not.rs: Likewise.
* rust/compile/unconstrained_type_param.rs: Likewise.
* rust/compile/undeclared_label.rs: Likewise.
* rust/compile/unicode_escape.rs: Likewise.
* rust/compile/unicode_norm1.rs: Likewise.
* rust/compile/unify-errors1.rs: Likewise.
* rust/compile/unknown-associated-item.rs: Likewise.
* rust/compile/unsafe1.rs: Likewise.
* rust/compile/unsafe10.rs: Likewise.
* rust/compile/unsafe11.rs: Likewise.
* rust/compile/unsafe2.rs: Likewise.
* rust/compile/unsafe3.rs: Likewise.
* rust/compile/unsafe4.rs: Likewise.
* rust/compile/unsafe5.rs: Likewise.
* rust/compile/unsafe6.rs: Likewise.
* rust/compile/unsafe7.rs: Likewise.
* rust/compile/unsafe8.rs: Likewise.
* rust/compile/unsafe9.rs: Likewise.
* rust/compile/unsafe_module.rs: Likewise.
* rust/compile/unstable-fn.rs: Likewise.
* rust/compile/unused-label_0.rs: Likewise.
* rust/compile/unused-mut-identifier_0.rs: Likewise.
* rust/compile/unused-mut-struct-field_0.rs: Likewise.
* rust/compile/use_1.rs: Likewise.
* rust/compile/use_2.rs: Likewise.
* rust/compile/use_3.rs: Likewise.
* rust/compile/use_self_alone.rs: Likewise.
* rust/compile/use_self_alone_in_list.rs: Likewise.
* rust/compile/usize1.rs: Likewise.
* rust/compile/v0-mangle1.rs: Likewise.
* rust/compile/v0-mangle2.rs: Likewise.
* rust/compile/variadic.rs: Likewise.
* rust/compile/while_break_expr.rs: Likewise.
* rust/compile/while_let1.rs: Likewise.
* rust/compile/while_let_expr.rs: Likewise.
* rust/compile/while_let_without_label.rs: Likewise.
* rust/compile/wrong_lhs_assignment.rs: Likewise.
* rust/compile/wrong_no_of_parameters.rs: Likewise.
* rust/compile/xfail/lifetime_param.rs: Likewise.
* rust/compile/xfail/name_resolution21.rs: Likewise.
* rust/compile/xfail/struct_field_vis.rs: Likewise.
* rust/compile/xfail/xfail.exp: Likewise.
* rust/compile/zero_sized_slice.rs: Likewise.
* rust/debug/chartype.rs: Likewise.
* rust/debug/custom_link_section.rs: Likewise.
* rust/debug/i8u8.rs: Likewise.
* rust/debug/lang.rs: Likewise.
* rust/debug/no_mangle.rs: Likewise.
* rust/debug/oldlang.rs: Likewise.
* rust/debug/tuple.rs: Likewise.
* rust/debug/win64-abi.rs: Likewise.
* rust/execute/black_box.rs: Likewise.
* rust/execute/crate-metavar1.rs: Likewise.
* rust/execute/inline_asm_inout_ident.rs: Likewise.
* rust/execute/inline_asm_inout_var.rs: Likewise.
* rust/execute/issue-1245.rs: Likewise.
* rust/execute/torture/arrays.rs: Likewise.
* rust/execute/torture/atomic_load.rs: Likewise.
* rust/execute/torture/atomic_store.rs: Likewise.
* rust/execute/torture/basic_partial_ord1.rs: Likewise.
* rust/execute/torture/basic_partial_ord2.rs: Likewise.
* rust/execute/torture/block_expr1.rs: Likewise.
* rust/execute/torture/builtin_abort.rs: Likewise.
* rust/execute/torture/builtin_macro_cfg.rs: Likewise.
* rust/execute/torture/builtin_macro_concat.rs: Likewise.
* rust/execute/torture/builtin_macro_env.rs: Likewise.
* rust/execute/torture/builtin_macro_include_bytes.rs: Likewise.
* rust/execute/torture/builtin_macro_include_str.rs: Likewise.
* rust/execute/torture/builtin_macro_line.rs: Likewise.
* rust/execute/torture/builtin_macro_option_env.rs: Likewise.
* rust/execute/torture/builtin_macro_stringify.rs: Likewise.
* rust/execute/torture/builtin_macros1.rs: Likewise.
* rust/execute/torture/builtin_macros3.rs: Likewise.
* rust/execute/torture/cfg-tail.rs: Likewise.
* rust/execute/torture/cfg1.rs: Likewise.
* rust/execute/torture/cfg2.rs: Likewise.
* rust/execute/torture/cfg3.rs: Likewise.
* rust/execute/torture/cfg4.rs: Likewise.
* rust/execute/torture/cfg5.rs: Likewise.
* rust/execute/torture/closure1.rs: Likewise.
* rust/execute/torture/closure2.rs: Likewise.
* rust/execute/torture/closure3.rs: Likewise.
* rust/execute/torture/closure4.rs: Likewise.
* rust/execute/torture/coercion1.rs: Likewise.
* rust/execute/torture/coercion2.rs: Likewise.
* rust/execute/torture/coercion3.rs: Likewise.
* rust/execute/torture/const-generics-1.rs: Likewise.
* rust/execute/torture/const-generics-2.rs: Likewise.
* rust/execute/torture/const-generics-3.rs: Likewise.
* rust/execute/torture/const-generics-4.rs: Likewise.
* rust/execute/torture/const-generics-5.rs: Likewise.
* rust/execute/torture/const-generics-6.rs: Likewise.
* rust/execute/torture/const-generics-7.rs: Likewise.
* rust/execute/torture/const_block1.rs: Likewise.
* rust/execute/torture/const_fold1.rs: Likewise.
* rust/execute/torture/const_fold2.rs: Likewise.
* rust/execute/torture/copy_nonoverlapping1.rs: Likewise.
* rust/execute/torture/decl_macro1.rs: Likewise.
* rust/execute/torture/decl_macro2.rs: Likewise.
* rust/execute/torture/decl_macro3.rs: Likewise.
* rust/execute/torture/decl_macro4.rs: Likewise.
* rust/execute/torture/derive-default1.rs: Likewise.
* rust/execute/torture/derive-partialeq1.rs: Likewise.
* rust/execute/torture/derive-partialeq2.rs: Likewise.
* rust/execute/torture/derive_clone_enum1.rs: Likewise.
* rust/execute/torture/derive_macro1.rs: Likewise.
* rust/execute/torture/derive_macro3.rs: Likewise.
* rust/execute/torture/derive_macro4.rs: Likewise.
* rust/execute/torture/empty_main.rs: Likewise.
* rust/execute/torture/enum_intrinsics1.rs: Likewise.
* rust/execute/torture/enum_intrinsics2.rs: Likewise.
* rust/execute/torture/exit_error.rs: Likewise.
* rust/execute/torture/extern_mod4.rs: Likewise.
* rust/execute/torture/extern_mod4/modules/mod.rs: Likewise.
* rust/execute/torture/for-loop1.rs: Likewise.
* rust/execute/torture/for-loop2.rs: Likewise.
* rust/execute/torture/func1.rs: Likewise.
* rust/execute/torture/gat1.rs: Likewise.
* rust/execute/torture/helloworld1.rs: Likewise.
* rust/execute/torture/helloworld2.rs: Likewise.
* rust/execute/torture/iflet.rs: Likewise.
* rust/execute/torture/impl_desugar-2.rs: Likewise.
* rust/execute/torture/impl_desugar.rs: Likewise.
* rust/execute/torture/impl_rpit1.rs: Likewise.
* rust/execute/torture/impl_rpit2.rs: Likewise.
* rust/execute/torture/impl_rpit3.rs: Likewise.
* rust/execute/torture/impl_trait1.rs: Likewise.
* rust/execute/torture/impl_trait2.rs: Likewise.
* rust/execute/torture/impl_trait3.rs: Likewise.
* rust/execute/torture/impl_trait4.rs: Likewise.
* rust/execute/torture/index1.rs: Likewise.
* rust/execute/torture/inline_asm_mov_x_5_ARM.rs: Likewise.
* rust/execute/torture/inline_asm_mov_x_5_x86_64.rs: Likewise.
* rust/execute/torture/issue-1120.rs: Likewise.
* rust/execute/torture/issue-1133.rs: Likewise.
* rust/execute/torture/issue-1198.rs: Likewise.
* rust/execute/torture/issue-1231.rs: Likewise.
* rust/execute/torture/issue-1232.rs: Likewise.
* rust/execute/torture/issue-1249.rs: Likewise.
* rust/execute/torture/issue-1436.rs: Likewise.
* rust/execute/torture/issue-1481.rs: Likewise.
* rust/execute/torture/issue-1482.rs: Likewise.
* rust/execute/torture/issue-1496.rs: Likewise.
* rust/execute/torture/issue-1720-2.rs: Likewise.
* rust/execute/torture/issue-1720.rs: Likewise.
* rust/execute/torture/issue-1852-1.rs: Likewise.
* rust/execute/torture/issue-1852.rs: Likewise.
* rust/execute/torture/issue-2005.rs: Likewise.
* rust/execute/torture/issue-2052.rs: Likewise.
* rust/execute/torture/issue-2080.rs: Likewise.
* rust/execute/torture/issue-2179.rs: Likewise.
* rust/execute/torture/issue-2180.rs: Likewise.
* rust/execute/torture/issue-2187.rs: Likewise.
* rust/execute/torture/issue-2236.rs: Likewise.
* rust/execute/torture/issue-2583.rs: Likewise.
* rust/execute/torture/issue-2906.rs: Likewise.
* rust/execute/torture/issue-3126.rs: Likewise.
* rust/execute/torture/issue-3381.rs: Likewise.
* rust/execute/torture/issue-3502.rs: Likewise.
* rust/execute/torture/issue-3836.rs: Likewise.
* rust/execute/torture/issue-4242.rs: Likewise.
* rust/execute/torture/issue-647.rs: Likewise.
* rust/execute/torture/issue-845.rs: Likewise.
* rust/execute/torture/issue-851.rs: Likewise.
* rust/execute/torture/issue-858.rs: Likewise.
* rust/execute/torture/issue-976.rs: Likewise.
* rust/execute/torture/issue-995.rs: Likewise.
* rust/execute/torture/iter1.rs: Likewise.
* rust/execute/torture/let-identifierpattern-subpattern.rs: Likewise.
* rust/execute/torture/let-pattern-1.rs: Likewise.
* rust/execute/torture/link-name.rs: Likewise.
* rust/execute/torture/literalpattern_neg.rs: Likewise.
* rust/execute/torture/loop-condition-eval.rs: Likewise.
* rust/execute/torture/macro-issue1426.rs: Likewise.
* rust/execute/torture/macro_use1.rs: Likewise.
* rust/execute/torture/macros1.rs: Likewise.
* rust/execute/torture/macros10.rs: Likewise.
* rust/execute/torture/macros11.rs: Likewise.
* rust/execute/torture/macros12.rs: Likewise.
* rust/execute/torture/macros13.rs: Likewise.
* rust/execute/torture/macros14.rs: Likewise.
* rust/execute/torture/macros16.rs: Likewise.
* rust/execute/torture/macros17.rs: Likewise.
* rust/execute/torture/macros18.rs: Likewise.
* rust/execute/torture/macros19.rs: Likewise.
* rust/execute/torture/macros2.rs: Likewise.
* rust/execute/torture/macros20.rs: Likewise.
* rust/execute/torture/macros21.rs: Likewise.
* rust/execute/torture/macros22.rs: Likewise.
* rust/execute/torture/macros23.rs: Likewise.
* rust/execute/torture/macros24.rs: Likewise.
* rust/execute/torture/macros25.rs: Likewise.
* rust/execute/torture/macros26.rs: Likewise.
* rust/execute/torture/macros27.rs: Likewise.
* rust/execute/torture/macros28.rs: Likewise.
* rust/execute/torture/macros29.rs: Likewise.
* rust/execute/torture/macros3.rs: Likewise.
* rust/execute/torture/macros30.rs: Likewise.
* rust/execute/torture/macros31.rs: Likewise.
* rust/execute/torture/macros4.rs: Likewise.
* rust/execute/torture/macros5.rs: Likewise.
* rust/execute/torture/macros6.rs: Likewise.
* rust/execute/torture/macros7.rs: Likewise.
* rust/execute/torture/macros8.rs: Likewise.
* rust/execute/torture/macros9.rs: Likewise.
* rust/execute/torture/match-identifierpattern.rs: Likewise.
* rust/execute/torture/match-restpattern-tuple.rs: Likewise.
* rust/execute/torture/match-slicepattern-array-1.rs: Likewise.
* rust/execute/torture/match-slicepattern-array-2.rs: Likewise.
* rust/execute/torture/match-slicepattern-slice-1.rs: Likewise.
* rust/execute/torture/match-slicepattern-slice-2.rs: Likewise.
* rust/execute/torture/match-structpattern-tuplefield.rs: Likewise.
* rust/execute/torture/match-tuplestructpattern-rest-1.rs: Likewise.
* rust/execute/torture/match-tuplestructpattern-rest-2.rs: Likewise.
* rust/execute/torture/match-tuplestructpattern.rs: Likewise.
* rust/execute/torture/match1.rs: Likewise.
* rust/execute/torture/match2.rs: Likewise.
* rust/execute/torture/match3.rs: Likewise.
* rust/execute/torture/match_bool1.rs: Likewise.
* rust/execute/torture/match_byte1.rs: Likewise.
* rust/execute/torture/match_char1.rs: Likewise.
* rust/execute/torture/match_int1.rs: Likewise.
* rust/execute/torture/match_loop1.rs: Likewise.
* rust/execute/torture/match_range1.rs: Likewise.
* rust/execute/torture/match_range2.rs: Likewise.
* rust/execute/torture/match_tuple1.rs: Likewise.
* rust/execute/torture/matches_macro.rs: Likewise.
* rust/execute/torture/method1.rs: Likewise.
* rust/execute/torture/method2.rs: Likewise.
* rust/execute/torture/method3.rs: Likewise.
* rust/execute/torture/method4.rs: Likewise.
* rust/execute/torture/min_specialization2.rs: Likewise.
* rust/execute/torture/min_specialization3.rs: Likewise.
* rust/execute/torture/mod1.rs: Likewise.
* rust/execute/torture/multiline-string.rs: Likewise.
* rust/execute/torture/name_resolution.rs: Likewise.
* rust/execute/torture/named_variadic.rs: Likewise.
* rust/execute/torture/offset_of1.rs: Likewise.
* rust/execute/torture/operator_overload_1.rs: Likewise.
* rust/execute/torture/operator_overload_10.rs: Likewise.
* rust/execute/torture/operator_overload_11.rs: Likewise.
* rust/execute/torture/operator_overload_12.rs: Likewise.
* rust/execute/torture/operator_overload_2.rs: Likewise.
* rust/execute/torture/operator_overload_3.rs: Likewise.
* rust/execute/torture/operator_overload_4.rs: Likewise.
* rust/execute/torture/operator_overload_5.rs: Likewise.
* rust/execute/torture/operator_overload_6.rs: Likewise.
* rust/execute/torture/operator_overload_7.rs: Likewise.
* rust/execute/torture/operator_overload_8.rs: Likewise.
* rust/execute/torture/operator_overload_9.rs: Likewise.
* rust/execute/torture/overflow1.rs: Likewise.
* rust/execute/torture/partial-eq-1.rs: Likewise.
* rust/execute/torture/partial-eq-2.rs: Likewise.
* rust/execute/torture/partial-eq-3.rs: Likewise.
* rust/execute/torture/partial-eq-4.rs: Likewise.
* rust/execute/torture/partial-ord-1.rs: Likewise.
* rust/execute/torture/partial-ord-2.rs: Likewise.
* rust/execute/torture/partial-ord-3.rs: Likewise.
* rust/execute/torture/partial-ord-4.rs: Likewise.
* rust/execute/torture/partial-ord-5.rs: Likewise.
* rust/execute/torture/partial-ord-6.rs: Likewise.
* rust/execute/torture/prefetch_data.rs: Likewise.
* rust/execute/torture/ref-pattern1.rs: Likewise.
* rust/execute/torture/ref-pattern2.rs: Likewise.
* rust/execute/torture/sip-hasher.rs: Likewise.
* rust/execute/torture/slice-magic.rs: Likewise.
* rust/execute/torture/slice-magic2.rs: Likewise.
* rust/execute/torture/slice1.rs: Likewise.
* rust/execute/torture/str-layout1.rs: Likewise.
* rust/execute/torture/str-zero.rs: Likewise.
* rust/execute/torture/struct-pattern-match.rs: Likewise.
* rust/execute/torture/struct_pattern1.rs: Likewise.
* rust/execute/torture/trait1.rs: Likewise.
* rust/execute/torture/trait10.rs: Likewise.
* rust/execute/torture/trait11.rs: Likewise.
* rust/execute/torture/trait12.rs: Likewise.
* rust/execute/torture/trait13.rs: Likewise.
* rust/execute/torture/trait14.rs: Likewise.
* rust/execute/torture/trait15.rs: Likewise.
* rust/execute/torture/trait16.rs: Likewise.
* rust/execute/torture/trait17.rs: Likewise.
* rust/execute/torture/trait18.rs: Likewise.
* rust/execute/torture/trait2.rs: Likewise.
* rust/execute/torture/trait3.rs: Likewise.
* rust/execute/torture/trait4.rs: Likewise.
* rust/execute/torture/trait5.rs: Likewise.
* rust/execute/torture/trait6.rs: Likewise.
* rust/execute/torture/trait7.rs: Likewise.
* rust/execute/torture/trait8.rs: Likewise.
* rust/execute/torture/trait9.rs: Likewise.
* rust/execute/torture/transmute1.rs: Likewise.
* rust/execute/torture/wrapping_op1.rs: Likewise.
* rust/execute/torture/wrapping_op2.rs: Likewise.
* rust/execute/xfail/macro1.rs: Likewise.
* rust/execute/xfail/match-identifierpattern-enum.rs: Likewise.
* rust/link/generic_function_0.rs: Likewise.
* rust/link/generic_function_1.rs: Likewise.
* rust/link/simple_function_0.rs: Likewise.
* rust/link/simple_function_1.rs: Likewise.
* rust/link/trait_import_0.rs: Likewise.
* rust/link/trait_import_1.rs: Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: Implicitely inject `extern crate core`
Pierre-Emmanuel Patry [Fri, 23 Jan 2026 04:34:24 +0000 (05:34 +0100)] 
gccrs: Implicitely inject `extern crate core`

The core library is made accessible through the `core` identifier in
every crate unless the crate opt out with the `#![no_core]` attribute.
This commit implicitely inject this extern crate when required.

gcc/rust/ChangeLog:

* ast/rust-ast.cc (Crate::inject_extern_crate): Add a function to
inject an extern crate item to a crate.
* ast/rust-ast.h: Add function prototype for inject_extern_crate.
* rust-session-manager.cc (has_attribute): Add helper to determine if
a crate has a given inner attribute.
(Session::compile_crate): Add a step to inject the core extern crate
when the no_core attribute is missing.
* util/rust-attribute-values.h: Add the no_core attribute value.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: Add trait type param bounds to ast token collector
Pierre-Emmanuel Patry [Wed, 21 Jan 2026 15:31:53 +0000 (16:31 +0100)] 
gccrs: Add trait type param bounds to ast token collector

Those tokens were not generated correctly from the AST and thus made
some macros erroneous.

gcc/rust/ChangeLog:

* ast/rust-ast-collector.cc (TokenCollector::visit): Add colon and
type param bound tokens when collecting a trait ast node.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: Prevent resolution of items within parent modules
Pierre-Emmanuel Patry [Wed, 21 Jan 2026 15:25:52 +0000 (16:25 +0100)] 
gccrs: Prevent resolution of items within parent modules

An item from a parent module should be brought into scope with a Use
declaration and not implicitly. This means we should not continue
iterating over the upper ribs when meeting a module rib.

This fix breaks the compilation of core since the items from the
uppermost ribs are brought within scope with the prelude mechanism which
is not complete yet.

gcc/rust/ChangeLog:

* resolve/rust-forever-stack.hxx: Prevent iteration on parent ribs.

gcc/testsuite/ChangeLog:

* rust/compile/name_resolution26.rs: New test.
* rust/compile/derive-default1.rs: Add no_core attribute and fix the
testcase with a proper name usage which does not break name resolution
rules.
* rust/compile/derive-eq-invalid.rs: Likewise.
* rust/compile/derive-hash1.rs: Likewise.
* rust/compile/issue-2905-2.rs: Likewise.
* rust/compile/issue-3402-1.rs: Likewise.
* rust/compile/issue-3403.rs: Likewise.
* rust/compile/name_resolution18.rs: Likewise.
* rust/compile/privacy2.rs: Likewise.
* rust/execute/torture/derive-default1.rs: Likewise.
* rust/core/core.exp: Revert last compilation step to attribute check.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: Detect macros with duplicate metavariable bindings
Owen Avery [Wed, 26 Mar 2025 00:43:02 +0000 (20:43 -0400)] 
gccrs: Detect macros with duplicate metavariable bindings

This is imperfect, as invalid macro definitions should be detected
regardless of whether a macro is used or not.

gcc/rust/ChangeLog:

* expand/rust-macro-expand.cc
(MacroExpander::expand_decl_macro): Prevent excess errors.
(MacroExpander::match_matcher): Detect duplicate metavariable
names.
* expand/rust-macro-expand.h (MacroExpander::MacroExpander):
Initialize field had_duplicate_error.
(MacroExpander::had_duplicate_error): New field.

gcc/testsuite/ChangeLog:

* rust/compile/macros/mbe/macro-duplicate-binding.rs: New test.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2 months agogccrs: Implement type check & codegen for HIR::StructPatternFieldTuplePat
Yap Zhi Heng [Tue, 20 Jan 2026 12:10:22 +0000 (20:10 +0800)] 
gccrs: Implement type check & codegen for HIR::StructPatternFieldTuplePat

006t.original dump of rust/compile/match-structpattern-tuplefield.rs:

...
  const struct match_structpattern_tuplefield::TupStruct t = {.0=1, .1=2};
    struct () RUSTTMP.1;
    const struct match_structpattern_tuplefield::TupStruct RUSTTMP.2;
  RUSTTMP.2 = t;
  if (RUSTTMP.2.0 == 1 && RUSTTMP.2.1 == 2)
    {
      {
                struct () RUSTTMP.3;
        {}
        goto <D.100>;
      }
    }
  if (1)
    {
      {
                struct () RUSTTMP.4;
        {}
        goto <D.100>;
      }
    }
  if (RUSTTMP.2.0 == 1)
    {
      {
                struct () RUSTTMP.5;
        {}
        goto <D.100>;
      }
    }
  if (1)
    {
      {
                struct () RUSTTMP.6;
        {}
        goto <D.100>;
      }
    }
  <D.100>:;
...

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-pattern.cc (visit(StructPattern)): Implement
type check case for HIR::StructPatternFieldTuplePat.
* checks/errors/rust-hir-pattern-analysis.cc (lower_struct_pattern): Implement
case for HIR::StructPatternField::ItemType::TUPLE_PAT.
* backend/rust-compile-pattern.cc:
* CompilePatternCheckExpr::visit (HIR::StructPattern): Implement code
gen for HIR::StructPatternField::ItemType::TUPLE_PAT case.
* CompilePatternBindings::handle_struct_pattern_tuple_pat: Implement
bindings for HIR::StructPatternFieldTuplePat.
* backend/rust-compile-pattern.h: Update function definition for
handle_struct_pattern_tuple_pat.

Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2 months agogccrs: derive: Factor out Eq trait path generation
Jayant Chauhan [Fri, 16 Jan 2026 18:35:07 +0000 (00:05 +0530)] 
gccrs: derive: Factor out Eq trait path generation

This patch introduces a local helper  in DeriveEq.
This removes the duplication of the hardcoded path {core, cmp, Eq}
used in both  and .

gcc/rust/ChangeLog:

* expand/rust-derive-eq.cc (get_eq_trait_path): New helper.
(DeriveEq::assert_param_is_eq): Use helper.
(DeriveEq::eq_impls): Use helper.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: add outer attributes
Mason Pike [Fri, 26 Dec 2025 15:06:51 +0000 (16:06 +0100)] 
gccrs: add outer attributes

gcc/rust/ChangeLog:
* util/rust-attributes.cc: add attributes to the __outer_attributes set.
This prevents some inconsistent behavior, like: https://godbolt.org/z/Eq1GE7xxY

Signed-off-by: Mason Pike <m@sonpike.net>
2 months agogccrs: remove some loop helpers
Mason Pike [Fri, 26 Dec 2025 14:54:15 +0000 (15:54 +0100)] 
gccrs: remove some loop helpers

gcc/rust/ChangeLog:
* util/rust-attributes.cc: remove loop helper functions
* util/rust-attributes.h: remove function defs

Signed-off-by: Mason Pike <m@sonpike.net>
2 months agogccrs: remove some loops
Mason Pike [Fri, 26 Dec 2025 14:45:47 +0000 (15:45 +0100)] 
gccrs: remove some loops

gcc/rust/ChangeLog:
* util/rust-attributes.cc: factor out loops from
several functions to prevent us from having to loop
several times over the same attributes

Signed-off-by: Mason Pike <m@sonpike.net>
2 months agogccrs: proc error on invalid type
Mason Pike [Thu, 25 Dec 2025 21:15:57 +0000 (22:15 +0100)] 
gccrs: proc error on invalid type

fixes Rust-GCC/gccrs#4235

gcc/rust/ChangeLog:
* util/rust-attributes.cc: add new function to validate that an
attribute is assigned to a valid item type

gcc/testsuite/ChangeLog:
* rust/compile/issue-4232.rs: update expected error to include
the specific illegal attribute

Signed-off-by: Mason Pike <m@sonpike.net>
2 months agogccrs: expand: Refactor field expansion and add documentation
Jayant Chauhan [Fri, 16 Jan 2026 19:49:56 +0000 (01:19 +0530)] 
gccrs: expand: Refactor field expansion and add documentation

This patch refactors  and  in
 to use a common template helper , reducing
code duplication as requested by the FIXME. It also adds missing documentation
for .

gcc/rust/ChangeLog:

* expand/rust-expand-visitor.h (expand_closure_params): Add documentation.
(expand_fields): New private template helper.
* expand/rust-expand-visitor.cc (expand_struct_fields): Use helper.
(expand_tuple_fields): Use helper.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: backend: Factor out asm operand chaining
Jayant Chauhan [Fri, 16 Jan 2026 19:20:36 +0000 (00:50 +0530)] 
gccrs: backend: Factor out asm operand chaining

This patch introduces a static helper  in .
This removes code duplication when building tree lists for assembly inputs
and outputs. It also removes commented-out debug code to clean up the file.

gcc/rust/ChangeLog:

* backend/rust-compile-asm.cc (chain_asm_operand): New helper.
(CompileAsm::asm_construct_outputs): Use helper and remove dead code.
(CompileAsm::asm_construct_inputs): Use helper and remove dead code.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: replace unreachable with sorry_at
lenny.chiadmi-delage [Fri, 16 Jan 2026 14:50:52 +0000 (14:50 +0000)] 
gccrs: replace unreachable with sorry_at

Do not throw an ICE whit unimplemented `box`.

gcc/rust/ChangeLog:

* hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Replace
unreachable with sorry_at.

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: testsuite: adds some tests for ice 4375
lenny.chiadmi-delage [Wed, 14 Jan 2026 13:44:59 +0000 (13:44 +0000)] 
gccrs: testsuite: adds some tests for ice 4375

Added new tests.

Addresses Rust-GCC/gccrs#4375

gcc/testsuite/ChangeLog:

* rust/compile/issue-4375-ice-regression.rs: New test.
* rust/compile/issue-4375-multiple-errors.rs: New test.
* rust/compile/issue-4375-tuple-pattern.rs: New test.

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: fix ice on let else expession
lenny.chiadmi-delage [Wed, 14 Jan 2026 11:17:13 +0000 (11:17 +0000)] 
gccrs: fix ice on let else expession

added error handling for let else expression.

Fixes Rust-GCC/gccrs#4375

gcc/rust/ChangeLog:

* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Visit
else_expr if has_else_expr, not init_expr.

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: util/attributes: handle #[export_name] on static items
Jayant Chauhan [Thu, 15 Jan 2026 17:59:10 +0000 (23:29 +0530)] 
gccrs: util/attributes: handle #[export_name] on static items

This patch enables validation for the #[export_name] attribute when used
on static items. It reuses the validation logic introduced for functions
to ensure that statics also receive compile-time checks for malformed
inputs (e.g. non-string literals).

Fixes Rust-GCC#4388

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit): Add check for
export_name on static items.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: util/attributes: error on malformed #[export_name] input
Jayant Chauhan [Thu, 15 Jan 2026 17:15:40 +0000 (22:45 +0530)] 
gccrs: util/attributes: error on malformed #[export_name] input

Emit a diagnostic when #[export_name] is used without arguments or
with invalid arguments (non-string literals). This prevents silent
failures or backend crashes when lowering the attribute to GIMPLE,
ensuring the attribute follows the expected form: #[export_name = name].

Fixes Rust-GCC#4387

gcc/rust/ChangeLog:

* util/rust-attributes.cc (check_export_name_attribute): New helper.
(AttributeChecker::visit): Check export_name on functions.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: nr: Add proper prelude resolution and fill it upon encountering a prelude.
Arthur Cohen [Wed, 14 Jan 2026 17:42:37 +0000 (18:42 +0100)] 
gccrs: nr: Add proper prelude resolution and fill it upon encountering a prelude.

gcc/rust/ChangeLog:

* ast/rust-ast.h: Add Type::Kind.
* ast/rust-macro.h: Use it.
* ast/rust-path.h: Likewise.
* ast/rust-type.h: Likewise.
* resolve/rust-default-resolver.cc (is_lang_impl): New method.
(DefaultResolver::visit): Collect lang item implementations in the
prelude.
* resolve/rust-forever-stack.h: Add new method for lang prelude injection.
* resolve/rust-forever-stack.hxx: Define it.
* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Identifier patterns
can resolve to empty structs or variants.
* resolve/rust-name-resolution-context.h: Improve resolution.

2 months agogccrs: Use attribute value variable instead of raw text
Pierre-Emmanuel Patry [Thu, 15 Jan 2026 15:01:49 +0000 (16:01 +0100)] 
gccrs: Use attribute value variable instead of raw text

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit): Use const
variable.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: Add export_name attribute and lower it
Pierre-Emmanuel Patry [Thu, 15 Jan 2026 14:22:09 +0000 (15:22 +0100)] 
gccrs: Add export_name attribute and lower it

The rust language requires the export_name attribute to change the name
of a symbol within the assembly whilst keeping a different name at the
language level. This is used multiple times within rust-for-linux.

gcc/rust/ChangeLog:

* backend/rust-compile-base.cc: Change the assembly name on functions
with the export_name attribute. Do not mangle the name.
* util/rust-attribute-values.h: Add export_name attribute value.
* util/rust-attributes.cc: Add export_name attribute to builtin
attribute list.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2 months agogccrs: util/attributes: Check that #[target_feature] is only used on unsafe functions
Jayant Chauhan [Tue, 13 Jan 2026 21:17:00 +0000 (02:47 +0530)] 
gccrs: util/attributes: Check that #[target_feature] is only used on unsafe functions

The #[target_feature] attribute allows code generation that may not be
supported by the runtime hardware, making it inherently unsafe. This
patch adds a check to ensure it is only applied to functions declared
as 'unsafe', matching rustc behavior (E0658).

Fixes Rust-GCC#4234

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::visit):
Reject #[target_feature] on non-unsafe functions.

gcc/testsuite/ChangeLog:

* rust/compile/issue-4234.rs: New test.
* rust/compile/unsafe11.rs: Mark function as unsafe to
to satisfy new #[target_feature] restriction.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: add non snake case lint
Lucas Ly Ba [Wed, 14 Jan 2026 16:08:43 +0000 (16:08 +0000)] 
gccrs: add non snake case lint

gcc/rust/ChangeLog:

* checks/lints/unused/rust-unused-checker.cc (is_snake_case):
Add warning for variables, methods, functions,
lifetime parameters and modules.
(UnusedChecker::visit):
New.
* checks/lints/unused/rust-unused-checker.h:
New.

gcc/testsuite/ChangeLog:

* rust/compile/non-snake-case_0.rs: New test.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2 months agogccrs: add non upper case globals lint
Lucas Ly Ba [Wed, 14 Jan 2026 16:19:13 +0000 (16:19 +0000)] 
gccrs: add non upper case globals lint

gcc/rust/ChangeLog:

* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
Add warning for static variables.

gcc/testsuite/ChangeLog:

* rust/compile/non-upper-case-globals_0.rs: New test.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2 months agogccrs: ast: Add new GlobContainer class and use it
Arthur Cohen [Thu, 25 Dec 2025 10:16:22 +0000 (11:16 +0100)] 
gccrs: ast: Add new GlobContainer class and use it

Allow crates to be used as targets for glob imports, like modules and enums.

gcc/rust/ChangeLog:

* ast/rust-ast-full-decls.h (class GlobContainer): New.
* ast/rust-ast.h (class GlobContainer): New.
(struct Crate): Inherit from GlobContainer.
* ast/rust-item.h (class Module): Likewise.
(class Enum): Likewise.
* resolve/rust-finalize-imports-2.0.cc (GlobbingVisitor::go): Handle crates.
(GlobbingVisitor::visit_crate_container): New.
(GlobbingVisitor::visit): Remove privacy check as it is wrong.
* resolve/rust-finalize-imports-2.0.h: Declare new methods.
* resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::go): Handle crates.
(TopLevel::visit): Use new insert_glob_container API.
* util/rust-hir-map.cc (Mappings::get_ast_crate_by_node_id_raw): New private method.
(Mappings::get_ast_crate_by_node_id): Use it.
(Mappings::insert_glob_container): New API.
* util/rust-hir-map.h: Likewise.
* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_glob_import): Likewise.

2 months agogccrs: Adds test of issue 1210
lenny.chiadmi-delage [Tue, 6 Jan 2026 16:47:47 +0000 (16:47 +0000)] 
gccrs: Adds test of issue 1210

Adds new test.

Fixes Rust-GCC/gccrs#1210

gcc/testsuite/ChangeLog:

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

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: fixes the error thrown
lenny.chiadmi-delage [Tue, 6 Jan 2026 16:34:52 +0000 (16:34 +0000)] 
gccrs: fixes the error thrown

Removes duplicate error in block expression parsing.
Removes cascading error in match arm parsing.
Adds proper error detection for unterminated expression.

Fixes Rust-GCC/gccrs#1210

gcc/rust/ChangeLog:

* parse/rust-parse-impl-expr.hxx: Removes duplicate errors.
* parse/rust-parse-impl.hxx: Detects when an expression without
block is not properly terminated

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: util/attributes: Error on #[repr] applied to functions
Jayant Chauhan [Tue, 13 Jan 2026 08:10:47 +0000 (13:40 +0530)] 
gccrs: util/attributes: Error on #[repr] applied to functions

The #[repr] attribute is only valid for structs, enums, and unions.
Applying it to a function is invalid and should result in an error.
This patch adds a check in the attribute visitor to reject #[repr]
on functions, matching rustc behavior.

Fixes Rust-GCC#4232

gcc/rust/ChangeLog:

* util/rust-attributes.cc (AttributeChecker::check_attributes): Emit error for #[repr].

gcc/testsuite/ChangeLog:

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

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: testsuite: Adds test from issue
lenny.chiadmi-delage [Thu, 8 Jan 2026 11:25:14 +0000 (11:25 +0000)] 
gccrs: testsuite: Adds test from issue

As the issue as been resolved, i just added the test from the issue.

Fixes Rust-GCC/gccrs#1081

gcc/testsuite/ChangeLog:

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

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: testsuite: Adds test from issue 1245
lenny.chiadmi-delage [Thu, 8 Jan 2026 15:13:11 +0000 (15:13 +0000)] 
gccrs: testsuite: Adds test from issue 1245

Added the test from the issue 1245.

Fixes GCC-Rust/gccrs#1245

gcc/testsuite/ChangeLog:

* rust/execute/issue-1245.rs: New test.

Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2 months agogccrs: Fix ICE in insert_associated_trait_impl due to recursion
Harishankar [Tue, 6 Jan 2026 13:50:29 +0000 (19:20 +0530)] 
gccrs: Fix ICE in insert_associated_trait_impl due to recursion

Recursive const blocks containing trait implementations previously caused
an assertion failure (ICE) because the compiler re-visited existing IDs.
This patch adds a check to return early if the ID exists, enabling
graceful handling of recursion.

Fixes Rust-GCC/gccrs#4166

gcc/rust/ChangeLog:

* typecheck/rust-typecheck-context.cc (insert_associated_trait_impl):
Prevent ICE by checking for existing ID.
* typecheck/rust-hir-type-check.h: Update declarations.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
2 months agogccrs: util/attributes: error on malformed #[link_section] input
Jayant Chauhan [Fri, 9 Jan 2026 23:47:33 +0000 (05:17 +0530)] 
gccrs: util/attributes: error on malformed #[link_section] input

Emit a diagnostic when #[link_section] is used without arguments on
functions or static items, matching rustc behavior. This prevents
silent acceptance of empty attributes and provides a helpful
diagnostic that shows the expected form.

Fixes Rust-GCC#4229

gcc/rust/ChangeLog:

* util/rust-attributes.cc (check_link_section_attribute): New helper.
(AttributeChecker::visit): Check link_section on functions and statics.

gcc/testsuite/ChangeLog:

* rust/compile/link_section-malformed.rs: New test.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
2 months agogccrs: Revert "gccrs: Remove the template parameter
Philip Herron [Wed, 3 Sep 2025 15:55:46 +0000 (16:55 +0100)] 
gccrs: Revert "gccrs: Remove the template parameter

This reverts commit a50fb38f36506e02139f3ff9343e099c2f5508d7 as it breaks
gcc5 bootstrap.

gcc/rust/ChangeLog:

* typecheck/rust-tyty.cc (VariantDef::clone): revert
(VariantDef::monomorphized_clone): likewise

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2 months agogccrs: Remove the template parameter so clang format stops barfing on this
Philip Herron [Wed, 3 Sep 2025 11:43:22 +0000 (12:43 +0100)] 
gccrs: Remove the template parameter so clang format stops barfing on this

Change this formatting, so clang format stops formatting this wierd for me.

gcc/rust/ChangeLog:

* typecheck/rust-tyty.cc (VariantDef::clone): remove template param
(VariantDef::monomorphized_clone): likewise

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2 months agoa68: Allow full range of negative values in integral denotations
James Bohl [Fri, 27 Feb 2026 12:32:16 +0000 (07:32 -0500)] 
a68: Allow full range of negative values in integral denotations

Signed-off-by: James Bohl <bohlj47@gmail.com>
gcc/algol68/ChangeLog

* a68-low-prelude.cc (a68_lower_negate2): Annotate denotation
as being negated.
* a68-low-units.cc (a68_lower_denotation): Allow the full range
of negative values if the denotation is negated.
* a68-types.h (struct NODE_T): Add negated field.
(NEGATED): Define.
* a68-parser.cc (a68_new_node): Initialize NEGATED.

gcc/testsuite/ChangeLog

* algol68/compile/error-denotation-2.a68: Check for no error on
minimum negative value.
* algol68/compile/error-denotation-3.a68: Likewise.

2 months agovect: enforce trapping math checks when early breaks [PR124142]
Tamar Christina [Fri, 27 Feb 2026 14:21:36 +0000 (14:21 +0000)] 
vect: enforce trapping math checks when early breaks [PR124142]

The loop

void
__attribute__((noipa))
bug (int f, int *w, int l)
{
  int i;
  for (i = 0; i < l; ++i)
    while (f % w[i]) w[i]--;
}

is an uncounted loop which performs a trapping operation during vectorization.
Normally the vectorizer doesn't stop vectorization if the operation can't be
masked (though ifcvt does).

For Early breaks however this is unsafe as we are introducing a trap where the
original scalar code may not have.

Some tests now fail to vectorize (including some tsvc ones) which I could have
xfail'ed but instead decided to add -fno-trapping-math just to get the
additional coverage they provide.

gcc/ChangeLog:

PR tree-optimization/124142
* tree-vect-data-refs.cc (vect_analyze_early_break_dependences):
For early break require masking when operation can trap.

gcc/testsuite/ChangeLog:

PR tree-optimization/124142
* gcc.dg/vect/tsvc/vect-tsvc-s481.c: Add -fno-trapping-math.
* gcc.dg/vect/tsvc/vect-tsvc-s332.c: Likewise.
* gcc.dg/vect/tsvc/vect-tsvc-s482.c: Likewise.
* gcc.dg/vect/vect-early-break_61.c: Likewise.
* gcc.target/aarch64/vect-early-break-cbranch_3.c: Likewise.
* gcc.dg/vect/vect-early-break_143-pr124142.c: New test

2 months ago[1/n][PR tree-optimization/90036] All refinement of entries in DOM hash table
Jeff Law [Sun, 22 Feb 2026 16:26:38 +0000 (09:26 -0700)] 
[1/n][PR tree-optimization/90036] All refinement of entries in DOM hash table

This is the first of a few patches to fix pr90036.

I've gone back and forth about whether or not to fix this for gcc-16 or queue
for gcc-17.  Ultimately I don't think these opportunities are *that* common, so
I don't expect widespread code generation changes.

I'm going to drop the changes in a small series as the changes stand on their
own.  This gives us better bisectability.

--

The first patch allows refinement of existing equivalences in a case where we'd
missed it before.  In particular say we have <res> = <expr> in the expression
hash table.  We later use <expr> in a way that creates a temporary expression
equivalence.  We'll fail to record that temporary expression equivalence
because of the pre-existing entry in the hash table.

And just to be clear, the old equivalence will be restored when we leave the
domwalk scope of the newer, more precise, hash table entry.

This matters for pr90036 as we initially enter a simple equivalence in the
table with the result being an SSA_NAME.  Later we have a conditional that
allows us to refine the result to a constant.  And we're going to need that
constant result to trigger additional simplifications and equivalence
discovery.

Bootstrapped and regression tested on x86_64, aarch64, riscv64 and probably a
couple others as well.  It's also been tested across the embedded targets in my
tester.  Pushing to the trunk.

PR tree-optimization/90036
gcc/
* tree-ssa-scopedtables.cc (avail_exprs_stack::record_cond): Always
record the new hash table entry.

2 months agoc++: add test for DR 3110
Marek Polacek [Fri, 27 Feb 2026 14:12:52 +0000 (09:12 -0500)] 
c++: add test for DR 3110

We already compile this code.

DR 3110

gcc/testsuite/ChangeLog:

* g++.dg/DRs/dr3110.C: New test.

2 months agotop-level: Rename forgejo sanity checks
Christophe Lyon [Fri, 27 Feb 2026 09:06:25 +0000 (10:06 +0100)] 
top-level: Rename forgejo sanity checks

These tests currently appear with 'testjob' as name in Forgejo, which
is not very informative.

This patch renames 'testjob' to 'format-checks' which is hopefully
clearer, and renames the sanity-checks.yaml file to
format-checks.yaml.

ChangeLog:
* .forgejo/workflows/sanity-checks.yaml: Rename testjob to
format-checks. Rename file to ...
* .forgejo/workflows/format-checks.yaml: ... this.

2 months agomiddle-end: allow expand_vector_broadcast to broadcast QImode to BImode vector [PR...
Xi Ruoyao [Fri, 27 Feb 2026 08:54:40 +0000 (16:54 +0800)] 
middle-end: allow expand_vector_broadcast to broadcast QImode to BImode vector [PR 124280]

A boolean value is in QImode, but a vector of booleans is in VxxBImode.
And both AArch64 SVE and RISC-V V have vec_duplicatevXXbi accepting a QI
scalar.  Allow this case.

PR middle-end/124280

gcc/

* optabs.cc (expand_vector_broadcast): Allow broadcasting QImode
to BImode vector.

gcc/testsuite/

* gcc.c-torture/compile/pr124280.c: New test.

2 months agoRevert "[PR115042, LRA]: Postpone processing of new reload insns" as it
Vladimir N. Makarov [Fri, 27 Feb 2026 13:32:06 +0000 (08:32 -0500)] 
Revert "[PR115042, LRA]: Postpone processing of new reload insns" as it
results in numerous failures on some secondary targets.

This reverts commit 9a7da540b63e7d77e747b5cdd6fdbbd3954e28c8.

2 months agoipa-prop: Reset param_index of indir. edge when there are no jfuncs (PR123229)
Martin Jambor [Fri, 27 Feb 2026 13:26:13 +0000 (14:26 +0100)] 
ipa-prop: Reset param_index of indir. edge when there are no jfuncs (PR123229)

In my commit r16-6149-g14ee9a2b41bafa I have added an early exit to
update_indirect_edges_after_inlining which was however wrong, as
demonstrated by the PR123229 testcase.  This patch reverts that change,
restoring the previous behavior in this regard.

In the testcase, the edge being inlined is a call to a thunk, which do
not have jump functions associated with them.  This means that with
the early exit we neither reset the parameter index associated with
the indirect edge nor update the edges and the usage flags associated
with them

In the testcase, this meant that the param_used_by_indirect_call flag
was not updated, which in turn meant that the inlining edge cost cache
did not copy necessary information into the context which led to the
fact that two contexts which were not the same were considered the
same, and the checking code that evaluations in the cache should match
a re-evaluation triggered.  But unfortunately this bug can probably
have all sorts of weird and unexpected consequences.

The testcase also shows that inlined thunks are a barrier to
devirtualization which is something I will try to address next stage1.

gcc/ChangeLog:

2026-02-27  Martin Jambor  <mjambor@suse.cz>

PR ipa/123229
* ipa-prop.cc (update_indirect_edges_after_inlining): Reset parameter
index associated with an indirect edge if the inlined edge does not
have any jump functions.

gcc/testsuite/ChangeLog:

2026-02-27  Martin Jambor  <mjambor@suse.cz>

PR ipa/123229
* g++.dg/ipa/pr123229.C: New test.

2 months agoaarch64: Fix NULL structures in base tunings being silently ignored by JSON parser
Soumya AR [Thu, 26 Feb 2026 04:55:48 +0000 (04:55 +0000)] 
aarch64: Fix NULL structures in base tunings being silently ignored by JSON parser

In the JSON parser's parse_object_helper for const pointer members, we have a
if (!member) return; guard at entry.

This is because the function works by dereferencing the member pointer and
making a non-const copy of the object it points to. The parser can then
override this copy with new values and re-assign the pointer to the new object.

This is problematic if member is NULL in the base tunings, but provided in the
JSON file, which can happen with some combinations of -mcpu and
-muser-provided-CPU.

For example, with no -mcpu, if the generic tunings has issue_info set to
nullptr (eg. generic_armv8_a), then even if the user does provide issue_info
data in the JSON file, parse_object_helper will silently ignore it.

The naive fix for this is to create a zero-initialized copy of the object if
it is NULL, and then override it with the new values from the JSON file.

However, this results in another problem: if the user provides only selective
fields of the strucutre, the rest of the fields will be set to zero and
potentially interfere with costing decisions.

I think at that point the best we can do is emit a warning. With David Malcolm's
improved JSON diagnostics, we can be specific about the problematic structure as
well.

----

Since we potentially zero-initialize objects, I had to add a default constructor
to objects that only had parameterized constructors.

Bootstrapped and regtested on aarch64-linux-gnu, OK for trunk?

Signed-off-by: Soumya AR <soumyaa@nvidia.com>
gcc/ChangeLog:

* config/aarch64/aarch64-json-tunings-parser.cc (parse_object_helper):
Zero-initialize objects that are NULL in the base tunings, if provided
in JSON tunings.
* config/aarch64/aarch64-protos.h (struct sve_vec_cost): Add default
constructor.
(struct aarch64_simd_vec_issue_info): Likewise.
(struct aarch64_sve_vec_issue_info): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/aarch64-json-tunings/nullptr-issue-info.c:
New test.
* gcc.target/aarch64/aarch64-json-tunings/nullptr-issue-info.json:
New test input.

2 months agoipa: Meet same speculative and certain polymorphic contexts (PR123629)
Martin Jambor [Fri, 27 Feb 2026 10:58:01 +0000 (11:58 +0100)] 
ipa: Meet same speculative and certain polymorphic contexts (PR123629)

PR 123629 is a somewhat complicated situation.  IPA-CP clones for a
known speculative polymorphic context in a situation when a caller
bringing the known context has itself already been cloned, and now we
can determine that the context coming from that clone is not
speculative (but otherwise the same).  This confuses the meet function
of contexts which gives up and returns a useless context, which in
turn triggers an assert because the value we originally cloned for is
nowhere to be found in the data structures which describe what we know
about the function clone.

This patch changes the meet function so that it can deal with this
situation.  When one of the contexts does not have a certain
component, the other one is moved to the speculative one.

gcc/ChangeLog:

2026-02-23  Martin Jambor  <mjambor@suse.cz>

PR ipa/123629
* ipa-polymorphic-call.cc
(ipa_polymorphic_call_context::meet_with): When an outer context is
NULL, call make_speculative on the other one.

2 months agoAArch64: Don't enable ptest elimination for partial vectors [PR124162]
Tamar Christina [Fri, 27 Feb 2026 07:41:20 +0000 (07:41 +0000)] 
AArch64: Don't enable ptest elimination for partial vectors [PR124162]

The following loop

char b = 41;
int main() {
  signed char a[31];
#pragma GCC novector
  for (int c = 0; c < 31; ++c)
    a[c] = c * c + c % 5;
  {
    signed char *d = a;
#pragma GCC novector
    for (int c = 0; c < 31; ++c, b += -16)
      d[c] += b;
  }
  for (int c = 0; c < 31; ++c) {
    signed char e = c * c + c % 5 + 41 + c * -16;
    if (a[c] != e)
      __builtin_abort();
  }
}

compiled with -O2 -ftree-vectorize -msve-vector-bits=256 -march=armv8.2-a+sve

generates

        ptrue   p6.b, vl32
        add     x2, x2, :lo12:.LC0
        add     w5, w5, 16
        ld1rw   z25.s, p6/z, [x2]
        strb    w5, [x6, #:lo12:.LANCHOR0]
        mov     w0, 0
        mov     p7.b, p6.b
        mov     w2, 31
        index   z30.s, #0, #1
        mov     z26.s, #5
        mov     z27.b, #41
.L6:
        mov     z29.d, z30.d
        movprfx z28, z30
        add     z28.b, z28.b, #240
        mad     z29.b, p6/m, z28.b, z27.b
        mov     w3, w0
        movprfx z31, z30
        smulh   z31.s, p6/m, z31.s, z25.s
        add     w0, w0, 8
        asr     z31.s, z31.s, #1
        msb     z31.s, p6/m, z26.s, z30.s
        add     z31.b, z31.b, z29.b
        ld1b    z29.s, p7/z, [x1]
        cmpne   p7.b, p7/z, z31.b, z29.b
        b.any   .L15
        add     x1, x1, 8
        add     z30.s, z30.s, #8
        whilelo p7.s, w0, w2
        b.any   .L6

Which uses a predicate for the first iteration where all bits are 1. i.e. all
lanes active. This causes the result of the cmpne to set the wrong CC flags.
The second iteration uses

        whilelo p7.s, w0, w2

which gives the correct mask layout going forward.

This is due to the CSE'ing code that tries to share predicates as much as
possible.  In aarch64_expand_mov_immediate we do during predicate generation

  /* Only the low bit of each .H, .S and .D element is defined,
     so we can set the upper bits to whatever we like.  If the
     predicate is all-true in MODE, prefer to set all the undefined
     bits as well, so that we can share a single .B predicate for
     all modes.  */
  if (imm == CONSTM1_RTX (mode))
    imm = CONSTM1_RTX (VNx16BImode);

which essentially maps all predicates to .b unless the predicate is created
outside the immediate expansion code.

It creates the sparse predicate for data lane VNx4QI from a VNx16QI and then
has a "conversion" operation. The conversion operation results in a simple copy:

        mov     p7.b, p6.b

because in the data model for partial vectors the upper lanes are *don't care*.
So computations using this vector are fine.  However for comparisons, or any
operations setting flags the predicate value does matter otherwise we get the
wrong flags as the above.

Additionally we don't have a way to distinguish based on the predicate alone
whether the operation is partial or not. i.e. we have no "partial predicate"
modes.

two ways to solve this:

1. restore the ptest for partial vector compares.  This would slow down the loop
   though and introduce a second ptrue .s, VL8 predicate.

2. disable the sharing of partial vector predicates.  This allows us to remove
   the ptest.  Since the ptest would introduce a second predicate here anyway
   I'm leaning towards disabling sharing between partial and full predicates.

For the patch I ended up going with 1.  The reason is that this is that
unsharing the predicate does end up being pessimistic loops that only operate on
full vectors only (which are the majority of the cases).

I also don't fully understand all the places we depend on this sharing (and
about 3600 ACLE tests fail assembler scans).  I suspect one way to possibly
deal with this is to perform the sharing on GIMPLE using the new isel hook and
make RTL constant expansion not manually force it.  Since in gimple it's easy to
follow compares from a back-edge to figure out if it's safe to share the
predicate.

I also tried changing it so that during cond_vec_cbranch_any we perform an AND
with the proper partial predicate.  But unfortunately folding doesn't realize

that the and on the latch edge is useless (e.g.  whilelo p7.s, w0, w2 makes it
a no-op) and that the AND should be moved outside the loop.  This is something
that again isel should be able to do.

I also tried changing the

        mov     p7.b, p6.b

into an AND, while this worked, folding didn't quite get that the and can be
eliminated.  And this also pessimists actual register copies.

So for now I just undo ptest elimination for partial vectors for GCC 16 and will
revisit it for GCC 17 when we extend ptest elimination.

gcc/ChangeLog:

PR target/124162
* config/aarch64/aarch64-sve.md (cond_vec_cbranch_any,
cond_vec_cbranch_all): Drop partial vectors support.

gcc/testsuite/ChangeLog:

PR target/124162
* gcc.target/aarch64/sve/vect-early-break-cbranch_16.c: New test.

2 months agophiopt: Reject hot/cold predictors for early phiopt [PR117935]
Andrew Pinski [Thu, 26 Feb 2026 20:06:51 +0000 (12:06 -0800)] 
phiopt: Reject hot/cold predictors for early phiopt [PR117935]

In this case, early phiopt would get rid of the user provided predicator
for hot/cold as it would remove the basic blocks. The easiest and best option is
for early phi-opt don't do phi-opt if the middle basic-block(s) have either
a hot or cold predict statement. Then after inlining, jump threading will most likely
happen and that will keep around the predictor.

Note this only needs to be done for match_simplify_replacement and not the other
phi-opt functions because currently only match_simplify_replacement is able to skip
middle bb with predicator statements in it.

This allows for MIN/MAX/ABS/NEG still even with the predicators there as those will
less likely be jump threaded later on.  The main thing that is rejected is ssa names
that are alone where one of the comparisons operands is that one or if we produce
a comparison from the phiopt.

Changes since v1:
 * v2: Only reject if the result was the comparison.

Bootstrapped and tested on x86_64-linux-gnu.

PR tree-optimization/117935

gcc/ChangeLog:

* tree-ssa-phiopt.cc (contains_hot_cold_predict): New function.
(match_simplify_replacement): Return early if early_p and one of
the middle bb(s) have a hot/cold predict statement.

gcc/testsuite/ChangeLog:

* gcc.dg/predict-24.c: New test.
* gcc.dg/predict-25.c: New test.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2 months agocobol/123238 - fix LTO bootstrap with cobol enabled
Richard Biener [Thu, 26 Feb 2026 07:42:54 +0000 (08:42 +0100)] 
cobol/123238 - fix LTO bootstrap with cobol enabled

This works around an issue resulting in link-failure of cobol1 when
LTO bootstrap is used by removing unused <iostream> from the cobol
frontend.

PR cobol/123238
gcc/cobol/
* lexio.cc: Remove <iostream> include.
(cdftext::process_file): Remove if (false) gated use of
iostream code.

2 months agoFortran: New test cases from [PR123947]
Jerry DeLisle [Thu, 26 Feb 2026 04:50:57 +0000 (20:50 -0800)] 
Fortran: New test cases from [PR123947]

This PR was fixed by the fix for PR124235. Adding test cases to
avoid regressions.

PR fortran/123947

gcc/testsuite/ChangeLog:

* gfortran.dg/pr123947_1.f90: New test.
* gfortran.dg/pr123947_2.f90: New test.

2 months agoDaily bump.
GCC Administrator [Fri, 27 Feb 2026 00:16:38 +0000 (00:16 +0000)] 
Daily bump.

2 months agocobol: Fix FUNCTION TRIM.
Robert Dubner [Thu, 26 Feb 2026 19:42:51 +0000 (14:42 -0500)] 
cobol: Fix FUNCTION TRIM.

The FUNCTION TRIM now works properly with UTF16 inputs.

According to the ISO specification, the return type of a number of
intrinsic functions is defined by the variable type of their first
parameter.  A number of changes here cause more functions to honor that
requirement.

gcc/cobol/ChangeLog:

* parse.y: BASECONVERT and TRIM take their type from their first
parameter.
* parse_util.h (intrinsic_return_field): The function_descrs[] is
adjusted so that a number of functions take their return type from
their first calling parameter.  intrinsic_return_field() has been
refined.
* symbols.cc (new_alphanumeric):  Use set_explicit() instead of
set() in support of refined intrinsic function return type.

libgcobol/ChangeLog:

* intrinsic.cc (__gg__trim):  Rewritten to work properly, and avoid
unnecessary variable codeset encoding translation.

2 months agoAda: Fix bogus visibility error for iterated element association with key
Eric Botcazou [Thu, 26 Feb 2026 21:13:22 +0000 (22:13 +0100)] 
Ada: Fix bogus visibility error for iterated element association with key

The problem is that the Resolve_Iterated_Association procedure, unlike its
sibling Resolve_Iterated_Component_Association, preanalyzes a copy of the
specification so, in a generic context, global references cannot later be
captured.  This changes it to preanalyze the specification directly, which
requires a small adjustment during expansion.

gcc/ada/
PR ada/124201
* exp_aggr.adb (Expand_Iterated_Component): Replace the iteration
variable in the key expression and iterator filter, if any.
* sem_aggr.adb (Resolve_Iterated_Component_Association): Preanalyze
the specification and key expression directly.

gcc/testsuite/
* gnat.dg/generic_inst17.adb: New test.

2 months agolibiberty: fix resource exhaustion in rust demangler (PR demangler/106641)
Ruslan Valiyev [Thu, 26 Feb 2026 19:15:06 +0000 (19:15 +0000)] 
libiberty: fix resource exhaustion in rust demangler (PR demangler/106641)

demangle_binder() parses the bound_lifetimes count as a base-62
integer with no upper bound.  A crafted symbol can encode a huge
lifetime count in very few bytes, causing OOM or CPU hang.

Cap bound_lifetimes at 1024 and check rdm->errored in the loop
so it bails out early on errors during iteration.

libiberty/ChangeLog:

PR demangler/106641
* rust-demangle.c (demangle_binder): Reject bound_lifetimes
above 1024 to prevent resource exhaustion from crafted symbols.
Add rdm->errored check in the loop condition.
* testsuite/rust-demangle-expected: Add regression test.

Signed-off-by: Ruslan Valiyev <linuxoid@gmail.com>