diff options
author | Rodrigo Kumpera <kumpera@gmail.com> | 2010-04-09 17:14:36 +0400 |
---|---|---|
committer | Rodrigo Kumpera <kumpera@gmail.com> | 2010-04-09 17:14:36 +0400 |
commit | e642ed4edb3ce7f17aeb6a542c1f9d57f10a6ae4 (patch) | |
tree | 856f6a881b6d18b5d37f826a1a52a96bdd7619c1 | |
parent | 8e649426c01f7e22ce2d5af150a17e7b76ee7772 (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/ChangeLog | 5 | ||||
-rw-r--r-- | mono/metadata/verify.c | 2 |
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; } |