While trying to track down strange valgrind errors in my own code, I was eventually able to reduce it down to code that used none of my original code. I don't know if it relates to my original code, but it's certainly a problem.
/home/jhouse/housebot/0.6/ $ cat ./valgrindTest.d
module valgrindTest;
import std.gc;
int main (char[][] args){
std.gc.fullCollect();
return 0;
}
/home/jhouse/housebot/0.6/ $ gdc --version
gdc (GCC) 4.1.1 20060524 ( (gdc 0.23, using dmd 1.007))
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
/home/jhouse/housebot/0.6/ $ gdmd -version=Posix -c valgrindTest.d -od.
/home/jhouse/housebot/0.6/ $ gdmd ./valgrindTest.o -ofvalgrindTest
/home/jhouse/housebot/0.6/ $ valgrind ./valgrindTest
==10778== Memcheck, a memory error detector.
==10778== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
==10778== Using LibVEX rev 1658, a library for dynamic binary translation.
==10778== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==10778== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
==10778== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
==10778== For more details, rerun with: -v
==10778==
==10778== Conditional jump or move depends on uninitialised value(s)
==10778== at 0x412B05: _D3gcx3Gcx4markMFPvPvZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x412D79: _D3gcx3Gcx11fullcollectMFPvZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4134E8: _D3gcx3Gcx16fullcollectshellMFZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x413E58: _D3gcx2GC11fullCollectMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4025C2: _Dmain (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4182E7: _D9dgccmain211_d_run_mainUiPPaPUAAaZiZi2goMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x41839B: _d_run_main (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x52DE8E3: (below main) (in /lib/libc-2.5.so)
==10778==
==10778== Conditional jump or move depends on uninitialised value(s)
==10778== at 0x4122C4: _D3gcx3Gcx8findPoolMFPvZPS3gcx4Pool (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x412B11: _D3gcx3Gcx4markMFPvPvZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x412D79: _D3gcx3Gcx11fullcollectMFPvZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4134E8: _D3gcx3Gcx16fullcollectshellMFZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x413E58: _D3gcx2GC11fullCollectMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4025C2: _Dmain (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4182E7: _D9dgccmain211_d_run_mainUiPPaPUAAaZiZi2goMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x41839B: _d_run_main (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x52DE8E3: (below main) (in /lib/libc-2.5.so)
==10778==
==10778== Conditional jump or move depends on uninitialised value(s)
==10778== at 0x4122CE: _D3gcx3Gcx8findPoolMFPvZPS3gcx4Pool (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x412B11: _D3gcx3Gcx4markMFPvPvZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x412D79: _D3gcx3Gcx11fullcollectMFPvZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4134E8: _D3gcx3Gcx16fullcollectshellMFZm (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x413E58: _D3gcx2GC11fullCollectMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4025C2: _Dmain (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x4182E7: _D9dgccmain211_d_run_mainUiPPaPUAAaZiZi2goMFZv (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x41839B: _d_run_main (in /home/jhouse/housebot/0.6/valgrindTest)
==10778== by 0x52DE8E3: (below main) (in /lib/libc-2.5.so)
==10778==
==10778== ERROR SUMMARY: 40 errors from 3 contexts (suppressed: 8 from 1)
==10778== malloc/free: in use at exit: 41,952 bytes in 12 blocks.
==10778== malloc/free: 13 allocs, 1 frees, 41,968 bytes allocated.
==10778== For counts of detected errors, rerun with: -v
==10778== searching for pointers to 12 not-freed blocks.
==10778== checked 1,231,688 bytes.
==10778==
==10778== LEAK SUMMARY:
==10778== definitely lost: 0 bytes in 0 blocks.
==10778== possibly lost: 0 bytes in 0 blocks.
==10778== still reachable: 41,952 bytes in 12 blocks.
==10778== suppressed: 0 bytes in 0 blocks.
==10778== Reachable blocks (those to which a pointer was found) are not shown.
==10778== To see them, rerun with: --show-reachable=yes
Logged In: NO
This isn't GDC specific:
http://d.puremagic.com/issues/show_bug.cgi?id=72