[Mono-dev] AOT and generics
Rodrigo Kumpera
kumpera at gmail.com
Fri Jul 6 13:31:24 UTC 2012
You need to correctly drive the FullAOT compiler.
Why do you want to use FullAOT anyway?
Do you plan to run it on a target that disables JIT?
Do you hold a license that allows you to do so? Mono is LGPL and FullAOT
doesn't work with it.
On Fri, Jul 6, 2012 at 9:29 AM, Virgile Bello <virgile.bello at gmail.com>wrote:
> During full AOT, It seems that if generics is a ref type, AOT is skipped
> (which makes sense because most of the time it is not necessary, one
> codegen for any ref type is usually enough).
> However, if the class internally uses a struct based on the generic types,
> it will fail at runtime.
> Here is a simple example showcasing the issue:
>
> public class B
> {
> public void Test<T>()
> {
> System.Console.WriteLine(typeof(T));
> }
> }
>
> public class A<T>
> {
> public void Test()
> {
> new B().Test<System.Collections.Generic.KeyValuePair<T, T>>();
> }
> }
>
>
> class P
> {
> static void Main(string[] args)
> {
> new A<int>().Test();
> new A<string>().Test();
> }
> }
>
> If I run this program with full aot, it will fail.
> new A<int> will work (AOT forced because value type)
> However, new A<string> will generate a JIT exception (because even though
> string is a ref type, A should be AOT for this specific type because
> KeyValuePair inside A<T> needs to be JITed.)
>
> But maybe I misunderstood the problem (or it is just a specific bug),
> because this other case actually work (I was expecting it to have the same
> issue):
>
> public class B
> {
> public void Test<T>()
> {
>
> System.Console.WriteLine(typeof(System.Collections.Generic.KeyValuePair<T,
> T>));
> }
> }
>
> public class A<T>
> {
> public void Test()
> {
> new B().Test<T>();
> }
> }
>
>
> class P
> {
> static void Main(string[] args)
> {
> new A<int>().Test();
> new A<string>().Test();
> }
> }
>
> Just wanted to check if I understood the issue right and if there would be
> nothing preventing from fixing it?
> I wouldn't mind taking a look at the sources by myself if necessary.
>
> Virgile
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20120706/527903ac/attachment.html>
More information about the Mono-devel-list
mailing list