]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
FnParam cloning now keeps projections
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 19 Nov 2024 14:37:56 +0000 (15:37 +0100)
committerP-E-P <32375388+P-E-P@users.noreply.github.com>
Wed, 20 Nov 2024 13:36:42 +0000 (13:36 +0000)
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 26c061258cd203d442cab6c645438e0ed7e1139e..467bf1c217537194d252338830c07637819373bb 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 c896d1e03b7528c134ccea0b0da5c2f0edbc8805..167d425840e6a0046f042b3da16965961a6a989f 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 ());
   }