Message ID | 20240207114419.1100894-14-arthur.cohen@embecosm.com |
---|---|
State | New |
Headers | show |
Series | [COMMITTED,01/25] gccrs: Parse normal functions with `self` parameter correctly | expand |
On Wed, Feb 07, 2024 at 12:43:59PM +0100, arthur.cohen@embecosm.com wrote: > From: Philip Herron <herron.philip@googlemail.com> > > This patch introduces one regression because generics are getting better > understood over time. The code here used to apply generics with the same > symbol from previous segments which was a bit of a hack with out limited > inference variable support. The regression looks like it will be related > to another issue which needs to default integer inference variables much > more aggresivly to default integer. > > Fixes #2723 > > gcc/rust/ChangeLog: > > * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments): remove hack > > gcc/testsuite/ChangeLog: > > * rust/compile/issue-1773.rs: Moved to... > * rust/compile/issue-1773.rs.bak: ...here. Please don't use such suffixes in the testsuite. Either delete the testcase, or xfail it somehow until the bug is fixed. Jakub
diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index ea7d8422980..ad31fb74a80 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -456,27 +456,10 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, } } - if (tyseg->needs_generic_substitutions ()) - { - if (!prev_segment->needs_generic_substitutions ()) - { - auto used_args_in_prev_segment - = GetUsedSubstArgs::From (prev_segment); - - if (!used_args_in_prev_segment.is_error ()) - { - if (SubstMapperInternal::mappings_are_bound ( - tyseg, used_args_in_prev_segment)) - { - tyseg = SubstMapperInternal::Resolve ( - tyseg, used_args_in_prev_segment); - } - } - } - } - if (seg.has_generic_args ()) { + rust_debug_loc (seg.get_locus (), "applying segment generics: %s", + tyseg->as_string ().c_str ()); tyseg = SubstMapper::Resolve (tyseg, expr_locus, &seg.get_generic_args (), context->regions_from_generic_args ( diff --git a/gcc/testsuite/rust/compile/issue-1773.rs b/gcc/testsuite/rust/compile/issue-1773.rs.bak similarity index 100% rename from gcc/testsuite/rust/compile/issue-1773.rs rename to gcc/testsuite/rust/compile/issue-1773.rs.bak diff --git a/gcc/testsuite/rust/compile/issue-2723-1.rs b/gcc/testsuite/rust/compile/issue-2723-1.rs new file mode 100644 index 00000000000..261956de42e --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2723-1.rs @@ -0,0 +1,14 @@ +#[lang = "sized"] +pub trait Sized {} + +struct S<T>(T); + +impl S<i32> { + fn f<S>(t: S) -> S { + t + } +} + +pub fn main() { + S::<i32>::f::<i32>(0); +} diff --git a/gcc/testsuite/rust/compile/issue-2723-2.rs b/gcc/testsuite/rust/compile/issue-2723-2.rs new file mode 100644 index 00000000000..c7609d1e14d --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2723-2.rs @@ -0,0 +1,14 @@ +#[lang = "sized"] +pub trait Sized {} + +struct S<T1, T2>(T1, T2); + +impl S<i32, i32> { + fn f<S>(t: S) -> S { + t + } +} + +pub fn main() { + S::<i32, i32>::f::<i32>(0); +}
From: Philip Herron <herron.philip@googlemail.com> This patch introduces one regression because generics are getting better understood over time. The code here used to apply generics with the same symbol from previous segments which was a bit of a hack with out limited inference variable support. The regression looks like it will be related to another issue which needs to default integer inference variables much more aggresivly to default integer. Fixes #2723 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments): remove hack gcc/testsuite/ChangeLog: * rust/compile/issue-1773.rs: Moved to... * rust/compile/issue-1773.rs.bak: ...here. * rust/compile/issue-2723-1.rs: New test. * rust/compile/issue-2723-2.rs: New test. --- .../typecheck/rust-hir-type-check-path.cc | 21 ++----------------- .../{issue-1773.rs => issue-1773.rs.bak} | 0 gcc/testsuite/rust/compile/issue-2723-1.rs | 14 +++++++++++++ gcc/testsuite/rust/compile/issue-2723-2.rs | 14 +++++++++++++ 4 files changed, 30 insertions(+), 19 deletions(-) rename gcc/testsuite/rust/compile/{issue-1773.rs => issue-1773.rs.bak} (100%) create mode 100644 gcc/testsuite/rust/compile/issue-2723-1.rs create mode 100644 gcc/testsuite/rust/compile/issue-2723-2.rs