https://gcc.gnu.org/g:ba7e9a78f6c0f875d94db51c9fc64fec64477874

commit ba7e9a78f6c0f875d94db51c9fc64fec64477874
Author: Jakub Dupak <d...@jakubdupak.com>
Date:   Fri Feb 2 14:33:56 2024 +0100

    borrowck: BIR: use callable API
    
    gcc/rust/ChangeLog:
    
            * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc 
(ExprStmtBuilder::visit):
            Use callable API
    
    Signed-off-by: Jakub Dupak <d...@jakubdupak.com>

Diff:
---
 .../errors/borrowck/rust-bir-builder-expr-stmt.cc  | 23 +++++-----------------
 1 file changed, 5 insertions(+), 18 deletions(-)

diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc 
b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
index 2c916294ca7a..ea8107b1fb76 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
@@ -248,25 +248,12 @@ ExprStmtBuilder::visit (HIR::CallExpr &expr)
   PlaceId fn = visit_expr (*expr.get_fnexpr ());
   std::vector<PlaceId> arguments = visit_list (expr.get_arguments ());
 
-  auto *call_type = ctx.place_db[fn].tyty;
-  if (auto fn_type = call_type->try_as<TyTy::FnType> ())
-    {
-      for (size_t i = 0; i < fn_type->get_params ().size (); ++i)
-       {
-         coercion_site (arguments[i], fn_type->get_params ()[i].second);
-       }
-    }
-  else if (auto fn_ptr_type = call_type->try_as<TyTy::FnPtr> ())
-    {
-      for (size_t i = 0; i < fn_ptr_type->get_params ().size (); ++i)
-       {
-         coercion_site (arguments[i],
-                        fn_ptr_type->get_params ()[i].get_tyty ());
-       }
-    }
-  else
+  const auto fn_type
+    = ctx.place_db[fn].tyty->as<const TyTy::CallableTypeInterface> ();
+
+  for (size_t i = 0; i < fn_type->get_num_params (); ++i)
     {
-      rust_unreachable ();
+      coercion_site (arguments[i], fn_type->get_param_type_at (i));
     }
 
   return_expr (new CallExpr (fn, std::move (arguments)), lookup_type (expr),

Reply via email to