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