Serge,
As Mattias noted I made a mistake in the args order and now code
is verifiable.
But the point of this exercise was exactly to prove that this is
not a CLR issue, but rather C#.
It's true that to access methods of this class I would have to
reverse the order or object.ctor as you said, but not for the fields.
So, the question is then why did C# introduced this
restriction...
But this is for a different list.
Thanks again guys .
-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Serge Lidin
Sent: Friday, March 03, 2006 3:36 PM
To: [email protected]
Subject: Re: [ADVANCED-DOTNET] Why is the following IL unverifyable
You are doing things in the wrong order. You need to do
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
before you access any instance fields of your class. Until the base
class constructor is run, the instance is considered uninitialized, and
all operations with instance members are unverifiable.
Thanks,
Serge
-----Original Message-----
From: Discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Zaslavskiy,
Dmitriy (IT)
Sent: Friday, March 03, 2006 9:59 AM
To: [email protected]
Subject: [ADVANCED-DOTNET] Why is the following IL unverifyable
Why is the following IL unverifiable?
I can't see anything in (ecma335) that would make it such. In fact the
opposite it true:
***** From 1.8.1.4 *****
The verification algorithm shall treat the this pointer as uninitialized
unless the base class constructor has been called. No operations can be
performed on an uninitialized this except for storing into and loading
from the object's fields.
**************************
But peverify complains:
ConsoleApplication1.Program::.ctor][offset 0x0000000E][found
<uninitialized> ref ('this' ptr) 'ConsoleApplication1.Program']
Uninitialized item on stack.
It seems to me this should be verifiable. Any thoughts?
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 22 (0x16)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldc.i4.3
IL_0002: stfld int32 ConsoleApplication1.Program::a
IL_0007: ldarg.0
IL_0008: ldfld int32 ConsoleApplication1.Program::a
IL_000z: ldarg.0
IL_0009: stfld int32 ConsoleApplication1.Program::b
IL_000e: ldarg.0
IL_000f: call instance void [mscorlib]System.Object::.ctor()
IL_0014: nop
IL_0015: ret
} // end of method Program::.ctor
--------------------------------------------------------
NOTICE: If received in error, please destroy and notify sender. Sender
does not waive confidentiality or privilege, and use is prohibited.
===================================
This list is hosted by DevelopMentor(r) http://www.develop.com
View archives and manage your subscription(s) at
http://discuss.develop.com
===================================
This list is hosted by DevelopMentor(r) http://www.develop.com
View archives and manage your subscription(s) at
http://discuss.develop.com
--------------------------------------------------------
NOTICE: If received in error, please destroy and notify sender. Sender does
not waive confidentiality or privilege, and use is prohibited.
===================================
This list is hosted by DevelopMentorĀ® http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com