https://bugzilla.novell.com/show_bug.cgi?id=430804
Summary: Static readonly field optimization doesn't account for changes via reflection Product: Mono: Compilers Version: 1.9 Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: P5 - None Component: C# AssignedTo: mono-bugs@lists.ximian.com ReportedBy: [EMAIL PROTECTED] QAContact: mono-bugs@lists.ximian.com Found By: --- It appears that static readonly fields are being optimized in a way that doesn't account for them being changed via reflection. Consider the following example: public class TheClass { public class Foo { // Initialize to zero. public static readonly int s_int = 0; // Return the value of the int. public static int TheInt { get { return s_int; } } } public static void Main(params string[] args) { // Get the field via reflection. Type type = typeof (Foo); FieldInfo fi = type.GetField("s_int", BindingFlags.Static | BindingFlags.Public); // Write out the initial value. Console.Out.WriteLine("TheInt: " + Foo.TheInt); // Set the value via reflection. fi.SetValue(null, 1); // Write out the value that we get via reflection. Console.Out.WriteLine("TheInt GetValue: " + fi.GetValue(null)); // Write out the value we get by calling the property. Console.Out.WriteLine("TheInt: " + Foo.TheInt); } } Expected Output: TheInt: 0 TheInt GetValue: 1 TheInt: 1 Actual Output: TheInt: 0 TheInt GetValue: 1 TheInt: 0 We verify that the static value actually changed by retrieving it via reflection after it's set. But the property fails to return the new value. This suggests that the compiler or something has optimized this and it's returning some cached value which is not the current value. It's probably thinking that since the field is declared "readonly" that it can't be changed after it's been initialized. I think this is a bug because if the reflection call lets us set the value, then the compiler can't assume that the field can't change after initialization. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs