[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();
}