<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">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.<br>
      <br>
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      <a href="http://mono-project.com/Bugs">http://mono-project.com/Bugs</a>
      (and click the green + next to the appropriate category)<br>
      <br>
      -Rob<br>
      <br>
      On 07/06/2012 08:29 AM, Virgile Bello wrote:<br>
    </div>
    <blockquote
cite="mid:CAEigO1qTMShCZBy0cS5end8sKd-nXNTUZB2A5ReLAUCavJJQuw@mail.gmail.com"
      type="cite">
      <div>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).</div>
      <div>However, if the class internally uses a struct based on the
        generic types, it will fail at runtime.</div>
      <div>Here is a simple example showcasing the issue:</div>
      <div><br>
      </div>
      <div>
        <div>public class B</div>
        <div>{</div>
        <div>    public void Test<T>()</div>
        <div>    {</div>
        <div>        System.Console.WriteLine(typeof(T));</div>
        <div>    }</div>
        <div>}</div>
        <div><br>
        </div>
        <div>public class A<T></div>
        <div>{</div>
        <div>    public void Test()</div>
        <div>    {</div>
        <div>        new
          B().Test<System.Collections.Generic.KeyValuePair<T,
          T>>();</div>
        <div>    }</div>
        <div>}</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>class P</div>
        <div>{</div>
        <div>    static void Main(string[] args)</div>
        <div>    {</div>
        <div>        new A<int>().Test();</div>
        <div>        new A<string>().Test();</div>
        <div>    }</div>
        <div>}</div>
      </div>
      <div><br>
      </div>
      <div>If I run this program with full aot, it will fail.</div>
      <div>new A<int> will work (AOT forced because value type)</div>
      <div>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.)</div>
      <div><br>
      </div>
      <div>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):</div>
      <div><br>
      </div>
      <div>
        <div>public class B</div>
        <div>{</div>
        <div>    public void Test<T>()</div>
        <div>    {</div>
        <div>       
          System.Console.WriteLine(typeof(System.Collections.Generic.KeyValuePair<T,
          T>));</div>
        <div>    }</div>
        <div>}</div>
        <div><br>
        </div>
        <div>
          public class A<T></div>
        <div>{</div>
        <div>    public void Test()</div>
        <div>    {</div>
        <div>        new B().Test<T>();</div>
        <div>    }</div>
        <div>}</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>class P</div>
        <div>{</div>
        <div>    static void Main(string[] args)</div>
        <div>    {</div>
        <div>        new A<int>().Test();</div>
        <div>        new A<string>().Test();</div>
        <div>    }</div>
        <div>}</div>
      </div>
      <div><br>
      </div>
      <div>Just wanted to check if I understood the issue right and if
        there would be nothing preventing from fixing it?</div>
      <div>I wouldn't mind taking a look at the sources by myself if
        necessary.</div>
      <div><br>
      </div>
      <div>Virgile</div>
      <div><br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Mono-devel-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a>
<a class="moz-txt-link-freetext" href="http://lists.ximian.com/mailman/listinfo/mono-devel-list">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a>
</pre>
    </blockquote>
    <br>
    <br>
  </body>
</html>