]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: FnParam cloning now keeps projections
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 19 Nov 2024 14:37:56 +0000 (15:37 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Fri, 21 Mar 2025 11:32:57 +0000 (12:32 +0100)
FnParam type where monomorphized during cloning.

gcc/rust/ChangeLog:

* typecheck/rust-tyty.h: Reverse monomorphization during cloning and
make a new function to explicitly monomorphize.
* typecheck/rust-tyty.cc: Use monomorphization when required.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/typecheck/rust-tyty.cc
gcc/rust/typecheck/rust-tyty.h

index e2f1361a78e0a09cc33f06a985c1138dec89940a..1073dfa6adc9b96f7c07a62ebdc457a88d58fba5 100644 (file)
@@ -597,7 +597,7 @@ BaseType::monomorphized_clone () const
     {
       std::vector<TyTy::FnParam> cloned_params;
       for (auto &p : fn->get_params ())
-       cloned_params.push_back (p.clone ());
+       cloned_params.push_back (p.monomorphized_clone ());
 
       BaseType *retty = fn->get_return_type ()->monomorphized_clone ();
       return new FnType (fn->get_ref (), fn->get_ty_ref (), fn->get_id (),
index 4d1a082f80d337bc7d1df01afbdb78ec4d6f019a..94f7bce00f8200ef3fa0617f6b8f50012f9b26e4 100644 (file)
@@ -791,6 +791,11 @@ public:
   void set_type (BaseType *new_type) { type = new_type; }
 
   FnParam clone () const
+  {
+    return FnParam (pattern->clone_pattern (), type->clone ());
+  }
+
+  FnParam monomorphized_clone () const
   {
     return FnParam (pattern->clone_pattern (), type->monomorphized_clone ());
   }