* Extend mono_gsharedvt_constrained_call JIT icall to handle static virtual methods
* Handle static virtual calls in constrained_gsharedvt_call_setup
* Fix lint
* Add runtime test
* Remove runtime test
---------
Co-authored-by: Milos Kotlar <kotlarmilos@gmail.com>
error_init (error);
- if (mono_class_is_interface (klass) || !m_class_is_valuetype (klass)) {
+ if ((mono_class_is_interface (klass) || !m_class_is_valuetype (klass)) && !m_method_is_static (cmethod)) {
MonoObject *this_obj;
is_iface = mono_class_is_interface (klass);
}
}
- if (m_class_is_valuetype (klass) && (m->klass == mono_defaults.object_class || m->klass == m_class_get_parent (mono_defaults.enum_class) || m->klass == mono_defaults.enum_class)) {
+ if (m_method_is_static (cmethod)) {
+ /*
+ * Static calls don't have this arg
+ */
+ *this_arg = NULL;
+ } else if (m_class_is_valuetype (klass) && (m->klass == mono_defaults.object_class || m->klass == m_class_get_parent (mono_defaults.enum_class) || m->klass == mono_defaults.enum_class)) {
/*
* Calling a non-vtype method with a vtype receiver, has to box.
*/