I think Lucas has probably mentioned this problem that we keep running into with quantomatic.
I'm using Poly/ML 5.4 (ie: the lastest version of the 5.4 branch from subversion).
Occasionally (or, in my case, frequently) we get the following error: poly: scanaddrs.cpp:107: PolyWord ScanAddress::ScanStackAddress(PolyWord, StackObject*, bool): Assertion `val.IsDataPtr()' failed.
There appears to be no rhyme or reason to it. Re-running poly with the same code another time will not necessarily produce this assertion, or may produce it in a different place.
It happens regardless of compiler optimisations (I've tried -O3, -O2 and -O0).
I managed to get a backtrace:
#0 0x0000003ff54330c5 in raise () from /lib64/libc.so.6 #1 0x0000003ff5434a76 in abort () from /lib64/libc.so.6 #2 0x0000003ff542b905 in __assert_fail () from /lib64/libc.so.6 #3 0x00007ffff7dc357e in ScanAddress::ScanStackAddress (this=0x7fffffffde10, val=..., base=0x7fffed6b56c0, isCode=false) at scanaddrs.cpp:107 #4 0x00007ffff7dc3811 in ScanAddress::ScanAddressesInObject (this=0x7fffffffde10, obj=0x7fffed6b56c0, lengthWord=4827858800541175088) at scanaddrs.cpp:146 #5 0x00007ffff7d9b4e2 in ProcessMarkPointers::ScanAddressesInObject (this=0x7fffffffde10, base=0x7fffed6b56c0, L=4827858800541175088) at gc.cpp:509 #6 0x00007ffff7dc42c8 in ScanAddress::ScanAddressesInObject (this=0x7fffffffde10, base=0x7fffed6b56c0) at scanaddrs.h:86 #7 0x00007ffff7dc3d48 in ScanAddress::ScanAddressesInRegion (this=0x7fffffffde10, region=0x7fffed6a3af0, end=0x7fffed6c3000) at scanaddrs.cpp:252 #8 0x00007ffff7d9ad12 in OpMutables (process=0x7fffffffde10) at gc.cpp:348 #9 0x00007ffff7d9d2cc in doGC (doFullGC=false, wordsRequiredToAllocate=3) at gc.cpp:1341 #10 0x00007ffff7d9f473 in QuickGCRequest::Perform (this=0x7fffeaa10cc0) at gc.cpp:1955 #11 0x00007ffff7da732c in Processes::BeginRootThread (this=0x7ffff7ffa8e0, rootFunction=0x605278) at processes.cpp:1253 #12 0x00007ffff7d9a472 in polymain (argc=3, argv=0x7fffffffe218, exports=0xf72a00) at mpoly.cpp:205 #13 0x0000000000400659 in main (argc=3, argv=0x7fffffffe218) at polystub.c:43
I don't know how useful that is, though.
Alex