[Mono-dev] Optimization 'precomp' violates ECMA-335
Martin Däumler
mdae at cs.tu-chemnitz.de
Thu Jan 19 16:37:55 UTC 2012
Hello,
I tried out several optimizations of Mono 2.6.1 and Mono 2.10.8.1.
So I used "-O=precomp". The class 'Test' of the appended test case
has an (explicit) class constructor. That is, in class Test's IL-code,
the field "beforefieldinit" is not set. ECMA-335 §8.9.5 states that
the class constructor is executed at first access to any static member
of that class or at first creation of one instance of that class, as
I understood it. When I execute the program with Mono 2.6.1 and the
optimization "-O=precomp", class Test's class constructor is executed
before first access. Even worse, Mono 2.10.8.1 crashes while
precompiling.
So, what have do be done in order to don't violate the specification?
How is it handled in AOT-mode?
With kind regards,
Martin Däumler
using System;
class Test
{
public static string x;
static Test ()
{
Console.WriteLine("In type initializer");
x = "In type initializer";
}
public static string EchoAndReturn (string s)
{
Console.WriteLine (s);
return s;
}
}
class Driver
{
public static void Main()
{
Console.WriteLine("Starting Main");
// Invoke a static method on Test
Test.EchoAndReturn("Echo!");
Console.WriteLine("After echo");
// Reference a static field in Test
string y = Test.x;
// Use the value just to avoid compiler cleverness
if (y != null)
{
Console.WriteLine("After field access");
}
}
}
More information about the Mono-devel-list
mailing list