[interp] Don't inline empty calls that take vt arguments.
authorRodrigo Kumpera <kumpera@gmail.com>
Mon, 25 Sep 2017 23:32:51 +0000 (16:32 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Mon, 25 Sep 2017 23:32:51 +0000 (16:32 -0700)
mono/mini/interp/transform.c

index 4273f74553bb31935c3e5dcb319b17e99906eecb..1868eb62c1024e74b43f95dd60d3930562ba25b5 100644 (file)
@@ -1155,7 +1155,11 @@ no_intrinsic:
                        return;
                } else {
                        /* mheader might not exist if this is a delegate invoc, etc */
-                       if (mheader && *mheader->code == CEE_RET && called_inited) {
+                       gboolean has_vt_arg = FALSE;
+                       for (i = 0; i < csignature->param_count; i++)
+                               has_vt_arg |= !mini_type_is_reference (csignature->params [i]);
+
+                       if (mheader && *mheader->code == CEE_RET && called_inited && !has_vt_arg) {
                                if (td->verbose_level)
                                        g_print ("Inline (empty) call of %s.%s\n", target_method->klass->name, target_method->name);
                                for (i = 0; i < csignature->param_count; i++) {