Everyone agrees that GGPROs are ugly and painful. On the other side, current C stack marking code introduces substantial overhead by maintaining red-black tree. And, since C stack marking is conservative, it becomes very tricky to implement GC that may relocate live objects (copying or compacting approach). But there is another method to implement GCPROs. It looks not very portable beyond GNU C since it uses __attribute__ ((cleanup (function))) and compound statement expressions C extensions. But it doesn't require UNGCPRO and dumbs like 'struct gcpro gcpro1, struct gcpro2, ...'. And I believe it should work across longjmps. This idea is briefly illustrated by an attached example. As for the Emacs, it would be enough to declare every local Lisp_Object which should survive the GC with the stuff like FOOPTR from this example, and we're ready for exact C stack marking with (hopefully) very small overhead. Dmitry