* Re: emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions ...
[not found] ` <20200223194643.A9A05206ED@vcs0.savannah.gnu.org>
@ 2020-02-28 16:54 ` Glenn Morris
2020-03-01 11:49 ` Mattias Engdegård
2020-03-04 21:24 ` Alan Mackenzie
0 siblings, 2 replies; 5+ messages in thread
From: Glenn Morris @ 2020-02-28 16:54 UTC (permalink / raw)
To: emacs-devel; +Cc: Alan Mackenzie
Alan Mackenzie wrote:
> branch: emacs-27
> commit 3bce7ec3826003fda1971224a20d7fe2cba8bf65
>
> CC Mode: Protect against consecutive calls to before-change-functions ...
This causes srecode-utest-getset-output in
test/lisp/cedet/srecode-utest-getset.el to fail:
Test srecode-utest-getset-output backtrace:
parse-partial-sexp(1 627 nil nil nil syntax-table)
c-after-change-mark-abnormal-strings(100 320 0)
#f(compiled-function (fn) #<bytecode 0x9b5689>)(c-after-change-mark-
mapc(#f(compiled-function (fn) #<bytecode 0x9b5689>) (c-depropertize
c-after-change(100 320 0)
run-hook-with-args(c-after-change 100 320 0)
srecode-insert-fcn(#<srecode-template getset-in-class> #<srecode-dic
srecode-insert-getset()
#f(compiled-function () #<bytecode 0x9573ad>)()
ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
ert-run-test(#s(ert-test :name srecode-utest-getset-output :document
ert-run-or-rerun-test(#s(ert--stats :selector (not (or ... ...)) :te
ert-run-tests((not (or (tag :expensive-test) (tag :unstable))) #f(co
ert-run-tests-batch((not (or (tag :expensive-test) (tag :unstable)))
ert-run-tests-batch-and-exit((not (or (tag :expensive-test) (tag :un
eval((ert-run-tests-batch-and-exit '(not (or (tag :expensive-test) (
command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/cedet/srecode-utest-
command-line()
normal-top-level()
Test srecode-utest-getset-output condition:
(args-out-of-range #<buffer srecode-utest-getset-TkO46e.cpp> 1 627)
FAILED 1/1 srecode-utest-getset-output (1.709802 sec)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions ...
2020-02-28 16:54 ` emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions Glenn Morris
@ 2020-03-01 11:49 ` Mattias Engdegård
2020-03-01 21:26 ` Alan Mackenzie
2020-03-04 21:30 ` Alan Mackenzie
2020-03-04 21:24 ` Alan Mackenzie
1 sibling, 2 replies; 5+ messages in thread
From: Mattias Engdegård @ 2020-03-01 11:49 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: Glenn Morris, emacs-devel
28 feb. 2020 kl. 17.54 skrev Glenn Morris <rgm@gnu.org>:
>> CC Mode: Protect against consecutive calls to before-change-functions ...
>
> This causes srecode-utest-getset-output in
> test/lisp/cedet/srecode-utest-getset.el to fail:
Indeed, and so does electric-tests. Condensed reproduction:
(with-temp-buffer
(c-mode)
(insert "a")
(comment-region (point-min) (point-max)))
Alan, it looks like the code has lost control over c-new-END. c-after-change over-adjusts it to a value beyond the buffer size.
The problem seems to go away with the expedient below but it is unlikely to be the right solution.
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -2006,7 +2006,8 @@ c-after-change
;; (c-new-BEG c-new-END) will be the region to fontify. It may become
;; larger than (beg end).
- (setq c-new-END (- (+ c-new-END (- end beg)) old-len))
+ (setq c-new-END (min (- (+ c-new-END (- end beg)) old-len)
+ (point-max)))
(unless (c-called-from-text-property-change-p)
(setq c-just-done-before-change nil)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions ...
2020-03-01 11:49 ` Mattias Engdegård
@ 2020-03-01 21:26 ` Alan Mackenzie
2020-03-04 21:30 ` Alan Mackenzie
1 sibling, 0 replies; 5+ messages in thread
From: Alan Mackenzie @ 2020-03-01 21:26 UTC (permalink / raw)
To: Mattias Engdegård, Glenn Morris; +Cc: emacs-devel
Hello, Mattias and Glenn.
On Sun, Mar 01, 2020 at 12:49:39 +0100, Mattias Engdegård wrote:
> 28 feb. 2020 kl. 17.54 skrev Glenn Morris <rgm@gnu.org>:
> >> CC Mode: Protect against consecutive calls to before-change-functions ...
> > This causes srecode-utest-getset-output in
> > test/lisp/cedet/srecode-utest-getset.el to fail:
> Indeed, and so does electric-tests. Condensed reproduction:
> (with-temp-buffer
> (c-mode)
> (insert "a")
> (comment-region (point-min) (point-max)))
> Alan, it looks like the code has lost control over c-new-END.
> c-after-change over-adjusts it to a value beyond the buffer size. The
> problem seems to go away with the expedient below but it is unlikely
> to be the right solution.
The cause of this bug is a bug in combine-change-calls-1 which shows
itself when buffer-undo-list is t (as I presume it is for the
with-temp-buffer). In this circumstance, the routine fails to bind
before/after-change-functions to nil (or something close to it) before
invoking combine-change-call's ,@body.
So, we get two invocations of before-change-functions in a row, which
fouls things up.
I have tried a fix to combine-change-calls-1, and it appears to work. I
will tidy it up and post it here soon (?tomorrow).
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions ...
2020-02-28 16:54 ` emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions Glenn Morris
2020-03-01 11:49 ` Mattias Engdegård
@ 2020-03-04 21:24 ` Alan Mackenzie
1 sibling, 0 replies; 5+ messages in thread
From: Alan Mackenzie @ 2020-03-04 21:24 UTC (permalink / raw)
To: Glenn Morris; +Cc: emacs-devel
Hello, Glenn.
On Fri, Feb 28, 2020 at 11:54:23 -0500, Glenn Morris wrote:
> Alan Mackenzie wrote:
> > branch: emacs-27
> > commit 3bce7ec3826003fda1971224a20d7fe2cba8bf65
> > CC Mode: Protect against consecutive calls to before-change-functions ...
> This causes srecode-utest-getset-output in
> test/lisp/cedet/srecode-utest-getset.el to fail:
> Test srecode-utest-getset-output backtrace:
> parse-partial-sexp(1 627 nil nil nil syntax-table)
> c-after-change-mark-abnormal-strings(100 320 0)
> #f(compiled-function (fn) #<bytecode 0x9b5689>)(c-after-change-mark-
> mapc(#f(compiled-function (fn) #<bytecode 0x9b5689>) (c-depropertize
> c-after-change(100 320 0)
> run-hook-with-args(c-after-change 100 320 0)
> srecode-insert-fcn(#<srecode-template getset-in-class> #<srecode-dic
> srecode-insert-getset()
> #f(compiled-function () #<bytecode 0x9573ad>)()
> ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
> ert-run-test(#s(ert-test :name srecode-utest-getset-output :document
> ert-run-or-rerun-test(#s(ert--stats :selector (not (or ... ...)) :te
> ert-run-tests((not (or (tag :expensive-test) (tag :unstable))) #f(co
> ert-run-tests-batch((not (or (tag :expensive-test) (tag :unstable)))
> ert-run-tests-batch-and-exit((not (or (tag :expensive-test) (tag :un
> eval((ert-run-tests-batch-and-exit '(not (or (tag :expensive-test) (
> command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/cedet/srecode-utest-
> command-line()
> normal-top-level()
> Test srecode-utest-getset-output condition:
> (args-out-of-range #<buffer srecode-utest-getset-TkO46e.cpp> 1 627)
> FAILED 1/1 srecode-utest-getset-output (1.709802 sec)
Yes. I've fixed this bug in the emacs-27 branch.
As a matter of interest, the scenario Mattias reported was caused by a
different bug (also fixed).
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions ...
2020-03-01 11:49 ` Mattias Engdegård
2020-03-01 21:26 ` Alan Mackenzie
@ 2020-03-04 21:30 ` Alan Mackenzie
1 sibling, 0 replies; 5+ messages in thread
From: Alan Mackenzie @ 2020-03-04 21:30 UTC (permalink / raw)
To: Mattias Engdegård; +Cc: Glenn Morris, emacs-devel
Hello, Mattias.
On Sun, Mar 01, 2020 at 12:49:39 +0100, Mattias Engdegård wrote:
> 28 feb. 2020 kl. 17.54 skrev Glenn Morris <rgm@gnu.org>:
> >> CC Mode: Protect against consecutive calls to
> >> before-change-functions ...
> > This causes srecode-utest-getset-output in
> > test/lisp/cedet/srecode-utest-getset.el to fail:
> Indeed, and so does electric-tests. Condensed reproduction:
> (with-temp-buffer
> (c-mode)
> (insert "a")
> (comment-region (point-min) (point-max)))
Actually, your scenario and Glenn's were caused by different bugs. ;-)
> Alan, it looks like the code has lost control over c-new-END.
Yes.
> c-after-change over-adjusts it to a value beyond the buffer size. The
> problem seems to go away with the expedient below but it is unlikely
> to be the right solution.
It wasn't. ;-) I've fixed both bugs in the emacs-27 branch.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-03-04 21:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20200223194642.5362.21709@vcs0.savannah.gnu.org>
[not found] ` <20200223194643.A9A05206ED@vcs0.savannah.gnu.org>
2020-02-28 16:54 ` emacs-27 3bce7ec: CC Mode: Protect against consecutive calls to before-change-functions Glenn Morris
2020-03-01 11:49 ` Mattias Engdegård
2020-03-01 21:26 ` Alan Mackenzie
2020-03-04 21:30 ` Alan Mackenzie
2020-03-04 21:24 ` Alan Mackenzie
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).