aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2025-08-05gccrs: nr2.0: Fix resolution of constant itemsOwen Avery2-14/+9
gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit): Call DefaultASTVisitor::visit even on ConstantItem instances without expressions. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove issue-3642.rs. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Add unify rules for fnptr and closuresPhilip Herron1-1/+37
Its valid to unify a closure to an fnptr as we are working on the fn traits. There are still other issues but this is part of the patch set. gcc/rust/ChangeLog: * typecheck/rust-unify.cc (UnifyRules::expect_fnptr): add unify rules Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: Fix silly ordering bug in trait reference resolutionPhilip Herron3-3/+18
Ensure proper ordering when resolving trait references to prevent incorrect type resolution in certain contexts. gcc/rust/ChangeLog: * typecheck/rust-hir-trait-reference.cc (TraitReference::on_resolved): ensure associated types are done first * typecheck/rust-hir-type-check-type.cc: Update call site. gcc/testsuite/ChangeLog: * rust/compile/silly-order-bug.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: Fix bug with bad type bindings not looking at super traitsPhilip Herron2-7/+28
When resolving type bounds, we need to examine super traits to properly determine if type bindings are valid in the current context. gcc/rust/ChangeLog: * typecheck/rust-tyty-bounds.cc: Check super traits for type bindings. * typecheck/rust-tyty.h: Add helper methods for bound checking.
2025-08-05gccrs: Refactor marker builtin trait assemblyPhilip Herron2-5/+11
Rename assemble_sized_builtin to assemble_marker_builtins and reorganize the type matching to properly handle function pointers and closures with their associated traits (Fn, FnMut, FnOnce). gcc/rust/ChangeLog: * typecheck/rust-hir-type-bounds.h: Rename method. * typecheck/rust-tyty-bounds.cc: Refactor marker trait assembly and add proper Fn trait handling for function types.
2025-08-05gccrs: Cleanup and refactor method resolutionPhilip Herron2-91/+127
Refactor the dot operator implementation to improve code organization and maintainability while preserving existing functionality. gcc/rust/ChangeLog: * typecheck/rust-hir-dot-operator.cc: Major refactoring and cleanup. * typecheck/rust-hir-dot-operator.h: Add new helper methods.
2025-08-05gccrs: Fix cyclical projection to placeholderPhilip Herron1-0/+16
Prevent infinite loops when projecting associated types by properly handling cyclical references with placeholder types. gcc/rust/ChangeLog: * typecheck/rust-hir-trait-resolve.cc: Add cyclical projection protection.
2025-08-05gccrs: Ensure we look at the bounds behind a referencePhilip Herron2-7/+33
When type checking expressions that involve references, we need to examine the bounds of the referenced type to properly resolve traits and methods. gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc: Look at bounds behind references. * typecheck/rust-hir-type-check-expr.h: Add helper method.
2025-08-05gccrs: Move AST desugaring into expansion phaseOwen Avery2-8/+14
This fixes some issues with name resolution 2.0. gcc/rust/ChangeLog: * rust-session-manager.cc (Session::compile_crate): Move AST desugaring to... (Session::expansion): ...here and add a final TopLevel pass afterwards. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Add test case showing RPIT working to close issuePhilip Herron1-0/+35
Fixes Rust-GCC#1486 gcc/testsuite/ChangeLog: * rust/execute/torture/issue-1481.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: Fix ICE when constant is missing and expressionPhilip Herron8-4/+27
This is an invalid test case and doesnt work with rustc, we dont fully pick up the errors. Nr2 does handle this and puts out an extra good diagnostic but the old NR doesnt so for now i added this to the exclude list and then when we remove old name resolver this issue goes away. Fixes Rust-GCC#3642 gcc/rust/ChangeLog: * hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): check for has_expr * hir/rust-hir-dump.cc (Dump::visit): likewise * hir/tree/rust-hir-item.h: add has_expr helper * resolve/rust-ast-resolve-item.cc (ResolveItem::visit): check for has_expr * resolve/rust-ast-resolve-stmt.h: likewise * typecheck/rust-hir-type-check-stmt.cc (TypeCheckStmt::visit): likewise gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: nr2 puts out an extra error * rust/compile/issue-3642.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: Adjust external crate lowering and type checkingOwen Avery5-9/+40
The 2.0 name resolver is provided through ImmutableNameResolutionContext after it is done being mutated. The typechecker attempts to use ImmutableNameResolutionContext, so it needs to be run after ImmutableNameResolutionContext has been initialized (after all name resolution has been completed). Additionally, although I haven't seen any issues with lowering AST to HIR before name resolution 2.0 is complete, it makes sense to perform all lowering in lockstep as well. gcc/rust/ChangeLog: * hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Add visitor for ExternCrate. * hir/rust-ast-lower-item.h (ASTLoweringItem::visit): Likewise. * rust-session-manager.cc (Session::load_extern_crate): Avoid lowering or type resolving external crates here. * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Add visitor for ExternCrate. * typecheck/rust-hir-type-check-item.h (TypeCheckItem::visit): Replace empty definition with a declaration. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Fix execute testsuiteOwen Avery3-1/+35
Our non-torture execute tests haven't actually been running. gcc/testsuite/ChangeLog: * rust/execute/black_box.rs: Return 0 from main. * rust/execute/match-identifierpattern-enum.rs: Move to... * rust/execute/xfail/match-identifierpattern-enum.rs: ...here. * rust/execute/execute.exp: New file. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Fix issues around PartialEq Eq Ord Partial OrdPhilip Herron11-5/+2758
There is still an issue with derive on PartialOrd but this adds good tests and fixes a bug we had handling the default Rhs = Self generic type param substitutions on the comparison traits. gcc/rust/ChangeLog: * typecheck/rust-tyty.cc (ParamType::handle_substitions): make this consistent gcc/testsuite/ChangeLog: * rust/compile/bug-with-default-generic.rs: New test. * rust/execute/torture/partial-eq-1.rs: New test. * rust/execute/torture/partial-eq-2.rs: New test. * rust/execute/torture/partial-eq-3.rs: New test. * rust/execute/torture/partial-eq-4.rs: New test. * rust/execute/torture/partial-ord-1.rs: New test. * rust/execute/torture/partial-ord-2.rs: New test. * rust/execute/torture/partial-ord-3.rs: New test. * rust/execute/torture/partial-ord-4.rs: New test. * rust/execute/torture/partial-ord-5.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: nr2.0: Update IdentifierPattern's subpattern name resolutionZhi Heng1-4/+1
gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (Late::visit(IdentifierPattern)): Remove redundant subpattern check. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: Implement compilation of IdentifierPattern's subpattern bindingsZhi Heng3-0/+33
gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc: Add support for IdentifierPattern's subpattern under CompilePatternBindings. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: Implement name resolution for IdentifierPattern's subpatternZhi Heng2-0/+10
gcc/rust/ChangeLog: * resolve/rust-ast-resolve-pattern.cc: Implement name resolution for IdentifierPattern's subpattern. * resolve/rust-late-name-resolver-2.0.cc: Ditto, but for nr2. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: Rename get_pattern_to_bind to get_subpatternZhi Heng5-6/+5
gcc/rust/ChangeLog: * ast/rust-ast-collector.cc: Rename get_pattern_to_bind to get_subpattern * ast/rust-ast-visitor.cc: Ditto. * ast/rust-pattern.h: Ditto. * expand/rust-cfg-strip.cc: Ditto. * hir/rust-ast-lower-pattern.cc: Ditto. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: nr2.0: Adjust lookup of associated itemsOwen Avery3-6/+34
gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit): Adjust scoping of trait definitions and their generic parameters. * resolve/rust-forever-stack.hxx (ForeverStack::get): Prevent lookups inside TraitOrImpl ribs. (ForeverStack::resolve_segments): Prevent lookups of the first segment inside TraitOrImpl ribs. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Improve HIR dumps for patternsZhi Heng1-2/+2
gcc/rust/ChangeLog: * hir/rust-hir-dump.cc: Change pattern dumps to use visit_field. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: chore: Fix formattingArthur Cohen1-3/+6
gcc/rust/ChangeLog: * expand/rust-derive.cc: Fix formatting after fork update.
2025-08-05gccrs: derive(Ord, Eq): Use different node IDs for variant pathsArthur Cohen5-23/+496
gcc/rust/ChangeLog: * expand/rust-derive-cmp-common.cc (EnumMatchBuilder::tuple): Create two different variant paths. (EnumMatchBuilder::strukt): Likewise. * expand/rust-derive-cmp-common.h: Change API. * expand/rust-derive-ord.cc (DeriveOrd::visit_enum): Use new EnumMatchBuilder API. * expand/rust-derive-partial-eq.cc (DerivePartialEq::visit_enum): Likewise. gcc/testsuite/ChangeLog: * rust/compile/derive_partial_ord1.rs: New test.
2025-08-05gccrs: derive(Ord): Handle unit structs properlyArthur Cohen2-5/+32
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (DeriveOrd::make_cmp_arms): Use new make_equal function. (DeriveOrd::make_equal): New function. (DeriveOrd::recursive_match): Handle the unit struct/tuple case. * expand/rust-derive-ord.h: Declare make_equal.
2025-08-05gccrs: derive(Ord): Fix cmp call to use references instead of valuesArthur Cohen1-1/+2
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (DeriveOrd::cmp_call): Use references.
2025-08-05gccrs: derive(Ord): Fix condition for matching on Option::Some insteadArthur Cohen1-2/+3
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (DeriveOrd::make_cmp_arms): Fix condition.
2025-08-05gccrs: derive(Ord, PartialOrd): Finish implementationArthur Cohen2-11/+18
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc: Finish implementation for enums. * expand/rust-derive-ord.h: Likewise.
2025-08-05gccrs: derive(PartialEq): Implement proper discriminant comparisonArthur Cohen3-22/+51
And use the new EnumMatchBuilder class to do so. gcc/rust/ChangeLog: * expand/rust-derive-partial-eq.cc (DerivePartialEq::eq_fn): Change signature. (DerivePartialEq::visit_tuple): Use new eq_fn API. (DerivePartialEq::visit_struct): Likewise. (DerivePartialEq::visit_enum): Implement proper discriminant comparison. * expand/rust-derive-partial-eq.h: Change eq_fn signature. gcc/testsuite/ChangeLog: * rust/execute/torture/derive-partialeq2.rs: Add declaration for discriminant_value.
2025-08-05gccrs: derive-cmp: Add EnumMatchBuilder classArthur Cohen2-0/+159
gcc/rust/ChangeLog: * expand/rust-derive-cmp-common.h (class EnumMatchBuilder): New helper class. * expand/rust-derive-cmp-common.cc (EnumMatchBuilder::tuple): New function. (EnumMatchBuilder::strukt): New function.
2025-08-05gccrs: ast-builder: Make location publicArthur Cohen1-1/+1
gcc/rust/ChangeLog: * ast/rust-ast-builder.h: Put `loc` member in public.
2025-08-05gccrs: derive(Ord): Add handling for ordering of discriminant valuesArthur Cohen2-11/+73
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (DeriveOrd::cmp_call): New function. (DeriveOrd::recursive_match): Use it. (DeriveOrd::visit_enum): Likewise. * expand/rust-derive-ord.h: Declare it.
2025-08-05gccrs: derive(Hash): Use new Builder APIArthur Cohen1-8/+1
gcc/rust/ChangeLog: * expand/rust-derive-hash.cc (DeriveHash::visit_enum): Use new APIs.
2025-08-05gccrs: builder: Add Builder::discriminant_valueArthur Cohen2-3/+24
gcc/rust/ChangeLog: * ast/rust-ast-builder.cc (Builder::discriminant_value): New function. * ast/rust-ast-builder.h: Declare it.
2025-08-05gccrs: derive(Ord, PartialOrd): Handle tuples properlyArthur Cohen1-10/+8
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (is_last): Remove. (DeriveOrd::visit_tuple): Fix implementation.
2025-08-05gccrs: derive(PartialEq): chore: Refactor using new SelfOther APIsArthur Cohen3-16/+8
gcc/rust/ChangeLog: * expand/rust-derive-cmp-common.cc (SelfOther::indexes): Fix formatting. (SelfOther::fields): Make iterator const. * expand/rust-derive-cmp-common.h (struct SelfOther): New declaration for indexes. * expand/rust-derive-partial-eq.cc (DerivePartialEq::visit_tuple): Use the new API. (DerivePartialEq::visit_struct): Likewise.
2025-08-05gccrs: derive(Ord, PartialOrd): Implement proper recursive match logicArthur Cohen2-11/+116
gcc/rust/ChangeLog: * expand/rust-derive-ord.cc (DeriveOrd::make_cmp_arms): New function. (is_last): Likewise. (recursive_match): Likewise. (DeriveOrd::recursive_match): Likewise. (DeriveOrd::visit_struct): Add proper implementation. (DeriveOrd::visit_union): Likewise. * expand/rust-derive-ord.h: Declare these new functions.
2025-08-05gccrs: derive(PartialEq): Use that common classArthur Cohen2-33/+3
gcc/rust/ChangeLog: * expand/rust-derive-partial-eq.cc (DerivePartialEq::tuple_indexes): Remove. (DerivePartialEq::field_acccesses): Remove. (DerivePartialEq::visit_tuple): Use new API. (DerivePartialEq::visit_struct): Likewise. * expand/rust-derive-partial-eq.h: Remove declarations.
2025-08-05gccrs: derive: Add common comparison derive classArthur Cohen3-0/+120
gcc/rust/ChangeLog: * expand/rust-derive-cmp-common.cc: New file. * expand/rust-derive-cmp-common.h: New file. * Make-lang.in: Compile them.
2025-08-05gccrs: builder: Add match_case() function and new block() oneArthur Cohen2-1/+16
gcc/rust/ChangeLog: * ast/rust-ast-builder.cc (Builder::block): New function. (Builder::match_case): Likewise. * ast/rust-ast-builder.h: Declare them.
2025-08-05gccrs: derive: Add const generics when deriving implsArthur Cohen4-15/+48
gcc/rust/ChangeLog: * ast/rust-ast-builder.cc (Builder::new_const_param): New function. * ast/rust-ast-builder.h (vec): New function for creating 3 elts vector. * expand/rust-derive.cc: Use the new_const_param builder. * ast/rust-path.h: Add get_default_value() method.
2025-08-05gccrs: derive(Ord, PartialOrd): Add base for deriving them.Arthur Cohen4-2/+251
gcc/rust/ChangeLog: * Make-lang.in: Compile it. * expand/rust-derive.cc (DeriveVisitor::derive): Call them. * expand/rust-derive-ord.cc: New file. * expand/rust-derive-ord.h: New file.
2025-08-05gccrs: derive: chore: Add missing override qualifiersArthur Cohen5-24/+24
gcc/rust/ChangeLog: * expand/rust-derive-clone.h: Add missing override qualifiers to DeriveVisitor methods. * expand/rust-derive-copy.h: Likewise. * expand/rust-derive-eq.h: Likewise. * expand/rust-derive-hash.h: Likewise. * expand/rust-derive-partial-eq.h: Likewise.
2025-08-05gccrs: rib: Add all kinds of Ribs to pretty-printingArthur Cohen1-2/+6
gcc/rust/ChangeLog: * resolve/rust-rib.h: Add missing switch cases.
2025-08-05gccrs: Fix bug in query type stopping PartialOrdPhilip Herron3-3/+363
There was a complex recurisve type query hierarchy here but the type was resolved so we can just do an early return here gcc/rust/ChangeLog: * typecheck/rust-type-util.cc (query_type): early return. gcc/testsuite/ChangeLog: * rust/execute/torture/basic_partial_ord1.rs: New test. * rust/execute/torture/basic_partial_ord2.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: Fix bad type canonicalization on ARRAY_TYPESPhilip Herron3-6/+12
Fixes Rust-GCC#3660 gcc/rust/ChangeLog: * backend/rust-compile-type.cc (TyTyResolveCompile::visit): reuse GCC's build_array_type gcc/testsuite/ChangeLog: * rust/compile/const_generics_3.rs: * rust/compile/issue-3660.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-08-05gccrs: nr2.0: Adjust alternate identifier handlingOwen Avery1-2/+3
gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (visit_identifier_as_pattern): Make sure to map identifiers inside or-bindings to prior identifiers. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: Rename IdentifierPattern's to_bind to subpatternZhi Heng11-46/+49
gcc/rust/ChangeLog: * ast/rust-ast-collector.cc: Rename to_bind to subpattern. * ast/rust-ast-visitor.cc: Ditto. * ast/rust-pattern.cc: Ditto. * ast/rust-pattern.h: Ditto. * backend/rust-compile-pattern.cc: Ditto. * expand/rust-cfg-strip.cc: Ditto. * hir/rust-ast-lower-pattern.cc: Ditto. * hir/rust-hir-dump.cc: Ditto. * hir/tree/rust-hir-pattern.h: Ditto. * hir/tree/rust-hir.cc: Ditto. * typecheck/rust-hir-type-check-pattern.cc: Ditto. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: Support compilation of IdentifierPattern's subpatternsZhi Heng5-4/+36
gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc: Add CheckExpr compilation for IdentifierPattern with subpattern. * backend/rust-compile-pattern.h: Modify IdentifierPattern's visit func to support the above. * typecheck/rust-hir-type-check-pattern.cc: Add typechecking support for the changes above. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-08-05gccrs: nr2.0: Fix closure parameter scopingOwen Avery4-38/+37
gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit_closure_params): New member function definition. (DefaultResolver::visit): New visiting function definition for ClosureExpr called from visiting functions for ClosureExprInner and ClosureExprInnerTyped. * resolve/rust-default-resolver.h (DefaultResolver::visit_closure_params): New member function declaration. (DefaultResolver::visit): New visiting function declaration for ClosureExpr. * resolve/rust-late-name-resolver-2.0.cc (add_captures): Remove function. (Late::visit): New visiting function definition for ClosureExpr, remove visiting function definitions for ClosureExprInner and ClosureExprInnerTyped. (Late::visit_closure_params): New member function definition. * resolve/rust-late-name-resolver-2.0.h (Late::visit): New visiting function declaration for ClosureExpr, remove visiting function declarations for ClosureExprInner and ClosureExprInnerTyped. (Late::visit_closure_params): New member function declaration. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: nr2.0: Improve handling of single segment pathsOwen Avery2-10/+42
gcc/rust/ChangeLog: * resolve/rust-forever-stack.hxx (ForeverStack::resolve_path): Handle single segment paths "crate", "self", and "super". gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-08-05gccrs: nr2.0: Adjust pub_restricted testsOwen Avery3-10/+10
gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. * rust/compile/pub_restricted_1.rs: Adjust expected error messages and only run with name resolution 2.0 enabled. * rust/compile/pub_restricted_2.rs: Likewise. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>