[vm/ffi] Finalize closure trampoline types

We forgot to finalize the ffi-trampoline closures. The ffigen package
way of generating code revealed this bug.
Bug revealed by https://dart-review.googlesource.com/c/sdk/+/152141.

Fixes https://github.com/dart-lang/sdk/issues/43016

Change-Id: Icc7ba4379c9852ce98f2bb171702d286b20530d1
Cq-Include-Trybots:dart/try:vm-kernel-linux-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/158012
Auto-Submit: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/runtime/vm/compiler/ffi/call.cc b/runtime/vm/compiler/ffi/call.cc
index 5cb1598..93d4484 100644
--- a/runtime/vm/compiler/ffi/call.cc
+++ b/runtime/vm/compiler/ffi/call.cc
@@ -4,6 +4,7 @@
 
 #include "vm/compiler/ffi/call.h"
 
+#include "vm/class_finalizer.h"
 #include "vm/symbols.h"
 
 namespace dart {
@@ -50,6 +51,13 @@
   function.set_parameter_names(parameter_names);
   function.SetFfiCSignature(c_signature);
 
+  Type& type = Type::Handle(zone);
+  type ^= function.SignatureType(Nullability::kLegacy);
+  type ^= ClassFinalizer::FinalizeType(owner_class, type);
+  function.SetSignatureType(type);
+  ASSERT(
+      Type::Handle(function.SignatureType(Nullability::kLegacy)).IsFinalized());
+
   return function.raw();
 }