I agree that you have to trust the C code, but I remember that the Emacs (and Xemacs) people were reporting lots of hard to find bugs that ended up being caused by C code forgetting to register some object. The problem is that just like forgetting a lock in threaded code, you get away with it almost all the time. I remember that just because of all these problems, they were trying conservative non-moving GCs. (YUCK)