> Oh, I think I see: with the current code, the mark-ring gets copies of
> markers and those copies are made "late", so if you do "C-SPC, some
> deletion around point, and then C-SPC", a new marker for the first C-SPC
> is pushed on the mark-ring, but the undo-log has an adjustment for
> mark-marker rather than for that new marker.

> IOW, I think the primitive-undo fix is needed and your fix is also
> needed.

Yes that's right. Parents cover their childrens' eyes at the violence
of our agreement.

I just discovered my patch has a bug. If I C-SPC first thing after
starting Emacs, an error is signaled because the mark is nil. I had
hoped the mark variable initialized equivalently except to make itself
available to Lisp. There are clearly holes in my understanding of the
initialization business. I'll debug that at a later time.