Skip to content

Fake PR to test the upstreaming of commit up to gerris/rebase-upstream/2026-03-18#4492

Open
dkm wants to merge 41 commits intodkm/upstream-basefrom
gerris/rebase-upstream/2026-03-18
Open

Fake PR to test the upstreaming of commit up to gerris/rebase-upstream/2026-03-18#4492
dkm wants to merge 41 commits intodkm/upstream-basefrom
gerris/rebase-upstream/2026-03-18

Conversation

@dkm
Copy link
Member

@dkm dkm commented Mar 18, 2026

This is a fake PR, not meant to be merged. It tries to merge commits to upstream with an upstream base branch dkm/upstream-base.
We're only interested by the CI results.
-- gerris 🦀

powerboat9 and others added 30 commits March 18, 2026 20:03
This patch adds a wrapper class called Cloneable, which can be used to
automatically perform polymorphic copying. This should greatly reduce
the need for error-prone user defined copy constructors and assignment
operators.

As a demonstration/first step, this patch also uses Cloneable to
simplify the pattern nodes described in gcc/rust/ast/rust-pattern.h.

gcc/rust/ChangeLog:

	* ast/rust-ast.h: Include "rust-cloneable.h".
	(struct CloneableDelegate<std::unique_ptr<AST::Pattern>>): Add
	specialization.
	* ast/rust-pattern.cc (IdentifierPattern::as_string): Handle
	field type changes.
	(RangePattern::as_string): Likewise.
	(ReferencePattern::as_string): Likewise.
	(StructPatternFieldTuplePat::as_string): Likewise.
	(StructPatternFieldIdentPat::as_string): Likewise.
	(StructPatternElements::as_string): Likewise.
	(TupleStructItemsNoRest::as_string): Likewise.
	(TupleStructItemsHasRest::as_string): Likewise.
	(TupleStructPattern::as_string): Likewise.
	(TuplePatternItemsNoRest::as_string): Likewise.
	(TuplePatternItemsHasRest::as_string): Likewise.
	(TuplePattern::as_string): Likewise.
	(SlicePatternItemsNoRest::as_string): Likewise.
	(SlicePatternItemsHasRest::as_string): Likewise.
	(SlicePattern::as_string): Likewise.
	(AltPattern::as_string): Likewise.
	* ast/rust-pattern.h: Include "rust-cloneable.h".
	(class IdentifierPattern): Use Cloneable to simplify copying.
	(class RangePattern): Likewise.
	(class ReferencePattern): Likewise.
	(class StructPatternFieldTuplePat): Likewise.
	(class StructPatternFieldIdentPat): Likewise.
	(class StructPatternElements): Likewise.
	(class TupleStructItemsNoRest): Likewise.
	(class TupleStructItemsHasRest): Likewise.
	(class TupleStructPattern): Likewise.
	(class TuplePatternItemsNoRest): Likewise.
	(class TuplePatternItemsHasRest): Likewise.
	(class TuplePattern): Likewise.
	(class GroupedPattern): Likewise.
	(class SlicePatternItemsNoRest): Likewise.
	(class SlicePatternItemsHasRest): Likewise.
	(class SlicePattern): Likewise.
	(class AltPattern): Likewise.
	(struct
	CloneableDelegate<std::unique_ptr<AST::RangePatternBound>>): Add
	specialization.
	(struct
	CloneableDelegate<std::unique_ptr<AST::TupleStructItems>>):
	Likewise.
	(struct
	CloneableDelegate<std::unique_ptr<AST::TuplePatternItems>>):
	Likewise.
	(struct
	CloneableDelegate<std::unique_ptr<AST::SlicePatternItems>>):
	Likewise.
	(struct
	CloneableDelegate<std::unique_ptr<AST::StructPatternField>>):
	Likewise.
	* util/rust-cloneable.h: New file.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Fixes #4433

gcc/rust/ChangeLog:

	* ast/rust-ast.cc (Attribute::get_traits_to_derive): Propagate location
	info from MetaWord to SimplePath.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-4433.rs: Update test to expect valid line numbers.

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
Fixes #4413

gcc/testsuite/ChangeLog:

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

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
Rename is_builtin to identify_builtin and change prototype to return the
builtin when found.

gcc/rust/ChangeLog:

	* util/rust-attributes.cc (is_builtin): Rename from here ...
	(identify_builtin): ... to here.
	(is_proc_macro_type): Handle new return value.
	(AttributeChecker::check_inner_attribute): Likewise.
	(AttributeChecker::check_attribute): Likewise.
	(AttributeChecker::visit): Likewise.
	* util/rust-attributes.h (identify_builtin): Update function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Feature collection should happen before expansion because some feature
gating happens with macros. This commit does no move the feature
collection before the expansion pass, it simply split the collection part
from the gating part.

gcc/rust/ChangeLog:

	* Make-lang.in: Add new feature collector file.
	* checks/errors/feature/rust-feature-gate.cc (FeatureGate::visit):
	Remove feature collection from gating visitor.
	(FeatureGate::gate): Use features from the crate feature entity instead
	of old class members.
	* checks/errors/feature/rust-feature-gate.h: Get features from a
	separate CrateFeatures struct instead of keeping them in the class.
	* rust-session-manager.cc (Session::compile_crate): Collect features
	before gating them.
	* util/rust-attribute-values.h: Add feature attribute value.
	* checks/errors/feature/rust-feature-collector.cc: New file.
	* checks/errors/feature/rust-feature-collector.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* expand/rust-cfg-strip.cc (CfgStrip::fails_cfg): Remove function.
	* expand/rust-cfg-strip.h: Remove function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Features are now collected early rather than later during the feature
gating visitor. This requires the introduction of an early cfg strip
in order to collect #![cfg(xxxx), feature(yyyy)] correctly.

gcc/rust/ChangeLog:

	* Make-lang.in: Add rust-early-cfg-strip object file.
	* expand/rust-cfg-strip.h (expand_cfg_attrs): Declare function prototype.
	* rust-session-manager.cc (Session::compile_crate): Reorder feature
	collection and add early cfg strip.
	* expand/rust-early-cfg-strip.cc: New file.
	* expand/rust-early-cfg-strip.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
rust-for-linux uses some nightly features that appeared with rust 1.50,
this patch provides a new mechanism dedicated to features required for
rfl that were not available back then.

gcc/rust/ChangeLog:

	* checks/errors/feature/contrib/fetch: Bump version from 1.49.0 to
	1.50.0. Change brace expansion to explicit file fetch.
	* checks/errors/feature/rust-feature-defs.h: Regenerate.
	* checks/errors/feature/contrib/copyright-stub.h: Add rfl include
	directive.
	* checks/errors/feature/rust-feature-defs-rfl.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Some nightly features change the parser's behavior, it may accepts syntax
that should be rejected when the feature is missing. But the complete
list of enabled features can only be found once the parsing is complete.
We should therefore not emit any error at parse time and instead collect
a potential error and emit it later during the feature gating step.

gcc/rust/ChangeLog:

	* checks/errors/feature/rust-feature-gate.cc (FeatureGate::check):
	Check all parse time errors.
	* checks/errors/feature/rust-feature-gate.h: Update function prototype
	with parse time errors.
	* parse/rust-parse-impl-attribute.hxx: Collect potential gating error
	with non literal attribute values. Remove error emission.
	* parse/rust-parse.h: Add a function to gather potential feature gating
	errors as well as a getter for collected errors.
	* rust-session-manager.cc (Session::compile_crate): Retrieve potential
	feature gating errors and check them later during the feature gating
	step.
	* util/rust-attributes.cc (check_export_name_attribute): Change
	attribute checking error emission to prevent errors with macro inputs.

gcc/testsuite/ChangeLog:

	* rust/compile/doc_macro.rs: Enable feature to use a macro within an
	attribute input.
	* rust/compile/parse_time_feature_gate.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
We use multiple parsers and can't retrieve all early feature gating
errors within the usual gating pass. This commit introduces a store to
collect all early gating errors in the same place from multiple parsers.
The features are then checked as usual within the feature gate checker.

gcc/rust/ChangeLog:

	* checks/errors/feature/rust-feature-gate.cc (EarlyFeatureGateStore::get):
	Add function to retrieve singleton instance.
	(EarlyFeatureGateStore::add): New function to add an error and the
	corresponding feature in the store.
	(EarlyFeatureGateStore::get_error): Add new function to retrieve the
	oldest error.
	(FeatureGate::check): Update the function to retrieve the errors from
	the store instead of getting it from the parameters.
	* checks/errors/feature/rust-feature-gate.h (class EarlyFeatureGateStore):
	Add a new class to collect all early feature gating errors.
	* parse/rust-parse.h: Use store instead of keeping the errors within
	the parser instance.
	* rust-session-manager.cc (Session::compile_crate): Remove old early
	error collection from the main parser.
	* rust-system.h: Include queue header.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-3661.rs: Add key_value_attribute feature to
	prevent error on stringify macro.
	* rust/compile/early_feature_gate_in_macro.rs: Add test to highlight
	early feature gate error collection within macros.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Move the early feature gate store to it's own translation unit. This
will reduces the size of included headers within the parser.

gcc/rust/ChangeLog:

	* Make-lang.in: Add new specific feature store file.
	* checks/errors/feature/rust-feature-gate.cc (EarlyFeatureGateStore::get):
	Move from here to rust-feature-store.cc.
	(EarlyFeatureGateStore::add): Likewise.
	(EarlyFeatureGateStore::get_error): Likewise.
	(FeatureGate::check): Likewise.
	* checks/errors/feature/rust-feature-gate.h (class EarlyFeatureGateStore):
	Move class declaration to rust-feature-store.h header.
	* parse/rust-parse.h: Change included header.
	* checks/errors/feature/rust-feature-store.cc: New file.
	* checks/errors/feature/rust-feature-store.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* rust-session-manager.cc (Session::handle_crate_name): Use the new
	constexpr instead of a raw string value.
	* util/rust-attribute-values.h: Add crate_name and crate_type values.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Those attributes should be considered as builtin attributes but were
missing from the list of builtin attributes.

gcc/rust/ChangeLog:

	* util/rust-attributes.cc: Add "feature", "no_core", "doc",
	"crate_name", "crate_type" and "may_dandle" to the list of builtin
	attributes.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Attribute have always been a bit weird, they were part of the AST but did
not have any visitor function, this create a lot of friction around them
as their input which may be an expression, a literal and even an
expression in the future didn't get visited properly during the different
passes of the compiler.

gcc/rust/ChangeLog:

	* ast/rust-ast-full-decls.h (struct Attribute): Change from here...
	(class Attribute): ...to a class here.
	* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Add a default
	visit function for the attributes.
	* ast/rust-ast-visitor.h: Add a proper visit function declaration for
	attributes.
	* ast/rust-ast.cc (Attribute::accept_vis): Add a function to accept a
	visitor within the attributes.
	* ast/rust-ast.h (struct Attribute): Add the accept_vis function
	prototype.
	(class Attribute): Rename from struct to class.
	* expand/rust-derive.h: Add an empty implementation for visits to
	prevent the visitor from recursing into the attributes.
	* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Add missing
	implementation for attribute visit function. Add a check for derive
	attributes that would have slipped through the passes.
	* hir/rust-ast-lower-base.h: Add function prototype.
	* resolve/rust-early-name-resolver-2.0.cc (Early::visit_attributes):
	Split the function into two halves.
	(Early::visit_derive_attribute): Specialized function from
	visit_attribute for derive attributes.
	(Early::visit_non_builtin_attribute): Likewise for non builtin
	attributes.
	(Early::visit): Rename visit_attributes to visit.
	* resolve/rust-early-name-resolver-2.0.h (class Early): Update function
	prototypes.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-4212.rs: Update test with the new errors.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* ast/rust-ast.h (class Attribute): Add a node id member.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
These changes allows interfacing with attributes as a Visitable node.

gcc/rust/ChangeLog:

	* ast/rust-ast.h (class Attribute): Make visitable parent class public.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Remove attribute specific checking, use default ast visitor instead.

gcc/rust/ChangeLog:

	* util/rust-attributes.cc (AttributeChecker::visit): Rename function
	and make call to ast default visitor.
	(AttributeChecker::check_attribute): Remove function.
	* util/rust-attributes.h: Add function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
A crate is not a visitable and thus cannot be used with the debug
function. Until it is made visitable this commit provides a function
to dump the content of a crate.

gcc/rust/ChangeLog:

	* ast/rust-ast-dump.cc (debug): Add debug function which calls debug
	on every crate field.
	* ast/rust-ast-dump.h (debug): Add function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
We will require expr within attribute input in the future in order to be
able to handle some nightly features. Even, the current macro attribute
input could be converted to an expression attribute input.

gcc/rust/ChangeLog:

	* ast/rust-ast-collector.cc (TokenCollector::visit): Add visitor
	implementation.
	* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise.
	* ast/rust-ast-collector.h: Add function prototype.
	* ast/rust-ast-visitor.h: Likewise.
	* expand/rust-derive.h: Likewise.
	* hir/rust-ast-lower-base.h: Likewise.
	* ast/rust-ast.cc (Attribute::get_traits_to_derive): Handle EXPR
	variant.
	(AttrInputExpr::AttrInputExpr): Add constructor.
	(AttrInputExpr::operator=): Add assignment operator implementation.
	(AttrInputExpr::as_string): Add a string conversion member function.
	(AttrInputExpr::accept_vis): Add visitor function.
	* ast/rust-ast.h: Add EXPR type variant to AttrInput.
	* util/rust-attributes.cc (check_doc_attribute): Handle expr variant.
	* ast/rust-expr.h (class AttrInputExpr): Add class definition with
	member function prototypes.
	* hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Add empty
	visitor implementation.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
We were emitting warning even on attribute that were then removed by
the cfgstrip pass. We cannot move the cfg strip pass before the attribute
checking because we need to first emit malformed input error messages.
This means the attribute checking pass must know if an attribute input
may be removed later down the line.

gcc/rust/ChangeLog:

	* ast/rust-ast.cc (MetaItemPathExpr::to_attribute): Remove cast to
	literal.
	(AttrInputMetaItemContainer::separate_cfg_attrs): Remove PathExpr
	specific code.
	* expand/rust-cfg-strip.cc (expand_cfg_attrs): Remove the whole
	attribute if condition's result is false.
	* util/rust-attributes.cc (AttributeChecker::visit): Remove specific
	code section for meta item container. Do not check input if
	configuration does not match condition.

gcc/testsuite/ChangeLog:

	* rust/compile/attr_malformed_path.rs: Filter existing test to x86_64
	exclusively, add two new tests that appear when visiting the resulting
	expression.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Attribute content was checked twice within the early name resolution,
from outside the attribute and then using the default visitor. Remove
the first one visit. Also fix the wrong locus on trait resolution.

gcc/rust/ChangeLog:

	* resolve/rust-early-name-resolver-2.0.cc (Early::visit_derive_attribute):
	Change from attribute locus to trait locus.
	(Early::visit_attributes): Remove function.
	(Early::visit): Remove functions.
	* resolve/rust-early-name-resolver-2.0.h: Remove unused prototypes.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Add a no_std attribute, when both no_std and no_core attributes are
missing, inject an external std crate.

gcc/rust/ChangeLog:

	* rust-session-manager.cc (Session::compile_crate): Inject std crate
	when both no_std and no_core attributes are missing.
	* util/rust-attribute-values.h: Add no_std attribute value.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This patch implements the `reconstruct` pattern for the `Path` hierarchy and its
constituents (segments, generic args, qualified paths).

Previously, derive expansion macros (like `derive(PartialEq)`) had to manually
rebuild paths field-by-field to ensure fresh NodeIDs. This change moves that
logic into the AST classes themselves, allowing paths to be deeply reconstructed
uniformly. This ensures that expanded code has unique NodeIDs, which is critical
for correct name resolution.

gcc/rust/ChangeLog:

	* ast/rust-path.h (GenericArgsBinding::reconstruct): New method.
	(GenericArg::reconstruct): New method.
	(GenericArgs::reconstruct): New method.
	(PathExprSegment::reconstruct): New method.
	(PathInExpression::reconstruct): New method.
	(TypePathSegmentGeneric::reconstruct_impl): New method.
	(TypePathFunction::reconstruct): New method.
	(TypePathSegmentFunction::reconstruct_impl): New method.
	(QualifiedPathType::reconstruct): New method.
	(QualifiedPathInExpression::reconstruct): New method.
	(QualifiedPathInType::reconstruct_impl): New method.
	* expand/rust-derive-cmp-common.cc (EnumMatchBuilder::tuple): Use path.reconstruct().
	(EnumMatchBuilder::strukt): Use path.reconstruct().

Signed-off-by: Jayant Chauhan <0001jayant@gmail.com>
…ency

gcc/rust/ChangeLog:

	* ast/rust-macro.h: remove get_macro_node_id and propagate
	MacroInvocation's node id through get_node_id for consistency
	* util/rust-hir-map.cc (Mappings::insert_macro_invocation): replace
	all get_macro_node_id calls with get_node_id calls
	(Mappings::lookup_macro_invocation): likewise
	(Mappings::insert_bang_proc_macro_invocation): likewise
	(Mappings::lookup_bang_proc_macro_invocation): likewise

Signed-off-by: vibhatsu <maulikbarot2915@gmail.com>
…lass

In full constructor, add initialization for ExternalItem base class. Use
the node id inside ExternalItem to populate member node id.

gcc/rust/ChangeLog:

	* ast/rust-macro.h: add initialization for ExternalItem base
	class in full construtor and use node id inside ExternalItem
	to populate memeber node id.

Signed-off-by: vibhatsu <maulikbarot2915@gmail.com>
When encountering `#[derive(RustcEncodable)]` or `RustcDecodable`, the
`DeriveVisitor` previously fell through to `rust_unreachable ()`,
causing an Internal Compiler Error.

This patch adds cases for these built-in macros to explicitly emit a
"sorry, unimplemented" message instead of crashing.

Fixes #3951

gcc/rust/ChangeLog:

	* expand/rust-derive.cc (DeriveVisitor::derive): Handle
	`BuiltinMacro::RustcEncodable` and `BuiltinMacro::RustcDecodable`.

gcc/testsuite/ChangeLog:

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

Signed-off-by: jayant chauhan <0001jayant@gmail.com>
gcc/rust/ChangeLog:

	* resolve/rust-default-resolver.cc (DefaultResolver::visit):
	Override MatchCase visiting function.
	* resolve/rust-default-resolver.h (DefaultResolver::visit):
	Likewise.

gcc/testsuite/ChangeLog:

	* rust/execute/torture/match-structpattern-tuplefield.rs: Fix
	test.
	* rust/compile/match-scope.rs: New test.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Every wildcard should be considered different and no error should be
emitted when multiple wildcards are used within the same rib.

gcc/rust/ChangeLog:

	* resolve/rust-toplevel-name-resolver-2.0.cc(TopLevel::visit): Insert
	constant item only if now wildcard.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* checks/lints/rust-lint-unused-var.cc (starts_with_underscore): Add
	function to detect underscore within symbol name.
	(check_decl): Call new function for underscore checking.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* parse/rust-parse-error.h (struct EnumVariant): Add error for enum
	variant.
	* parse/rust-parse-impl.hxx: Use new error type instead of nullptr.
	* parse/rust-parse.h: Update function prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
P-E-P and others added 11 commits March 18, 2026 20:03
The compiler should not emit any unused function warning on function name
prefixed with an underscore.

gcc/rust/ChangeLog:

	* checks/lints/rust-lint-scan-deadcode.h: Add additional condition
	to prevent warning emission. Check for underscore prefix.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-3947.rs: Do not expect a warning on this
	underscore prefixed function.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
The expect token function already emits an error message for malformed
struct.

gcc/rust/ChangeLog:

	* parse/rust-parse-impl.hxx: Remove additional error message.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/testsuite/ChangeLog:

	* rust/compile/wildcard_items.rs: Move to...
	* rust/compile/wildcard_const.rs: ...here.
	* rust/compile/wildcard_enum.rs: New test.
	* rust/compile/wildcard_enum_variant.rs: New test.
	* rust/compile/wildcard_static.rs: New test.
	* rust/compile/wildcard_struct.rs: New test.
	* rust/compile/wildcard_variable.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* Make-lang.in: Add rust-intrinsic-handlers.cc.
	* backend/rust-compile-intrinsic.cc (get_identifier): Move function
	to handlers namespace.
	(is_basic_integer_type): Likewise.
	(check_for_basic_integer_type): Likewise.
	(offset_handler): Likewise.
	(sizeof_handler): Likewise.
	(transmute_handler): Likewise.
	(rotate_handler): Likewise.
	(wrapping_op_handler_inner): Likewise.
	(op_with_overflow_inner): Likewise.
	(uninit_handler): Likewise.
	(move_val_init_handler): Likewise.
	(assume_handler): Likewise.
	(discriminant_value_handler): Likewise.
	(variant_count_handler): Likewise.
	(enum class): Likewise.
	(prefetch_data_handler): Likewise.
	(rotate_left_handler): Likewise.
	(rotate_right_handler): Likewise.
	(std::function<tree): Likewise.
	(wrapping_op_handler): Likewise.
	(op_with_overflow): Likewise.
	(prefetch_read_data): Likewise.
	(prefetch_write_data): Likewise.
	(atomic_store_handler_inner): Likewise.
	(atomic_load_handler_inner): Likewise.
	(atomic_store_handler): Likewise.
	(atomic_load_handler): Likewise.
	(unchecked_op_inner): Likewise.
	(unchecked_op_handler): Likewise.
	(copy_handler_inner): Likewise.
	(copy_handler): Likewise.
	(expect_handler_inner): Likewise.
	(expect_handler): Likewise.
	(try_handler_inner): Likewise.
	(try_handler): Likewise.
	(sorry_handler): Likewise.
	(check_for_cached_intrinsic): Likewise.
	(maybe_override_ctx): Likewise.
	(compile_fn_params): Likewise.
	(compile_intrinsic_function): Likewise.
	(enter_intrinsic_block): Likewise.
	(finalize_intrinsic_block): Likewise.
	(make_unsigned_long_tree): Likewise.
	(build_atomic_builtin_name): Likewise.
	* backend/rust-intrinsic-handlers.cc: New file.
	* backend/rust-intrinsic-handlers.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ChangeLog:

	* backend/rust-compile-intrinsic.cc: Use predefined values.
	* checks/errors/rust-unsafe-checker.cc (is_safe_intrinsic): Likewise.
	* util/rust-intrinsic-values.h: New file.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This patch adds an ambiguity check in 'finalize_rebind_import'.
If a Definition is ambiguous, it emits a proper error diagnostic
instead of crashing, consistent with rustc's behavior(verified)

Fixes #4411

gcc/rust/ChangeLog:

	* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_rebind_import): Add ambiguity
	check before calling get_node_id() on glob import definitions.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Harishankar <harishankarpp7@gmail.com>
The compiler was accepting `#![no_core]` without requiring
`#![feature(no_core)]`, silently treating an unstable attribute
as stable.  Gate it via check_no_core_attribute, consistent with
how other experimental attributes are handled.

Fixes: #4461

gcc/rust/ChangeLog:

	* checks/errors/feature/rust-feature-gate.cc (FeatureGate::visit): Call check_no_core_attri.
	* checks/errors/feature/rust-feature-gate.h: Declare method check_no_core_attri.

gcc/testsuite/ChangeLog:

	* rust/compile/match-scope.rs: Fix test.
	* rust/compile/no_core_feature_gate.rs: New test.

Signed-off-by: Mohamed Ali <mohmedali1462005@gmail.com>
This patch implements the bswap intrinsic for integer types. It maps to the respective GCC built-ins for 16, 32, 64 and 128-bit integers.

gcc/rust/ChangeLog:

	* backend/rust-compile-intrinsic.cc: Add bswap_handler.
	* backend/rust-intrinsic-handlers.cc (bswap_handler): New function.
	* backend/rust-intrinsic-handlers.h (bswap_handler): New declaration.

gcc/testsuite/ChangeLog:

	* rust/compile/bswap.rs: New test.
	* rust/execute/bswap.rs: New test.

Signed-off-by: Enes Cevik <nsvke@proton.me>
no_std is a builtin attribute required for rust-for-linux but was
missing from the builtin attribute list and instead considered an unknown
attribute macro invocation.

gcc/rust/ChangeLog:

	* util/rust-attributes.cc: Add no_std to list of builtin attributes.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
It is often required to inject some inner attributes to a crate from the
CLI. It has been required recently for fuzzing the compiler easily.

gcc/rust/ChangeLog:

	* ast/rust-ast.cc (Crate::inject_inner_attribute): Add member function
	to inject an inner attribute.
	* ast/rust-ast.h: Add function prototype.
	* lang.opt: Add frust-crate-attr argument to the compiler CLI.
	* rust-lang.cc: Remove unused attribute on  option handler.
	* rust-session-manager.cc (Session::handle_crate_name): Collect CLI
	additional inner attributes.
	(Session::compile_crate): Parse the additional inner attributes and
	inject them.
	* rust-session-manager.h (struct CompileOptions): Add collection of
	additional inner attributes.

gcc/testsuite/ChangeLog:

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

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Inner attribute injection was not within the injection function where
the other things get injected within a crate.

gcc/rust/ChangeLog:

	* rust-session-manager.cc (Session::compile_crate): Use additional
	cli attributes for the injection function. Move additional attribute
	injection from here...
	(Session::injection): ... to here.
	* rust-session-manager.h: Update injection fonction prototype.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
@dkm
Copy link
Member Author

dkm commented Mar 18, 2026

Testing gives:

                === rust Summary ===

# of expected passes            10618
# of expected failures          73
# of unsupported tests          7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants