aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/rust
AgeCommit message (Collapse)AuthorFilesLines
2025-12-03gccrs: Add missing test for lang item feature gatePierre-Emmanuel Patry1-0/+2
We recently modified all tests with lang items to add the lang feature gate switch but we did not introduce any test to check that a proper error message is printed when this switch is not used. gcc/testsuite/ChangeLog: * rust/compile/lang_feature_gate.rs: New test. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-12-03gccrs: Improve feature handlingOwen Avery1-1/+1
This fixes a false positive with undefined features, improves the implementation of Feature::as_name, and configures the testsuite to check further stages of libcore compilation. gcc/rust/ChangeLog: * ast/rust-macro.h (MetaNameValueStr::get_name): New function. (MetaNameValueStr::get_value): Likewise. * checks/errors/feature/rust-feature-gate.cc (FeatureGate::visit): Tweak unknown feature detection. (FeatureGate::gate): Handle field rename. (FeatureGate::note_stability_attribute): New function definition. * checks/errors/feature/rust-feature-gate.h (FeatureGate::note_stability_attribute): New function declaration. (FeatureGate::Stability): New enum class. (FeatureGate::valid_features): Rename field to... (FeatureGate::valid_lang_features): ...here. (FeatureGate::valid_lib_features): New field. (FeatureGate::defined_lib_features): Likewise. * checks/errors/feature/rust-feature.cc (Feature::as_name): Improve implementation. gcc/testsuite/ChangeLog: * rust/core/core.exp: Change -frust-compile-until=astvalidation to -frust-compile-until=nameresolution. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-12-03gccrs: rust: Add `#![feature(lang_items)]` to tests.Raiki Tamura419-50/+513
gcc/testsuite/ChangeLog: * rust/borrowck/reference.rs: Add attributes. * rust/borrowck/tmp.rs: Likewise. * rust/compile/additional-trait-bounds1.rs: Likewise. * rust/compile/additional-trait-bounds2.rs: Likewise. * rust/compile/additional-trait-bounds2nr2.rs: Likewise. * rust/compile/auto_traits1.rs: Likewise. * rust/compile/auto_traits2.rs: Likewise. * rust/compile/bad-rpit1.rs: Likewise. * rust/compile/black_box.rs: Likewise. * rust/compile/bounds1.rs: Likewise. * rust/compile/box_syntax_feature_gate.rs: Likewise. * rust/compile/bug-with-default-generic.rs: Likewise. * rust/compile/canonical_paths1.rs: Likewise. * rust/compile/cast_generics.rs: Likewise. * rust/compile/closure_no_type_anno.rs: Likewise. * rust/compile/cmp1.rs: Likewise. * rust/compile/complex_qualified_path_in_expr.rs: Likewise. * rust/compile/const-issue1440.rs: Likewise. * rust/compile/const_generics_1.rs: Likewise. * rust/compile/const_generics_10.rs: Likewise. * rust/compile/const_generics_11.rs: Likewise. * rust/compile/const_generics_12.rs: Likewise. * rust/compile/const_generics_13.rs: Likewise. * rust/compile/const_generics_14.rs: Likewise. * rust/compile/const_generics_15.rs: Likewise. * rust/compile/const_generics_16.rs: Likewise. * rust/compile/const_generics_18.rs: Likewise. * rust/compile/const_generics_19.rs: Likewise. * rust/compile/const_generics_3.rs: Likewise. * rust/compile/const_generics_8.rs: Likewise. * rust/compile/const_generics_9.rs: Likewise. * rust/compile/derive-debug1.rs: Likewise. * rust/compile/derive-default1.rs: Likewise. * rust/compile/derive-eq-invalid.rs: Likewise. * rust/compile/derive-hash1.rs: Likewise. * rust/compile/derive-partialeq1.rs: Likewise. * rust/compile/derive_clone_enum1.rs: Likewise. * rust/compile/derive_clone_enum2.rs: Likewise. * rust/compile/derive_clone_enum3.rs: Likewise. * rust/compile/derive_macro1.rs: Likewise. * rust/compile/derive_macro3.rs: Likewise. * rust/compile/derive_macro4.rs: Likewise. * rust/compile/derive_macro6.rs: Likewise. * rust/compile/derive_partial_ord1.rs: Likewise. * rust/compile/expand_macro_qual_path_in_type.rs: Likewise. * rust/compile/expected_type_args2.rs: Likewise. * rust/compile/expected_type_args3.rs: Likewise. * rust/compile/extern_generics.rs: Likewise. * rust/compile/for-loop1.rs: Likewise. * rust/compile/for-loop2.rs: Likewise. * rust/compile/format_args_basic_expansion.rs: Likewise. * rust/compile/format_args_concat.rs: Likewise. * rust/compile/format_args_extra_comma.rs: Likewise. * rust/compile/generics1.rs: Likewise. * rust/compile/generics11.rs: Likewise. * rust/compile/generics12.rs: Likewise. * rust/compile/generics2.rs: Likewise. * rust/compile/generics3.rs: Likewise. * rust/compile/generics4.rs: Likewise. * rust/compile/generics6.rs: Likewise. * rust/compile/generics7.rs: Likewise. * rust/compile/generics8.rs: Likewise. * rust/compile/if_let_expr.rs: Likewise. * rust/compile/impl_fnptr.rs: Likewise. * rust/compile/impl_trait_diag.rs: Likewise. * rust/compile/impl_trait_generic_arg.rs: Likewise. * rust/compile/issue-1005.rs: Likewise. * rust/compile/issue-1019.rs: Likewise. * rust/compile/issue-1031.rs: Likewise. * rust/compile/issue-1034.rs: Likewise. * rust/compile/issue-1128.rs: Likewise. * rust/compile/issue-1129-2.rs: Likewise. * rust/compile/issue-1130.rs: Likewise. * rust/compile/issue-1131.rs: Likewise. * rust/compile/issue-1165.rs: Likewise. * rust/compile/issue-1173.rs: Likewise. * rust/compile/issue-1235.rs: Likewise. * rust/compile/issue-1237.rs: Likewise. * rust/compile/issue-1289.rs: Likewise. * rust/compile/issue-1383.rs: Likewise. * rust/compile/issue-1447.rs: Likewise. * rust/compile/issue-1483.rs: Likewise. * rust/compile/issue-1485.rs: Likewise. * rust/compile/issue-1487.rs: Likewise. * rust/compile/issue-1589.rs: Likewise. * rust/compile/issue-1725-1.rs: Likewise. * rust/compile/issue-1725-2.rs: Likewise. * rust/compile/issue-1786.rs: Likewise. * rust/compile/issue-1893.rs: Likewise. * rust/compile/issue-1901.rs: Likewise. * rust/compile/issue-1930.rs: Likewise. * rust/compile/issue-1981.rs: Likewise. * rust/compile/issue-2015.rs: Likewise. * rust/compile/issue-2019-1.rs: Likewise. * rust/compile/issue-2019-2.rs: Likewise. * rust/compile/issue-2019-3.rs: Likewise. * rust/compile/issue-2036.rs: Likewise. * rust/compile/issue-2037.rs: Likewise. * rust/compile/issue-2070.rs: Likewise. * rust/compile/issue-2105.rs: Likewise. * rust/compile/issue-2106.rs: Likewise. * rust/compile/issue-2135.rs: Likewise. * rust/compile/issue-2136-1.rs: Likewise. * rust/compile/issue-2136-2.rs: Likewise. * rust/compile/issue-2139.rs: Likewise. * rust/compile/issue-2142.rs: Likewise. * rust/compile/issue-2165.rs: Likewise. * rust/compile/issue-2166.rs: Likewise. * rust/compile/issue-2190-1.rs: Likewise. * rust/compile/issue-2190-2.rs: Likewise. * rust/compile/issue-2195.rs: Likewise. * rust/compile/issue-2238.rs: Likewise. * rust/compile/issue-2304.rs: Likewise. * rust/compile/issue-2323.rs: Likewise. * rust/compile/issue-2330.rs: Likewise. * rust/compile/issue-2369.rs: Likewise. * rust/compile/issue-2375.rs: Likewise. * rust/compile/issue-2478.rs: Likewise. * rust/compile/issue-2499.rs: Likewise. * rust/compile/issue-2723-1.rs: Likewise. * rust/compile/issue-2723-2.rs: Likewise. * rust/compile/issue-2725.rs: Likewise. * rust/compile/issue-2747.rs: Likewise. * rust/compile/issue-2772-1.rs: Likewise. * rust/compile/issue-2772-2.rs: Likewise. * rust/compile/issue-2775.rs: Likewise. * rust/compile/issue-2782.rs: Likewise. * rust/compile/issue-2907.rs: Likewise. * rust/compile/issue-2951.rs: Likewise. * rust/compile/issue-2953-1.rs: Likewise. * rust/compile/issue-2953-2.rs: Likewise. * rust/compile/issue-2954.rs: Likewise. * rust/compile/issue-2987.rs: Likewise. * rust/compile/issue-3009.rs: Likewise. * rust/compile/issue-3022.rs: Likewise. * rust/compile/issue-3030.rs: Likewise. * rust/compile/issue-3032-1.rs: Likewise. * rust/compile/issue-3032-2.rs: Likewise. * rust/compile/issue-3033.rs: Likewise. * rust/compile/issue-3035.rs: Likewise. * rust/compile/issue-3036.rs: Likewise. * rust/compile/issue-3045-1.rs: Likewise. * rust/compile/issue-3045-2.rs: Likewise. * rust/compile/issue-3144.rs: Likewise. * rust/compile/issue-3242.rs: Likewise. * rust/compile/issue-3304.rs: Likewise. * rust/compile/issue-3382.rs: Likewise. * rust/compile/issue-3402-1.rs: Likewise. * rust/compile/issue-3402-2.rs: Likewise. * rust/compile/issue-3403.rs: Likewise. * rust/compile/issue-3454.rs: Likewise. * rust/compile/issue-3551.rs: Likewise. * rust/compile/issue-3554-2.rs: Likewise. * rust/compile/issue-3599.rs: Likewise. * rust/compile/issue-3642.rs: Likewise. * rust/compile/issue-3711.rs: Likewise. * rust/compile/issue-3836.rs: Likewise. * rust/compile/issue-3898.rs: Likewise. * rust/compile/issue-3915.rs: Likewise. * rust/compile/issue-3916.rs: Likewise. * rust/compile/issue-3969.rs: Likewise. * rust/compile/issue-402.rs: Likewise. * rust/compile/issue-4090-1.rs: Likewise. * rust/compile/issue-4090-2.rs: Likewise. * rust/compile/issue-850.rs: Likewise. * rust/compile/issue-855.rs: Likewise. * rust/compile/issue-925.rs: Likewise. * rust/compile/iterators1.rs: Likewise. * rust/compile/macros/builtin/option_env1.rs: Likewise. * rust/compile/macros/builtin/option_env2.rs: Likewise. * rust/compile/macros/builtin/option_env3.rs: Likewise. * rust/compile/macros/mbe/macro-issue1400.rs: Likewise. * rust/compile/macros/mbe/macro-issue3708.rs: Likewise. * rust/compile/macros/mbe/macro-issue3709-2.rs: Likewise. * rust/compile/macros/mbe/macro20.rs: Likewise. * rust/compile/macros/mbe/macro23.rs: Likewise. * rust/compile/macros/mbe/macro40.rs: Likewise. * rust/compile/macros/mbe/macro49.rs: Likewise. * rust/compile/macros/mbe/macro54.rs: Likewise. * rust/compile/multiple_bindings1.rs: Likewise. * rust/compile/name_resolution2.rs: Likewise. * rust/compile/name_resolution4.rs: Likewise. * rust/compile/nested_generic.rs: Likewise. * rust/compile/parse_associated_type_as_generic_arg.rs: Likewise. * rust/compile/parse_associated_type_as_generic_arg2.rs: Likewise. * rust/compile/parse_associated_type_as_generic_arg3.rs: Likewise. * rust/compile/parse_closure_bind.rs: Likewise. * rust/compile/parse_complex_generic_application.rs: Likewise. * rust/compile/parse_complex_generic_application2.rs: Likewise. * rust/compile/path_as_generic_arg.rs: Likewise. * rust/compile/privacy4.rs: Likewise. * rust/compile/privacy6.rs: Likewise. * rust/compile/silly-order-bug.rs: Likewise. * rust/compile/sizeof-stray-infer-var-bug.rs: Likewise. * rust/compile/stmt_with_block_dot.rs: Likewise. * rust/compile/structural-eq-peq.rs: Likewise. * rust/compile/torture/associated_types1.rs: Likewise. * rust/compile/torture/forward_decl_5.rs: Likewise. * rust/compile/torture/generics1.rs: Likewise. * rust/compile/torture/generics10.rs: Likewise. * rust/compile/torture/generics11.rs: Likewise. * rust/compile/torture/generics12.rs: Likewise. * rust/compile/torture/generics13.rs: Likewise. * rust/compile/torture/generics14.rs: Likewise. * rust/compile/torture/generics15.rs: Likewise. * rust/compile/torture/generics16.rs: Likewise. * rust/compile/torture/generics17.rs: Likewise. * rust/compile/torture/generics18.rs: Likewise. * rust/compile/torture/generics19.rs: Likewise. * rust/compile/torture/generics2.rs: Likewise. * rust/compile/torture/generics20.rs: Likewise. * rust/compile/torture/generics21.rs: Likewise. * rust/compile/torture/generics22.rs: Likewise. * rust/compile/torture/generics23.rs: Likewise. * rust/compile/torture/generics24.rs: Likewise. * rust/compile/torture/generics25.rs: Likewise. * rust/compile/torture/generics26.rs: Likewise. * rust/compile/torture/generics27.rs: Likewise. * rust/compile/torture/generics28.rs: Likewise. * rust/compile/torture/generics29.rs: Likewise. * rust/compile/torture/generics3.rs: Likewise. * rust/compile/torture/generics30.rs: Likewise. * rust/compile/torture/generics31.rs: Likewise. * rust/compile/torture/generics32.rs: Likewise. * rust/compile/torture/generics4.rs: Likewise. * rust/compile/torture/generics5.rs: Likewise. * rust/compile/torture/generics6.rs: Likewise. * rust/compile/torture/generics7.rs: Likewise. * rust/compile/torture/generics8.rs: Likewise. * rust/compile/torture/generics9.rs: Likewise. * rust/compile/torture/intrinsics-2.rs: Likewise. * rust/compile/torture/intrinsics-4.rs: Likewise. * rust/compile/torture/intrinsics-5.rs: Likewise. * rust/compile/torture/intrinsics-6.rs: Likewise. * rust/compile/torture/intrinsics-7.rs: Likewise. * rust/compile/torture/intrinsics-8.rs: Likewise. * rust/compile/torture/issue-1024.rs: Likewise. * rust/compile/torture/issue-1075.rs: Likewise. * rust/compile/torture/issue-1432.rs: Likewise. * rust/compile/torture/issue-1555.rs: Likewise. * rust/compile/torture/issue-368.rs: Likewise. * rust/compile/torture/issue-808.rs: Likewise. * rust/compile/torture/issue-862.rs: Likewise. * rust/compile/torture/issue-893-2.rs: Likewise. * rust/compile/torture/issue-893.rs: Likewise. * rust/compile/torture/must_use2.rs: Likewise. * rust/compile/torture/nested_fn2.rs: Likewise. * rust/compile/torture/phantom_data.rs: Likewise. * rust/compile/torture/range-lang-item1.rs: Likewise. * rust/compile/torture/traits1.rs: Likewise. * rust/compile/torture/traits10.rs: Likewise. * rust/compile/torture/traits11.rs: Likewise. * rust/compile/torture/traits12.rs: Likewise. * rust/compile/torture/traits13.rs: Likewise. * rust/compile/torture/traits14.rs: Likewise. * rust/compile/torture/traits15.rs: Likewise. * rust/compile/torture/traits16.rs: Likewise. * rust/compile/torture/traits17.rs: Likewise. * rust/compile/torture/traits18.rs: Likewise. * rust/compile/torture/traits19.rs: Likewise. * rust/compile/torture/traits2.rs: Likewise. * rust/compile/torture/traits3.rs: Likewise. * rust/compile/torture/traits4.rs: Likewise. * rust/compile/torture/traits5.rs: Likewise. * rust/compile/torture/traits6.rs: Likewise. * rust/compile/torture/traits7.rs: Likewise. * rust/compile/torture/traits8.rs: Likewise. * rust/compile/torture/traits9.rs: Likewise. * rust/compile/torture/transmute-size-check-1.rs: Likewise. * rust/compile/torture/transmute1.rs: Likewise. * rust/compile/torture/uninit-intrinsic-1.rs: Likewise. * rust/compile/torture/utf8_identifiers.rs: Likewise. * rust/compile/traits1.rs: Likewise. * rust/compile/traits10.rs: Likewise. * rust/compile/traits11.rs: Likewise. * rust/compile/traits12.rs: Likewise. * rust/compile/traits2.rs: Likewise. * rust/compile/traits3.rs: Likewise. * rust/compile/traits4.rs: Likewise. * rust/compile/traits5.rs: Likewise. * rust/compile/traits6.rs: Likewise. * rust/compile/traits7.rs: Likewise. * rust/compile/traits8.rs: Likewise. * rust/compile/traits9.rs: Likewise. * rust/compile/try-expr1.rs: Likewise. * rust/compile/try-trait.rs: Likewise. * rust/compile/try_block1.rs: Likewise. * rust/compile/type-bindings1.rs: Likewise. * rust/compile/unconstrained_type_param.rs: Likewise. * rust/compile/unify-errors1.rs: Likewise. * rust/compile/unsafe10.rs: Likewise. * rust/compile/v0-mangle1.rs: Likewise. * rust/compile/v0-mangle2.rs: Likewise. * rust/compile/while_let1.rs: Likewise. * rust/execute/black_box.rs: Likewise. * rust/execute/torture/atomic_load.rs: Likewise. * rust/execute/torture/atomic_store.rs: Likewise. * rust/execute/torture/basic_partial_ord1.rs: Likewise. * rust/execute/torture/basic_partial_ord2.rs: Likewise. * rust/execute/torture/builtin_macro_option_env.rs: Likewise. * rust/execute/torture/closure1.rs: Likewise. * rust/execute/torture/closure2.rs: Likewise. * rust/execute/torture/closure3.rs: Likewise. * rust/execute/torture/closure4.rs: Likewise. * rust/execute/torture/coercion1.rs: Likewise. * rust/execute/torture/coercion2.rs: Likewise. * rust/execute/torture/coercion3.rs: Likewise. * rust/execute/torture/const-generics-1.rs: Likewise. * rust/execute/torture/const-generics-2.rs: Likewise. * rust/execute/torture/const-generics-3.rs: Likewise. * rust/execute/torture/const-generics-4.rs: Likewise. * rust/execute/torture/const-generics-5.rs: Likewise. * rust/execute/torture/const-generics-6.rs: Likewise. * rust/execute/torture/const-generics-7.rs: Likewise. * rust/execute/torture/copy_nonoverlapping1.rs: Likewise. * rust/execute/torture/derive-default1.rs: Likewise. * rust/execute/torture/derive-partialeq1.rs: Likewise. * rust/execute/torture/derive-partialeq2.rs: Likewise. * rust/execute/torture/derive_clone_enum1.rs: Likewise. * rust/execute/torture/derive_macro1.rs: Likewise. * rust/execute/torture/derive_macro3.rs: Likewise. * rust/execute/torture/derive_macro4.rs: Likewise. * rust/execute/torture/enum_intrinsics1.rs: Likewise. * rust/execute/torture/enum_intrinsics2.rs: Likewise. * rust/execute/torture/for-loop1.rs: Likewise. * rust/execute/torture/for-loop2.rs: Likewise. * rust/execute/torture/gat1.rs: Likewise. * rust/execute/torture/impl_desugar-2.rs: Likewise. * rust/execute/torture/impl_desugar.rs: Likewise. * rust/execute/torture/impl_rpit1.rs: Likewise. * rust/execute/torture/impl_rpit2.rs: Likewise. * rust/execute/torture/impl_rpit3.rs: Likewise. * rust/execute/torture/impl_trait1.rs: Likewise. * rust/execute/torture/impl_trait2.rs: Likewise. * rust/execute/torture/impl_trait3.rs: Likewise. * rust/execute/torture/impl_trait4.rs: Likewise. * rust/execute/torture/index1.rs: Likewise. * rust/execute/torture/issue-1120.rs: Likewise. * rust/execute/torture/issue-1133.rs: Likewise. * rust/execute/torture/issue-1198.rs: Likewise. * rust/execute/torture/issue-1232.rs: Likewise. * rust/execute/torture/issue-1249.rs: Likewise. * rust/execute/torture/issue-1436.rs: Likewise. * rust/execute/torture/issue-1481.rs: Likewise. * rust/execute/torture/issue-1482.rs: Likewise. * rust/execute/torture/issue-1496.rs: Likewise. * rust/execute/torture/issue-1720-2.rs: Likewise. * rust/execute/torture/issue-1720.rs: Likewise. * rust/execute/torture/issue-2005.rs: Likewise. * rust/execute/torture/issue-2052.rs: Likewise. * rust/execute/torture/issue-2179.rs: Likewise. * rust/execute/torture/issue-2180.rs: Likewise. * rust/execute/torture/issue-2236.rs: Likewise. * rust/execute/torture/issue-2583.rs: Likewise. * rust/execute/torture/issue-3126.rs: Likewise. * rust/execute/torture/issue-3381.rs: Likewise. * rust/execute/torture/issue-3502.rs: Likewise. * rust/execute/torture/issue-3836.rs: Likewise. * rust/execute/torture/issue-647.rs: Likewise. * rust/execute/torture/issue-845.rs: Likewise. * rust/execute/torture/issue-851.rs: Likewise. * rust/execute/torture/issue-858.rs: Likewise. * rust/execute/torture/iter1.rs: Likewise. * rust/execute/torture/macros23.rs: Likewise. * rust/execute/torture/macros28.rs: Likewise. * rust/execute/torture/method2.rs: Likewise. * rust/execute/torture/method3.rs: Likewise. * rust/execute/torture/method4.rs: Likewise. * rust/execute/torture/min_specialization2.rs: Likewise. * rust/execute/torture/min_specialization3.rs: Likewise. * rust/execute/torture/operator_overload_1.rs: Likewise. * rust/execute/torture/operator_overload_10.rs: Likewise. * rust/execute/torture/operator_overload_11.rs: Likewise. * rust/execute/torture/operator_overload_12.rs: Likewise. * rust/execute/torture/operator_overload_2.rs: Likewise. * rust/execute/torture/operator_overload_3.rs: Likewise. * rust/execute/torture/operator_overload_4.rs: Likewise. * rust/execute/torture/operator_overload_5.rs: Likewise. * rust/execute/torture/operator_overload_6.rs: Likewise. * rust/execute/torture/operator_overload_7.rs: Likewise. * rust/execute/torture/operator_overload_8.rs: Likewise. * rust/execute/torture/operator_overload_9.rs: Likewise. * rust/execute/torture/partial-eq-1.rs: Likewise. * rust/execute/torture/partial-eq-2.rs: Likewise. * rust/execute/torture/partial-eq-3.rs: Likewise. * rust/execute/torture/partial-eq-4.rs: Likewise. * rust/execute/torture/partial-ord-1.rs: Likewise. * rust/execute/torture/partial-ord-2.rs: Likewise. * rust/execute/torture/partial-ord-3.rs: Likewise. * rust/execute/torture/partial-ord-4.rs: Likewise. * rust/execute/torture/partial-ord-5.rs: Likewise. * rust/execute/torture/partial-ord-6.rs: Likewise. * rust/execute/torture/prefetch_data.rs: Likewise. * rust/execute/torture/ref-pattern2.rs: Likewise. * rust/execute/torture/sip-hasher.rs: Likewise. * rust/execute/torture/slice-magic.rs: Likewise. * rust/execute/torture/slice-magic2.rs: Likewise. * rust/execute/torture/slice1.rs: Likewise. * rust/execute/torture/str-layout1.rs: Likewise. * rust/execute/torture/trait1.rs: Likewise. * rust/execute/torture/trait10.rs: Likewise. * rust/execute/torture/trait11.rs: Likewise. * rust/execute/torture/trait12.rs: Likewise. * rust/execute/torture/trait13.rs: Likewise. * rust/execute/torture/trait14.rs: Likewise. * rust/execute/torture/trait15.rs: Likewise. * rust/execute/torture/trait2.rs: Likewise. * rust/execute/torture/trait3.rs: Likewise. * rust/execute/torture/trait4.rs: Likewise. * rust/execute/torture/trait5.rs: Likewise. * rust/execute/torture/trait6.rs: Likewise. * rust/execute/torture/trait7.rs: Likewise. * rust/execute/torture/trait8.rs: Likewise. * rust/execute/torture/trait9.rs: Likewise. * rust/execute/torture/transmute1.rs: Likewise. * rust/execute/torture/wrapping_op1.rs: Likewise. * rust/execute/torture/wrapping_op2.rs: Likewise. * rust/link/generic_function_1.rs: Likewise. * rust/link/trait_import_1.rs: Likewise. Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
2025-12-03gccrs: Remove non leaf errorsPierre-Emmanuel Patry6-17/+0
gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_function): Return a nullptr on error instead of a valid function. (Parser::parse_let_stmt): Remove non leaf error. (Parser::parse_if_expr): Likewise. (Parser::parse_loop_expr): Likewise. (Parser::parse_expr): Return error on null denotation error. gcc/testsuite/ChangeLog: * rust/compile/braced_macro_arm.rs: Remove parent errors. * rust/compile/issue-407-2.rs: Likewise. * rust/compile/issue-407.rs: Likewise. * rust/compile/issue-4162.rs: Likewise. * rust/compile/issue-867.rs: Likewise. * rust/compile/raw_ref_op_invalid.rs: Likewise. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-12-03gccrs: Remove non-leaf error message in delimited ttPierre-Emmanuel Patry1-2/+1
gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_delim_token_tree): Remove error message. (Parser::parse_token_tree): Split error message. gcc/testsuite/ChangeLog: * rust/compile/macros/mbe/macro-issue3608.rs: Remove error. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-12-03gccrs: Remove non-leaf item in crate parsing failure errorPierre-Emmanuel Patry33-39/+6
gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_items): Remove item parsing error. gcc/testsuite/ChangeLog: * rust/compile/braced_macro_arm.rs: Remove superfluous error message matching. * rust/compile/decl_macro6.rs: Likewise. * rust/compile/decl_macro7.rs: Likewise. * rust/compile/extern_type_item_missing_semi.rs: Likewise. * rust/compile/issue-2187.rs: Likewise. * rust/compile/issue-407-2.rs: Likewise. * rust/compile/issue-407.rs: Likewise. * rust/compile/issue-4162.rs: Likewise. * rust/compile/issue-867.rs: Likewise. * rust/compile/macros/mbe/macro-issue1053-2.rs: Likewise. * rust/compile/macros/mbe/macro-issue1395-2.rs: Likewise. * rust/compile/macros/mbe/macro-issue3608.rs: Likewise. * rust/compile/macros/mbe/macro27.rs: Likewise. * rust/compile/macros/mbe/macro28.rs: Likewise. * rust/compile/macros/mbe/macro29.rs: Likewise. * rust/compile/macros/mbe/macro30.rs: Likewise. * rust/compile/macros/mbe/macro31.rs: Likewise. * rust/compile/macros/mbe/macro33.rs: Likewise. * rust/compile/macros/mbe/macro35.rs: Likewise. * rust/compile/macros/mbe/macro37.rs: Likewise. * rust/compile/macros/mbe/macro38.rs: Likewise. * rust/compile/macros/mbe/macro39.rs: Likewise. * rust/compile/macros/mbe/macro48.rs: Likewise. * rust/compile/parse_invalid_specialization.rs: Likewise. * rust/compile/parse_simple_path_fail_1.rs: Likewise. * rust/compile/parse_simple_path_fail_2.rs: Likewise. * rust/compile/raw-string-loc.rs: Likewise. * rust/compile/raw-byte-string-loc.rs: Likewise. * rust/compile/self_const_ptr.rs: Likewise. * rust/compile/self_mut_ptr.rs: Likewise. * rust/compile/static_var1.rs: Likewise. * rust/compile/self_ptr.rs: Likewise. * rust/compile/torture/identifier-missing-impl-1.rs: Likewise. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-11-25gccrs: Add test for issue Rust-GCC#3608LĂșcio Boari Fleury1-0/+12
gcc/testsuite/ChangeLog: * rust/compile/macros/mbe/macro-issue3608.rs: New Test. The test skips an issue at line 11 Signed-off-by: LĂșcio Boari Fleury <lucboari@gmail.com>
2025-11-25gccrs: Add support for initial generic associated typesPhilip Herron2-0/+22
This patch is the initial part in supporting generic associated types. In rust we have trait item types that get implemented for example: trait Foo<T> { type Bar } impl<T> Foo for T { type Bar = T } The trait position uses a Ty::Placeholder which is just a thing that gets set for lazy evaluation to the impl type alias which is actually a Ty::Projection see: 0798add3d3c1bf4b20ecc1b4fa1047ba4ba19759 For more info the projection type needs to hold onto generics in order to properly support generic types this GAT's support extends this all the way to the placeholder which still needs to be done. Fixes Rust-GCC#4276 gcc/rust/ChangeLog: * ast/rust-ast.cc (TraitItemType::as_string): add generic params * ast/rust-ast.h: remove old comment * ast/rust-item.h: add generic params to associated type * ast/rust-type.h: remove old comment * hir/rust-ast-lower-implitem.cc (ASTLowerTraitItem::visit): hir lowering for gat's * hir/tree/rust-hir-item.cc (TraitItemType::TraitItemType): gat's on TraitItemType (TraitItemType::operator=): preserve generic params * hir/tree/rust-hir-item.h: likewise * hir/tree/rust-hir.cc (TraitItemType::as_string): likewise * parse/rust-parse-impl.h (Parser::parse_trait_type): hit the < and parse params * typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit): typecheck * typecheck/rust-tyty.cc (BaseType::has_substitutions_defined): dont destructure gcc/testsuite/ChangeLog: * rust/compile/gat1.rs: New test. * rust/execute/torture/gat1.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-11-25gccrs: add error check if derive has wrong itemLucas Ly Ba1-0/+11
Derive may only be applied to structs, enums and unions. gcc/rust/ChangeLog: * expand/rust-derive.cc (DeriveVisitor::derive): Add check and error. gcc/testsuite/ChangeLog: * rust/compile/issue-3971.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-25gccrs: fix segfault on empty doc attributeLucas Ly Ba1-0/+3
gcc/rust/ChangeLog: * hir/rust-ast-lower-base.cc (ASTLoweringBase::handle_doc_item_attribute): Make error. gcc/testsuite/ChangeLog: * rust/compile/issue-4226.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-25gccrs: Fix compile_float_literal not compiling negatives properlyYap Zhi Heng2-0/+18
gcc/rust/ChangeLog: * backend/rust-compile-expr.cc (compile_float_literal): Add is_negative check to compile negative float literals properly. * backend/rust-compile-pattern.cc (CompilePatternCheckExpr::visit(RangePattern)): Minor optimization to E0579 checks to reduce memory copy. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-11-25gccrs: fix cfg attribute without parentheses errorLucas Ly Ba1-0/+3
gcc/rust/ChangeLog: * ast/rust-ast.cc (Attribute::check_cfg_predicate): Make error when attribute has no input. gcc/testsuite/ChangeLog: * rust/compile/issue-4262.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-25gccrs: fixes previously added testslenny.chiadmi-delage2-6/+7
Fixes previously added tests. Fixes Rust-GCC#4140 gcc/testsuite/ChangeLog: * rust/compile/issue-4140-1.rs: Fixes test. * rust/compile/issue-4140-2.rs: Likewise. Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2025-11-25gccrs: adds tests from issue 4140lenny.chiadmi-delage2-0/+29
Adds tests for testsuite. Fixes Rust-GCC#4140 gcc/testsuite/ChangeLog: * rust/compile/issue-4140-1.rs: New test. * rust/compile/issue-4140-2.rs: Likewise. Signed-off-by: lenny.chiadmi-delage <lenny.chiadmi-delage@epita.fr>
2025-11-17gccrs: Fix segv in errors in type checking an impl itemPhilip Herron1-0/+13
When we typecheck a trait impl block item, at the end we validate it against the trait definition by doing a final unify but if the type check fails on the the impl item it returns NULL here. The other issue was that if we fail to resolve the specified lifetime we return error early, this changes the typechecking to default to an anon lifetime so we can continue typechecking. Fixes Rust-GCC#4188 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItemWithTrait::visit): null guard * typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): default to anon gcc/testsuite/ChangeLog: * rust/compile/issue-4188.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-11-17gccrs: Support generic constant impl itemsPhilip Herron3-0/+50
Impl items can have constants defined which could in turn be generic this was not supported by gccrs and missed. So for example: impl<T> Foo<T> { const MAGIC: usize = mem::size_of::<T>(); } This is a normal type parameter but in order to setup the generics we need to create a synthetic TyTy::FnType so we can bind the parent's impl generics to the type system and it just works like any other generic item at that point. Then for example we have: impl<const N: usize> Foo<N> { const VALUE: usize = N; } Again we consistently bind the this const generic parameter the same way so the lazy evaluation of the generic can take place. gcc/rust/ChangeLog: * backend/rust-compile-item.cc (CompileItem::visit): support the synthetic function consts * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::Resolve): likewise * typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): create the synth * typecheck/rust-tyty.h: new flag for synthetic constant gcc/testsuite/ChangeLog: * rust/execute/torture/const-generics-5.rs: New test. * rust/execute/torture/const-generics-6.rs: New test. * rust/execute/torture/const-generics-7.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-11-17gccrs: Fix const generics handling on array typesPhilip Herron4-0/+76
When we were processing generic const param types on arrays the size type was overriding the const param decl because of a hirid reference mismatch Fixes Rust-GCC#3879 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit): fix mappings gcc/testsuite/ChangeLog: * rust/compile/const_generics_18.rs: New test. * rust/compile/const_generics_19.rs: New test. * rust/execute/torture/const-generics-3.rs: New test. * rust/execute/torture/const-generics-4.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-11-17gccrs: make invalid inner attributes show errorLucas Ly Ba2-1/+6
gcc/rust/ChangeLog: * ast/rust-ast.cc (Attribute::is_derive): Change is_derive method with its valid path. * util/rust-attribute-values.h: Delete redudant derive attribute. * util/rust-attributes.cc (AttributeChecker::check_inner_attribute): Helper method for check_inner_attributes (AttributeChecker::check_inner_attributes): Implement method for errors check. * util/rust-attributes.h: Add methods above in header. gcc/testsuite/ChangeLog: * rust/compile/issue-4212.rs: * rust/compile/issue-4219.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-17gccrs: fix ICE on missing pattern in while loopLucas Ly Ba1-0/+9
Adds a proper check for missing patterns in while expressions. Fixes Rust-GCC#4162 gcc/rust/ChangeLog: * parse/rust-parse-impl.h(Parser<ManagedTokenSource>::parse_while_let_loop_expr): Add check for missing pattern. gcc/testsuite/ChangeLog: * rust/compile/issue-4162.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-17gccrs: fix cfg attribute error with literal predicateLucas Ly Ba1-0/+3
gcc/rust/ChangeLog: * ast/rust-ast.cc (MetaItemLitExpr::check_cfg_predicate): Make error. gcc/testsuite/ChangeLog: * rust/compile/issue-4222.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-17gccrs: fix segfault with empty cfg attributeLucas Ly Ba1-0/+3
gcc/rust/ChangeLog: * ast/rust-ast.cc (Attribute::check_cfg_predicate): add cfg path in condition gcc/testsuite/ChangeLog: * rust/compile/issue-4261.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-17gccrs: fix error multiple cfg predicatesLucas Ly Ba1-0/+3
gcc/rust/ChangeLog: * ast/rust-ast.cc (Attribute::check_cfg_predicate): Make error. gcc/testsuite/ChangeLog: * rust/compile/issue-4267.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
2025-11-17gccrs: Add support for binding const generic values to pathsPhilip Herron1-0/+20
Const generics bind values which can be accessed like a normal path but the difference is that they can be true expression values not just type paths. This patch adds support to resolving a method inference which passes a generic value into the method and fixes some missed bugs along the way. The tricky part was that there is a case where in the return position of a method returning a const param type vs the type of the method there is a special case in the unify rules so that we unify the specified type of the const param type not the const param itself. gcc/rust/ChangeLog: * backend/rust-compile-resolve-path.cc: handle const param values * typecheck/rust-hir-type-check-item.cc: generate const infer vars when required * typecheck/rust-type-util.cc (unify_site_and): handle a null param cleanup * typecheck/rust-tyty-util.cc (TyVar::get_implicit_const_infer_var): helper interface * typecheck/rust-tyty-util.h: update header prototypes * typecheck/rust-tyty.cc (BaseType::is_concrete): correctly handle const types (ConstParamType::get_name): emit the specified type (ConstParamType::is_equal): fix recursion loop * typecheck/rust-unify.cc (UnifyRules::go): const infer vars need cleanup too * typecheck/rust-unify.h: support base generics gcc/testsuite/ChangeLog: * rust/execute/torture/const-generics-2.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-11-17gccrs: Implement E0579 error checking in RangePattern compilationYap Zhi Heng1-0/+10
Checks whether upper bound of range is not lower or equal to the lower bound. gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc(compilePatternCheckExpr::visit(RangePattern)): Add E0579 check to ensure that lower bound is always below upper bound. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-11-17gccrs: Fix `RangePattern` negative literal bounds being treated as positiveYap Zhi Heng2-0/+21
GIMPLE output for compile/issue-4242.rs: ... x = 1; RUSTTMP.2 = x; _1 = RUSTTMP.2 >= -55; _2 = RUSTTMP.2 < 0; _3 = _1 & _2; if (_3 != 0) goto <D.112>; else goto <D.113>; <D.112>: { RUSTTMP.1 = 2; goto <D.105>; } <D.113>: _4 = RUSTTMP.2 >= -99; _5 = RUSTTMP.2 < -55; _6 = _4 & _5; if (_6 != 0) goto <D.114>; else goto <D.115>; <D.114>: { RUSTTMP.1 = 3; goto <D.105>; } ... gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc (compile_range_pattern_bound): Set litexpr to negative if has_minus is present in the RangePatternBoundLiteral param. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-11-17gccrs: Fix ICE with non-trailing const defaultsvishruth-thimmaiah2-0/+4
When a const generic with a default value is not trailing, emit an error. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_generic_params): Emit an error when const generics with a default value is not trailing. gcc/testsuite/ChangeLog: * rust/compile/const_generics_17.rs: New test. * rust/compile/generics14.rs: New test. Signed-off-by: vishruth-thimmaiah <vishruththimmaiah@gmail.com>
2025-11-17gccrs: Add minus sign compilation for LiteralPatternYap Zhi Heng1-0/+9
GIMPLE output for literalpattern_neg.rs test case: ... x = -55; RUSTTMP.2 = x; if (RUSTTMP.2 == 55) goto <D.113>; else goto <D.114>; <D.113>: { RUSTTMP.1 = 1; goto <D.107>; } <D.114>: if (RUSTTMP.2 == -55) goto <D.115>; else goto <D.116>; <D.115>: { RUSTTMP.1 = 0; goto <D.107>; } <D.116>: if (1 != 0) goto <D.117>; else goto <D.118>; <D.117>: { RUSTTMP.1 = 1; goto <D.107>; } ... gcc/rust/ChangeLog: * parse/rust-parse-impl.h (parse_literal_or_range_pattern): Parse minus sign properly for LiteralPattern. * ast/rust-pattern.h (LiteralPattern): Add has_minus boolean for LiteralPattern. * hir/tree/rust-hir-pattern.h (LiteralPattern): Ditto. * ast/rust-pattern.cc (LiteralPattern::as_string): Update to include minus sign if present. * hir/tree/rust-hir.cc (LiteralPattern::as_string): Ditto. * hir/rust-ast-lower-pattern.cc (visit(LiteralPattern)): Pass has_minus boolean from AST to HIR. * backend/rust-compile-pattern.cc (CompilePatternCheckExpr::visit(LiteralPattern)): Compile litexpr as negative if minus sign is present. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-11-17gccrs: fix segfault on exported macroLucas Ly Ba1-0/+14
An imbricated exported macro leads to a segfault. gcc/rust/ChangeLog: * metadata/rust-export-metadata.cc (ExportContext::emit_macro): Change method argument NodeId to AST::MacroRulesDefinition. * metadata/rust-export-metadata.h: Likewise. * util/rust-hir-map.cc (Mappings::insert_exported_macro): Insert AST::MacroRulesDefinition instead of NodeId. * util/rust-hir-map.h: Change methods declarations of exported macros. gcc/testsuite/ChangeLog: * rust/compile/issue-3617.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.fr>
2025-10-30gccrs: Attempt to resolve pattern items in tuple pattern with a rest patternYap Zhi Heng1-0/+8
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc (visit(TuplePattern)): Update HAS_REST case to continue to attempt to resolve pattern items after emitting size error. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-10-30gccrs: Fix ICE on enum in tuple struct patternRyo Yoshida1-0/+20
When we typecheck a tuple struct pattern and the type of its path is an enum, it may refer to the enum itself and not a variant. Emit an E0532 error on such cases. Fixes Rust-GCC/gccrs#3917 Fixes Rust-GCC/gccrs#3918 Fixes Rust-GCC/gccrs#3926 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Emit an error when the path refers to an enum itself rather than its variant. gcc/testsuite/ChangeLog: * rust/compile/match-tuplestructpattern-non-variant.rs: New test. Signed-off-by: Ryo Yoshida <low.ryoshida@gmail.com>
2025-10-30gccrs: Fix ICE for repr attribute malformationYap Zhi Heng1-0/+6
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-base.cc (parse_repr_options): Changed TOKEN_TREE assert into error, update malformed repr attribute error message to be inline with other attribute error messages. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-10-30gccrs: fix inner attr derive doesn't show errorLucas Ly Ba1-0/+5
gcc/rust/ChangeLog: * ast/rust-ast.cc (Attribute::is_derive): Change string derive to its definition. * util/rust-attribute-values.h: Add attribute definition derive. * util/rust-attributes.cc (AttributeChecker::visit): Add method check_inner_attributes. (AttributeChecker::check_inner_attributes): Check if there is a bad inner attribute. * util/rust-attributes.h: Add method check_inner_attributes in .h. gcc/testsuite/ChangeLog: * rust/compile/issue-4212.rs: New test. Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.fr>
2025-10-30gccrs: fix ICE in TyVar constructorlishin1-0/+4
gcc/rust/ChangeLog: * typecheck/rust-tyty-util.cc (TyVar::TyVar): Add null check to avoid ICE. (TyVar::get_tyty): Return nullptr when lookup fails. (TyVar::clone): Handle null base type safely. (TyVar::monomorphized_clone): Add fallback for error types. gcc/testsuite/ChangeLog: * rust/compile/issue-3556.rs: New test. Signed-off-by: lishin <lishin1008@gmail.com>
2025-10-30gccrs: Emit error when tuple-indexing on non-tuplesRyo Yoshida1-0/+15
Fixes Rust-GCC#3927 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): check and properly emit an error when the tuple index is on a non-tuple-struct. gcc/testsuite/ChangeLog: * rust/compile/tuple_index_on_non_tuple.rs: New test. Signed-off-by: Ryo Yoshida <low.ryoshida@gmail.com>
2025-10-30gccrs: test: add a regression test for issue Rust-GCC/gccrs#41450xllx01-0/+13
gcc/testsuite/ChangeLog: * rust/compile/issue-4145.rs: New test. Signed-off-by: Elle Rhumsaa <elle@weathered-steel.dev>
2025-10-30gccrs: Add doc attribute checking on traitsPierre-Emmanuel Patry1-0/+3
Doc attribute checking was not performed on traits. gcc/rust/ChangeLog: * util/rust-attributes.cc (check_doc_attribute): Change message. (AttributeChecker::visit): Add doc attribute checking on traits. gcc/testsuite/ChangeLog: * rust/compile/attr_malformed_doc.rs: New test. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-10-30gccrs: Avoid malformed attribute conversionPierre-Emmanuel Patry1-0/+3
Add location for malformed attribute errors and avoid processing of malformed attributes. gcc/rust/ChangeLog: * ast/rust-ast.cc (AttrInputMetaItemContainer::separate_cfg_attrs): Avoid malformed attributes. * util/rust-attributes.cc (AttributeChecker::visit): Change location. gcc/testsuite/ChangeLog: * rust/compile/attr_malformed_path.rs: New test. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-10-30gccrs: Use rich_location for TupleStructPattern type check num field errorYap Zhi Heng1-0/+14
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc (visit(TupleStructPattern)): Update error for mismatched number of fields to use rich_location. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-10-30gccrs: Implement compilation support for HIR::TupleStructItemsHasRestYap Zhi Heng3-0/+61
gcc/rust/ChangeLog: * backend/rust-compile-pattern.cc: Add compilation support for TupleStructItemsHasRest in CompilePatternCheckExpr(TupleStructPattern) & CompilePatternBindings(TupleStructPattern) Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-10-30gccrs: tests: added extra parens compile test0xllx01-0/+26
Adds a test to verify extra parentheses are discarded, and the source is compiled as expected. Resolves: Rust-GCC/gccrs#2886 gcc/testsuite/ChangeLog: * rust/compile/issue-4148.rs: New test. Signed-off-by: Elle Rhumsaa <elle@weathered-steel.dev>
2025-10-30gccrs: Test libcoreOwen Avery1-0/+37
This adds compilation of libcore up to the AST validation phase to the testsuite. gcc/testsuite/ChangeLog: * rust/core/core.exp: New test. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-10-30gccrs: Add HIR lowering support for rest pattern in struct patterns' ASTYap Zhi Heng2-0/+21
gcc/rust/ChangeLog: * ast/rust-pattern.h (StructPatternElements): Rename has_struct_pattern_etc to has_rest_pattern, and has_etc to has_rest to signify presense of rest patterns more clearly. * ast/rust-pattern.cc (StructPatternElements::as_string): Rename variables accordingly. * ast/rust-ast-collector.cc: Rename variables accordingly. * expand/rust-cfg-strip.cc: Rename variables accordingly. * parse/rust-parse-impl.h: Rename variable accordingly. * hir/tree/rust-hir-pattern.h (StructPatternElements): Add a boolean to track presense of rest pattern. * hir/rust-ast-lower-pattern.cc (visit(StructPattern)): Add support for lowering rest pattern to HIR. * typecheck/rust-hir-type-check-pattern.cc (visit(StructPattern)): Remove size check when rest pattern is present. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
2025-10-30gccrs: Handle link_name attributeOwen Avery1-0/+16
gcc/rust/ChangeLog: * backend/rust-compile-extern.h: Add includes. (CompileExternItem::visit): Use get_link_name. (CompileExternItem::get_link_name): New static member function. * util/rust-attribute-values.h (Attributes::LINK_NAME): New static constexpr member variable. * util/rust-attributes.cc (__definitions): New entry for LINK_NAME. * util/rust-ggc.cc: Include "rust-ast.h". (Ident::Ident): Add overload for Rust::Identifier. * util/rust-ggc.h (class Identifier): Forward declare. (Ident::Ident): Add overload for Rust::Identifier. gcc/testsuite/ChangeLog: * rust/execute/torture/link-name.rs: New test. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
2025-10-30gccrs: Add origin location to expanded tokensPierre-Emmanuel Patry1-0/+12
gcc/rust/ChangeLog: * expand/rust-macro-expand.cc: Forward invocation tree locus to substitution context. * expand/rust-macro-substitute-ctx.cc: Use origin location for expanded tokens. * expand/rust-macro-substitute-ctx.h (class SubstituteCtx): Save invocation location. gcc/testsuite/ChangeLog: * rust/compile/macros/mbe/macro58.rs: New test. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2025-10-30gccrs: Fix ICE where we expect a num enum variantPhilip Herron1-0/+9
This changes the assertion into a valid error diagnostic. Fixes Rust-GCC#3538 gcc/rust/ChangeLog: * backend/rust-compile-resolve-path.cc: add error diag gcc/testsuite/ChangeLog: * rust/compile/issue-3538.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-10-30gccrs: Add error diag for self params on plain functionsPhilip Herron1-0/+7
self params dont have a type unless used within impl blocks. Rustc as far as I can tell in this senario generics a synthetic param of type Self in this senario so that it keeps consistent error diagnostic for number of parameters but the logic for what the parameter typpe should be seems unclear. Fixes Rust-GCC#3592 gcc/rust/ChangeLog: * hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): add error diagnostic gcc/testsuite/ChangeLog: * rust/compile/issue-3592.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-10-30gccrs: Fix ICE on copied array expressionsPhilip Herron1-0/+12
We need to check for errors on the number of copies expression before trying to const fold it otherwise it will just fail in the const evaluator. Fixes Rust-GCC#4165 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): check for error gcc/testsuite/ChangeLog: * rust/compile/issue-4165.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-10-30gccrs: fnptr types can hold onto generic params so it needs to handle substsPhilip Herron2-0/+139
This patch adds support to recursively walk fnptr types to do generic substitutions. Fixes Rust-GCC/gccrs#4090 gcc/rust/ChangeLog: * typecheck/rust-substitution-mapper.cc (SubstMapperInternal::visit): handle fnptr * typecheck/rust-tyty.cc (FnPtr::handle_substitions): new * typecheck/rust-tyty.h: likewise gcc/testsuite/ChangeLog: * rust/compile/issue-4090-1.rs: New test. * rust/compile/issue-4090-2.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-10-30gccrs: Fix ICE for invalid const capacity expression handlingPhilip Herron1-0/+7
When we have an invalid capacity expression we can't try to then also const fold it as GCC will assert on invalid conversions. Fixes Rust-GCC#4168 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit): check for invalid capacity gcc/testsuite/ChangeLog: * rust/compile/issue-4168.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>
2025-10-30gccrs: Fix ICE handling division by zero in const evalPhilip Herron2-0/+4
This pulls over more constexpr support from C++ front-end. Fixes Rust-GCC#4146 gcc/rust/ChangeLog: * backend/rust-constexpr.cc (eval_constant_expression): port over missing bits (eval_store_expression): likewise (eval_call_expression): likewise (eval_binary_expression): likewise (eval_bit_field_ref): likewise (eval_check_shift_p): likewise (fold_pointer_plus_expression): likewise (maybe_fold_addr_pointer_plus): likewise (fold_expr): likewise (union_active_member): likewise (fold_indirect_ref_1): likewise (rs_fold_indirect_ref): likewise (rs_eval_indirect_ref): likewise (eval_logical_expression): likewise (eval_vector_conditional_expression): likewise (eval_bare_aggregate): likewise (cxx_eval_trinary_expression): likewise (eval_and_check_array_index): likewise (eval_array_reference): likewise (eval_component_reference): likewise (rs_bind_parameters_in_call): likewise (eval_builtin_function_call): likewise (constexpr_fn_retval): likewise (verify_constant): likewise (get_array_or_vector_nelts): likewise (eval_conditional_expression): likewise (eval_switch_expr): likewise (eval_unary_expression): likewise (cxx_eval_outermost_constant_expr): likewise (potential_constant_expression_1): likewise gcc/testsuite/ChangeLog: * rust/compile/issue-2394.rs: Update test case * rust/compile/issue-4146.rs: New test. Signed-off-by: Philip Herron <herron.philip@googlemail.com>