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
Open
Fake PR to test the upstreaming of commit up to gerris/rebase-upstream/2026-03-18#4492dkm wants to merge 41 commits intodkm/upstream-basefrom
dkm wants to merge 41 commits intodkm/upstream-basefrom
Conversation
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>
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>
Member
Author
|
Testing gives: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 🦀