[Mono-bugs] [Bug 664965] New: Mono ARM AOT compiler is not compatible with C5 ArrayList<T> when T is a struct
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Mon Jan 17 10:05:19 EST 2011
https://bugzilla.novell.com/show_bug.cgi?id=664965
https://bugzilla.novell.com/show_bug.cgi?id=664965#c0
Summary: Mono ARM AOT compiler is not compatible with C5
ArrayList<T> when T is a struct
Classification: Mono
Product: Mono: Compilers
Version: 2.6.x
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: P5 - None
Component: Other.
AssignedTo: mono-bugs at lists.ximian.com
ReportedBy: mantas at unity3d.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Blocker: ---
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US)
AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10
Mono ARM AOT compiler hungs/continues forever when CIL code contains C5
ArrayList<T> when T is a struct.
Sample test case, which causes the problem:
===
using System.Collections;
using C5;
public struct myvector3
{
float x;
float y;
float z;
}
public class C5_test
{
private ArrayList<myvector3> mList = new ArrayList<myvector3>();
}
===
I did additional investigation where AOT compiler is looping. There are
debugging session data when interrupted in random place:
(gdb) bt
#0 0x002342e0 in g_list_last (list=0x2610100) at glist.c:213
#1 0x00234026 in g_list_append (list=0x5125d0, data=0x1124e) at glist.c:87
#2 0x0009ac7a in add_method_full (acfg=0x844a00, method=0x60e9da0, extra=1,
depth=0) at aot-compiler.c:1838
#3 0x0009ad41 in add_extra_method_with_depth (acfg=0x844a00, method=0x60e9da0,
depth=0) at aot-compiler.c:1862
#4 0x0009be11 in add_generic_class_with_depth (acfg=0x844a00, klass=0x60cab30,
depth=0) at aot-compiler.c:2346
#5 0x0009bd54 in add_generic_class (acfg=0x844a00, klass=0x60cab30) at
aot-compiler.c:2307
#6 0x0009c530 in add_generic_instances (acfg=0x844a00) at aot-compiler.c:2493
#7 0x000a61dc in collect_methods (acfg=0x844a00) at aot-compiler.c:5411
#8 0x000a6ede in mono_compile_assembly (ass=0x512130, opts=55650815,
aot_options=0xbffff132
"full,asmonly,nodebug,static,outfile=Assembly-CSharp.dll.s") at
aot-compiler.c:5733
#9 0x000930a5 in main_thread_handler (user_data=0xbfffeec0) at driver.c:979
#10 0x00095054 in mono_main (argc=3, argv=0xbfffefb8) at driver.c:1734
#11 0x00002207 in main (argc=3, argv=0xbfffefb8) at main.c:34
(gdb) f
#0 0x002342e0 in g_list_last (list=0x2610100) at glist.c:213
213 while (list->next)
(gdb) f 6
#6 0x0009c530 in add_generic_instances (acfg=0x844a00) at aot-compiler.c:2493
2493 add_generic_class (acfg, mono_class_from_mono_type
(sig->params [j]));
(gdb) list
2488 sig = mono_method_signature (method);
2489
2490 if (sig) {
2491 for (j = 0; j < sig->param_count; ++j)
2492 if (sig->params [j]->type == MONO_TYPE_GENERICINST)
2493 add_generic_class (acfg, mono_class_from_mono_type
(sig->params [j]));
2494 }
2495
2496 header = mono_method_get_header (method);
2497
(gdb) p method
$14 = (MonoMethod *) 0x60cc1f0
(gdb) p mono_method_get_name(0x60cc1f0)
$15 = 0x7dd2a6 "Insert"
(gdb) p mono_method_get_class(0x60cc1f0)
$16 = (MonoClass *) 0x60ae6e0
(gdb) p ((MonoClass *)0x60ae6e0)->name
$17 = 0x7dc00b "ArrayList`1"
(gdb) p sig->params[j]
$18 = (MonoType *) 0x60e93d0
(gdb) p mono_type_get_name(0x60e93d0)
$19 = 0x7256c00
"C5.IList<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Position<C5.ArrayList.Po"...
Probably last line is clue.
Reproducible: Always
Steps to Reproduce:
1. gmcs sample test case included into problem description. (Note: you need to
add Mono.C5 reference)
2. run mono AOT ARM cross compiler on assembly built in 1st step
Actual Results:
mono AOT compiler runs forever with gradually growing memory usage.
Expected Results:
mono AOT compiler compiles assembly successfully
Note: if we substitute ArrayList<T> T with class instead of struct then
everything AOT compiles fine.
--
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.
More information about the mono-bugs
mailing list