Skip to content

Commits to upstream: 2025-06-25 #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 85 commits into
base: master
Choose a base branch
from
Open

Commits to upstream: 2025-06-25 #6

wants to merge 85 commits into from

Conversation

dkm
Copy link
Owner

@dkm dkm commented Jun 25, 2025

Hey there! I'm gerris 🦀

CohenArthur and others added 30 commits June 25, 2025 23:15
gcc/rust/ChangeLog:

	* resolve/rust-late-name-resolver-2.0.cc (Late::Late): False initialize the
	funny_error field.
gcc/rust/ChangeLog:

	* backend/rust-compile-pattern.h: Split struct pattern compilation into three functions.
	* backend/rust-compile-pattern.cc: Implement them.
Allow matching on a struct instance and rebinding its fields to new names:

match X {
	Foo {
		field0: new_name0,
		field1: new_name1,
	} => {
		do_something(new_name0, new_name1);
	},
}

This will enable us to finish derives for PartialEq and PartialOrd but
isn't a complete implementation of these patterns yet.

gcc/rust/ChangeLog:

	* backend/rust-compile-pattern.cc (CompilePatternBindings::make_struct_access):
	New function.
	(CompilePatternBindings::visit): Properly implement patterns mentioned above
	and call make_struct_accesss.
	* backend/rust-compile-pattern.h: New declaration.

gcc/testsuite/ChangeLog:

	* rust/execute/torture/struct_pattern1.rs: New test.
gcc/rust/ChangeLog:

	* ast/rust-ast-builder.cc (Builder::struct_pattern_ident_pattern): New.
	* ast/rust-ast-builder.h: New declaration.
gcc/rust/ChangeLog:

	* expand/rust-derive-partial-eq.cc (DerivePartialEq::match_enum_tuple): Remove debug call.
	(DerivePartialEq::match_enum_struct): Add proper implementation.
	(DerivePartialEq::visit_enum): Call it.

gcc/testsuite/ChangeLog:

	* rust/execute/torture/derive-partialeq2.rs: New test.
gcc/testsuite/ChangeLog:

	* rust/execute/torture/derive-partialeq2.rs: Add missing terminating nul char.

Co-authored-by: Pierre-Emmanuel Patry <[email protected]>
Rust only allows impl traits to be used in the return position of
functions.

Fixes Rust-GCC#1485

gcc/rust/ChangeLog:

	* hir/rust-ast-lower-implitem.cc (ASTLowerImplItem::visit): allow impl type
	* hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): likewise
	* hir/rust-ast-lower-type.cc (ASTLoweringType::ASTLoweringType): new flag for impl trait
	(ASTLoweringType::translate): pass flag
	(ASTLoweringType::visit): track impl trait tag
	(ASTLoweringType::emit_impl_trait_error): new diagnostic
	* hir/rust-ast-lower-type.h: add new field

gcc/testsuite/ChangeLog:

	* rust/compile/impl_trait_diag.rs: New test.
	* rust/compile/issue-1485.rs: New test.

Signed-off-by: Philip Herron <[email protected]>
Argument position impl traits are simply syntatic sugar for generics. This
adds a new desugar pass to do this. So for example:

    fn foo(a: impl Value, b: impl Value) -> i32

Is desugared into:

    fn foo<T: Value, U: Value> (a: T, b: U) -> i32

So it just works like any normal generic function. There are more complex cases such as:

    fn foo(_value: impl Bar<Baz = impl Foo>) -> i32

Which has a generic argument binding which needs to be turned into a where constraint:

    fn foo<T, U>(_value: T) -> i32
        where
            T: Bar<Baz = U>,
            U: Foo,

Fixes Rust-GCC#2015
Fixes Rust-GCC#1487
Fixes Rust-GCC#3454
Fixes Rust-GCC#1482

gcc/rust/ChangeLog:

	* Make-lang.in: new desugar file
	* ast/rust-ast.cc (ImplTraitTypeOneBound::as_string): its a unique_ptr now
	(FormatArgs::set_outer_attrs): reformat
	* ast/rust-path.h: remove has_generic_args assertion (can be empty because of desugar)
	* ast/rust-type.h (class ImplTraitTypeOneBound): add copy ctor and use unique_ptr
	* hir/rust-ast-lower-type.cc (ASTLoweringType::visit): update to use unique_ptr
	* parse/rust-parse-impl.h (Parser::parse_type): reuse the existing unique_ptr instead
	(Parser::parse_type_no_bounds): likewise
	(Parser::parse_pattern): likewise
	* resolve/rust-ast-resolve-type.cc (ResolveType::visit): its a unique_ptr now
	* rust-session-manager.cc (Session::compile_crate): call desugar
	* ast/rust-desugar-apit.cc: New file.
	* ast/rust-desugar-apit.h: New file.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-2015.rs: fully supported now
	* rust/compile/nr2/exclude: nr2 cant handle some of these
	* rust/compile/issue-1487.rs: New test.
	* rust/compile/issue-3454.rs: New test.
	* rust/execute/torture/impl_desugar-2.rs: New test.
	* rust/execute/torture/impl_desugar.rs: New test.
	* rust/execute/torture/impl_trait1.rs: New test.
	* rust/execute/torture/impl_trait2.rs: New test.
	* rust/execute/torture/impl_trait3.rs: New test.
	* rust/execute/torture/impl_trait4.rs: New test.
	* rust/execute/torture/issue-1482.rs: New test.

Signed-off-by: Philip Herron <[email protected]>
gcc/rust/ChangeLog:

	* resolve/rust-ast-resolve-item.cc
	(ResolveItem::visit): Use the return values of
	CanonicalPath::inherent_impl_seg and
	CanonicalPath::trait_impl_projection_seg more directly.
	* util/rust-canonical-path.h
	(CanonicalPath::trait_impl_projection_seg): Append "<impl "
	instead of "<" to the beginning of the returned path segment.
	(CanonicalPath::inherent_impl_seg): Likewise.

Signed-off-by: Owen Avery <[email protected]>
gcc/rust/ChangeLog:

	* backend/rust-compile-pattern.cc
	(CompilePatternCheckExpr::visit): Fix GENERIC generation in
	light of enum layout changes since this code was written.
	(CompilePatternBindings::handle_struct_pattern_ident_pat):
	Delegate handling of child patterns to another
	CompilePatternBindings::Compile call.
	(CompilePatternBindings::make_struct_access): Make field name
	parameter const qualified.
	* backend/rust-compile-pattern.h
	(CompilePatternBindings::make_struct_access): Likewise.

gcc/testsuite/ChangeLog:

	* rust/execute/torture/struct-pattern-match.rs: New test.

Signed-off-by: Owen Avery <[email protected]>
gcc/rust/ChangeLog:

	* ast/rust-ast-visitor.cc
	(DefaultASTVisitor::visit): Make call to EnumItem visitor from
	EnumItem derived class visitors non-virtual.
	* ast/rust-collect-lang-items.cc
	(CollectLangItems::visit): Handle visitation of classes derived
	from EnumItem.
	* ast/rust-collect-lang-items.h
	(CollectLangItems::visit): Likewise.
	* resolve/rust-toplevel-name-resolver-2.0.cc
	(TopLevel::visit): Call DefaultResolver::visit on EnumItem
	instances.

Signed-off-by: Owen Avery <[email protected]>
…osition

When using impl traits in argument position (APIT), they are desugared into generics,
and supplying explicit generic arguments is not allowed. This commit adds the error
diagnostic E0632 for attempting to pass generic arguments to impl traits, completing
the implementation of the APIT feature.

gcc/rust/ChangeLog:

	* ast/rust-desugar-apit.cc: track if this is a impl-trait generic
	* ast/rust-item.h (class TypeParam): add field to track if from impl trait
	* hir/rust-ast-lower-type.cc (ASTLowerGenericParam::visit): likewise
	* hir/tree/rust-hir-item.cc (TypeParam::TypeParam): upate hir as well
	(TypeParam::operator=): likewise
	* hir/tree/rust-hir-item.h (class TypeParam): likewise
	* typecheck/rust-tyty-subst.cc (SubstitutionParamMapping::get_generic_param): add error
	* typecheck/rust-tyty-subst.h: add const getter for the associated TypeParm

gcc/testsuite/ChangeLog:

	* rust/compile/nr2/exclude: nr2 cant handle this
	* rust/compile/impl_trait_generic_arg.rs: New test.

Signed-off-by: Philip Herron <[email protected]>
Empty loops have no body which means this is a NULL_TREE during const
evaluation which needs a check. Fixes Rust-GCC Rust-GCC#3618.

gcc/rust/ChangeLog:

	* backend/rust-constexpr.cc (eval_constant_expression):  Check if t is a NULL_TREE

gcc/testsuite/ChangeLog:

	* rust/compile/issue-3618.rs: Test empty loops error properly.

Signed-off-by: Tom Schollenberger <[email protected]>
gcc/rust/ChangeLog:

	* ast/rust-ast-collector.cc (TokenCollector::visit): Implement for InlineAsm.
	* ast/rust-ast-full-decls.h (enum class): Move InlineAsmOption enum inside InlineAsm.
	* ast/rust-expr.h (enum class): Likewise.
	(class InlineAsm): Likewise.
	* expand/rust-macro-builtins-asm.cc (check_and_set): Likewise.
	(parse_options): Likewise.
	* expand/rust-macro-builtins-asm.h (check_and_set): Likewise.
	* hir/tree/rust-hir-expr.cc (InlineAsm::InlineAsm): Likewise.
	* hir/tree/rust-hir-expr.h: Likewise.
	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
gcc/rust/ChangeLog:

	* ast/rust-path.cc
	(TypePath::make_debug_string): Add definition.
	* ast/rust-path.h
	(TypePath::make_debug_string): Add declaration.
	* resolve/rust-default-resolver.cc
	(DefaultResolver::visit): Adjust InherentImpl and TraitImpl
	visitors to better handle associated item scope.
	* resolve/rust-default-resolver.h
	(DefaultResolver::maybe_insert_big_self): Add.
	* resolve/rust-late-name-resolver-2.0.cc
	(Late::visit): Adjust type path resolution errors.
	* resolve/rust-rib.h
	(Rib::Kind): Add Generics kind.
	* resolve/rust-toplevel-name-resolver-2.0.cc
	(TopLevel::visit): Remove InherentImpl and TraitImpl visitor
	overrides.
	(TopLevel::maybe_insert_big_self): Add override in order to add
	a definition of 'Self'.
	* resolve/rust-toplevel-name-resolver-2.0.h
	(TopLevel::visit): Remove InherentImpl and TraitImpl visitor
	overrides.
	(TopLevel::maybe_insert_big_self): Add override.

gcc/testsuite/ChangeLog:

	* rust/compile/nr2/exclude: Remove entries.

Signed-off-by: Owen Avery <[email protected]>
Since r14-6076, the LANG_HOOKS_COMMON_ATTRIBUTE_TABLE should not be used and
LANG_HOOKS_ATTRIBUTE_TABLE replaces it.

Add the "cold" attribute to fix PR120018 (and the matching "hot" attribute).

Replace some gcc_assert() by explicit warnings (same as D frontend).

Add some clang-format off/on comment around code that's not correctly
formatted.

gcc/rust/ChangeLog:
	PR rust/120018

	* rust-attribs.cc (handle_noreturn_attribute): Reindent declaration.
	(handle_leaf_attribute): Likewise.
	(handle_const_attribute): Likewise.
	(handle_malloc_attribute): Likewise.
	(handle_pure_attribute): Likewise.
	(handle_novops_attribute): Likewise.
	(handle_nonnull_attribute): Likewise.
	(handle_nothrow_attribute): Likewise.
	(handle_type_generic_attribute): Likewise.
	(handle_transaction_pure_attribute): Likewise.
	(handle_returns_twice_attribute): Likewise.
	(handle_fnspec_attribute): Likewise.
	(handle_omp_declare_simd_attribute): Likewise.
	(handle_cold_attribute): New.
	(handle_hot_attribute): New.
	(attribute_spec::exclusions attr_cold_hot_exclusions): New.
	(grs_langhook_common_attributes): Make it static.
	(grs_langhook_common_attribute_table): New.
	(grs_langhook_gnu_attributes): New.
	(grs_langhook_gnu_attribute_table): New.
	(handle_malloc_attribute): Make it static.
	(handle_fnspec_attribute): Likewise.
	(handle_pure_attribute): Replace gcc_assert by explicit warning.
	(handle_novops_attribute): Likewise.
	(handle_nothrow_attribute): Likewise.
	(handle_returns_twice_attribute): Likewise.
	(handle_omp_declare_simd_attribute): Likewise and make it static.
	* rust-lang.cc (grs_langhook_gnu_attribute_table): New.
	(grs_langhook_common_attribute_table): Adjust type to new hook.
	(LANG_HOOKS_COMMON_ATTRIBUTE_TABLE): Remove.
	(LANG_HOOKS_ATTRIBUTE_TABLE): New.

Signed-off-by: Marc Poulhiès <[email protected]>
This patch ensuers we reuse the Builder for new type to
ensure we create a new type from scratch ensuring consistent
new node-ids.

gcc/rust/ChangeLog:

	* expand/rust-derive-default.cc (DeriveDefault::visit_struct): use builder
	(DeriveDefault::visit_tuple): likewise
	* expand/rust-derive-eq.cc (DeriveEq::visit_tuple): likewise
	(DeriveEq::visit_struct): likewise
	(DeriveEq::visit_enum): likewise
	(DeriveEq::visit_union): likewise

gcc/testsuite/ChangeLog:

	* rust/compile/nr2/exclude: these are fixed now

Signed-off-by: Philip Herron <[email protected]>
gcc/rust/ChangeLog:

	* checks/errors/borrowck/rust-bir-builder-internal.h: Include
	"rust-immutable-name-resolution-context.h" and "options.h".
	(AbstractBuilder::resolve_label): Use the 2.0 name resolver when
	it's enabled.
	(AbstractBuilder::resolve_variable): Likewise.
	(AbstractBuilder::resolve_variable_or_fn): Likewise.

Signed-off-by: Owen Avery <[email protected]>
gcc/rust/ChangeLog:

	* hir/rust-ast-lower-item.cc
	(ASTLoweringItem::visit): Keep going after a duplicate field is
	found.

gcc/testsuite/ChangeLog:

	* rust/execute/same_field_name.rs: Move to...
	* rust/compile/same_field_name.rs: ...here and adjust expected
	errors.

Signed-off-by: Owen Avery <[email protected]>
gcc/rust/ChangeLog:

	* parse/rust-parse-impl.h
	(Parser::parse_attr_input): Handle more delimeter tokens and the
	END_OF_FILE token.
	(Parser::skip_after_end_attribute): Handle the END_OF_FILE
	token.

gcc/testsuite/ChangeLog:

	* rust/compile/macros/mbe/meta-param.rs: New test.

Signed-off-by: Owen Avery <[email protected]>
gcc/rust/ChangeLog:

	* Make-lang.in (GRS_OBJS): Remove rust-macro.o.
	* ast/rust-macro.cc: Removed.

Signed-off-by: Marc Poulhiès <[email protected]>
It changes declaration and switch case indentation to follow GNU coding
style.

gcc/rust/ChangeLog:

	* ast/rust-ast-builder-type.cc (ASTTypeBuilder::visit): Reindent.
	* ast/rust-ast-builder.cc (Builder::new_generic_args): Likewise.
	* ast/rust-ast-collector.cc (TokenCollector::visit): Likewise.
	* ast/rust-ast-dump.h (debug): Likewise.
	* ast/rust-ast-formatting.h (indent_spaces): Likewise.
	(get_string_in_delims): Likewise.
	(get_mode_dump_desc): Likewise.
	(append_attributes): Likewise.
	(unquote_string): Likewise.
	* ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Likewise.
	* ast/rust-ast.cc (Attribute::get_traits_to_derive): Likewise.
	(UseTreeGlob::as_string): Likewise.
	(UseTreeList::as_string): Likewise.
	(AttributeParser::parse_path_meta_item): Likewise.
	(FormatArgs::set_outer_attrs): Likewise.
	* ast/rust-ast.h (operator<<): Likewise.
	* ast/rust-cond-compilation.h: Likewise.
	* ast/rust-desugar-apit.cc: Likewise.
	* ast/rust-fmt.h (collect_pieces): Likewise.
	(clone_pieces): Likewise.
	* ast/rust-pattern.h (tokenid_to_rangekind): Likewise.
	* backend/rust-compile-context.cc (Context::type_hasher): Likewise.
	* backend/rust-compile-expr.cc (CompileExpr::visit): Likewise.
	* backend/rust-compile-intrinsic.cc (get_identifier): 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.
	(prefetch_data_handler): Likewise.
	(atomic_store_handler_inner): Likewise.
	(atomic_load_handler_inner): Likewise.
	(unchecked_op_inner): Likewise.
	(copy_handler_inner): Likewise.
	(expect_handler_inner): Likewise.
	(try_handler_inner): Likewise.
	* backend/rust-compile-pattern.cc (compile_range_pattern_bound): Likewise.
	(CompilePatternCheckExpr::visit): Likewise.
	(CompilePatternBindings::visit): Likewise.
	(CompilePatternLet::visit): Likewise.
	* backend/rust-compile-var-decl.h: Likewise.
	* backend/rust-constexpr.cc (verify_constant): Likewise.
	(find_array_ctor_elt): Likewise.
	(array_index_cmp): Likewise.
	(potential_constant_expression_1): Likewise.
	(unshare_constructor): Likewise.
	(maybe_save_constexpr_fundef): Likewise.
	(returns): Likewise.
	(breaks): Likewise.
	(continues): Likewise.
	(switches): Likewise.
	(constant_value_1): Likewise.
	(decl_constant_value): Likewise.
	(non_const_var_error): Likewise.
	(eval_constant_expression): Likewise.
	(constexpr_fn_retval): Likewise.
	(eval_store_expression): Likewise.
	(eval_call_expression): Likewise.
	(eval_binary_expression): Likewise.
	(get_function_named_in_call): Likewise.
	(eval_statement_list): Likewise.
	(extract_string_elt): Likewise.
	(eval_conditional_expression): Likewise.
	(eval_bit_field_ref): Likewise.
	(eval_loop_expr): Likewise.
	(eval_switch_expr): Likewise.
	(eval_unary_expression): Likewise.
	(get_or_insert_ctor_field): Likewise.
	(eval_and_check_array_index): Likewise.
	* backend/rust-constexpr.h (maybe_save_constexpr_fundef): Likewise.
	* backend/rust-mangle-v0.cc (v0_path): Likewise.
	(v0_complex_type_prefix): Likewise.
	* backend/rust-mangle.h (legacy_mangle_item): Likewise.
	(v0_mangle_item): Likewise.
	* backend/rust-tree.cc (convert_to_void): Likewise.
	(find_parameter_packs_r): Likewise.
	(rs_tree_equal): Likewise.
	(publicly_uniquely_derived_p): Likewise.
	(instantiation_dependent_expression_p): Likewise.
	(type_has_nontrivial_copy_init): Likewise.
	(is_normal_capture_proxy): Likewise.
	(is_bitfield_expr_with_lowered_type): Likewise.
	(undeduced_auto_decl): Likewise.
	(require_deduced_type): Likewise.
	(gt_pch_nx): Likewise.
	(lvalue_kind): Likewise.
	* backend/rust-tree.h (LANG_DECL_MIN_CHECK): Likewise.
	(LANG_DECL_FN_CHECK): Likewise.
	(LANG_DECL_NS_CHECK): Likewise.
	(LANG_DECL_PARM_CHECK): Likewise.
	(LANG_DECL_DECOMP_CHECK): Likewise.
	(resort_type_member_vec): Likewise.
	(convert_to_void): Likewise.
	(mark_discarded_use): Likewise.
	(mark_exp_read): Likewise.
	(mark_use): Likewise.
	(mark_rvalue_use): Likewise.
	(mark_lvalue_use): Likewise.
	(mark_lvalue_use_nonread): Likewise.
	(convert_from_reference): Likewise.
	(maybe_warn_nodiscard): Likewise.
	(expr_loc_or_loc): Likewise.
	(expr_loc_or_input_loc): Likewise.
	(get_fndecl_from_callee): Likewise.
	(pointer_offset_expression): Likewise.
	(is_empty_class): Likewise.
	(is_really_empty_class): Likewise.
	(rs_type_quals): Likewise.
	(init_modules): Likewise.
	(lookup_add): Likewise.
	(ovl_make): Likewise.
	(struct c_fileinfo): Likewise.
	(get_fileinfo): Likewise.
	(cxx_make_type): Likewise.
	(build_cplus_array_type): Likewise.
	(comptypes): Likewise.
	(rs_build_qualified_type_real): Likewise.
	(vector_targets_convertible_p): Likewise.
	(get_class_binding_direct): Likewise.
	(lang_check_failed): Likewise.
	(check_for_uninitialized_const_var): Likewise.
	(cp_fold_maybe_rvalue): Likewise.
	(fold_offsetof): Likewise.
	(fold_non_dependent_expr): Likewise.
	(in_immediate_context): Likewise.
	(cxx_mark_addressable): Likewise.
	(decl_constant_value): Likewise.
	(is_class_type): Likewise.
	(fold_builtin_is_pointer_inverconvertible_with_class): Likewise.
	(c_common_type_for_mode): Likewise.
	(next_common_initial_seqence): Likewise.
	(fold_builtin_is_corresponding_member): Likewise.
	(maybe_constant_value): Likewise.
	(rs_walk_subtrees): Likewise.
	(make_tree_vector): Likewise.
	(release_tree_vector): Likewise.
	(location_of): Likewise.
	(maybe_constant_init): Likewise.
	(explain_invalid_constexpr_fn): Likewise.
	(literal_type_p): Likewise.
	(maybe_constexpr_fn): Likewise.
	(fold_non_dependent_init): Likewise.
	* checks/errors/borrowck/polonius/rust-polonius.h (polonius_run): Likewise.
	(FFIVector__new): Likewise.
	(FFIVector__new_vec_pair): Likewise.
	(FFIVector__new_vec_triple): Likewise.
	(FFIVector__push): Likewise.
	(FFIVector__push_vec_triple): Likewise.
	* checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
	(ExprStmtBuilder::visit): Likewise.
	* checks/errors/borrowck/rust-bir-builder-pattern.cc
	(PatternBindingBuilder::visit): Likewise.
	* checks/errors/borrowck/rust-bir-dump.cc (Dump::visit): Likewise.
	* checks/errors/borrowck/rust-bir-fact-collector.h (points): Likewise.
	* checks/errors/borrowck/rust-bir-place.h: Likewise.
	* checks/errors/borrowck/rust-bir-visitor.h: Likewise.
	* checks/errors/privacy/rust-privacy-check.cc (saw_errors): Likewise.
	* checks/errors/privacy/rust-privacy-ctx.h (rust_privacy_ctx_test): Likewise.
	* checks/errors/privacy/rust-privacy-reporter.cc
	(PrivacyReporter::check_for_privacy_violation): Likewise.
	(PrivacyReporter::check_base_type_privacy): Likewise.
	(PrivacyReporter::visit): Likewise.
	* checks/errors/privacy/rust-reachability.cc (ReachabilityVisitor::visit): Likewise.
	* checks/errors/privacy/rust-visibility-resolver.cc
	(VisibilityResolver::resolve_visibility): Likewise.
	* checks/errors/rust-hir-pattern-analysis.cc (Constructor::is_covered_by): Likewise.
	(PlaceInfo::specialize): Likewise.
	(WitnessPat::to_string): Likewise.
	(WitnessMatrix::apply_constructor): Likewise.
	(lower_pattern): Likewise.
	(lower_tuple_pattern): Likewise.
	(lower_struct_pattern): Likewise.
	* checks/errors/rust-hir-pattern-analysis.h (check_match_usefulness): Likewise.
	* expand/rust-cfg-strip.cc (CfgStrip::maybe_strip_generic_args): Likewise.
	* expand/rust-derive-eq.cc (DeriveEq::visit_enum): Likewise.
	* expand/rust-derive.cc: Likewise.
	* expand/rust-expand-format-args.cc (expand_format_args): Likewise.
	* expand/rust-expand-visitor.h (is_derive): Likewise.
	(is_builtin): Likewise.
	* expand/rust-macro-builtins-asm.cc (expand_inline_asm_strings): Likewise.
	* expand/rust-macro-builtins-asm.h (parse_asm): Likewise.
	(check_identifier): Likewise.
	(check_and_set): Likewise.
	(parse_label): Likewise.
	(parse_llvm_outputs): Likewise.
	(parse_llvm_inputs): Likewise.
	(parse_llvm_clobbers): Likewise.
	(parse_llvm_options): Likewise.
	* expand/rust-macro-builtins-helpers.h (make_macro_path_str): Likewise.
	(make_token): Likewise.
	(make_string): Likewise.
	(macro_end_token): Likewise.
	(parse_single_string_literal): Likewise.
	(source_relative_path): Likewise.
	(load_file_bytes): Likewise.
	* expand/rust-macro-expand.cc (MacroExpander::match_fragment): Likewise.
	(MacroExpander::match_matcher): Likewise.
	(MacroExpander::match_n_matches): Likewise.
	* expand/rust-macro-substitute-ctx.cc (SubstituteCtx::substitute_token): Likewise.
	* expand/rust-proc-macro.h (load_macros): Likewise.
	(generate_proc_macro_decls_symbol): Likewise.
	* hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_generic_args): Likewise.
	(ASTLoweringBase::lower_range_pattern_bound): Likewise.
	* hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Likewise.
	* hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Likewise.
	* hir/rust-ast-lower.h (struct_field_name_exists): Likewise.
	(translate_visibility): Likewise.
	* hir/rust-hir-dump.cc (Dump::visit): Likewise.
	* hir/rust-hir-dump.h (debug): Likewise.
	* hir/tree/rust-hir.cc (UseTreeGlob::as_string): Likewise.
	(UseTreeList::as_string): Likewise.
	* lex/rust-lex.cc (Lexer::parse_escape): Likewise.
	(Lexer::parse_utf8_escape): Likewise.
	* lex/rust-lex.h (rust_input_source_test): Likewise.
	* lex/rust-token.cc (RS_TOKEN_KEYWORD_2015): Likewise.
	* lex/rust-token.h (get_token_description): Likewise.
	(token_id_to_str): Likewise.
	(token_id_is_keyword): Likewise.
	(token_id_keyword_string): Likewise.
	(get_type_hint_string): Likewise.
	(nfc_normalize_token_string): Likewise.
	* metadata/rust-export-metadata.cc (PublicInterface::write_to_path): Likewise.
	* metadata/rust-import-archive.cc: Likewise.
	* metadata/rust-imports.h (add_search_path): Likewise.
	* parse/rust-cfg-parser.h (parse_cfg_option): Likewise.
	(rust_cfg_parser_test): Likewise.
	* parse/rust-parse-impl.h (Parser::skip_generics_right_angle): Likewise.
	(Parser::parse_attr_input): Likewise.
	(Parser::parse_macro_match): Likewise.
	(Parser::parse_visibility): Likewise.
	(Parser::parse_module): Likewise.
	(Parser::parse_use_tree): Likewise.
	(Parser::parse_generic_param): Likewise.
	(Parser::parse_struct): Likewise.
	(Parser::parse_enum_item): Likewise.
	(Parser::parse_inherent_impl_item): Likewise.
	(Parser::parse_external_item): Likewise.
	(Parser::parse_generic_arg): Likewise.
	(Parser::parse_type_path_segment): Likewise.
	(Parser::parse_expr_stmt): Likewise.
	(Parser::parse_if_expr): Likewise.
	(Parser::parse_if_let_expr): Likewise.
	(Parser::parse_type): Likewise.
	(Parser::parse_for_prefixed_type): Likewise.
	(Parser::parse_slice_or_array_type): Likewise.
	(Parser::parse_type_no_bounds): Likewise.
	(Parser::parse_range_pattern_bound): Likewise.
	(Parser::parse_pattern_no_alt): Likewise.
	(Parser::parse_grouped_or_tuple_pattern): Likewise.
	(Parser::parse_ident_leading_pattern): Likewise.
	(Parser::parse_tuple_struct_items): Likewise.
	(Parser::parse_stmt_or_expr): Likewise.
	(Parser::parse_struct_expr_field): Likewise.
	(Parser::null_denotation): Likewise.
	(Parser::left_denotation): Likewise.
	(Parser::parse_closure_expr_pratt): Likewise.
	* parse/rust-parse.cc (peculiar_fragment_match_compatible): Likewise.
	(is_match_compatible): Likewise.
	* parse/rust-parse.h (extract_module_path): Likewise.
	(is_match_compatible): Likewise.
	* resolve/rust-ast-resolve-expr.cc (translate_operand): Likewise.
	* resolve/rust-ast-resolve-item.cc (flatten_glob): Likewise.
	(flatten_rebind): Likewise.
	(flatten_list): Likewise.
	(flatten): Likewise.
	* resolve/rust-ast-resolve-item.h (rust_simple_path_resolve_test): Likewise.
	* resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Likewise.
	(resolve_range_pattern_bound): Likewise.
	* resolve/rust-ast-resolve-type.cc (ResolveRelativeTypePath::go): Likewise.
	(ResolveTypeToCanonicalPath::visit): Likewise.
	* resolve/rust-ast-resolve.cc (saw_errors): Likewise.
	* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_rebind_import): Likewise.
	* resolve/rust-ice-finalizer.h (funny_ice_text_finalizer): Likewise.
	* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Likewise.
	* resolve/rust-toplevel-name-resolver-2.0.cc (flatten_glob): Likewise.
	* rust-backend.h (init): Likewise.
	(debug): Likewise.
	(get_identifier_node): Likewise.
	(wchar_type): Likewise.
	(get_pointer_size): Likewise.
	(raw_str_type): Likewise.
	(integer_type): Likewise.
	(float_type): Likewise.
	(pointer_type): Likewise.
	(reference_type): Likewise.
	(immutable_type): Likewise.
	(function_type): Likewise.
	(function_type_variadic): Likewise.
	(function_ptr_type): Likewise.
	(struct_type): Likewise.
	(union_type): Likewise.
	(array_type): Likewise.
	(named_type): Likewise.
	(type_field_offset): Likewise.
	(var_expression): Likewise.
	(float_constant_expression): Likewise.
	(string_constant_expression): Likewise.
	(char_constant_expression): Likewise.
	(wchar_constant_expression): Likewise.
	(boolean_constant_expression): Likewise.
	(convert_expression): Likewise.
	(struct_field_expression): Likewise.
	(compound_expression): Likewise.
	(conditional_expression): Likewise.
	(negation_expression): Likewise.
	(arithmetic_or_logical_expression): Likewise.
	(arithmetic_or_logical_expression_checked): Likewise.
	(comparison_expression): Likewise.
	(lazy_boolean_expression): Likewise.
	(constructor_expression): Likewise.
	(array_constructor_expression): Likewise.
	(array_initializer): Likewise.
	(array_index_expression): Likewise.
	(call_expression): Likewise.
	(init_statement): Likewise.
	(assignment_statement): Likewise.
	(return_statement): Likewise.
	(if_statement): Likewise.
	(loop_expression): Likewise.
	(exit_expression): Likewise.
	(statement_list): Likewise.
	(exception_handler_statement): Likewise.
	(block): Likewise.
	(block_add_statements): Likewise.
	(global_variable): Likewise.
	(global_variable_set_init): Likewise.
	(local_variable): Likewise.
	(parameter_variable): Likewise.
	(static_chain_variable): Likewise.
	(temporary_variable): Likewise.
	(label): Likewise.
	(function): Likewise.
	(function_defer_statement): Likewise.
	(function_set_parameters): Likewise.
	(write_global_definitions): Likewise.
	(fill_in_fields): Likewise.
	* rust-diagnostics.cc (expand_format): Likewise.
	(expand_message): Likewise.
	(va_constructor): Likewise.
	* rust-diagnostics.h (RUST_ATTRIBUTE_GCC_DIAG): Likewise.
	(rust_open_quote): Likewise.
	(rust_close_quote): Likewise.
	(rust_debug_loc): Likewise.
	* rust-gcc.cc (non_zero_size_type): Likewise.
	* rust-object-export.h (rust_field_alignment): Likewise.
	(rust_read_export_data): Likewise.
	(rust_write_export_data): Likewise.
	* rust-session-manager.cc (saw_errors): Likewise.
	(rust_get_linemap): Likewise.
	(validate_crate_name): Likewise.
	(Session::load_extern_crate): Likewise.
	* rust-session-manager.h (rust_crate_name_validation_test): Likewise.
	* rust-system.h (rust_preserve_from_gc): Likewise.
	(rust_localize_identifier): Likewise.
	* rust-target.h (rust_add_target_info): Likewise.
	* typecheck/rust-autoderef.cc:
	* typecheck/rust-casts.cc (TypeCastRules::cast_rules): Likewise.
	* typecheck/rust-coercion.cc (TypeCoercionRules::do_coercion): Likewise.
	(TypeCoercionRules::coerce_unsafe_ptr): Likewise.
	(TypeCoercionRules::coerce_borrowed_pointer): Likewise.
	* typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_trait): Likewise.
	(TraitItemReference::is_object_safe): Likewise.
	* typecheck/rust-hir-type-check-base.cc (TypeCheckBase::resolve_literal): Likewise.
	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
	(typecheck_inline_asm_operand): Likewise.
	* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): Likewise.
	(TypeCheckImplItemWithTrait::visit): Likewise.
	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
	* typecheck/rust-hir-type-check-struct.cc (TypeCheckStructExpr::visit): Likewise.
	* typecheck/rust-hir-type-check-type.cc
	(TypeResolveGenericParam::apply_trait_bounds): Likewise.
	(ResolveWhereClauseItem::visit): Likewise.
	* typecheck/rust-hir-type-check.cc (saw_errors): Likewise.
	(TraitItemReference::get_type_from_fn): Likewise.
	* typecheck/rust-type-util.h (query_type): Likewise.
	(types_compatable): Likewise.
	(unify_site): Likewise.
	(unify_site_and): Likewise.
	(coercion_site): Likewise.
	(try_coercion): Likewise.
	(cast_site): Likewise.
	* typecheck/rust-tyty-bounds.cc:
	* typecheck/rust-tyty-call.cc (TypeCheckCallExpr::visit): Likewise.
	* typecheck/rust-tyty-cmp.h:
	* typecheck/rust-tyty-variance-analysis.h (query_field_regions): Likewise.
	* typecheck/rust-tyty.cc (BaseType::is_unit): Likewise.
	(BaseType::has_substitutions_defined): Likewise.
	(BaseType::needs_generic_substitutions): Likewise.
	(BaseType::get_subst_argument_mappings): Likewise.
	(InferType::default_type): Likewise.
	(InferType::apply_primitive_type_hint): Likewise.
	* typecheck/rust-tyty.h (is_primitive_type_kind): Likewise.
	* typecheck/rust-unify.cc (UnifyRules::expect_inference_variable): Likewise.
	(UnifyRules::expect_adt): Likewise.
	(UnifyRules::expect_str): Likewise.
	(UnifyRules::expect_reference): Likewise.
	(UnifyRules::expect_pointer): Likewise.
	(UnifyRules::expect_param): Likewise.
	(UnifyRules::expect_array): Likewise.
	(UnifyRules::expect_slice): Likewise.
	(UnifyRules::expect_fndef): Likewise.
	(UnifyRules::expect_fnptr): Likewise.
	(UnifyRules::expect_tuple): Likewise.
	(UnifyRules::expect_bool): Likewise.
	(UnifyRules::expect_char): Likewise.
	(UnifyRules::expect_int): Likewise.
	(UnifyRules::expect_uint): Likewise.
	(UnifyRules::expect_float): Likewise.
	(UnifyRules::expect_isize): Likewise.
	(UnifyRules::expect_usize): Likewise.
	(UnifyRules::expect_never): Likewise.
	(UnifyRules::expect_placeholder): Likewise.
	(UnifyRules::expect_projection): Likewise.
	(UnifyRules::expect_dyn): Likewise.
	(UnifyRules::expect_closure): Likewise.
	(UnifyRules::expect_opaque): Likewise.
	* util/rust-abi.h (get_abi_from_string): Likewise.
	(get_string_from_abi): Likewise.
	* util/rust-attributes.cc (check_doc_attribute): Likewise.
	* util/rust-base62.h (base62_integer): Likewise.
	* util/rust-dir-owner.h (get_file_subdir): Likewise.
	* util/rust-edition.h (get_rust_edition): Likewise.
	* util/rust-punycode.h (encode_punycode): Likewise.
	(rust_punycode_encode_test): Likewise.
	* util/rust-token-converter.cc (convert): Likewise.
	(from_tokenstream): Likewise.
	* util/rust-token-converter.h (convert): Likewise.
	(convert_literal): Likewise.
	* util/rust-unicode.h (is_alphabetic): Likewise.
	(is_ascii_only): Likewise.
	(is_numeric): Likewise.
	(is_nfc_qc_no): Likewise.
	(is_nfc_qc_maybe): Likewise.
	(nfc_quick_check): Likewise.
	(rust_nfc_qc_test): Likewise.
	(rust_utf8_normalize_test): Likewise.
	(rust_utf8_property_test): Likewise.
	* util/rust-unwrap-segment.h (unwrap_segment_node_id): Likewise.

libgrust/ChangeLog:

	* libproc_macro_internal/ffistring.h (FFIString__new): Likewise.
	(FFIString__drop): Likewise.
	* libproc_macro_internal/ident.h (Ident__new): Likewise.
	(Ident__new_raw): Likewise.
	(Ident__drop): Likewise.
	(Ident__clone): Likewise.
	* libproc_macro_internal/literal.h (Literal__from_string): Likewise.
	* libproc_macro_internal/proc_macro.h (bridge_is_available): Likewise.
	* libproc_macro_internal/tokenstream.h (TokenStream__new): Likewise.
	(TokenStream__with_capacity): Likewise.
	(TokenSream__push): Likewise.
	(TokenStream__from_string): Likewise.
	(TokenStream__clone): Likewise.
	(TokenStream__drop): Likewise.

Signed-off-by: Marc Poulhiès <[email protected]>
Config has been updated upstream to correctly indent declaration.

gcc/rust/ChangeLog:

	* rust-attribs.cc (handle_hot_attribute): Remove clang-format comment.

Signed-off-by: Marc Poulhiès <[email protected]>
gcc/rust/ChangeLog:

	* ast/rust-ast-visitor.cc
	(DefaultASTVisitor::visit): Only visit the path of an instance
	of Visibility if the instance has a path.
	* ast/rust-ast.h
	(SimplePath::SimplePath): Make sure constructors are explicit.
	* resolve/rust-early-name-resolver-2.0.cc
	(Early::visit_attributes): Pass entire paths to
	NameResolutionContext::resolve_path.
	(Early::visit): Likewise and avoid copying a path.
	* resolve/rust-forever-stack.hxx
	(ForeverStack::resolve_path): Assert that at least one path
	segment has been passed in.

Signed-off-by: Owen Avery <[email protected]>
This should be unnecessary, since even C++11 has implicit move.

gcc/rust/ChangeLog:

	* parse/rust-parse-impl.h (Parser::parse_expr_stmt): Avoid
	reference binding and remove std::move in return statements.

Signed-off-by: Owen Avery <[email protected]>
Undefined attribute macros have no proc macro definition, which results
in a failing `rust_assert`. This changes that assert to an if statement,
that returns early if there is no proc macro definition. Fixes Rust-GCC#3661.

gcc/rust/ChangeLog:

	* resolve/rust-early-name-resolver-2.0.cc (Early::visit_attributes): rust_assert to if

gcc/testsuite/ChangeLog:

	* rust/compile/issue-3661.rs: Test NR2 has expected behavior

Signed-off-by: Tom Schollenberger <[email protected]>
gcc/testsuite/ChangeLog:

	* rust/execute/torture/builtin_abort.rs: Fix path to
	intrinsics::abort.

Signed-off-by: Owen Avery <[email protected]>
This is similar to 9faba02, but it
applies to execute tests.

gcc/testsuite/ChangeLog:

	* rust/execute/torture/for-loop1.rs: Adjust paths.
	* rust/execute/torture/for-loop2.rs: Likewise.
	* rust/execute/torture/iter1.rs: Likewise.

Signed-off-by: Owen Avery <[email protected]>
philberty and others added 29 commits June 25, 2025 23:15
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 <[email protected]>
gcc/rust/ChangeLog:

	* resolve/rust-rib.h: Add missing switch cases.
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.
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.
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.
gcc/rust/ChangeLog:

	* ast/rust-ast-builder.cc (Builder::block): New function.
	(Builder::match_case): Likewise.
	* ast/rust-ast-builder.h: Declare them.
gcc/rust/ChangeLog:

	* expand/rust-derive-cmp-common.cc: New file.
	* expand/rust-derive-cmp-common.h: New file.
	* Make-lang.in: Compile them.
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.
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.
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.
gcc/rust/ChangeLog:

	* expand/rust-derive-ord.cc (is_last): Remove.
	(DeriveOrd::visit_tuple): Fix implementation.
gcc/rust/ChangeLog:

	* ast/rust-ast-builder.cc (Builder::discriminant_value): New function.
	* ast/rust-ast-builder.h: Declare it.
gcc/rust/ChangeLog:

	* expand/rust-derive-hash.cc (DeriveHash::visit_enum): Use new APIs.
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.
gcc/rust/ChangeLog:

	* ast/rust-ast-builder.h: Put `loc` member in public.
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.
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.
gcc/rust/ChangeLog:

	* expand/rust-derive-ord.cc: Finish implementation for enums.
	* expand/rust-derive-ord.h: Likewise.
gcc/rust/ChangeLog:

	* expand/rust-derive-ord.cc (DeriveOrd::make_cmp_arms): Fix condition.
gcc/rust/ChangeLog:

	* expand/rust-derive-ord.cc (DeriveOrd::cmp_call): Use references.
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.
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.
gcc/rust/ChangeLog:

	* expand/rust-derive.cc: Fix formatting after fork update.
gcc/rust/ChangeLog:

	* hir/rust-hir-dump.cc: Change pattern dumps to use visit_field.

Signed-off-by: Yap Zhi Heng <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
gcc/rust/ChangeLog:

	* backend/rust-compile-pattern.cc: Add support for IdentifierPattern's
		subpattern under CompilePatternBindings.

Signed-off-by: Yap Zhi Heng <[email protected]>
gcc/rust/ChangeLog:

	* resolve/rust-late-name-resolver-2.0.cc (Late::visit(IdentifierPattern)):
	Remove redundant subpattern check.

Signed-off-by: Yap Zhi Heng <[email protected]>
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.

10 participants