C-M-& loses if you put, in an empty buffer, just (COND (FOO and then do it. I have just finished converting C-M-& to use the new Lisp parsing code, but that seems to work, and this bug is present in the earlier version of C-M-& as well.