[Mono-bugs] [Bug 333342] New: mcs sets the synchronized flag on valuetype methods
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Fri Oct 12 07:10:31 EDT 2007
https://bugzilla.novell.com/show_bug.cgi?id=333342
Summary: mcs sets the synchronized flag on valuetype methods
Product: Mono: Compilers
Version: unspecified
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: P5 - None
Component: C#
AssignedTo: rharinath at novell.com
ReportedBy: lupus at novell.com
QAContact: mono-bugs at ximian.com
Found By: ---
>From the ECMA spec:
It makes no sense for ValueTypes, which have no identity, to have synchronized
methods (unless they are boxed). So, if the owner of this method is a ValueType
then the method cannot be synchronized. That is, ImplFlags.Synchronized shall
be 0 [ERROR]
See how this test is compiled:
struct T {
public delegate void Do ();
public event Do MyDo2;
static void Main () {
T t = new T ();
B.test (ref t);
t.MyDo2 ();
}
}
class B {
static void p () {System.Console.WriteLine ("hi2");}
public static void test (ref T t) {
t.MyDo2 += p;
}
}
The mono runtime will generate an exception in the synch wrapper we use
because mcs sets the synchronized flag on the add/remove event methods.
This program is also compiled:
using System.Runtime.CompilerServices;
struct Test {
[MethodImplAttribute(MethodImplOptions.Synchronized)]
public int test () {
return 2 + 2;
}
static public int Main (string[] args) {
Test b = new Test ();
int res = b.test ();
return 0;
}
}
Note: I haven't tested if this compiles with csc or if the MS runtime ignores
the flag or reports the error. For the first test case the mcs-compiled binary
causes a TypeLoad exception to be thrown by the MS runtime.
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list