diff mbox series

[COMMITTED,13/25] gccrs: remove old generics hack to reuse generic symbols from previous seg

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

Commit Message

Arthur Cohen Feb. 7, 2024, 11:43 a.m. UTC
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

Jakub Jelinek Feb. 9, 2024, 10:03 a.m. UTC | #1
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 mbox series

Patch

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);
+}