Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2010-04-09 17:14:36 +0400
committerRodrigo Kumpera <kumpera@gmail.com>2010-04-09 17:14:36 +0400
commite642ed4edb3ce7f17aeb6a542c1f9d57f10a6ae4 (patch)
tree856f6a881b6d18b5d37f826a1a52a96bdd7619c1
parent8e649426c01f7e22ce2d5af150a17e7b76ee7772 (diff)
2010-04-09 Rodrigo Kumpera <rkumpera@novell.com>
* verify.c (do_invoke_method): It's ok to do use call with virtual, non-final methods if their class is sealed. svn path=/branches/mono-2-6/mono/; revision=155144
-rw-r--r--mono/metadata/ChangeLog5
-rw-r--r--mono/metadata/verify.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog
index 044bacce223..192cb0b1ef5 100644
--- a/mono/metadata/ChangeLog
+++ b/mono/metadata/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-09 Rodrigo Kumpera <rkumpera@novell.com>
+
+ * verify.c (do_invoke_method): It's ok to do use call with
+ virtual, non-final methods if their class is sealed.
+
2010-04-08 Rodrigo Kumpera <rkumpera@novell.com>
* verify.h: Fix header.
diff --git a/mono/metadata/verify.c b/mono/metadata/verify.c
index 28768b206ec..d441c142289 100644
--- a/mono/metadata/verify.c
+++ b/mono/metadata/verify.c
@@ -3431,7 +3431,7 @@ do_invoke_method (VerifyContext *ctx, int method_token, gboolean virtual)
if (method->flags & METHOD_ATTRIBUTE_ABSTRACT)
CODE_NOT_VERIFIABLE (ctx, g_strdup_printf ("Cannot use call with an abstract method at 0x%04x", ctx->ip_offset));
- if ((method->flags & METHOD_ATTRIBUTE_VIRTUAL) && !(method->flags & METHOD_ATTRIBUTE_FINAL)) {
+ if ((method->flags & METHOD_ATTRIBUTE_VIRTUAL) && !(method->flags & METHOD_ATTRIBUTE_FINAL) && !(method->klass->flags & TYPE_ATTRIBUTE_SEALED)) {
virt_check_this = TRUE;
ctx->code [ctx->ip_offset].flags |= IL_CODE_CALL_NONFINAL_VIRTUAL;
}