[llvmonly] Fix a case where a non-virtual method was called using callvirt.
authorZoltan Varga <vargaz@gmail.com>
Wed, 6 Jan 2016 16:55:31 +0000 (11:55 -0500)
committerZoltan Varga <vargaz@gmail.com>
Wed, 6 Jan 2016 16:55:31 +0000 (11:55 -0500)
mono/mini/method-to-ir.c

index 795fee2ef9f6991f7146df64da8518ce2e44c633..8d262fcd06d33c33675dabb256f843beb9c9060f 100644 (file)
@@ -9661,7 +9661,7 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b
                         */
                        if (cfg->gsharedvt && (mini_is_gsharedvt_signature (fsig) || cmethod->is_inflated || cmethod->klass->generic_class) &&
                                !(cmethod->klass->rank && cmethod->klass->byval_arg.type != MONO_TYPE_SZARRAY) &&
-                               (!(cfg->llvm_only && virtual_))) {
+                               (!(cfg->llvm_only && virtual_ && (cmethod->flags & METHOD_ATTRIBUTE_VIRTUAL)))) {
                                MonoRgctxInfoType info_type;
 
                                if (virtual_) {