[Mono-dev] AOT and generics

Rob Wilkens robwilkens at gmail.com
Fri Jul 6 13:03:59 UTC 2012


I'm not an expert, but i would file a bug report in addition to this
e-mail, if you haven't already - i think things are less likely to be
forgotten in the bug database.

http://mono-project.com/Bugs (and click the green + next to the
appropriate category)

-Rob

On 07/06/2012 08:29 AM, Virgile Bello 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/92c70930/attachment.html>


More information about the Mono-devel-list mailing list