[COMMITTED,13/25] gccrs: remove old generics hack to reuse generic symbols from previous seg
Checks
Commit Message
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
Comments
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
@@ -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 (
similarity index 100%
rename from gcc/testsuite/rust/compile/issue-1773.rs
rename to gcc/testsuite/rust/compile/issue-1773.rs.bak
new file mode 100644
@@ -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);
+}
new file mode 100644
@@ -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);
+}